Mercurial > wow > breuesk
comparison Lists.lua @ 37:6362fe301d43
Storing class name in the persons so we can color them in later
Exposing some data lists, but this will likely be retracted later in favor of interface functions
| author | John@Yosemite-PC |
|---|---|
| date | Tue, 13 Mar 2012 23:17:18 -0400 |
| parents | ecd37523ae04 |
| children | ecef0cba2913 |
comparison
equal
deleted
inserted
replaced
| 36:cc25a1a51291 | 37:6362fe301d43 |
|---|---|
| 66 -- leads to a raidIdP | 66 -- leads to a raidIdP |
| 67 | 67 |
| 68 bsk.lists = {} | 68 bsk.lists = {} |
| 69 bsk.persons = {} | 69 bsk.persons = {} |
| 70 | 70 |
| 71 local raidNameP = {} -- "name" is present in raid | 71 bsk.raidNameP = {} -- "name" is present in raid |
| 72 local raidIdP = {} -- "id" is present in raid | 72 bsk.raidIdP = {} -- "id" is present in raid |
| 73 local reserveIdP = {} -- "reserve id present" | 73 bsk.reserveIdP = {} -- "reserve id present" |
| 74 local activeListKey = 1 -- temporary | 74 local activeListKey = 1 -- temporary |
| 75 local personName2id = {} -- given "name" get that person's id | 75 local personName2id = {} -- given "name" get that person's id |
| 76 | 76 |
| 77 local tinsert = table.insert | 77 local tinsert = table.insert |
| 78 local sformat = string.format | 78 local sformat = string.format |
| 82 bsk.lists = {} | 82 bsk.lists = {} |
| 83 bsk.persons = {} | 83 bsk.persons = {} |
| 84 bsk.db.profile.persons = {} | 84 bsk.db.profile.persons = {} |
| 85 bsk.db.profile.changes = {} | 85 bsk.db.profile.changes = {} |
| 86 bsk.db.profile.lists = {} | 86 bsk.db.profile.lists = {} |
| 87 raidNameP = {} | 87 bsk.raidNameP = {} |
| 88 raidIdP = {} | 88 bsk.raidIdP = {} |
| 89 reserveIdP = {} | 89 bsk.reserveIdP = {} |
| 90 personName2id = {} | 90 personName2id = {} |
| 91 end | 91 end |
| 92 function bsk:tcopy(to, from) | 92 function bsk:tcopy(to, from) |
| 93 for k,v in pairs(from) do | 93 for k,v in pairs(from) do |
| 94 if(type(v)=="table") then | 94 if(type(v)=="table") then |
| 128 bsk:PrintTable(bsk.persons) | 128 bsk:PrintTable(bsk.persons) |
| 129 end | 129 end |
| 130 function bsk:PrintTable(table, depth) | 130 function bsk:PrintTable(table, depth) |
| 131 depth = depth or "" | 131 depth = depth or "" |
| 132 if not table then return end | 132 if not table then return end |
| 133 if #depth > 3*5 then self:Print(depth.."Recursion too deep - stopping"); return end | |
| 133 for i,v in pairs(table) do | 134 for i,v in pairs(table) do |
| 134 if( type(v) == "string" ) then | 135 if( type(v) == "string" ) then |
| 135 self:Print(depth .. i .. " - " .. v) | 136 self:Print(depth .. i .. " - " .. v) |
| 136 elseif( type(v) == "number" ) then | 137 elseif( type(v) == "number" ) then |
| 137 self:Print(depth .. i .. " - " .. tostring(v)) | 138 self:Print(depth .. i .. " - " .. tostring(v)) |
| 138 elseif( type(v) == "table" ) then | 139 elseif( type(v) == "table" ) then |
| 139 self:Print(depth .. i .." - ") | 140 self:Print(depth .. i .." - ") |
| 140 self:PrintTable(v,depth.." ") | 141 self:PrintTable(v,depth.." ") |
| 141 elseif( type(v) == "boolean" ) then | 142 elseif( type(v) == "boolean" ) then |
| 142 self:Print(depth .. i .. " - " .. tostring(v)) | 143 self:Print(depth .. i .. " - " .. tostring(v)) |
| 144 elseif( type(v) == "function" ) then | |
| 145 self:Print(depth .. "function " .. i .. "()") | |
| 143 else | 146 else |
| 144 self:Print(depth .. i .. " - not sure how to print type: " .. type(v) ) | 147 self:Print(depth .. i .. " - not sure how to print type: " .. type(v) ) |
| 145 end | 148 end |
| 146 end | 149 end |
| 147 end | 150 end |
| 148 | 151 |
| 149 function bsk:PrintRaidAndReserve() | 152 function bsk:PrintRaidAndReserve() |
| 150 bsk:Print("RaidNameP") | 153 bsk:Print("RaidNameP") |
| 151 bsk:PrintTable(raidNameP) | 154 bsk:PrintTable(bsk.raidNameP) |
| 152 bsk:Print("RaidIdP") | 155 bsk:Print("RaidIdP") |
| 153 bsk:PrintTable(raidIdP) | 156 bsk:PrintTable(bsk.raidIdP) |
| 154 bsk:Print("ReserveP") | 157 bsk:Print("ReserveP") |
| 155 bsk:PrintTable(reserveIdP) | 158 bsk:PrintTable(bsk.reserveIdP) |
| 156 bsk:Print("personName2id") | 159 bsk:Print("personName2id") |
| 157 bsk:PrintTable(personName2id) | 160 bsk:PrintTable(personName2id) |
| 158 end | 161 end |
| 159 --}}} | 162 --}}} |
| 160 | 163 |
| 291 -- Note that "undo" has no special voodoo to it. It's basically a change that | 294 -- Note that "undo" has no special voodoo to it. It's basically a change that |
| 292 -- reverses the prior change on the stack.--}}} | 295 -- reverses the prior change on the stack.--}}} |
| 293 function bsk:DoAddPerson(change)--{{{ | 296 function bsk:DoAddPerson(change)--{{{ |
| 294 assert(change) | 297 assert(change) |
| 295 assert(change.arg.id) | 298 assert(change.arg.id) |
| 296 local arg = change.arg | |
| 297 -- require admin | 299 -- require admin |
| 298 local persons = bsk.persons | 300 local persons = bsk.persons |
| 299 local name = arg.name | 301 local name = change.arg.name |
| 300 local id = arg.id | 302 local id = change.arg.id |
| 301 assert(persons[id]==nil) | 303 assert(persons[id]==nil) |
| 302 persons[id] = {main=name} | 304 persons[id] = {main=name,class=change.arg.class} |
| 303 persons.time=change.time | 305 persons.time=change.time |
| 304 personName2id[name] = id | 306 personName2id[name] = id |
| 305 return true | 307 return true |
| 306 end--}}} | 308 end--}}} |
| 307 function bsk:AddPerson(name)--{{{ | 309 function bsk:AddPerson(name)--{{{ |
| 310 -- TODO: check guid to be sure it's a player | 312 -- TODO: check guid to be sure it's a player |
| 311 if not guid then | 313 if not guid then |
| 312 self:Print(sformat("Could not add player %s - they must be in range or group",name)) | 314 self:Print(sformat("Could not add player %s - they must be in range or group",name)) |
| 313 return | 315 return |
| 314 end | 316 end |
| 317 local _,englishClass = UnitClass(name) | |
| 318 --bsk:Print("Person " .. name .. " is class " .. englishClass) | |
| 315 local id = string.sub(guid,6) -- skip at least 0x0580 ... | 319 local id = string.sub(guid,6) -- skip at least 0x0580 ... |
| 316 id = id:gsub("^0*(.*)","%1") -- nom all leading zeroes remaining | 320 id = id:gsub("^0*(.*)","%1") -- nom all leading zeroes remaining |
| 317 | 321 |
| 318 if persons[id] and persons[id] ~= name then | 322 if persons[id] and persons[id] ~= name then |
| 319 self:Print(sformat("Namechange detected for %s - new is %s, please rename the existing entry", persons[id].main, name)) | 323 self:Print(sformat("Namechange detected for %s - new is %s, please rename the existing entry", persons[id].main, name)) |
| 321 end | 325 end |
| 322 if persons[id] ~= nil then | 326 if persons[id] ~= nil then |
| 323 self:Print(sformat("%s is already in the persons list; disregarding", name)) | 327 self:Print(sformat("%s is already in the persons list; disregarding", name)) |
| 324 return | 328 return |
| 325 end | 329 end |
| 326 local change = {action="AddPerson",arg={name=name,id=id}} | 330 local change = {action="AddPerson",arg={name=name,id=id,class=englishClass}} |
| 327 if bsk:DoAddPerson(change) then | 331 if bsk:DoAddPerson(change) then |
| 328 bsk:CreateChange(change) | 332 bsk:CreateChange(change) |
| 329 end | 333 end |
| 330 end--}}} | 334 end--}}} |
| 331 function bsk:DoCreateList(change)--{{{ | 335 function bsk:DoCreateList(change)--{{{ |
| 563 bsk:PopulateRaidList() | 567 bsk:PopulateRaidList() |
| 564 local t = {} | 568 local t = {} |
| 565 for id,_ in pairs(bsk.persons) do | 569 for id,_ in pairs(bsk.persons) do |
| 566 t[id] = true | 570 t[id] = true |
| 567 end | 571 end |
| 568 for name,_ in pairs(raidNameP) do | 572 for name,_ in pairs(bsk.raidNameP) do |
| 569 if personName2id[name] == nil then | 573 if personName2id[name] == nil then |
| 570 bsk:Print(sformat("Person %s is missing from the persons list - adding",name)) | 574 bsk:Print(sformat("Person %s is missing from the persons list - adding",name)) |
| 571 bsk:AddPerson(name) | 575 bsk:AddPerson(name) |
| 572 end | 576 end |
| 573 end | 577 end |
| 578 -- difference (raid+reserve)-list, then random shuffle that, then add | 582 -- difference (raid+reserve)-list, then random shuffle that, then add |
| 579 bsk:PopulateRaidList() | 583 bsk:PopulateRaidList() |
| 580 local list = bsk.lists[listIndex] | 584 local list = bsk.lists[listIndex] |
| 581 | 585 |
| 582 local t = {} -- after loops, contains intersection of IDs present between raid and reserve | 586 local t = {} -- after loops, contains intersection of IDs present between raid and reserve |
| 583 for i,v in pairs(raidIdP) do | 587 for i,v in pairs(bsk.raidIdP) do |
| 584 if v then t[i] = true end | 588 if v then t[i] = true end |
| 585 end | 589 end |
| 586 for i,v in pairs(reserveIdP) do | 590 for i,v in pairs(bsk.reserveIdP) do |
| 587 if v then t[i] = true end | 591 if v then t[i] = true end |
| 588 end | 592 end |
| 589 | 593 |
| 590 -- now remove from t all of the people already present on the list | 594 -- now remove from t all of the people already present on the list |
| 591 if list then | 595 if list then |
| 614 --}}} | 618 --}}} |
| 615 -- "Soft" actions- ie things that cause nonpermanent state {{{ | 619 -- "Soft" actions- ie things that cause nonpermanent state {{{ |
| 616 | 620 |
| 617 -- reserves | 621 -- reserves |
| 618 function bsk:AddReserve(name) | 622 function bsk:AddReserve(name) |
| 619 reserveIdP[personName2id[name]]=true | 623 bsk.reserveIdP[personName2id[name]]=true |
| 620 -- TODO: communicate to others. don't store this in any way. | 624 -- TODO: communicate to others. don't store this in any way. |
| 621 end | 625 end |
| 622 | 626 |
| 623 function bsk:RemoveReserve(name) | 627 function bsk:RemoveReserve(name) |
| 624 reserveIdP[personName2id[name]]=false | 628 bsk.reserveIdP[personName2id[name]]=false |
| 625 -- TODO: communicate to others. don't store this in any way. | 629 -- TODO: communicate to others. don't store this in any way. |
| 626 end | 630 end |
| 627 | 631 |
| 628 | 632 |
| 629 --function bsk:GetActiveList() | 633 --function bsk:GetActiveList() |
| 645 function bsk:PopulateRaidList() | 649 function bsk:PopulateRaidList() |
| 646 local inParty = GetNumPartyMembers() | 650 local inParty = GetNumPartyMembers() |
| 647 local inRaid = GetNumRaidMembers() | 651 local inRaid = GetNumRaidMembers() |
| 648 local add = function(unitNameArg) | 652 local add = function(unitNameArg) |
| 649 local name = UnitName(unitNameArg) | 653 local name = UnitName(unitNameArg) |
| 650 raidNameP[name]=true | 654 bsk.raidNameP[name]=true |
| 651 if personName2id[name] ~= nil then | 655 if personName2id[name] ~= nil then |
| 652 raidIdP[personName2id[name]]=true | 656 bsk.raidIdP[personName2id[name]]=true |
| 653 end | 657 end |
| 654 end | 658 end |
| 655 | 659 |
| 656 wipe(raidNameP) | 660 wipe(bsk.raidNameP) |
| 657 wipe(raidIdP) | 661 wipe(bsk.raidIdP) |
| 658 if inRaid > 0 then | 662 if inRaid > 0 then |
| 659 for i = 1, inRaid do | 663 for i = 1, inRaid do |
| 660 add(rID[i]) | 664 add(rID[i]) |
| 661 end | 665 end |
| 662 elseif inParty > 0 then | 666 elseif inParty > 0 then |
| 667 add("player") | 671 add("player") |
| 668 else | 672 else |
| 669 -- You're alone | 673 -- You're alone |
| 670 add("player") | 674 add("player") |
| 671 end | 675 end |
| 672 --bsk:PrintTable(raidNameP) | 676 --bsk:PrintTable(bsk.raidNameP) |
| 673 end | 677 end |
| 674 | 678 |
| 675 -- undo rules! | 679 -- undo rules! |
| 676 -- only the most recent event can be undone | 680 -- only the most recent event can be undone |
| 677 -- ^^^ on a given list? | 681 -- ^^^ on a given list? |
| 689 local pushing = false | 693 local pushing = false |
| 690 for i = 1, #list do | 694 for i = 1, #list do |
| 691 if list[i].id == id then | 695 if list[i].id == id then |
| 692 pushing = true | 696 pushing = true |
| 693 end | 697 end |
| 694 if pushing and (raidIdP[list[i].id] or reserveIdP[list[i].id]) then | 698 if pushing and (bsk.raidIdP[list[i].id] or bsk.reserveIdP[list[i].id]) then |
| 695 tinsert(ret,list[i].id) | 699 tinsert(ret,list[i].id) |
| 696 end | 700 end |
| 697 end | 701 end |
| 698 --bsk:Print("GSL") | 702 --bsk:Print("GSL") |
| 699 --bsk:PrintTable(ret) | 703 --bsk:PrintTable(ret) |
