Mercurial > wow > breuesk
comparison Lists.lua @ 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 | a6bc3f2d3207 |
comparison
equal
deleted
inserted
replaced
9:daed0597deba | 10:433d31ea992a |
---|---|
50 -- don't get an even distibution from then on (in fact | 50 -- don't get an even distibution from then on (in fact |
51 -- they'll end up getting top favor) | 51 -- they'll end up getting top favor) |
52 -- * if a stream contains a random-add after an add-to-end | 52 -- * if a stream contains a random-add after an add-to-end |
53 -- it is declared invalid. tough tits. it's just not a fair | 53 -- it is declared invalid. tough tits. it's just not a fair |
54 -- distribution at that point. | 54 -- distribution at that point. |
55 -- * actually, fuck it. I'll give them an unlock command and | |
56 -- let them screw over their lists :) | |
55 | 57 |
56 -- todo: list-of-lists must not use int indices. those will lead to peril. | 58 -- todo: list-of-lists must not use int indices. those will lead to peril. |
57 bsk.lists = {} | 59 bsk.lists = {} |
58 bsk.persons = {} | 60 bsk.persons = {} |
59 | 61 |
214 function bsk:ProcessChange(change) | 216 function bsk:ProcessChange(change) |
215 if change.action == "AddPerson" then | 217 if change.action == "AddPerson" then |
216 bsk:DoAddPerson(change) | 218 bsk:DoAddPerson(change) |
217 elseif change.action == "CreateList" then | 219 elseif change.action == "CreateList" then |
218 bsk:DoCreateList(change) | 220 bsk:DoCreateList(change) |
219 elseif change.action == "AddPersonToList" then | 221 elseif change.action == "AddToListEnd" then |
220 bsk:DoAddPersonToList(change) | 222 bsk:DoAddPersonToListEnd(change) |
223 elseif change.action == "AddToListRand" then | |
224 bsk:DoAddPersonToListRandom(change) | |
221 elseif change.action == "SuicidePerson" then | 225 elseif change.action == "SuicidePerson" then |
222 bsk:DoSuicidePerson(change) | 226 bsk:DoSuicidePerson(change) |
223 else | 227 else |
224 bsk:Print("Unknown message encountered") | 228 bsk:Print("Unknown message encountered") |
225 bsk:PrintTable(change) | 229 bsk:PrintTable(change) |
307 if bsk:DoCreateList(change) then | 311 if bsk:DoCreateList(change) then |
308 bsk:CommitChange(change) | 312 bsk:CommitChange(change) |
309 end | 313 end |
310 end | 314 end |
311 | 315 |
312 -- TODO: break into AddPersonToListEnd and AddPersonToListRandom | 316 function bsk:DoAddPersonToListEnd(change) |
313 function bsk:DoAddPersonToList(change) | 317 local list = bsk.lists[change.arg.listIndex] |
314 local listIndex = change.arg.listIndex | 318 local index = list[#list].index + 0.1; |
315 local slist = change.arg.slist | 319 local entry = {index=index, id=change.arg.id} |
316 local list = bsk.lists[listIndex] | 320 |
317 | 321 tinsert(list,entry) |
318 if #slist == 1 then -- end of list insertion - just one person | 322 list.time = change.time |
319 tinsert(list,slist[1]) | 323 list.closedRandom = true |
320 list.time = change.time | 324 |
321 else | |
322 self:Print("Adding to middle of list is not yet supported") | |
323 return false | |
324 end | |
325 return true | 325 return true |
326 end | 326 end |
327 | 327 |
328 function bsk:AddPersonToList(name,list) | 328 function bsk:AddPersonToListEnd(name,list) |
329 -- require admin | 329 -- require admin |
330 local listIndex = bsk:GetListIndex(list) | 330 local listIndex = bsk:GetListIndex(list) |
331 local id = personsReverse[name] | 331 local id = personsReverse[name] |
332 bsk:Print(sformat("Adding %s (%s) to list %s (%s)", name, id, list, listIndex)) | 332 bsk:Print(sformat("Adding %s (%s) to list %s (%s)", name, id, list, listIndex)) |
333 local slist = {id} -- TODO: support adding to elsewhere besides the end | 333 local change = {action="AddToListEnd",arg={id=id,listIndex=listIndex}} |
334 local change = {action="AddPersonToList",arg={id=id,listIndex=listIndex,slist=slist}} | |
335 bsk:StartChange(change) | 334 bsk:StartChange(change) |
336 if bsk:DoAddPersonToList(change) then | 335 if bsk:DoAddPersonToListEnd(change) then |
336 bsk:CommitChange(change) | |
337 end | |
338 end | |
339 | |
340 function bsk:DoAddPersonToListRandom(change) | |
341 local list = bsk.lists[change.arg.listIndex] | |
342 local entry = {index=change.arg.roll, id=change.arg.id} | |
343 | |
344 tinsert(list,entry) | |
345 table.sort(list,function(a,b) return a.roll < b.roll end) | |
346 list.time = change.time | |
347 | |
348 return true | |
349 end | |
350 | |
351 function bsk:AddPersonToListRandom(name,list) | |
352 -- require admin | |
353 local listIndex = bsk:GetListIndex(list) | |
354 if bsk.lists[listIndex].closedRandom then | |
355 self:Print("Cannot add person to list by random roll because an add-to-end operation has already occurred") | |
356 end | |
357 local id = personsReverse[name] | |
358 local roll = math.random() | |
359 bsk:Print(sformat("Adding %s (%s) to list %s (%s) with roll (%f)", name, id, list, listIndex, roll)) | |
360 local change = {action="AddToListRand",arg={id=id,listIndex=listIndex,roll=roll}} | |
361 bsk:StartChange(change) | |
362 if bsk:DoAddPersonToListRandom(change) then | |
337 bsk:CommitChange(change) | 363 bsk:CommitChange(change) |
338 end | 364 end |
339 end | 365 end |
340 | 366 |
341 function bsk:DoRemovePerson(change) | 367 function bsk:DoRemovePerson(change) |
358 local temp = table.remove(stemp,1) -- pop | 384 local temp = table.remove(stemp,1) -- pop |
359 tinsert(stemp,temp) -- push_back | 385 tinsert(stemp,temp) -- push_back |
360 --bsk:Print(sformat("Before suicide of %s on list %s",slist[1],list.name)) | 386 --bsk:Print(sformat("Before suicide of %s on list %s",slist[1],list.name)) |
361 --bsk:PrintTable(list) | 387 --bsk:PrintTable(list) |
362 for i = 1, #list do | 388 for i = 1, #list do |
363 if list[i] == slist[1] then | 389 if list[i].id == slist[1] then |
364 table.remove(slist,1) | 390 table.remove(slist,1) |
365 list[i] = stemp[1] | 391 list[i].id = stemp[1] |
366 table.remove(stemp,1) | 392 table.remove(stemp,1) |
367 end | 393 end |
368 end | 394 end |
369 list.time=change.time | 395 list.time=change.time |
370 --bsk:Print("After") | |
371 --bsk:PrintTable(list) | |
372 return true | 396 return true |
373 end | 397 end |
374 | 398 |
375 function bsk:SuicidePerson(name,list) | 399 function bsk:SuicidePerson(name,list) |
376 -- require admin | 400 -- require admin |
377 bsk:PopulateRaidList() | 401 bsk:PopulateRaidList() |
378 local listIndex = bsk:GetListIndex(list) | 402 local listIndex = bsk:GetListIndex(list) |
379 local slist=bsk:GetSuicideList(name,bsk.lists[listIndex]) | 403 local slist=bsk:GetSuicideList(name,bsk.lists[listIndex]) |
380 local change = {action="SuicidePerson",arg={names=names,list=slist,listIndex=listIndex}} | 404 local change = {action="SuicidePerson",arg={names=names,list=slist,listIndex=listIndex}} |
405 bsk:PrintTable(change) | |
381 bsk:StartChange(change) | 406 bsk:StartChange(change) |
382 if bsk:DoSuicidePerson(change) then | 407 if bsk:DoSuicidePerson(change) then |
383 bsk:CommitChange(change) | 408 bsk:CommitChange(change) |
384 end | 409 end |
385 end | 410 end |
519 for i = 1, #list do | 544 for i = 1, #list do |
520 if list[i] == name then | 545 if list[i] == name then |
521 pushing = true | 546 pushing = true |
522 end | 547 end |
523 if pushing and (raidList[list[i]] or reserveList[list[i]]) then | 548 if pushing and (raidList[list[i]] or reserveList[list[i]]) then |
524 tinsert(ret,list[i]) | 549 tinsert(ret,list[i].id) |
525 end | 550 end |
526 end | 551 end |
527 return ret | 552 return ret |
528 end | 553 end |
529 | 554 |