Mercurial > wow > breuesk
changeset 10:433d31ea992a
Separated add methods into "end of list" and "random"
author | John@Doomsday |
---|---|
date | Wed, 07 Mar 2012 17:43:30 -0500 |
parents | daed0597deba |
children | 99c279ab0b75 |
files | Lists.lua |
diffstat | 1 files changed, 48 insertions(+), 22 deletions(-) [+] |
line wrap: on
line diff
--- a/Lists.lua Wed Mar 07 14:56:25 2012 -0500 +++ b/Lists.lua Wed Mar 07 17:43:30 2012 -0500 @@ -52,6 +52,8 @@ -- * if a stream contains a random-add after an add-to-end -- it is declared invalid. tough tits. it's just not a fair -- distribution at that point. +-- * actually, fuck it. I'll give them an unlock command and +-- let them screw over their lists :) -- todo: list-of-lists must not use int indices. those will lead to peril. bsk.lists = {} @@ -216,8 +218,10 @@ bsk:DoAddPerson(change) elseif change.action == "CreateList" then bsk:DoCreateList(change) - elseif change.action == "AddPersonToList" then - bsk:DoAddPersonToList(change) + elseif change.action == "AddToListEnd" then + bsk:DoAddPersonToListEnd(change) + elseif change.action == "AddToListRand" then + bsk:DoAddPersonToListRandom(change) elseif change.action == "SuicidePerson" then bsk:DoSuicidePerson(change) else @@ -309,31 +313,53 @@ end end --- TODO: break into AddPersonToListEnd and AddPersonToListRandom -function bsk:DoAddPersonToList(change) - local listIndex = change.arg.listIndex - local slist = change.arg.slist - local list = bsk.lists[listIndex] +function bsk:DoAddPersonToListEnd(change) + local list = bsk.lists[change.arg.listIndex] + local index = list[#list].index + 0.1; + local entry = {index=index, id=change.arg.id} - if #slist == 1 then -- end of list insertion - just one person - tinsert(list,slist[1]) - list.time = change.time - else - self:Print("Adding to middle of list is not yet supported") - return false - end + tinsert(list,entry) + list.time = change.time + list.closedRandom = true + return true end -function bsk:AddPersonToList(name,list) +function bsk:AddPersonToListEnd(name,list) -- require admin local listIndex = bsk:GetListIndex(list) local id = personsReverse[name] bsk:Print(sformat("Adding %s (%s) to list %s (%s)", name, id, list, listIndex)) - local slist = {id} -- TODO: support adding to elsewhere besides the end - local change = {action="AddPersonToList",arg={id=id,listIndex=listIndex,slist=slist}} + local change = {action="AddToListEnd",arg={id=id,listIndex=listIndex}} bsk:StartChange(change) - if bsk:DoAddPersonToList(change) then + if bsk:DoAddPersonToListEnd(change) then + bsk:CommitChange(change) + end +end + +function bsk:DoAddPersonToListRandom(change) + local list = bsk.lists[change.arg.listIndex] + local entry = {index=change.arg.roll, id=change.arg.id} + + tinsert(list,entry) + table.sort(list,function(a,b) return a.roll < b.roll end) + list.time = change.time + + return true +end + +function bsk:AddPersonToListRandom(name,list) + -- require admin + local listIndex = bsk:GetListIndex(list) + if bsk.lists[listIndex].closedRandom then + self:Print("Cannot add person to list by random roll because an add-to-end operation has already occurred") + end + local id = personsReverse[name] + local roll = math.random() + bsk:Print(sformat("Adding %s (%s) to list %s (%s) with roll (%f)", name, id, list, listIndex, roll)) + local change = {action="AddToListRand",arg={id=id,listIndex=listIndex,roll=roll}} + bsk:StartChange(change) + if bsk:DoAddPersonToListRandom(change) then bsk:CommitChange(change) end end @@ -360,15 +386,13 @@ --bsk:Print(sformat("Before suicide of %s on list %s",slist[1],list.name)) --bsk:PrintTable(list) for i = 1, #list do - if list[i] == slist[1] then + if list[i].id == slist[1] then table.remove(slist,1) - list[i] = stemp[1] + list[i].id = stemp[1] table.remove(stemp,1) end end list.time=change.time - --bsk:Print("After") - --bsk:PrintTable(list) return true end @@ -378,6 +402,7 @@ local listIndex = bsk:GetListIndex(list) local slist=bsk:GetSuicideList(name,bsk.lists[listIndex]) local change = {action="SuicidePerson",arg={names=names,list=slist,listIndex=listIndex}} + bsk:PrintTable(change) bsk:StartChange(change) if bsk:DoSuicidePerson(change) then bsk:CommitChange(change) @@ -521,7 +546,7 @@ pushing = true end if pushing and (raidList[list[i]] or reserveList[list[i]]) then - tinsert(ret,list[i]) + tinsert(ret,list[i].id) end end return ret