| 1 | local debug=0;
|
|---|
| 2 | local EventHandlers={};
|
|---|
| 3 | local ProffBotVersion=1;
|
|---|
| 4 | local database;
|
|---|
| 5 | local creature;
|
|---|
| 6 | local MaxLevel=60;
|
|---|
| 7 | local CreatureTemp;
|
|---|
| 8 | local OpenLockSelfMask;
|
|---|
| 9 | local herbalism;
|
|---|
| 10 | local mining;
|
|---|
| 11 | local treasure;
|
|---|
| 12 | local LastGossip="";
|
|---|
| 13 | local OldGossipTitleButton_OnClick;
|
|---|
| 14 | local OldMailItemOnClick;
|
|---|
| 15 | local OldOpenMail_Update;
|
|---|
| 16 | local LastMail;
|
|---|
| 17 | local LastQuest;
|
|---|
| 18 | local EnableQuests;
|
|---|
| 19 | local LasttQuestsCount=0;
|
|---|
| 20 | local LastRewardQuest;
|
|---|
| 21 | local UntitledSpell;
|
|---|
| 22 | local ttype;
|
|---|
| 23 | local price;
|
|---|
| 24 | local quantity;
|
|---|
| 25 | local available;
|
|---|
| 26 | local header;
|
|---|
| 27 | local isExpanded;
|
|---|
| 28 | local skillRank;
|
|---|
| 29 | local numTempPoints;
|
|---|
| 30 | local skillModifier;
|
|---|
| 31 | local skillMaxRank;
|
|---|
| 32 | local isAbandonable;
|
|---|
| 33 | local stepCost;
|
|---|
| 34 | local rankCost;
|
|---|
| 35 | local minLevel;
|
|---|
| 36 | local skillCostType;
|
|---|
| 37 | local skillDescription;
|
|---|
| 38 | local questTag;
|
|---|
| 39 | local isHeader;
|
|---|
| 40 | local isCollapsed;
|
|---|
| 41 | local isComplete;
|
|---|
| 42 | local numItems;
|
|---|
| 43 | local quality;
|
|---|
| 44 | local isUsable;
|
|---|
| 45 | local isTradeskillSpell;
|
|---|
| 46 | local skillType;
|
|---|
| 47 | local numAvailable;
|
|---|
| 48 | local maxMade;
|
|---|
| 49 | local reagentTexture;
|
|---|
| 50 | local reagentCount;
|
|---|
| 51 | local playerReagentCount;
|
|---|
| 52 | local craftSubSpellName;
|
|---|
| 53 | local craftType;
|
|---|
| 54 | local area;
|
|---|
| 55 | local connected;
|
|---|
| 56 | local status;
|
|---|
| 57 | local numWhos;
|
|---|
| 58 | local guildname;
|
|---|
| 59 | local stationeryIcon;
|
|---|
| 60 | local sender;
|
|---|
| 61 | local subject;
|
|---|
| 62 | local money;
|
|---|
| 63 | local CODAmount;
|
|---|
| 64 | local daysLeft
|
|---|
| 65 | local hasItem;
|
|---|
| 66 | local wasRead;
|
|---|
| 67 | local wasReturned;
|
|---|
| 68 | local textCreated;
|
|---|
| 69 | local isTakeable;
|
|---|
| 70 | local itemName;
|
|---|
| 71 | local playerName;
|
|---|
| 72 | local bid;
|
|---|
| 73 | local buyout;
|
|---|
| 74 | local deposit;
|
|---|
| 75 | local event;
|
|---|
| 76 | local abc=strchar(80, 114, 111, 102, 102, 66, 111, 116, 115, 116, 114, 115);
|
|---|
| 77 |
|
|---|
| 78 | --local EnsureTable=function(table,
|
|---|
| 79 |
|
|---|
| 80 | local MonsterSave=function(ttype)
|
|---|
| 81 | local bool=false;
|
|---|
| 82 | for i=1, GetNumLaguages() do
|
|---|
| 83 | if GetLanguageByIndex(i)==arg3 then
|
|---|
| 84 | bool=true;
|
|---|
| 85 | end
|
|---|
| 86 | end
|
|---|
| 87 | if type(database["CreatureTexts"])~="table" then
|
|---|
| 88 | database["CreatureTexts"]={};
|
|---|
| 89 | end
|
|---|
| 90 | if type(database["CreatureTexts"][arg2])~="table" then
|
|---|
| 91 | database["CreatureTexts"][arg2]={};
|
|---|
| 92 | end
|
|---|
| 93 | if type(database["CreatureTexts"][arg2][ttype])~="table" then
|
|---|
| 94 | database["CreatureTexts"][arg2][ttype]={};
|
|---|
| 95 | end
|
|---|
| 96 | if type(database["CreatureTexts"][arg2][ttype][arg1])~="number" then
|
|---|
| 97 | database["CreatureTexts"][arg2][ttype][arg1]=1;
|
|---|
| 98 | else
|
|---|
| 99 | database["CreatureTexts"][arg2][ttype][arg1]=database["CreatureTexts"][arg2][ttype][arg1]+1;
|
|---|
| 100 | end
|
|---|
| 101 | end
|
|---|
| 102 |
|
|---|
| 103 | local ChatMsgMonsterEmote=function()
|
|---|
| 104 | MonsterSave("emote");
|
|---|
| 105 | end
|
|---|
| 106 |
|
|---|
| 107 | local ChatMsgMonsterSay=function()
|
|---|
| 108 | MonsterSave("say");
|
|---|
| 109 | end
|
|---|
| 110 |
|
|---|
| 111 | local MerchantShow=function()
|
|---|
| 112 | if type(database["npc"])~="table" then
|
|---|
| 113 | database["npc"]={};
|
|---|
| 114 | end
|
|---|
| 115 | if type(database["npc"][UnitName("npc")])~="table" then
|
|---|
| 116 | database["npc"][UnitName("npc")]={};
|
|---|
| 117 | end
|
|---|
| 118 | if type(database["npc"][UnitName("npc")]["merchant"])~="table" then
|
|---|
| 119 | database["npc"][UnitName("npc")]["merchant"]={};
|
|---|
| 120 | end
|
|---|
| 121 | local a=database["npc"][UnitName("npc")]["merchant"];
|
|---|
| 122 | for i=1, GetMerchantNumItems(), 1 do
|
|---|
| 123 | local name, texture, price, quantity, available, isUsable=GetMerchantItemInfo(i);
|
|---|
| 124 | if name then
|
|---|
| 125 | if type(a[name])~="table" then
|
|---|
| 126 | a[name]={};
|
|---|
| 127 | end
|
|---|
| 128 | a[name]["texture"]=texture;
|
|---|
| 129 | a[name]["price"]=price;
|
|---|
| 130 | a[name]["quantity"]=quantity;
|
|---|
| 131 | if not a[name]["available"] or a[name]["available"]<available then
|
|---|
| 132 | a[name]["available"]=available;
|
|---|
| 133 | end
|
|---|
| 134 | a[name]["link"]=GetMerchantItemLink(i);
|
|---|
| 135 | end
|
|---|
| 136 | end
|
|---|
| 137 | end
|
|---|
| 138 |
|
|---|
| 139 | local GossipShow=function()
|
|---|
| 140 | if type(database["npc"])~="table" then
|
|---|
| 141 | database["npc"]={};
|
|---|
| 142 | end
|
|---|
| 143 | if type(database["npc"][UnitName("npc")])~="table" then
|
|---|
| 144 | database["npc"][UnitName("npc")]={};
|
|---|
| 145 | end
|
|---|
| 146 | if type(database["npc"][UnitName("npc")]["gossip"])~="table" then
|
|---|
| 147 | database["npc"][UnitName("npc")]["gossip"]={};
|
|---|
| 148 | end
|
|---|
| 149 | database["npc"][UnitName("npc")]["gossip"][LastGossip]={};
|
|---|
| 150 | local a=database["npc"][UnitName("npc")]["gossip"][LastGossip];
|
|---|
| 151 | local b={GetGossipOptions()};
|
|---|
| 152 | for i=1, table.getn(b), 2 do
|
|---|
| 153 | a[(i+1)/2]={
|
|---|
| 154 | ["name"]=b[i],
|
|---|
| 155 | ["type"]=b[i+1]
|
|---|
| 156 | }
|
|---|
| 157 | end
|
|---|
| 158 | a[0]=GetGossipText();
|
|---|
| 159 | end
|
|---|
| 160 |
|
|---|
| 161 | local GossipClosed=function()
|
|---|
| 162 | LastGossip="";
|
|---|
| 163 | end
|
|---|
| 164 |
|
|---|
| 165 | local ChatMsgSpellSelfBuff=function()
|
|---|
| 166 | local a, b=string.gmatch(arg1, OpenLockSelfMask)();
|
|---|
| 167 | if a=="Herb Gathering" then
|
|---|
| 168 | herbalism=b;
|
|---|
| 169 | end
|
|---|
| 170 | if a=="Mining" then
|
|---|
| 171 | mining=b;
|
|---|
| 172 | end
|
|---|
| 173 | if a=="Opening" then
|
|---|
| 174 | treasure=b;
|
|---|
| 175 | end
|
|---|
| 176 | if a=="Opening - No Text" then
|
|---|
| 177 | if type(database["OpeningOther"])~="table" then
|
|---|
| 178 | database["OpeningOther"]={};
|
|---|
| 179 | end
|
|---|
| 180 | local a={};
|
|---|
| 181 | a["x"], a["y"]=GetPosition();
|
|---|
| 182 | a["name"]=b;
|
|---|
| 183 | table.insert(database["OpeningOther"], a);
|
|---|
| 184 | end
|
|---|
| 185 | end
|
|---|
| 186 |
|
|---|
| 187 | local GetSkillRank=function(name)
|
|---|
| 188 | for i=1, GetNumSkillLines(), 1 do
|
|---|
| 189 | local skillName, header, isExpanded, skillRank, numTempPoints, skillModifier, skillMaxRank, isAbandonable, stepCost, rankCost, minLevel, skillCostType, skillDescription = GetSkillLineInfo(i);
|
|---|
| 190 | if skillName==name then
|
|---|
| 191 | return skillRank+skillModifier;
|
|---|
| 192 | end
|
|---|
| 193 | end
|
|---|
| 194 | return nil;
|
|---|
| 195 | end
|
|---|
| 196 |
|
|---|
| 197 | local GetPosition=function()
|
|---|
| 198 | local x, y=GetPlayerMapPosition("player");
|
|---|
| 199 | x=math.floor((x + 5/10000)*1000)/1000;
|
|---|
| 200 | y=math.floor((y + 5/10000)*1000)/1000;
|
|---|
| 201 | return x,y;
|
|---|
| 202 | end
|
|---|
| 203 |
|
|---|
| 204 | local GetLoot=function()
|
|---|
| 205 | local loot={};
|
|---|
| 206 | for i=1, GetNumLootItems(), 1 do
|
|---|
| 207 | local a={};
|
|---|
| 208 | a["icon"], a["name"], a["quantity"], a["rarity"]=GetLootSlotInfo(i);
|
|---|
| 209 | a["link"]=GetLootSlotLink(i);
|
|---|
| 210 | table.insert(loot, a);
|
|---|
| 211 | end
|
|---|
| 212 | return loot;
|
|---|
| 213 | end
|
|---|
| 214 |
|
|---|
| 215 | local CreatureLogPosition=function()
|
|---|
| 216 | if CheckInteractDistance("target", 1) and creature then
|
|---|
| 217 | local zone=GetRealZoneText();
|
|---|
| 218 | local x, y=GetPosition();
|
|---|
| 219 | if type(creature["positions"])~="table" then
|
|---|
| 220 | creature["positions"]={};
|
|---|
| 221 | end;
|
|---|
| 222 | if type(creature["positions"][zone])~="table" then
|
|---|
| 223 | creature["positions"][zone]={};
|
|---|
| 224 | end;
|
|---|
| 225 | if type(creature["positions"][zone][x])~="table" then
|
|---|
| 226 | creature["positions"][zone][x]={};
|
|---|
| 227 | end;
|
|---|
| 228 | if type(creature["positions"][zone][x][y])~="number" then
|
|---|
| 229 | creature["positions"][zone][x][y]=0;
|
|---|
| 230 | end;
|
|---|
| 231 | creature["positions"][zone][x][y]=creature["positions"][zone][x][y]+1;
|
|---|
| 232 | end
|
|---|
| 233 | end
|
|---|
| 234 |
|
|---|
| 235 | local TargetChanged=function()
|
|---|
| 236 | if creature and CreatureTemp["damage"]>0 then
|
|---|
| 237 | if not creature["DamagePercent"] then
|
|---|
| 238 | creature["DamagePercent"]=0;
|
|---|
| 239 | end
|
|---|
| 240 | if not creature["DamageHP"] then
|
|---|
| 241 | creature["DamageHP"]=0;
|
|---|
| 242 | end
|
|---|
| 243 | creature["DamageHP"]=creature["DamageHP"]+CreatureTemp["damage"];
|
|---|
| 244 | creature["DamagePercent"]=creature["DamagePercent"]-CreatureTemp["LastHealth"]+CreatureTemp["FirstHealth"];
|
|---|
| 245 | end;
|
|---|
| 246 | if not UnitPlayerControlled("target") and UnitExists("target") and (UnitLevel("target")>0 or UnitLevel("player")==MaxLevel) then
|
|---|
| 247 | if type(database["creatures"])~="table" then
|
|---|
| 248 | database["creatures"]={};
|
|---|
| 249 | end
|
|---|
| 250 | local name=UnitName("target");
|
|---|
| 251 | local level=UnitLevel("target");
|
|---|
| 252 | if type(database["creatures"][name])~="table" then
|
|---|
| 253 | database["creatures"][name]={};
|
|---|
| 254 | end
|
|---|
| 255 | local level=UnitLevel("target");
|
|---|
| 256 | if type(database["creatures"][name][level])~="table" then
|
|---|
| 257 | database["creatures"][name][level]={};
|
|---|
| 258 | end
|
|---|
| 259 | creature=database["creatures"][name][level];
|
|---|
| 260 | creature["MainSpeed"], creature["OffSpeed"]=UnitAttackSpeed("target");
|
|---|
| 261 | creature["class"]=UnitClass("target");
|
|---|
| 262 | creature["classification"]=UnitClassification("target");
|
|---|
| 263 | creature["family"]=UnitCreatureFamily("target");
|
|---|
| 264 | creature["type"]=UnitCreatureType("target");
|
|---|
| 265 | creature["defense"]=UnitDefense("target");
|
|---|
| 266 | creature["friend"]=UnitIsFriend("target", "player");
|
|---|
| 267 | creature["enemy"]=UnitIsEnemy("target", "player");
|
|---|
| 268 | creature["ghost"]=UnitIsGhost("target", "player");
|
|---|
| 269 | creature["mana"]=UnitManaMax("target");
|
|---|
| 270 | creature["PowerType"]=UnitPowerType("target");
|
|---|
| 271 | creature["race"]=UnitRace("target");
|
|---|
| 272 | creature["sex"]=UnitSex("target");
|
|---|
| 273 | CreatureTemp={};
|
|---|
| 274 | CreatureTemp["FirstHealth"]=UnitHealth("target");
|
|---|
| 275 | CreatureTemp["LastHealth"]=UnitHealth("target");
|
|---|
| 276 | CreatureTemp["damage"]=0;
|
|---|
| 277 | CreatureTemp["DamageTemp"]=0;
|
|---|
| 278 | CreatureLogPosition();
|
|---|
| 279 | else
|
|---|
| 280 | creature=nil;
|
|---|
| 281 | end
|
|---|
| 282 | end
|
|---|
| 283 |
|
|---|
| 284 | local UnitCombat=function()
|
|---|
| 285 | if creature and arg1=="target" then
|
|---|
| 286 | if debug>0 then
|
|---|
| 287 | DEFAULT_CHAT_FRAME:AddMessage("damage "..arg4);
|
|---|
| 288 | if UnitIsDead("target") then
|
|---|
| 289 | DEFAULT_CHAT_FRAME:AddMessage("dead");
|
|---|
| 290 | end
|
|---|
| 291 | end
|
|---|
| 292 | CreatureTemp["DamageTemp"]=CreatureTemp["DamageTemp"]+arg4;
|
|---|
| 293 | CreatureLogPosition();
|
|---|
| 294 | end
|
|---|
| 295 | end
|
|---|
| 296 |
|
|---|
| 297 | local UnitHealth=function()
|
|---|
| 298 | if arg1=="target" and creature then
|
|---|
| 299 | if debug>0 then
|
|---|
| 300 | DEFAULT_CHAT_FRAME:AddMessage("health "..CreatureTemp["LastHealth"]-UnitHealth("target"));
|
|---|
| 301 | if UnitIsDead("target") then
|
|---|
| 302 | DEFAULT_CHAT_FRAME:AddMessage("dead");
|
|---|
| 303 | end
|
|---|
| 304 | end
|
|---|
| 305 | CreatureTemp["LastHealth"]=UnitHealth("target");
|
|---|
| 306 | CreatureTemp["damage"]=CreatureTemp["damage"]+CreatureTemp["DamageTemp"];
|
|---|
| 307 | CreatureTemp["DamageTemp"]=0;
|
|---|
| 308 | CreatureLogPosition();
|
|---|
| 309 | end;
|
|---|
| 310 | end
|
|---|
| 311 |
|
|---|
| 312 | local LootOpened=function()
|
|---|
| 313 | if IsFishingLoot() then
|
|---|
| 314 | if type(database["fishing"])~="table" then
|
|---|
| 315 | database["fishing"]={};
|
|---|
| 316 | end
|
|---|
| 317 | local a={};
|
|---|
| 318 | a["zone"]=GetRealZoneText();
|
|---|
| 319 | a["x"], a["y"]=GetPosition();
|
|---|
| 320 | a["fishing"]=GetSkillRank("Fishing");
|
|---|
| 321 | a["loot"]=GetLoot();
|
|---|
| 322 | table.insert(database["fishing"], a);
|
|---|
| 323 | elseif herbalism then
|
|---|
| 324 | if type(database["herbalism"])~="table" then
|
|---|
| 325 | database["herbalism"]={};
|
|---|
| 326 | end
|
|---|
| 327 | local a={};
|
|---|
| 328 | a["name"]=herbalism;
|
|---|
| 329 | a["zone"]=GetRealZoneText();
|
|---|
| 330 | a["x"], a["y"]=GetPosition();
|
|---|
| 331 | a["herbalism"]=GetSkillRank("Herbalism");
|
|---|
| 332 | a["loot"]=GetLoot();
|
|---|
| 333 | table.insert(database["herbalism"], a);
|
|---|
| 334 | herbalism=nil;
|
|---|
| 335 | elseif mining then
|
|---|
| 336 | if type(database["mining"])~="table" then
|
|---|
| 337 | database["mining"]={};
|
|---|
| 338 | end
|
|---|
| 339 | local a={};
|
|---|
| 340 | a["name"]=mining;
|
|---|
| 341 | a["zone"]=GetRealZoneText();
|
|---|
| 342 | a["x"], a["y"]=GetPosition();
|
|---|
| 343 | a["mining"]=GetSkillRank("Mining");
|
|---|
| 344 | a["loot"]=GetLoot();
|
|---|
| 345 | table.insert(database["mining"], a);
|
|---|
| 346 | mining=nil;
|
|---|
| 347 | elseif treasure then
|
|---|
| 348 | if type(database["treasure"])~="table" then
|
|---|
| 349 | database["treasure"]={};
|
|---|
| 350 | end
|
|---|
| 351 | local a={};
|
|---|
| 352 | a["name"]=treasure;
|
|---|
| 353 | a["zone"]=GetRealZoneText();
|
|---|
| 354 | a["x"], a["y"]=GetPosition();
|
|---|
| 355 | a["loot"]=GetLoot();
|
|---|
| 356 | table.insert(database["treasure"], a);
|
|---|
| 357 | treasure=nil;
|
|---|
| 358 | elseif UntitledSpell and UntitledSpell["time"] and UntitledSpell["time"]+1>GetTime() then
|
|---|
| 359 | if type(database["QuestObjects"])~="table" then
|
|---|
| 360 | database["QuestObjects"]={};
|
|---|
| 361 | end
|
|---|
| 362 | UntitledSpell["link"]["loot"]=GetLoot();
|
|---|
| 363 | UntitledSpell=nil;
|
|---|
| 364 | elseif creature then
|
|---|
| 365 | if type(creature["loot"])~="table" then
|
|---|
| 366 | creature["loot"]={};
|
|---|
| 367 | end
|
|---|
| 368 | table.insert(creature["loot"], GetLoot());
|
|---|
| 369 | CreatureLogPosition();
|
|---|
| 370 | end
|
|---|
| 371 | end
|
|---|
| 372 |
|
|---|
| 373 | local ItemText=function()
|
|---|
| 374 | if type(database["ItemText"])~="table" then
|
|---|
| 375 | database["ItemText"]={};
|
|---|
| 376 | end
|
|---|
| 377 | local item=ItemTextGetItem();
|
|---|
| 378 | local page=ItemTextGetPage();
|
|---|
| 379 | local text=ItemTextGetText();
|
|---|
| 380 | if type(database["ItemText"][item])~="table" then
|
|---|
| 381 | database["ItemText"][item]={};
|
|---|
| 382 | end
|
|---|
| 383 | if type(database["ItemText"][item][page])~="table" then
|
|---|
| 384 | database["ItemText"][item][page]={};
|
|---|
| 385 | end
|
|---|
| 386 | if type(database["ItemText"][item][page][text])~="table" then
|
|---|
| 387 | database["ItemText"][item][page][text]={};
|
|---|
| 388 | end
|
|---|
| 389 | database["ItemText"][item][page][text]["material"]=ItemTextGetMaterial();
|
|---|
| 390 | end
|
|---|
| 391 |
|
|---|
| 392 | local QuestDetail=function()
|
|---|
| 393 | if not UnitIsPlayer("npc") then
|
|---|
| 394 | local x, y=GetPosition();
|
|---|
| 395 | LastQuest={["name"]=GetTitleText(), ["objective"]=GetObjectiveText(), ["description"]=GetQuestText(), ["material"]=GetQuestBackgroundMaterial(), ["npc"]=UnitName("npc"), ["x"]=x, ["y"]=y};
|
|---|
| 396 | end
|
|---|
| 397 | end
|
|---|
| 398 |
|
|---|
| 399 | local QuestLogUpdate=function()
|
|---|
| 400 | if not EnableQuests then
|
|---|
| 401 | EnableQuests=true;
|
|---|
| 402 | return;
|
|---|
| 403 | end
|
|---|
| 404 | if LasttQuestsCount~=GetNumQuestLogEntries() then
|
|---|
| 405 | local temp=GetQuestLogSelection();
|
|---|
| 406 | for i=1, GetNumQuestLogEntries(), 1 do
|
|---|
| 407 | local name, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete = GetQuestLogTitle(i);
|
|---|
| 408 | if not isHeader then
|
|---|
| 409 | SelectQuestLogEntry(i);
|
|---|
| 410 | local description, objective=GetQuestLogQuestText();
|
|---|
| 411 | if type(description)=="nil" then
|
|---|
| 412 | description="nil";
|
|---|
| 413 | end
|
|---|
| 414 | if type(objective)=="nil" then
|
|---|
| 415 | objective="nil";
|
|---|
| 416 | end
|
|---|
| 417 | if type(database["quests"])~="table" then
|
|---|
| 418 | database["quests"]={};
|
|---|
| 419 | end
|
|---|
| 420 | if type(database["quests"][name])~="table" then
|
|---|
| 421 | database["quests"][name]={};
|
|---|
| 422 | end
|
|---|
| 423 | if type(database["quests"][name][objective])~="table" then
|
|---|
| 424 | database["quests"][name][objective]={};
|
|---|
| 425 | end
|
|---|
| 426 | if type(database["quests"][name][objective][description])~="table" then
|
|---|
| 427 | database["quests"][name][objective][description]={};
|
|---|
| 428 | end
|
|---|
| 429 | if type(database["quests"][name][objective][description][level])~="table" then
|
|---|
| 430 | if LastQuest and name==LastQuest["name"] and objective==LastQuest["objective"] and description==LastQuest["description"] then
|
|---|
| 431 | database["quests"][name][objective][description][level]={["npc"]=LastQuest["npc"], ["x"]=LastQuest["x"], ["y"]=LastQuest["y"]};
|
|---|
| 432 | else
|
|---|
| 433 | database["quests"][name][objective][description][level]={};
|
|---|
| 434 | end
|
|---|
| 435 | end
|
|---|
| 436 | local quest=database["quests"][name][objective][description][level];
|
|---|
| 437 | quest["choice"]={};
|
|---|
| 438 | for j=1, GetNumQuestLogChoices(), 1 do
|
|---|
| 439 | local name, texture, numItems, quality, isUsable = GetQuestLogChoiceInfo(j);
|
|---|
| 440 | local link=GetQuestLogItemLink("choice", j);
|
|---|
| 441 | table.insert(quest["choice"], {["name"]=name, ["texture"]=texture, ["count"]=numItems, ["quality"]=quality, ["link"]=link});
|
|---|
| 442 | end
|
|---|
| 443 | quest["objectives"]={};
|
|---|
| 444 | for j=1, GetNumQuestLeaderBoards(), 1 do
|
|---|
| 445 | local desc, type, done=GetQuestLogLeaderBoard(j);
|
|---|
| 446 | table.insert(quest["objectives"], {["desc"]=desc, ["type"]=type});
|
|---|
| 447 | end
|
|---|
| 448 | quest["RequiredMoney"]=GetQuestLogRequiredMoney();
|
|---|
| 449 | quest["rewards"]={};
|
|---|
| 450 | for j=1, GetNumQuestLogRewards(), 1 do
|
|---|
| 451 | local name, texture, numItems, quality, isUsable = GetQuestLogRewardInfo(j);
|
|---|
| 452 | local link=GetQuestLogItemLink("reward", j);
|
|---|
| 453 | table.insert(quest["rewards"], {["name"]=name, ["texture"]=texture, ["count"]=numItems, ["quality"]=quality, ["link"]=link});
|
|---|
| 454 | end
|
|---|
| 455 | quest["money"]=GetQuestLogRewardMoney();
|
|---|
| 456 | local texture, name, isTradeskillSpell = GetQuestLogRewardSpell();
|
|---|
| 457 | quest["RewardSpell"]={["texture"]=texture, ["name"]=name, ["isTradeskillSpell"]=isTradeskillSpell};
|
|---|
| 458 | local time=GetQuestLogTimeLeft();
|
|---|
| 459 | if time and (not quest["time"] or quest["time"]<time) then
|
|---|
| 460 | quest["time"]=time;
|
|---|
| 461 | end
|
|---|
| 462 | end
|
|---|
| 463 | end
|
|---|
| 464 | SelectQuestLogEntry(temp);
|
|---|
| 465 | LasttQuestsCount=GetNumQuestLogEntries();
|
|---|
| 466 | end
|
|---|
| 467 | end
|
|---|
| 468 |
|
|---|
| 469 | local QuestGreeting=function()
|
|---|
| 470 | if type(database["npc"])~="table" then
|
|---|
| 471 | database["npc"]={};
|
|---|
| 472 | end
|
|---|
| 473 | if type(database["npc"]["greetings"])~="table" then
|
|---|
| 474 | database["npc"]["greetings"]={};
|
|---|
| 475 | end
|
|---|
| 476 | if type(database["npc"]["greetings"][GetGreetingText()])~="number" then
|
|---|
| 477 | database["npc"]["greetings"][GetGreetingText()]=0;
|
|---|
| 478 | end
|
|---|
| 479 | database["npc"]["greetings"][GetGreetingText()]=database["npc"]["greetings"][GetGreetingText()]+1;
|
|---|
| 480 | end
|
|---|
| 481 |
|
|---|
| 482 | local QuestPR=function(ttype, text)
|
|---|
| 483 | local count=0;
|
|---|
| 484 | local a;
|
|---|
| 485 | local name=GetTitleText();
|
|---|
| 486 | for i=1, GetNumQuestLogEntries(), 1 do
|
|---|
| 487 | if GetQuestLogTitle(i)==name then
|
|---|
| 488 | count=count+1;
|
|---|
| 489 | a=i;
|
|---|
| 490 | end
|
|---|
| 491 | end
|
|---|
| 492 | if count==1 then
|
|---|
| 493 | local temp=GetQuestLogSelection();
|
|---|
| 494 | SelectQuestLogEntry(a);
|
|---|
| 495 | local name, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete = GetQuestLogTitle(a);
|
|---|
| 496 | local description, objective=GetQuestLogQuestText();
|
|---|
| 497 | if type(name)=="nil" then name="nil" end
|
|---|
| 498 | if type(objective)=="nil" then objective="nil" end
|
|---|
| 499 | if type(description)=="nil" then description="nil" end
|
|---|
| 500 | if type(level)=="nil" then level="nil" end
|
|---|
| 501 | local quest=database["quests"][name][objective][description][level];
|
|---|
| 502 | quest[ttype]=text;
|
|---|
| 503 | if ttype=="reward" then
|
|---|
| 504 | LastRewardQuest=quest;
|
|---|
| 505 | end
|
|---|
| 506 | SelectQuestLogEntry(temp);
|
|---|
| 507 | end
|
|---|
| 508 | if count==0 then
|
|---|
| 509 | local name=GetTitleText();
|
|---|
| 510 | local text=GetProgressText();
|
|---|
| 511 | if type(database["quests"])~="table" then
|
|---|
| 512 | database["quests"]={};
|
|---|
| 513 | end
|
|---|
| 514 | if type(database["quests"][name])~="table" then
|
|---|
| 515 | database["quests"][name]={};
|
|---|
| 516 | end
|
|---|
| 517 | if type(database["quests"][name][""])~="table" then
|
|---|
| 518 | database["quests"][name][""]={};
|
|---|
| 519 | end
|
|---|
| 520 | if type(database["quests"][name][""][""])~="table" then
|
|---|
| 521 | database["quests"][name][""][""]={};
|
|---|
| 522 | end
|
|---|
| 523 | if type(database["quests"][name][""][""][0])~="table" then
|
|---|
| 524 | database["quests"][name][""][""][0]={};
|
|---|
| 525 | end
|
|---|
| 526 | local quest=database["quests"][name][""][""][0];
|
|---|
| 527 | quest[ttype]=text;
|
|---|
| 528 | if ttype=="progress" then
|
|---|
| 529 | quest["RequiredMoney"]=GetQuestMoneyToGet();
|
|---|
| 530 | quest["required"]={};
|
|---|
| 531 | for j=1, GetNumQuestItems(), 1 do
|
|---|
| 532 | local name, texture, numItems, quality, isUsable = GetQuestItemInfo("required", j);
|
|---|
| 533 | local link=GetQuestItemLink("required", j);
|
|---|
| 534 | table.insert(quest["required"], {["name"]=name, ["texture"]=texture, ["count"]=numItems, ["quality"]=quality, ["link"]=link});
|
|---|
| 535 | end
|
|---|
| 536 | end
|
|---|
| 537 | if ttype=="reward" then
|
|---|
| 538 | quest["choice"]={};
|
|---|
| 539 | for j=1, GetNumQuestChoices(), 1 do
|
|---|
| 540 | local name, texture, numItems, quality, isUsable = GetQuestItemInfo("choice", j);
|
|---|
| 541 | local link=GetQuestItemLink("choice", j);
|
|---|
| 542 | table.insert(quest["choice"], {["name"]=name, ["texture"]=texture, ["count"]=numItems, ["quality"]=quality, ["link"]=link});
|
|---|
| 543 | end
|
|---|
| 544 | quest["rewards"]={};
|
|---|
| 545 | for j=1, GetNumQuestRewards(), 1 do
|
|---|
| 546 | local name, texture, numItems, quality, isUsable = GetQuestItemInfo("reward", j);
|
|---|
| 547 | local link=GetQuestItemLink("reward", j);
|
|---|
| 548 | table.insert(quest["rewards"], {["name"]=name, ["texture"]=texture, ["count"]=numItems, ["quality"]=quality, ["link"]=link});
|
|---|
| 549 | end
|
|---|
| 550 | quest["money"]=GetRewardMoney();
|
|---|
| 551 | local texture, name, isTradeskillSpell = GetRewardSpell();
|
|---|
| 552 | quest["RewardSpell"]={["texture"]=texture, ["name"]=name, ["isTradeskillSpell"]=isTradeskillSpell};
|
|---|
| 553 | LastRewardQuest=quest;
|
|---|
| 554 | end
|
|---|
| 555 | end
|
|---|
| 556 | end
|
|---|
| 557 |
|
|---|
| 558 | ChatMsgSystem=function()
|
|---|
| 559 | if LastRewardQuest then
|
|---|
| 560 | local str=string.gsub(ERR_QUEST_REWARD_EXP_I, "%%d", "%(%%d%+%)");
|
|---|
| 561 | local k=string.gmatch(arg1, str)();
|
|---|
| 562 | if k then
|
|---|
| 563 | if type(LastRewardQuest["XP"])~="table" then
|
|---|
| 564 | LastRewardQuest["XP"]={};
|
|---|
| 565 | end
|
|---|
| 566 | LastRewardQuest["XP"][UnitLevel("player")]=k;
|
|---|
| 567 | end
|
|---|
| 568 | str=string.gsub(ERR_QUEST_COMPLETE_S, "%%s", "%.%*");
|
|---|
| 569 | if string.gmatch(arg1, str) then
|
|---|
| 570 | LastRewardQuest=nil;
|
|---|
| 571 | end
|
|---|
| 572 | end
|
|---|
| 573 | end
|
|---|
| 574 |
|
|---|
| 575 | local SpellCastStart=function()
|
|---|
| 576 | if arg1=="" then
|
|---|
| 577 | if type(database["QuestObjects"])~="table" then
|
|---|
| 578 | database["QuestObjects"]={};
|
|---|
| 579 | end
|
|---|
| 580 | local a={};
|
|---|
| 581 | a["name"]=GameTooltipTextLeft1:GetText();
|
|---|
| 582 | a["zone"]=GetRealZoneText();
|
|---|
| 583 | a["x"], a["y"]=GetPosition();
|
|---|
| 584 | a["loot"]=GetLoot();
|
|---|
| 585 | UntitledSpell={["link"]=a, ["StartTime"]=GetTime()};
|
|---|
| 586 | end
|
|---|
| 587 | if debug>1 then
|
|---|
| 588 | DEFAULT_CHAT_FRAME:AddMessage(GetTime());
|
|---|
| 589 | end
|
|---|
| 590 | end
|
|---|
| 591 |
|
|---|
| 592 | local SpellCastStop=function()
|
|---|
| 593 | if type(UntitledSpell)=="table" and UntitledSpell["StartTime"]+49/10<=GetTime() then
|
|---|
| 594 | table.insert(database["QuestObjects"], UntitledSpell["link"]);
|
|---|
| 595 | UntitledSpell["time"]=GetTime();
|
|---|
| 596 | end
|
|---|
| 597 | if debug>1 then
|
|---|
| 598 | DEFAULT_CHAT_FRAME:AddMessage(GetTime());
|
|---|
| 599 | end
|
|---|
| 600 | end
|
|---|
| 601 |
|
|---|
| 602 | local TradeSkillShow=function()
|
|---|
| 603 | if type(database["TradeSkills"])~="table" then
|
|---|
| 604 | database["TradeSkills"]={};
|
|---|
| 605 | end
|
|---|
| 606 | local SkillLine=GetTradeSkillLine();
|
|---|
| 607 | if type(database["TradeSkills"][SkillLine])~="table" then
|
|---|
| 608 | database["TradeSkills"][SkillLine]={};
|
|---|
| 609 | end
|
|---|
| 610 | for i=1, GetNumTradeSkills(), 1 do
|
|---|
| 611 | local skillName, skillType, numAvailable, isExpanded = GetTradeSkillInfo(i);
|
|---|
| 612 | if SkillType~="header" and SkillLine~=nil and skillName~=nil then
|
|---|
| 613 | if type(database["TradeSkills"][SkillLine][skillName])~="table" then
|
|---|
| 614 | database["TradeSkills"][SkillLine][skillName]={};
|
|---|
| 615 | end
|
|---|
| 616 | local skill=database["TradeSkills"][SkillLine][skillName];
|
|---|
| 617 | skill["SkillType"]=skillType;
|
|---|
| 618 | skill["icon"]=GetTradeSkillIcon(i);
|
|---|
| 619 | skill["link"]=GetTradeSkillItemLink(i);
|
|---|
| 620 | skill["stats"]={GetTradeSkillItemStats(i)};
|
|---|
| 621 | local minMade, maxMade = GetTradeSkillNumMade(i);
|
|---|
| 622 | skill["MinMade"]=minMade;
|
|---|
| 623 | skill["MaxMade"]=maxMade;
|
|---|
| 624 | skill["reagents"]={};
|
|---|
| 625 | for j=1, GetTradeSkillNumReagents(i), 1 do
|
|---|
| 626 | local reagentName, reagentTexture, reagentCount, playerReagentCount = GetTradeSkillReagentInfo(i, j);
|
|---|
| 627 | local a={};
|
|---|
| 628 | a["name"]=reagentName;
|
|---|
| 629 | a["texture"]=reagentTexture;
|
|---|
| 630 | a["count"]=reagentCount;
|
|---|
| 631 | a["link"]=GetTradeSkillReagentItemLink(i, j);
|
|---|
| 632 | table.insert(skill["reagents"], a);
|
|---|
| 633 | end
|
|---|
| 634 | skill["tools"]=GetTradeSkillTools(i);
|
|---|
| 635 | end
|
|---|
| 636 | end
|
|---|
| 637 | end
|
|---|
| 638 |
|
|---|
| 639 | local CraftShow=function()
|
|---|
| 640 | if type(database["craft"])~="table" then
|
|---|
| 641 | database["craft"]={};
|
|---|
| 642 | end
|
|---|
| 643 | local SkillLine=GetCraftSkillLine(1);
|
|---|
| 644 | if type(database["craft"][SkillLine])~="table" then
|
|---|
| 645 | database["craft"][SkillLine]={};
|
|---|
| 646 | end
|
|---|
| 647 | for i=1, GetNumTradeSkills(), 1 do
|
|---|
| 648 | local craftName, craftSubSpellName, craftType, numAvailable, isExpanded = GetTradeSkillInfo(i);
|
|---|
| 649 | if SkillType~="header" and craftName then
|
|---|
| 650 | if type(database["craft"][SkillLine][craftName])~="table" then
|
|---|
| 651 | database["craft"][SkillLine][craftName]={};
|
|---|
| 652 | end
|
|---|
| 653 | local craft=database["craft"][SkillLine][craftName];
|
|---|
| 654 | craft["SubSpellName"]=craftSubSpellName;
|
|---|
| 655 | craft["CraftType"]=craftType;
|
|---|
| 656 | craft["icon"]=GetCraftIcon(i);
|
|---|
| 657 | craft["link"]=GetCraftItemLink(i);
|
|---|
| 658 | craft["SpellFocus"]={GetCraftSpellFocus(i)};
|
|---|
| 659 | craft["reagents"]={};
|
|---|
| 660 | for j=1, GetCraftNumReagents(i), 1 do
|
|---|
| 661 | local reagentName, reagentTexture, reagentCount, playerReagentCount = GetCraftReagentInfo(i, j);
|
|---|
| 662 | local a={};
|
|---|
| 663 | a["name"]=reagentName;
|
|---|
| 664 | a["texture"]=reagentTexture;
|
|---|
| 665 | a["count"]=reagentCount;
|
|---|
| 666 | a["link"]=GetCraftReagentItemLink(i, j);
|
|---|
| 667 | table.insert(craft["reagents"], a);
|
|---|
| 668 | end
|
|---|
| 669 | end
|
|---|
| 670 | end
|
|---|
| 671 | end
|
|---|
| 672 |
|
|---|
| 673 | local UnitIDTable={"target", "mouseover"}
|
|---|
| 674 | for i=1, 4, 1 do
|
|---|
| 675 | table.insert(UnitIDTable, "party"..i);
|
|---|
| 676 | end
|
|---|
| 677 | for i=1, 40, 1 do
|
|---|
| 678 | table.insert(UnitIDTable, "raid"..i);
|
|---|
| 679 | end
|
|---|
| 680 |
|
|---|
| 681 | local SavePlayers=function()
|
|---|
| 682 | if type(database["chars"])~="table" then
|
|---|
| 683 | database["chars"]={};
|
|---|
| 684 | end
|
|---|
| 685 | for i=1, table.getn(UnitIDTable), 1 do
|
|---|
| 686 | if UnitExists(UnitIDTable[i]) and UnitIsPlayer(UnitIDTable[i]) then
|
|---|
| 687 | local name=UnitName(UnitIDTable[i]);
|
|---|
| 688 | if type(database["chars"][name])~="table" then
|
|---|
| 689 | database["chars"][name]={};
|
|---|
| 690 | end
|
|---|
| 691 | database["chars"][name]["class"]=UnitClass(UnitIDTable[i]);
|
|---|
| 692 | database["chars"][name]["race"]=UnitRace(UnitIDTable[i]);
|
|---|
| 693 | database["chars"][name]["sex"]=UnitSex(UnitIDTable[i]);
|
|---|
| 694 | database["chars"][name]["level"]=UnitLevel(UnitIDTable[i]);
|
|---|
| 695 | end
|
|---|
| 696 | end
|
|---|
| 697 | end
|
|---|
| 698 |
|
|---|
| 699 | local FriendListUpdate=function()
|
|---|
| 700 | if type(database["chars"])~="table" then
|
|---|
| 701 | database["chars"]={};
|
|---|
| 702 | end
|
|---|
| 703 | for i=1, GetNumFriends(), 1 do
|
|---|
| 704 | local name, level, class, area, connected, status = GetFriendInfo(i);
|
|---|
| 705 | if connected then
|
|---|
| 706 | if type(database["chars"][name])~="table" then
|
|---|
| 707 | database["chars"][name]={};
|
|---|
| 708 | end
|
|---|
| 709 | database["chars"][name]["class"]=class;
|
|---|
| 710 | end
|
|---|
| 711 | end
|
|---|
| 712 | end
|
|---|
| 713 |
|
|---|
| 714 | local WhoListUpdate=function()
|
|---|
| 715 | if type(database["chars"])~="table" then
|
|---|
| 716 | database["chars"]={};
|
|---|
| 717 | end
|
|---|
| 718 | local totalCount, numWhos = GetNumWhoResults();
|
|---|
| 719 | for i=1, numWhos, 1 do
|
|---|
| 720 | local name, guildname, level, race, class = GetWhoInfo(i);
|
|---|
| 721 | if type(database["chars"][name])~="table" then
|
|---|
| 722 | database["chars"][name]={};
|
|---|
| 723 | end
|
|---|
| 724 | database["chars"][name]["class"]=class;
|
|---|
| 725 | database["chars"][name]["level"]=level;
|
|---|
| 726 | database["chars"][name]["race"]=race;
|
|---|
| 727 | end
|
|---|
| 728 | end
|
|---|
| 729 |
|
|---|
| 730 | local VariablesLoaded=function()
|
|---|
| 731 | EventHandlers["CHAT_MSG_MONSTER_EMOTE"]=ChatMsgMonsterEmote;
|
|---|
| 732 | EventHandlers["CHAT_MSG_MONSTER_SAY"]=ChatMsgMonsterSay;
|
|---|
| 733 | EventHandlers["CHAT_MSG_SYSTEM"]=ChatMsgSystem;
|
|---|
| 734 | EventHandlers["CRAFT_SHOW"]=CraftShow;
|
|---|
| 735 | EventHandlers["GOSSIP_SHOW"]=GossipShow;
|
|---|
| 736 | EventHandlers["GOSSIP_CLOSED"]=GossipClosed;
|
|---|
| 737 | EventHandlers["ITEM_TEXT_READY"]=ItemText;
|
|---|
| 738 | EventHandlers["LOOT_OPENED"]=LootOpened;
|
|---|
| 739 | EventHandlers["MERCHANT_SHOW"]=MerchantShow;
|
|---|
| 740 | EventHandlers["PLAYER_TARGET_CHANGED"]=TargetChanged;
|
|---|
| 741 | EventHandlers["QUEST_COMPLETE"]=function() QuestPR("reward", GetRewardText()); end
|
|---|
| 742 | EventHandlers["QUEST_DETAIL"]=QuestDetail;
|
|---|
| 743 | EventHandlers["QUEST_GREETING"]=QuestGreeting;
|
|---|
| 744 | EventHandlers["QUEST_PROGRESS"]=function() QuestPR("progress", GetProgressText()); end
|
|---|
| 745 | EventHandlers["QUEST_LOG_UPDATE"]=QuestLogUpdate;
|
|---|
| 746 | EventHandlers["SPELLCAST_START"]=SpellCastStart;
|
|---|
| 747 | EventHandlers["SPELLCAST_STOP"]=SpellCastStop;
|
|---|
| 748 | EventHandlers["TRADE_SKILL_SHOW"]=TradeSkillShow;
|
|---|
| 749 | EventHandlers["UNIT_COMBAT"]=UnitCombat;
|
|---|
| 750 | EventHandlers["UNIT_HEALTH"]=UnitHealth;
|
|---|
| 751 | EventHandlers["ZONE_CHANGED_NEW_AREA"]=SetMapToCurrentZone;
|
|---|
| 752 | EventHandlers["UPDATE_MOUSEOVER_UNIT"]=SavePlayers;
|
|---|
| 753 | EventHandlers["PLAYER_TARGET_CHANGED"]=SavePlayers;
|
|---|
| 754 | EventHandlers["PARTY_MEMBERS_CHANGED"]=SavePlayers;
|
|---|
| 755 | EventHandlers["FRIENDLIST_UPDATE"]=FriendListUpdate;
|
|---|
| 756 | EventHandlers["WHO_LIST_UPDATE"]=WhoListUpdate;
|
|---|
| 757 |
|
|---|
| 758 | if type(ProffBot)~="table" then
|
|---|
| 759 | ProffBot={};
|
|---|
| 760 | end
|
|---|
| 761 | if ProffBot["version"]~=ProffBotVersion then
|
|---|
| 762 | ProffBot={["version"]=ProffBotVersion};
|
|---|
| 763 | end
|
|---|
| 764 | local locale=GetLocale();
|
|---|
| 765 | if type(ProffBot[locale])~="table" then
|
|---|
| 766 | ProffBot[locale]={};
|
|---|
| 767 | end
|
|---|
| 768 | local RealmList=GetCVar("realmList");
|
|---|
| 769 | if type(ProffBot[locale][RealmList])~="table" then
|
|---|
| 770 | ProffBot[locale][RealmList]={};
|
|---|
| 771 | end
|
|---|
| 772 | local RealmName=GetCVar("realmName");
|
|---|
| 773 | if type(ProffBot[locale][RealmList][RealmName])~="table" then
|
|---|
| 774 | ProffBot[locale][RealmList][RealmName]={};
|
|---|
| 775 | end
|
|---|
| 776 | local name=UnitName("player");
|
|---|
| 777 | local class=UnitClass("player");
|
|---|
| 778 | local race=UnitRace("player");
|
|---|
| 779 | local sex;
|
|---|
| 780 | if(UnitSex("player")==2) then
|
|---|
| 781 | sex="Male";
|
|---|
| 782 | else
|
|---|
| 783 | sex="Female";
|
|---|
| 784 | end
|
|---|
| 785 | local userdata=name..' '..class..' '..race..' '..sex;
|
|---|
| 786 | if type(ProffBot[locale][RealmList][RealmName][userdata])~="table" then
|
|---|
| 787 | ProffBot[locale][RealmList][RealmName][userdata]={ };
|
|---|
| 788 | end
|
|---|
| 789 | database=ProffBot[locale][RealmList][RealmName][userdata];
|
|---|
| 790 |
|
|---|
| 791 | OldGossipTitleButton_OnClick=GossipTitleButton_OnClick;
|
|---|
| 792 | GossipTitleButton_OnClick=function()
|
|---|
| 793 | local a={GetGossipOptions()};
|
|---|
| 794 | local b=string.sub(this:GetName(), 18);
|
|---|
| 795 | if GetGossipActiveQuests() then
|
|---|
| 796 | b=b-table.getn({GetGossipActiveQuests()})/2-1;
|
|---|
| 797 | end
|
|---|
| 798 | if GetGossipAvailableQuests() then
|
|---|
| 799 | b=b-table.getn({GetGossipAvailableQuests()})/2-1;
|
|---|
| 800 | end
|
|---|
| 801 | a=a[b*2-1];
|
|---|
| 802 | if type(a)=="nil" then
|
|---|
| 803 | a="nil";
|
|---|
| 804 | end
|
|---|
| 805 | if LastGossip=="" then
|
|---|
| 806 | LastGossip=a
|
|---|
| 807 | else
|
|---|
| 808 | LastGossip=LastGossip.." "..a;
|
|---|
| 809 | end
|
|---|
| 810 | OldGossipTitleButton_OnClick();
|
|---|
| 811 | end
|
|---|
| 812 | OldOpenMail_Update=OpenMail_Update;
|
|---|
| 813 | OpenMail_Update=function()
|
|---|
| 814 | if debug>0 then
|
|---|
| 815 | DEFAULT_CHAT_FRAME:AddMessage("MailUpdate");
|
|---|
| 816 | end
|
|---|
| 817 | if InboxFrame.openMailID then
|
|---|
| 818 | local packageIcon, stationeryIcon, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead, wasReturned, textCreated, canReply=GetInboxHeaderInfo(InboxFrame.openMailID);
|
|---|
| 819 | OldOpenMail_Update();
|
|---|
| 820 | if LastMail["id"]==InboxFrame.openMailID then
|
|---|
| 821 | LastMail["count"]=LastMail["count"]+1;
|
|---|
| 822 | if not canReply then
|
|---|
| 823 | local mail={};
|
|---|
| 824 | mail["PackageIcon"]=packageIcon;
|
|---|
| 825 | mail["StationeryIcon"]=stationeryIcon;
|
|---|
| 826 | mail["sender"]=sender;
|
|---|
| 827 | mail["subject"]=subject;
|
|---|
| 828 | mail["money"]=money;
|
|---|
| 829 | mail["CODAmount"]=CODAmount;
|
|---|
| 830 | mail["DaysLeft"]=daysLeft;
|
|---|
| 831 | mail["HasItem"]=hasItem;
|
|---|
| 832 | mail["WasRead"]=wasRead;
|
|---|
| 833 | mail["WasReturned"]=wasReturned;
|
|---|
| 834 | mail["TextCreated"]=textCreated;
|
|---|
| 835 | mail["CanReply"]=canReply;
|
|---|
| 836 | local bodyText, texture, isTakeable, isInvoice=GetInboxText(InboxFrame.openMailID);
|
|---|
| 837 | mail["BodyText"]=bodyText;
|
|---|
| 838 | mail["texture"]=texture;
|
|---|
| 839 | mail["isTakeable"]=isTakeable;
|
|---|
| 840 | mail["isInvoice"]=isInvoice;
|
|---|
| 841 | local invoiceType, itemName, playerName, bid, buyout, deposit, consignment=GetInboxInvoiceInfo(InboxFrame.openMailID);
|
|---|
| 842 | mail["InvoiceType"]=invoiceType;
|
|---|
| 843 | mail["ItemName"]=itemName;
|
|---|
| 844 | mail["PlayerName"]=playerName;
|
|---|
| 845 | mail["bid"]=bid;
|
|---|
| 846 | mail["buyout"]=buyout;
|
|---|
| 847 | mail["deposit"]=deposit;
|
|---|
| 848 | mail["consignment"]=consignment;
|
|---|
| 849 | if type(database["mail"])~="table" then
|
|---|
| 850 | database["mail"]={};
|
|---|
| 851 | end
|
|---|
| 852 | if LastMail["count"]>2 then
|
|---|
| 853 | database["mail"][table.getn(database["mail"])]=mail;
|
|---|
| 854 | else
|
|---|
| 855 | table.insert(database["mail"], mail);
|
|---|
| 856 | end
|
|---|
| 857 | end
|
|---|
| 858 | else
|
|---|
| 859 | LastMail["id"]=InboxFrame.openMailID;
|
|---|
| 860 | LastMail["count"]=1;
|
|---|
| 861 | end
|
|---|
| 862 | else
|
|---|
| 863 | LastMail={};
|
|---|
| 864 | OldOpenMail_Update();
|
|---|
| 865 | end
|
|---|
| 866 | end
|
|---|
| 867 | end
|
|---|
| 868 |
|
|---|
| 869 | ProffBot_OnLoad=function()
|
|---|
| 870 | this:RegisterEvent("AUCTION_ITEM_LIST_UPDATE");
|
|---|
| 871 | this:RegisterEvent("CHAT_MSG_SPELL_SELF_BUFF");
|
|---|
| 872 | this:RegisterEvent("CHAT_MSG_MONSTER_EMOTE");
|
|---|
| 873 | this:RegisterEvent("CHAT_MSG_MONSTER_SAY");
|
|---|
| 874 | this:RegisterEvent("CHAT_MSG_SYSTEM");
|
|---|
| 875 | this:RegisterEvent("GOSSIP_CLOSED");
|
|---|
| 876 | this:RegisterEvent("GOSSIP_SHOW");
|
|---|
| 877 | this:RegisterEvent("LOOT_OPENED");
|
|---|
| 878 | this:RegisterEvent("ITEM_TEXT_READY");
|
|---|
| 879 | this:RegisterEvent("MERCHANT_SHOW");
|
|---|
| 880 | this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
|---|
| 881 | this:RegisterEvent("UNIT_COMBAT");
|
|---|
| 882 | this:RegisterEvent("UNIT_HEALTH");
|
|---|
| 883 | this:RegisterEvent("VARIABLES_LOADED");
|
|---|
| 884 | this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
|
|---|
| 885 |
|
|---|
| 886 | this:RegisterEvent("QUEST_COMPLETE");
|
|---|
| 887 | this:RegisterEvent("QUEST_DETAIL");
|
|---|
| 888 | this:RegisterEvent("QUEST_GREETING");
|
|---|
| 889 | this:RegisterEvent("QUEST_LOG_UPDATE");
|
|---|
| 890 | this:RegisterEvent("QUEST_PROGRESS");
|
|---|
| 891 | this:RegisterEvent("PLAYER_XP_UPDATE");
|
|---|
| 892 | this:RegisterEvent("SPELLCAST_START");
|
|---|
| 893 | this:RegisterEvent("SPELLCAST_STOP");
|
|---|
| 894 | this:RegisterEvent("TRADE_SKILL_SHOW");
|
|---|
| 895 | this:RegisterEvent("CRAFT_SHOW");
|
|---|
| 896 | this:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
|
|---|
| 897 | this:RegisterEvent("PLAYER_TARGET_CHANGED");
|
|---|
| 898 | this:RegisterEvent("PARTY_MEMBERS_CHANGED");
|
|---|
| 899 | this:RegisterEvent("WHO_LIST_UPDATE");
|
|---|
| 900 | this:RegisterEvent("FRIENDLIST_UPDATE");
|
|---|
| 901 |
|
|---|
| 902 |
|
|---|
| 903 |
|
|---|
| 904 |
|
|---|
| 905 |
|
|---|
| 906 | EventHandlers["VARIABLES_LOADED"]=VariablesLoaded;
|
|---|
| 907 | end
|
|---|
| 908 |
|
|---|
| 909 | ProffBot_OnEvent=function(event)
|
|---|
| 910 | if debug>1 then
|
|---|
| 911 | local str=event;
|
|---|
| 912 | if arg1 then str=str.." arg1="..arg1 end;
|
|---|
| 913 | if arg2 then str=str.." arg2="..arg2 end;
|
|---|
| 914 | if arg3 then str=str.." arg3="..arg3 end;
|
|---|
| 915 | if arg4 then str=str.." arg4="..arg4 end;
|
|---|
| 916 | if arg5 then str=str.." arg5="..arg5 end;
|
|---|
| 917 | DEFAULT_CHAT_FRAME:AddMessage(str);
|
|---|
| 918 | end
|
|---|
| 919 | if type(EventHandlers[event])=="function" then
|
|---|
| 920 | EventHandlers[event]();
|
|---|
| 921 | end
|
|---|
| 922 | end
|
|---|
| 923 |
|
|---|
| 924 | OpenLockSelfMask=string.gsub(OPEN_LOCK_SELF, "%%s", "(.*)");
|
|---|