local man = peripheral.find"manipulator" assert(man and man.hasModule"plethora:chat","no chat thing") local M = peripheral.find"monitor" assert(M,"no monitor") M.setTextScale(0.5) M.clear() local Mw,Mh = M.getSize() local scorewidth=10 local lbw = 4+16+scorewidth local wLog = window.create(M,1,12,Mw,Mh-12) wLog.setBackgroundColor(colors.blue) wLog.clear() wLog.write("LOG") local wLb = window.create(M,Mw-lbw+1,1,lbw,11) -- wLb.setBackgroundColor(colors.red) -- wLb.clear() -- wLb.write("LB") -- utils local function p(thing,...) local o=term.redirect(thing) print(...) term.redirect(o) end local function pad_r(s,width) return string.rep(" ",width-#tostring(s))..s end local function pad_c(s,width) local space = width-#tostring(s) local hspace = math.floor(space/2) return string.rep(" ",hspace)..s end -- drawing -- lb local function draw_lb(W,scores) local w,h = W.getSize() W.setBackgroundColor(colors.gray) W.clear() -- header W.setTextColor(colors.lime) W.setCursorPos(1,1) W.write(pad_c("==[[ LEADERBOARD ]]==",lbw)) -- line numbers W.setTextColor(colors.yellow) for line=1,10 do W.setCursorPos(1,line+1) W.write(pad_r(line,2)..".") end -- actual scores local thescores = {} for name,score in pairs(scores) do table.insert(thescores,{name=name,score=score}) end table.sort(thescores,function(a,b) return a.score > b.score end) for i=1,10 do if not thescores[i] then break end local name,score = thescores[i].name, thescores[i].score -- name W.setTextColor(colors.white) W.setCursorPos(5,i+1) W.write(name) -- score W.setTextColor(colors.red) W.setCursorPos(w-scorewidth+1,i+1) W.write(pad_r(score,scorewidth)) end end local function score(msg) local s = 0 for num in msg:gmatch"%-?%d+" do s=s+num end return s end local userscores = setmetatable({ aaa=10, bbb=100, ccc=12345, ddd=234287, thethethethe=69420, harold=111222, },{__index=function()return 0 end}) while true do draw_lb(wLb,userscores) local _,user,msg = os.pullEvent"chat_message" local s = score(msg) userscores[user] = userscores[user] + s p(M,string.format("(%d) <%s> %s",s,user,msg)) end