Mercurial > wow > wowdb-profiler
comparison Main.lua @ 40:4ae5cde37458
Detect drunkenness via chat messages. When drunk, do not record anything about NPCs, as the character's perception is altered.
| author | James D. Callahan III <jcallahan@curse.com> |
|---|---|
| date | Tue, 12 Jun 2012 13:50:43 -0500 |
| parents | 938abe259516 |
| children | 7db268f39c50 |
comparison
equal
deleted
inserted
replaced
| 39:938abe259516 | 40:4ae5cde37458 |
|---|---|
| 36 } | 36 } |
| 37 } | 37 } |
| 38 | 38 |
| 39 | 39 |
| 40 local EVENT_MAPPING = { | 40 local EVENT_MAPPING = { |
| 41 CHAT_MSG_SYSTEM = true, | |
| 41 COMBAT_LOG_EVENT_UNFILTERED = true, | 42 COMBAT_LOG_EVENT_UNFILTERED = true, |
| 42 COMBAT_TEXT_UPDATE = true, | 43 COMBAT_TEXT_UPDATE = true, |
| 43 LOOT_OPENED = true, | 44 LOOT_OPENED = true, |
| 44 MERCHANT_SHOW = "UpdateMerchantItems", | 45 MERCHANT_SHOW = "UpdateMerchantItems", |
| 45 -- MERCHANT_UPDATE = "UpdateMerchantItems", | 46 -- MERCHANT_UPDATE = "UpdateMerchantItems", |
| 70 ----------------------------------------------------------------------- | 71 ----------------------------------------------------------------------- |
| 71 local db | 72 local db |
| 72 local durability_timer_handle | 73 local durability_timer_handle |
| 73 local target_location_timer_handle | 74 local target_location_timer_handle |
| 74 local action_data = {} | 75 local action_data = {} |
| 76 local currently_drunk | |
| 75 local faction_standings = {} | 77 local faction_standings = {} |
| 76 | 78 |
| 77 | 79 |
| 78 ----------------------------------------------------------------------- | 80 ----------------------------------------------------------------------- |
| 79 -- Helper Functions. | 81 -- Helper Functions. |
| 438 end | 440 end |
| 439 end | 441 end |
| 440 | 442 |
| 441 | 443 |
| 442 function WDP:UpdateTargetLocation() | 444 function WDP:UpdateTargetLocation() |
| 443 if not _G.UnitExists("target") or _G.UnitPlayerControlled("target") or (_G.UnitIsTapped("target") and not _G.UnitIsDead("target")) then | 445 if currently_drunk or not _G.UnitExists("target") or _G.UnitPlayerControlled("target") or (_G.UnitIsTapped("target") and not _G.UnitIsDead("target")) then |
| 444 return | 446 return |
| 445 end | 447 end |
| 446 | 448 |
| 447 for index = 1, 4 do | 449 for index = 1, 4 do |
| 448 if not _G.CheckInteractDistance("target", index) then | 450 if not _G.CheckInteractDistance("target", index) then |
| 449 return | 451 return |
| 450 end | 452 end |
| 451 end | 453 end |
| 452 local target_guid = _G.UnitGUID("target") | 454 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target")) |
| 453 local unit_type, unit_idnum = ParseGUID(target_guid) | 455 |
| 454 | 456 if not unit_idnum or unit_type ~= private.UNIT_TYPES.NPC then |
| 455 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | |
| 456 return | 457 return |
| 457 end | 458 end |
| 458 UpdateNPCLocation(unit_idnum) | 459 UpdateNPCLocation(unit_idnum) |
| 459 end | 460 end |
| 460 | 461 |
| 461 | 462 |
| 462 ----------------------------------------------------------------------- | 463 ----------------------------------------------------------------------- |
| 463 -- Event handlers. | 464 -- Event handlers. |
| 464 ----------------------------------------------------------------------- | 465 ----------------------------------------------------------------------- |
| 466 do | |
| 467 local SOBER_MATCH = _G.DRUNK_MESSAGE_ITEM_SELF1:gsub("%%s", ".+") | |
| 468 | |
| 469 local DRUNK_COMPARES = { | |
| 470 _G.DRUNK_MESSAGE_SELF2, | |
| 471 _G.DRUNK_MESSAGE_SELF3, | |
| 472 _G.DRUNK_MESSAGE_SELF4, | |
| 473 } | |
| 474 | |
| 475 local DRUNK_MATCHES = { | |
| 476 _G.DRUNK_MESSAGE_SELF2:gsub("%%s", ".+"), | |
| 477 _G.DRUNK_MESSAGE_SELF3:gsub("%%s", ".+"), | |
| 478 _G.DRUNK_MESSAGE_SELF4:gsub("%%s", ".+"), | |
| 479 } | |
| 480 | |
| 481 function WDP:CHAT_MSG_SYSTEM(event, message) | |
| 482 if currently_drunk then | |
| 483 if message == _G.DRUNK_MESSAGE_SELF1 or message:match(SOBER_MATCH) then | |
| 484 currently_drunk = nil | |
| 485 end | |
| 486 return | |
| 487 end | |
| 488 | |
| 489 for index = 1, #DRUNK_MATCHES do | |
| 490 if message == DRUNK_COMPARES[index] or message:match(DRUNK_MATCHES[index]) then | |
| 491 currently_drunk = true | |
| 492 break | |
| 493 end | |
| 494 end | |
| 495 end | |
| 496 end | |
| 497 | |
| 498 -- do-block | |
| 499 | |
| 465 do | 500 do |
| 466 local EXTRACT_GAS_SPELL_ID = 30427 | 501 local EXTRACT_GAS_SPELL_ID = 30427 |
| 467 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) | 502 local FLAGS_NPC = bit.bor(_G.COMBATLOG_OBJECT_TYPE_GUARDIAN, _G.COMBATLOG_OBJECT_CONTROL_NPC) |
| 468 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) | 503 local FLAGS_NPC_CONTROL = bit.bor(_G.COMBATLOG_OBJECT_AFFILIATION_OUTSIDER, _G.COMBATLOG_OBJECT_CONTROL_NPC) |
| 469 | 504 |
| 537 reputation_data[("%s:%s"):format(faction_name, faction_standings[faction_name])] = amount | 572 reputation_data[("%s:%s"):format(faction_name, faction_standings[faction_name])] = amount |
| 538 end | 573 end |
| 539 | 574 |
| 540 | 575 |
| 541 do | 576 do |
| 542 local re_gold = _G.GOLD_AMOUNT:gsub("%%d", "(%%d+)") | 577 local RE_GOLD = _G.GOLD_AMOUNT:gsub("%%d", "(%%d+)") |
| 543 local re_silver = _G.SILVER_AMOUNT:gsub("%%d", "(%%d+)") | 578 local RE_SILVER = _G.SILVER_AMOUNT:gsub("%%d", "(%%d+)") |
| 544 local re_copper = _G.COPPER_AMOUNT:gsub("%%d", "(%%d+)") | 579 local RE_COPPER = _G.COPPER_AMOUNT:gsub("%%d", "(%%d+)") |
| 545 | 580 |
| 546 | 581 |
| 547 local function _moneyMatch(money, re) | 582 local function _moneyMatch(money, re) |
| 548 return money:match(re) or 0 | 583 return money:match(re) or 0 |
| 549 end | 584 end |
| 551 | 586 |
| 552 local function _toCopper(money) | 587 local function _toCopper(money) |
| 553 if not money then | 588 if not money then |
| 554 return 0 | 589 return 0 |
| 555 end | 590 end |
| 556 | 591 return _moneyMatch(money, RE_GOLD) * 10000 + _moneyMatch(money, RE_SILVER) * 100 + _moneyMatch(money, RE_COPPER) |
| 557 return _moneyMatch(money, re_gold) * 10000 + _moneyMatch(money, re_silver) * 100 + _moneyMatch(money, re_copper) | |
| 558 end | 592 end |
| 559 | 593 |
| 560 | 594 |
| 561 local LOOT_VERIFY_FUNCS = { | 595 local LOOT_VERIFY_FUNCS = { |
| 562 [AF.ITEM] = function() | 596 [AF.ITEM] = function() |
| 837 ["6"] = "RUNIC_POWER", | 871 ["6"] = "RUNIC_POWER", |
| 838 } | 872 } |
| 839 | 873 |
| 840 | 874 |
| 841 function WDP:PLAYER_TARGET_CHANGED() | 875 function WDP:PLAYER_TARGET_CHANGED() |
| 842 if not _G.UnitExists("target") or _G.UnitPlayerControlled("target") then | 876 if not _G.UnitExists("target") or _G.UnitPlayerControlled("target") or currently_drunk then |
| 843 return | 877 return |
| 844 end | 878 end |
| 845 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target")) | 879 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target")) |
| 846 | 880 |
| 847 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then | 881 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then |
