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 |
