# HG changeset patch # User MMOSimca # Date 1411419608 14400 # Node ID d708222fe96b9dcfc7f6f6a4c2068288d2be2098 # Parent e4abf4f04db30c90ea6235c89e0eb0a70696b5a4 Added a large number of reputation modifiers, enabled examining items on drop, and disabled bonus ID checking from inventory processing. diff -r e4abf4f04db3 -r d708222fe96b Constants.lua --- a/Constants.lua Thu Sep 18 04:38:51 2014 -0400 +++ b/Constants.lua Mon Sep 22 17:00:08 2014 -0400 @@ -15,45 +15,182 @@ ----------------------------------------------------------------------- -- Game Data Constants. ----------------------------------------------------------------------- -private.FACTION_NAMES = { -- Only used for private.REP_BUFFS - CENARION_CIRCLE = _G.GetFactionInfoByID(609), - HONOR_HOLD = _G.GetFactionInfoByID(946), - THE_SHATAR = _G.GetFactionInfoByID(935), - THRALLMAR = _G.GetFactionInfoByID(947), +private.FACTION_DATA = { + -- Used only for private.REP_BUFFS + ARGENT_CRUSADE = { 1106, _G.GetFactionInfoByID(1106) }, + BILGEWATER_CARTEL = { 1133, _G.GetFactionInfoByID(1133) }, + CENARION_CIRCLE = { 609, _G.GetFactionInfoByID(609) }, + DARKSPEAR = { 530, _G.GetFactionInfoByID(530) }, + DARNASSUS = { 69, _G.GetFactionInfoByID(69) }, + DRAGONMAW_CLAN = { 1172, _G.GetFactionInfoByID(1172) }, + EARTHEN_RING = { 1135, _G.GetFactionInfoByID(1135) }, + EBON_BLADE = { 1098, _G.GetFactionInfoByID(1098) }, + EXODAR = { 930, _G.GetFactionInfoByID(930) }, + GILNEAS = { 1134, _G.GetFactionInfoByID(1134) }, + GNOMEREGAN = { 54, _G.GetFactionInfoByID(54) }, + GUARDIANS_OF_HYJAL = { 1158, _G.GetFactionInfoByID(1158) }, + GUILD = { 1168, _G.GetFactionInfoByID(1168) }, + HONOR_HOLD = { 946, _G.GetFactionInfoByID(946) }, + HUOJIN = { 1352, _G.GetFactionInfoByID(1352) }, + IRONFORGE = { 47, _G.GetFactionInfoByID(47) }, + KIRIN_TOR = { 1090, _G.GetFactionInfoByID(1090) }, + ORGRIMMAR = { 76, _G.GetFactionInfoByID(76) }, + RAMKAHEN = { 1173, _G.GetFactionInfoByID(1173) }, + SHATAR = { 935, _G.GetFactionInfoByID(935) }, + SILVERMOON = { 911, _G.GetFactionInfoByID(911) }, + STORMWIND = { 72, _G.GetFactionInfoByID(72) }, + THERAZANE = { 1171, _G.GetFactionInfoByID(1171) }, + THRALLMAR = { 947, _G.GetFactionInfoByID(947) }, + THUNDER_BLUFF = { 81, _G.GetFactionInfoByID(81) }, + TUSHUI = { 1353, _G.GetFactionInfoByID(1353) }, + UNDERCITY = { 68, _G.GetFactionInfoByID(68) }, + WILDHAMMER_CLAN = { 1174, _G.GetFactionInfoByID(1174) }, + WYRMREST_ACCORD = { 1091, _G.GetFactionInfoByID(1091) }, + -- Commendation Factions + ANGLERS = { 1302, _G.GetFactionInfoByID(1302) }, + AUGUST_CELESTIALS = { 1341, _G.GetFactionInfoByID(1341) }, + DOMINANCE_OFFENSIVE = { 1375, _G.GetFactionInfoByID(1375) }, + GOLDEN_LOTUS = { 1269, _G.GetFactionInfoByID(1269) }, + KIRIN_TOR_OFFENSIVE = { 1387, _G.GetFactionInfoByID(1387) }, + KLAXXI = { 1337, _G.GetFactionInfoByID(1337) }, + LOREWALKERS = { 1345, _G.GetFactionInfoByID(1345) }, + OPERATION_SHIELDWALL = { 1376, _G.GetFactionInfoByID(1376) }, + ORDER_OF_THE_CLOUD_SERPENTS = { 1271, _G.GetFactionInfoByID(1271) }, + SHADO_PAN = { 1270, _G.GetFactionInfoByID(1270) }, + SHADO_PAN_ASSAULT = { 1435, _G.GetFactionInfoByID(1435) }, + SUNREAVER_ONSLAUGHT = { 1388, _G.GetFactionInfoByID(1388) }, + TILLERS = { 1272, _G.GetFactionInfoByID(1272) }, } private.REP_BUFFS = { - [_G.GetSpellInfo(30754)] = { -- CENARION FAVOR - faction = private.FACTION_NAMES.CENARION_CIRCLE, - modifier = 0.25, + -- Tabard Buffs + [_G.GetSpellInfo(93830)] = { -- BILGEWATER CARTEL TABARD + faction = private.FACTION_DATA.BILGEWATER_CARTEL[2], + ignore = true, + }, + [_G.GetSpellInfo(93827)] = { -- DARKSPEAR TABARD + faction = private.FACTION_DATA.DARKSPEAR[2], + ignore = true, + }, + [_G.GetSpellInfo(93806)] = { -- DARNASSUS TABARD + faction = private.FACTION_DATA.DARNASSUS[2], + ignore = true, + }, + [_G.GetSpellInfo(93811)] = { -- EXODAR TABARD + faction = private.FACTION_DATA.EXODAR[2], + ignore = true, + }, + [_G.GetSpellInfo(93816)] = { -- GILNEAS TABARD + faction = private.FACTION_DATA.GILNEAS[2], + ignore = true, + }, + [_G.GetSpellInfo(93821)] = { -- GNOMEREGAN TABARD + faction = private.FACTION_DATA.GNOMEREGAN[2], + ignore = true, + }, + [_G.GetSpellInfo(126436)] = { -- HUOJIN TABARD + faction = private.FACTION_DATA.HUOJIN[2], + ignore = true, + }, + [_G.GetSpellInfo(97340)] = { -- ILLUSTRIOUS GUILD TABARD + faction = private.FACTION_DATA.GUILD[2], + modifier = 1, + }, + [_G.GetSpellInfo(93805)] = { -- IRONFORGE TABARD + faction = private.FACTION_DATA.IRONFORGE[2], + ignore = true, + }, + [_G.GetSpellInfo(93825)] = { -- ORGRIMMAR TABARD + faction = private.FACTION_DATA.ORGRIMMAR[2], + ignore = true, + }, + [_G.GetSpellInfo(97341)] = { -- RENOWNED GUILD TABARD + faction = private.FACTION_DATA.GUILD[2], + modifier = 0.5, + }, + [_G.GetSpellInfo(93828)] = { -- SILVERMOON CITY TABARD + faction = private.FACTION_DATA.SILVERMOON[2], + ignore = true, + }, + [_G.GetSpellInfo(93795)] = { -- STORMWIND TABARD + faction = private.FACTION_DATA.STORMWIND[2], + ignore = true, + }, + [_G.GetSpellInfo(93337)] = { -- TABARD OF RAMKAHEN + faction = private.FACTION_DATA.RAMKAHEN[2], + ignore = true, + }, + [_G.GetSpellInfo(57819)] = { -- TABARD OF THE ARGENT CRUSADE + faction = private.FACTION_DATA.ARGENT_CRUSADE[2], + ignore = true, + }, + [_G.GetSpellInfo(94158)] = { -- TABARD OF THE DRAGONMAW CLAN + faction = private.FACTION_DATA.DRAGONMAW_CLAN[2], + ignore = true, + }, + [_G.GetSpellInfo(93339)] = { -- TABARD OF THE EARTHEN RING + faction = private.FACTION_DATA.EARTHEN_RING[2], + ignore = true, + }, + [_G.GetSpellInfo(57820)] = { -- TABARD OF THE EBON BLADE + faction = private.FACTION_DATA.EBON_BLADE[2], + ignore = true, + }, + [_G.GetSpellInfo(93341)] = { -- TABARD OF THE GUARDIANS OF HYJAL + faction = private.FACTION_DATA.GUARDIANS_OF_HYJAL[2], + ignore = true, + }, + [_G.GetSpellInfo(57821)] = { -- TABARD OF THE KIRIN TOR + faction = private.FACTION_DATA.KIRIN_TOR[2], + ignore = true, + }, + [_G.GetSpellInfo(93368)] = { -- TABARD OF THE WILDHAMMER CLAN + faction = private.FACTION_DATA.WILDHAMMER_CLAN[2], + ignore = true, + }, + [_G.GetSpellInfo(57822)] = { -- TABARD OF THE WYRMREST ACCORD + faction = private.FACTION_DATA.WYRMREST_ACCORD[2], + ignore = true, + }, + [_G.GetSpellInfo(93347)] = { -- TABARD OF THERAZANE + faction = private.FACTION_DATA.THERAZANE[2], + ignore = true, + }, + [_G.GetSpellInfo(94463)] = { -- THUNDERBLUFF TABARD + faction = private.FACTION_DATA.THUNDER_BLUFF[2], + ignore = true, + }, + [_G.GetSpellInfo(126434)] = { -- TUSHUI TABARD + faction = private.FACTION_DATA.TUSHUI[2], + ignore = true, + }, + [_G.GetSpellInfo(94462)] = { -- UNDERCITY TABARD + faction = private.FACTION_DATA.UNDERCITY[2], + ignore = true, + }, + + -- Banner Buffs + [_G.GetSpellInfo(90216)] = { -- ALLIANCE GUILD STANDARD + ignore = true, + }, + [_G.GetSpellInfo(90708)] = { -- HORDE GUILD STANDARD + ignore = true, + }, + + -- Holiday Buffs + [_G.GetSpellInfo(136583)] = { -- DARKMOON TOP HAT + modifier = 0.1, }, [_G.GetSpellInfo(24705)] = { -- GRIM VISAGE modifier = 0.1, }, - [_G.GetSpellInfo(32098)] = { -- HONOR HOLD FAVOR - faction = private.FACTION_NAMES.HONOR_HOLD, - modifier = 0.25, - }, - [_G.GetSpellInfo(39913)] = { -- NAZGRELS FERVOR - faction = private.FACTION_NAMES.THRALLMAR, - modifier = 0.1, - }, - [_G.GetSpellInfo(39953)] = { -- SONG OF BATTLE - faction = private.FACTION_NAMES.THE_SHATAR, - modifier = 0.1, - }, [_G.GetSpellInfo(61849)] = { -- SPIRIT OF SHARING modifier = 0.1, }, - [_G.GetSpellInfo(32096)] = { -- THRALLMARS FAVOR - faction = private.FACTION_NAMES.THRALLMAR, - modifier = 0.25, - }, - [_G.GetSpellInfo(39911)] = { -- TROLLBANES COMMAND - faction = private.FACTION_NAMES.HONOR_HOLD, + [_G.GetSpellInfo(95987)] = { -- UNBURDENED modifier = 0.1, }, - [_G.GetSpellInfo(95987)] = { -- UNBURDENED + [_G.GetSpellInfo(46668)] = { -- WHEE! modifier = 0.1, }, [_G.GetSpellInfo(100951)] = { -- WOW 8TH ANNIVERSARY @@ -65,6 +202,32 @@ [_G.GetSpellInfo(150986)] = { -- WOW 10TH ANNIVERSARY modifier = 0.1, } + + -- Situational Buffs + [_G.GetSpellInfo(39953)] = { -- ADALS SONG OF BATTLE + faction = private.FACTION_DATA.SHATAR[2], + modifier = 0.1, + }, + [_G.GetSpellInfo(30754)] = { -- CENARION FAVOR + faction = private.FACTION_DATA.CENARION_CIRCLE[2], + modifier = 0.25, + }, + [_G.GetSpellInfo(32098)] = { -- HONOR HOLD FAVOR + faction = private.FACTION_DATA.HONOR_HOLD[2], + modifier = 0.25, + }, + [_G.GetSpellInfo(39913)] = { -- NAZGRELS FERVOR + faction = private.FACTION_DATA.THRALLMAR[2], + modifier = 0.1, + }, + [_G.GetSpellInfo(32096)] = { -- THRALLMARS FAVOR + faction = private.FACTION_DATA.THRALLMAR[2], + modifier = 0.25, + }, + [_G.GetSpellInfo(39911)] = { -- TROLLBANES COMMAND + faction = private.FACTION_DATA.HONOR_HOLD[2], + modifier = 0.1, + }, } private.LOOT_SPELL_ID_TO_ITEM_ID_MAP = { diff -r e4abf4f04db3 -r d708222fe96b Main.lua --- a/Main.lua Thu Sep 18 04:38:51 2014 -0400 +++ b/Main.lua Mon Sep 22 17:00:08 2014 -0400 @@ -979,7 +979,7 @@ end -- do-block -local function RecordItemData(item_id, item_link, durability) +local function RecordItemData(item_id, item_link, process_bonus_ids, durability) local _, _, item_string = item_link:find("^|%x+|H(.+)|h%[.+%]") local item @@ -992,7 +992,7 @@ local instance_difficulty_id = tonumber(item_results[12]) local num_bonus_ids = tonumber(item_results[13]) - if not num_bonus_ids or num_bonus_ids == 0 then + if not num_bonus_ids or num_bonus_ids == 0 or not process_bonus_ids then if (suffix_id and suffix_id ~= 0) or (instance_difficulty_id and instance_difficulty_id ~= 0) then item = DBEntry("items", item_id) item.unique_id = bit.band(unique_id, 0xFFFF) @@ -1040,7 +1040,7 @@ if item_id and item_id > 0 then local _, max_durability = _G.GetInventoryItemDurability(slot_index) - RecordItemData(item_id, _G.GetInventoryItemLink("player", slot_index), max_durability) + RecordItemData(item_id, _G.GetInventoryItemLink("player", slot_index), false, max_durability) end end @@ -1050,7 +1050,7 @@ if item_id and item_id > 0 then local _, max_durability = _G.GetContainerItemDurability(bag_index, slot_index) - RecordItemData(item_id, _G.GetContainerItemLink(bag_index, slot_index), max_durability) + RecordItemData(item_id, _G.GetContainerItemLink(bag_index, slot_index), false, max_durability) end end end @@ -1268,6 +1268,7 @@ local item_id = ItemLinkToID(item_link) if item_id then Debug("%s: %s X %d (%d)", event_name, item_link, quantity, item_id) + RecordItemData(item_id, item_link, true) table.insert(encounter_data[loot_label], ("%d:%d"):format(item_id, quantity)) else Debug("%s: ItemID is nil, from item link %s", event_name, item_link) @@ -1311,6 +1312,7 @@ local item_id = ItemLinkToID(item_link) if item_id then Debug("%s: %s X %d (%d)", event_name, item_link, quantity, item_id) + RecordItemData(item_id, item_link, true) current_loot.sources[container_id][item_id] = current_loot.sources[container_id][item_id] or 0 + quantity else Debug("%s: ItemID is nil, from item link %s", event_name, item_link) @@ -1342,6 +1344,11 @@ loot_toast_data = loot_toast_data or {} loot_toast_data[#loot_toast_data + 1] = { loot_type, item_link, quantity } + local item_id = ItemLinkToID(item_link) + if item_id then + RecordItemData(item_id, item_link, true) + end + loot_toast_data_timer_handle = WDP:ScheduleTimer(ClearLootToastData, 5) end end @@ -1371,9 +1378,6 @@ end local update_func = CHAT_MSG_LOOT_UPDATE_FUNCS[category] - if not category or not update_func then - return - end local item_link, quantity = deformat(message, _G.LOOT_ITEM_PUSHED_SELF_MULTIPLE) if not item_link then @@ -1384,6 +1388,12 @@ if not item_id then return end + + if not category or not update_func then + -- We still want to record the item's data, even if it doesn't need its drop location recorded + RecordItemData(item_id, item_link, true) + return + end update_func(item_id, quantity) end end @@ -1579,7 +1589,7 @@ local DIPLOMACY_SPELL_ID = 20599 local MR_POP_RANK1_SPELL_ID = 78634 local MR_POP_RANK2_SPELL_ID = 78635 - local FACTION_NAMES = private.FACTION_NAMES + local FACTION_DATA = private.FACTION_DATA local REP_BUFFS = private.REP_BUFFS @@ -1604,25 +1614,48 @@ local modifier = 1 + -- Check for modifiers from known spells if _G.IsSpellKnown(DIPLOMACY_SPELL_ID) then modifier = modifier + 0.1 end - if _G.IsSpellKnown(MR_POP_RANK2_SPELL_ID) then modifier = modifier + 0.1 elseif _G.IsSpellKnown(MR_POP_RANK1_SPELL_ID) then modifier = modifier + 0.05 end - for buff_name, rep_data_table in pairs(REP_BUFFS) do + -- Determine faction ID + local faction_ID + for pseudo_faction_name, faction_data_table in pairs(FACTION_DATA) do + if faction_name == faction_data_table[2] then + faction_ID = faction_data_table[1] + end + end + if faction_ID and faction_ID > 0 then + -- Check for modifiers from Commendations (applied directly to the faction, account-wide) + local _, _, _, _, _, _, _, _, _, _, _, _, _, _, has_bonus_rep_gain = GetFactionInfoByID(faction_ID) + if has_bonus_rep_gain then + modifier = modifier + 1 + end + end + + -- Check for modifiers from buffs + for buff_name, buff_data_table in pairs(REP_BUFFS) do if _G.UnitBuff("player", buff_name) then - local modded_faction = rep_data_table.faction + local modded_faction = buff_data_table.faction if not modded_faction or faction_name == modded_faction then - modifier = modifier + rep_data_table.modifier + if buff_data_table.ignore then + -- Some buffs from tabards convert all rep of other factions into rep for a specific faction. + -- We can't know what faction the rep was orginally from, so we must ignore the data entirely in these cases. + return + else + modifier = modifier + buff_data_table.modifier + end end end end + npc.reputations = npc.reputations or {} npc.reputations[("%s:%s"):format(faction_name, faction_standings[faction_name])] = math.floor(amount / modifier) end