comparison Main.lua @ 44:2a9bb8175562

Detect reputation modifier buffs and remove their effects before storing gains.
author James D. Callahan III <jcallahan@curse.com>
date Thu, 14 Jun 2012 16:41:01 -0500
parents 15f2e3d8463b
children 5d5a490724ec
comparison
equal deleted inserted replaced
43:15f2e3d8463b 44:2a9bb8175562
553 combat_log_func(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, ...) 553 combat_log_func(sub_event, source_guid, source_name, source_flags, dest_guid, dest_name, dest_flags, ...)
554 end 554 end
555 end -- do-block 555 end -- do-block
556 556
557 557
558 function WDP:COMBAT_TEXT_UPDATE(event, message_type, faction_name, amount) 558 do
559 if message_type ~= "FACTION" then 559 local DIPLOMACY_SPELL_ID = 20599
560 return 560 local MR_POP_RANK1_SPELL_ID = 78634
561 end 561 local MR_POP_RANK2_SPELL_ID = 78635
562 local npc = NPCEntry(action_data.identifier) 562
563 563 local REP_BUFFS = {
564 if not npc then 564 [_G.GetSpellInfo(30754)] = "CENARION_FAVOR",
565 return 565 [_G.GetSpellInfo(24705)] = "GRIM_VISAGE",
566 end 566 [_G.GetSpellInfo(32098)] = "HONOR_HOLD_FAVOR",
567 local encounter_data = npc.encounter_data[InstanceDifficultyToken()].stats 567 [_G.GetSpellInfo(39913)] = "NAZGRELS_FERVOR",
568 local reputation_data = encounter_data[action_data.npc_level].reputations 568 [_G.GetSpellInfo(39953)] = "SONG_OF_BATTLE",
569 569 [_G.GetSpellInfo(61849)] = "SPIRIT_OF_SHARING",
570 if not reputation_data then 570 [_G.GetSpellInfo(32096)] = "THRALLMARS_FAVOR",
571 reputation_data = {} 571 [_G.GetSpellInfo(39911)] = "TROLLBANES_COMMAND",
572 encounter_data[action_data.npc_level].reputations = reputation_data 572 [_G.GetSpellInfo(95987)] = "UNBURDENED",
573 end 573 [_G.GetSpellInfo(100951)] = "WOW_ANNIVERSARY",
574 UpdateFactionData() 574 }
575 reputation_data[("%s:%s"):format(faction_name, faction_standings[faction_name])] = amount 575
576 end 576
577 local FACTION_NAMES = {
578 CENARION_CIRCLE = _G.GetFactionInfoByID(609),
579 HONOR_HOLD = _G.GetFactionInfoByID(946),
580 THE_SHATAR = _G.GetFactionInfoByID(935),
581 THRALLMAR = _G.GetFactionInfoByID(947),
582 }
583
584
585 local MODIFIERS = {
586 CENARION_FAVOR = {
587 faction = FACTION_NAMES.CENARION_CIRCLE,
588 modifier = 0.25,
589 },
590 GRIM_VISAGE = {
591 modifier = 0.1,
592 },
593 HONOR_HOLD_FAVOR = {
594 faction = FACTION_NAMES.HONOR_HOLD,
595 modifier = 0.25,
596 },
597 NAZGRELS_FERVOR = {
598 faction = FACTION_NAMES.THRALLMAR,
599 modifier = 0.1,
600 },
601 SONG_OF_BATTLE = {
602 faction = FACTION_NAMES.THE_SHATAR,
603 modifier = 0.1,
604 },
605 SPIRIT_OF_SHARING = {
606 modifier = 0.1,
607 },
608 THRALLMARS_FAVOR = {
609 faction = FACTION_NAMES.THRALLMAR,
610 modifier = 0.25,
611 },
612 TROLLBANES_COMMAND = {
613 faction = FACTION_NAMES.HONOR_HOLD,
614 modifier = 0.1,
615 },
616 UNBURDENED = {
617 modifier = 0.1,
618 },
619 WOW_ANNIVERSARY = {
620 modifier = 0.08,
621 }
622 }
623
624
625 function WDP:COMBAT_TEXT_UPDATE(event, message_type, faction_name, amount)
626 if message_type ~= "FACTION" then
627 return
628 end
629 UpdateFactionData()
630
631 local npc = NPCEntry(action_data.identifier)
632 if not npc then
633 return
634 end
635 local encounter_data = npc.encounter_data[InstanceDifficultyToken()].stats
636 local reputation_data = encounter_data[action_data.npc_level].reputations
637
638 if not reputation_data then
639 reputation_data = {}
640 encounter_data[action_data.npc_level].reputations = reputation_data
641 end
642 local modifier = 1
643
644 if _G.IsSpellKnown(DIPLOMACY_SPELL_ID) then
645 modifier = modifier + 0.1
646 end
647
648 if _G.IsSpellKnown(MR_POP_RANK2_SPELL_ID) then
649 modifier = modifier + 0.1
650 elseif _G.IsSpellKnown(MR_POP_RANK1_SPELL_ID) then
651 modifier = modifier + 0.05
652 end
653
654 for buff_name, buff_label in pairs(REP_BUFFS) do
655 if _G.UnitBuff("player", buff_name) then
656 local modded_faction = MODIFIERS[buff_label].faction
657
658 if not modded_faction or faction_name == modded_faction then
659 modifier = modifier + MODIFIERS[buff_label].modifier
660 end
661 end
662 end
663 reputation_data[("%s:%s"):format(faction_name, faction_standings[faction_name])] = math.floor(amount / modifier)
664 end
665 end -- do-block
577 666
578 667
579 function WDP:ITEM_TEXT_BEGIN() 668 function WDP:ITEM_TEXT_BEGIN()
580 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("npc")) 669 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("npc"))
581 670
768 update_func() 857 update_func()
769 end 858 end
770 end -- do-block 859 end -- do-block
771 860
772 861
773 local POINT_MATCH_PATTERNS = { 862 do
774 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING:gsub("%%d", "(%%d+)")), -- May no longer be necessary 863 local POINT_MATCH_PATTERNS = {
775 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_3V3:gsub("%%d", "(%%d+)")), -- May no longer be necessary 864 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING:gsub("%%d", "(%%d+)")), -- May no longer be necessary
776 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_5V5:gsub("%%d", "(%%d+)")), -- May no longer be necessary 865 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_3V3:gsub("%%d", "(%%d+)")), -- May no longer be necessary
777 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_BG:gsub("%%d", "(%%d+)")), 866 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_5V5:gsub("%%d", "(%%d+)")), -- May no longer be necessary
778 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_3V3_BG:gsub("%%d", "(%%d+)")), 867 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_BG:gsub("%%d", "(%%d+)")),
779 } 868 ("^%s$"):format(_G.ITEM_REQ_ARENA_RATING_3V3_BG:gsub("%%d", "(%%d+)")),
780 869 }
781 function WDP:UpdateMerchantItems(event) 870
782 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target")) 871 function WDP:UpdateMerchantItems(event)
783 872 local unit_type, unit_idnum = ParseGUID(_G.UnitGUID("target"))
784 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then 873
785 return 874 if unit_type ~= private.UNIT_TYPES.NPC or not unit_idnum then
786 end 875 return
787 local _, merchant_standing = UnitFactionStanding("target") 876 end
788 local merchant = NPCEntry(unit_idnum) 877 local _, merchant_standing = UnitFactionStanding("target")
789 merchant.sells = merchant.sells or {} 878 local merchant = NPCEntry(unit_idnum)
790 879 merchant.sells = merchant.sells or {}
791 local num_items = _G.GetMerchantNumItems() 880
792 881 local num_items = _G.GetMerchantNumItems()
793 for item_index = 1, num_items do 882
794 local _, _, copper_price, stack_size, num_available, _, extended_cost = _G.GetMerchantItemInfo(item_index) 883 for item_index = 1, num_items do
795 local item_id = ItemLinkToID(_G.GetMerchantItemLink(item_index)) 884 local _, _, copper_price, stack_size, num_available, _, extended_cost = _G.GetMerchantItemInfo(item_index)
796 885 local item_id = ItemLinkToID(_G.GetMerchantItemLink(item_index))
797 if item_id and item_id > 0 then 886
798 local price_string = ActualCopperCost(copper_price, merchant_standing) 887 if item_id and item_id > 0 then
799 888 local price_string = ActualCopperCost(copper_price, merchant_standing)
800 if extended_cost then 889
801 local bg_points = 0 890 if extended_cost then
802 local personal_points = 0 891 local bg_points = 0
803 892 local personal_points = 0
804 DatamineTT:ClearLines() 893
805 DatamineTT:SetMerchantItem(item_index) 894 DatamineTT:ClearLines()
806 895 DatamineTT:SetMerchantItem(item_index)
807 for line_index = 1, DatamineTT:NumLines() do 896
808 local current_line = _G["WDPDatamineTTTextLeft" .. line_index] 897 for line_index = 1, DatamineTT:NumLines() do
809 898 local current_line = _G["WDPDatamineTTTextLeft" .. line_index]
810 if not current_line then 899
811 break 900 if not current_line then
812 end 901 break
813 local breakout 902 end
814 903 local breakout
815 for match_index = 1, #POINT_MATCH_PATTERNS do 904
816 local match1, match2 = current_line:GetText():match(POINT_MATCH_PATTERNS[match_index]) 905 for match_index = 1, #POINT_MATCH_PATTERNS do
817 personal_points = personal_points + (match1 or 0) 906 local match1, match2 = current_line:GetText():match(POINT_MATCH_PATTERNS[match_index])
818 bg_points = bg_points + (match2 or 0) 907 personal_points = personal_points + (match1 or 0)
819 908 bg_points = bg_points + (match2 or 0)
820 if match1 or match2 then 909
821 breakout = true 910 if match1 or match2 then
911 breakout = true
912 break
913 end
914 end
915
916 if breakout then
822 break 917 break
823 end 918 end
824 end 919 end
825 920 local currency_list = {}
826 if breakout then 921 local item_count = _G.GetMerchantItemCostInfo(item_index)
827 break 922 price_string = ("%s:%s:%s"):format(price_string, bg_points, personal_points)
923
924 for cost_index = 1, item_count do
925 local icon_texture, amount_required, currency_link = _G.GetMerchantItemCostItem(item_index, cost_index)
926 local currency_id = currency_link and ItemLinkToID(currency_link) or nil
927
928 if (not currency_id or currency_id < 1) and icon_texture then
929 currency_id = icon_texture:match("[^\\]+$"):lower()
930 end
931
932 if currency_id then
933 currency_list[#currency_list + 1] = ("(%s:%s)"):format(amount_required, currency_id)
934 end
935 end
936
937 for currency_index = 1, #currency_list do
938 price_string = ("%s:%s"):format(price_string, currency_list[currency_index])
828 end 939 end
829 end 940 end
830 local currency_list = {} 941 merchant.sells[("%s:%s:[%s]"):format(item_id, stack_size, price_string)] = num_available
831 local item_count = _G.GetMerchantItemCostInfo(item_index) 942 end
832 price_string = ("%s:%s:%s"):format(price_string, bg_points, personal_points) 943 end
833 944
834 for cost_index = 1, item_count do 945 if _G.CanMerchantRepair() then
835 local icon_texture, amount_required, currency_link = _G.GetMerchantItemCostItem(item_index, cost_index) 946 merchant.can_repair = true
836 local currency_id = currency_link and ItemLinkToID(currency_link) or nil 947 end
837 948 end
838 if (not currency_id or currency_id < 1) and icon_texture then 949 end -- do-block
839 currency_id = icon_texture:match("[^\\]+$"):lower()
840 end
841
842 if currency_id then
843 currency_list[#currency_list + 1] = ("(%s:%s)"):format(amount_required, currency_id)
844 end
845 end
846
847 for currency_index = 1, #currency_list do
848 price_string = ("%s:%s"):format(price_string, currency_list[currency_index])
849 end
850 end
851 merchant.sells[("%s:%s:[%s]"):format(item_id, stack_size, price_string)] = num_available
852 end
853 end
854
855 if _G.CanMerchantRepair() then
856 merchant.can_repair = true
857 end
858 end
859
860 950
861 function WDP:PET_BAR_UPDATE() 951 function WDP:PET_BAR_UPDATE()
862 if not action_data.label or not action_data.label == "mind_control" then 952 if not action_data.label or not action_data.label == "mind_control" then
863 return 953 return
864 end 954 end