From 56d197c94fa65d5066caf8e0a4080c9f735d8a62 Mon Sep 17 00:00:00 2001 From: urnati Date: Fri, 26 Jan 2024 10:33:18 -0500 Subject: [PATCH] - Ammo : Add a mismatch message if guns and arrows (or reverse) are equipped; thrown ignores ammo slot --- TitanAmmo/TitanClassicAmmo.lua | 216 ++++++++++++++++++++++++---------------- 1 file changed, 130 insertions(+), 86 deletions(-) diff --git a/TitanAmmo/TitanClassicAmmo.lua b/TitanAmmo/TitanClassicAmmo.lua index 5c1a98b..39447e5 100644 --- a/TitanAmmo/TitanClassicAmmo.lua +++ b/TitanAmmo/TitanClassicAmmo.lua @@ -28,11 +28,6 @@ local LIM_GOOD = 2 local LIM_OK = 1.5 local LIM_BAD = .5 -local BOW = "INVTYPE_RANGED" -local GUN = "INVTYPE_RANGEDRIGHT" -local THROWN = "INVTYPE_THROWN" -local NO_RANGED = "Nothing_Equipped" - local TITAN_AMMO_THRESHOLD_TABLE = { -- Use ammo stack and threshold limits above to calc colored text ["INVTYPE_RANGEDRIGHT"] = { Values = { SHOOT_STACK*LIM_BAD, SHOOT_STACK*LIM_OK, SHOOT_STACK*LIM_GOOD }, -- 100,150,400 @@ -48,23 +43,19 @@ local TITAN_AMMO_THRESHOLD_TABLE = { -- Use ammo stack and threshold limits abov }, }; -local PLACE = { -- for debug output - ["INVTYPE_RANGED"] = "Bow", - ["INVTYPE_RANGEDRIGHT"] = "Gun", - ["INVTYPE_THROWN"] = "Throw", - } - -- ******************************** Variables ******************************* local ammoSlotID = GetInventorySlotInfo("AmmoSlot") local rangedSlotID = GetInventorySlotInfo("RangedSlot") -- Info to show on the plugin local display = { - ammo_count = 0, - ammo_type = "", - ammo_name = "", -- L["TITAN_AMMO_BUTTON_NOAMMO"] - weapon = "", - weapon_type = "", + ammo_count = 0, + ammo_type = "", + ammo_name = "", -- L["TITAN_AMMO_BUTTON_NOAMMO"] + weapon = "", + weapon_type = "", + mismatch = false, + mismatch_text = "", } local L = LibStub("AceLocale-3.0"):GetLocale("TitanClassic", true) @@ -92,10 +83,12 @@ end local function ClrAmmoInfo() display.ammo_count = 0; - display.ammo_type = NO_RANGED + display.ammo_type = L["TITAN_AMMO_BUTTON_NOAMMO"] display.ammo_name = "" display.weapon = "" display.weapon_type = "" + display.mismatch = false + display.mismatch_text = "" end local function GetItemLink(rangedSlotID) @@ -116,71 +109,138 @@ local function IsAmmoClass() return res end -local function IsThrown(loc) - local res = false - if loc == "INVTYPE_THROWN" then - res = true - end - return res -end - -local function IsAmmo(loc) - local res = false - if loc == "INVTYPE_RANGED" or loc == "INVTYPE_RANGEDRIGHT" then - res = true - end - return res -end - local function GetAmmoCount() - local ammo = ""; - local wpn = "--"; - local wpnt = "--"; + local ammo = "" + local mis = false + local mist = "" + local ammo_name = "" + local ammo_count = 0 + local label = "" + local text = "" + local tool_tip = "" + + ClrAmmoInfo() + -- weapon info + local itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, + itemEquipLoc, itemTexture, sellPrice, classID, subclassID, bindType, expacID, setID, isCraftingReagent + -- ammo info + local ammoName, ammoLink, ammoQuality, ammoLevel, ammoMinLevel, ammoType, ammoSubType, ammoStackCount, + ammoEquipLoc, ammoTexture, _, ammoID, subammoID local weap = GetInventoryItemID("player", rangedSlotID) if weap == nil then -- nothing in slot - ammo = NO_RANGED + ammo = L["TITAN_AMMO_BUTTON_NOAMMO"] else - local itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, + -- get weapon info (thrown) or ammo info (guns & bows) + itemName, itemLink, itemQuality, itemLevel, itemMinLevel, itemType, itemSubType, itemStackCount, itemEquipLoc, itemTexture, sellPrice, classID, subclassID, bindType, expacID, setID, isCraftingReagent = GetItemInfo(weap) - wpn = itemName - wpnt = itemSubType ammo = itemEquipLoc -- set ammo name and count - if IsThrown(ammo) then -- throwing knives, etc - display.ammo_name = itemName or UNKNOWN - if display.ammo_name == UNKNOWN then - display.ammo_count = 0 + if (subclassID == 16) -- Thrown + then + -- treat thrown as ther ammo with 0 count + ammo_name = itemName or "" + ammo_count = 0 + + ammoID = classID + subammoID = subclassID + + label = L["TITAN_AMMO_BUTTON_LABEL_THROWN"] + text = TitanUtils_GetGoldText("*") + + tool_tip = itemName + -- no mismatch + elseif (subclassID == 3) -- Gun + or (subclassID == 2) -- Bow + or (subclassID == 18) -- Crossbow + then + ammoName, ammoLink, ammoQuality, ammoLevel, ammoMinLevel, ammoType, ammoSubType, ammoStackCount, + ammoEquipLoc, ammoTexture, _, ammoID, subammoID, _, _, _, _ + = GetItemInfo(GetInventoryItemID("player", ammoSlotID)) +-- ammo_name = select(1, GetItemInfo(GetInventoryItemID("player", ammoSlotID))) or UNKNOWN + ammo_name = ammoName or "" + if ammoName == nil then + ammo_count = 0 else - display.ammo_count = GetInventoryItemCount("player", rangedSlotID) or display.ammo_count + ammo_count = GetInventoryItemCount("player", ammoSlotID) or display.ammo_count + end + text = format(L["TITAN_AMMO_FORMAT"], ammo_count); + if TitanGetVar(TITAN_AMMO_ID, "ShowAmmoName") and ammo_name ~= "" then + text = text.."|cffffff9a".." ("..ammo_name..")".."|r" end - elseif IsAmmo(ammo) then - display.ammo_name = select(1, GetItemInfo(GetInventoryItemID("player", ammoSlotID))) or UNKNOWN - if display.ammo_name == UNKNOWN then - display.ammo_count = 0 + label = L["TITAN_AMMO_BUTTON_LABEL_AMMO"] + tool_tip = "" + ..tostring(itemName) + .."\n"..tostring(ammo_name).."" + + + -- check for mismatch + if (subclassID == 3) -- Bullet + and (subammoID == 2) -- Arrow + then + mis = true + mist = "" + ..tostring(itemName) + .." <> " + ..tostring(ammoName) + mist = TitanUtils_GetRedText(mist) + elseif ((subclassID == 2) -- Bow + or (subclassID == 18)) -- Crossbow + and (subammoID == 3) -- Bullets + then + mis = true + mist = "" + ..tostring(itemName) + .." <> " + ..tostring(ammoName) + mist = TitanUtils_GetRedText(mist) else - display.ammo_count = GetInventoryItemCount("player", ammoSlotID) or display.ammo_count end - else -- bullets or arrows - display.ammo_name = UNKNOWN - display.ammo_count = 0 + else + ammo_name = UNKNOWN + ammo_count = 0 + + -- no mismatch end +--[[ +local msg = + "GII-ammo" + .." ("..tostring(itemType).."" + .." "..tostring(classID).."" + .." "..tostring(subclassID) ..")" + .." ? ("..tostring(ammoID).."" + .." "..tostring(subammoID)..")" + .." "..tostring(mis).."" +debug_msg(msg) +local msg = + "GII-ammo > " + .." '"..tostring(label).."'" + .." '"..tostring(text).."'" +debug_msg(msg) +--]] end - + -- Set variables - display.weapon = wpn - display.weapon_type = wpnt + display.label = label + display.text = text + display.tool_tip = tool_tip + display.weapon = itemName + display.weapon_type = itemSubType + display.ammo_name = ammo_name + display.ammo_count = ammo_count display.ammo_type = ammo + display.ammo_type_id = subclassID + display.mismatch = mis + display.mismatch_text = mist if debug_flow then local msg = "Count" - .." "..tostring(PLACE[ammo]).."" - .." '"..tostring(wpnt).."'" - .." '"..tostring(wpn).."'" + .." '"..tostring(itemSubType).."'" + .." '"..tostring(itemName).."'" debug_msg(msg) else -- not requested @@ -259,27 +319,12 @@ function TitanPanelAmmoButton_GetButtonText(id) local labelText, ammoText, ammoRichText, color; - if (IsThrown(display.ammo_type)) then - labelText = L["TITAN_AMMO_BUTTON_LABEL_THROWN"]; - ammoText = format(L["TITAN_AMMO_FORMAT"], display.ammo_count); - labelText = display.weapon_type.." : " - if TitanGetVar(TITAN_AMMO_ID, "ShowAmmoName") and display.ammo_name ~= "" then - ammoText = ammoText.."|cffffff9a".." ("..display.ammo_name..")".."|r" - end - elseif IsAmmo(display.ammo_type) then - labelText = L["TITAN_AMMO_BUTTON_LABEL_AMMO"]; - labelText = display.weapon_type.." : " - ammoText = format(L["TITAN_AMMO_FORMAT"], display.ammo_count); - if TitanGetVar(TITAN_AMMO_ID, "ShowAmmoName") and display.ammo_name ~= "" then - ammoText = ammoText.."|cffffff9a".." ("..display.ammo_name..")".."|r" - end - else - ClrAmmoInfo() - ammoText = display.ammo_name - labelText = display.weapon_type.."" - end + labelText = display.label + ammoText = display.text - if (TitanGetVar(TITAN_AMMO_ID, "ShowColoredText")) then + if display.mismatch then + ammoRichText = tostring(display.mismatch_text) + elseif (TitanGetVar(TITAN_AMMO_ID, "ShowColoredText")) then color = TitanUtils_GetThresholdColor(TITAN_AMMO_THRESHOLD_TABLE[display.ammo_type], display.ammo_count); ammoRichText = TitanUtils_GetColoredText(ammoText, color); else @@ -290,7 +335,6 @@ function TitanPanelAmmoButton_GetButtonText(id) local msg = "Btn_Text" .." '"..tostring(display.weapon_type).."'" - .." '"..tostring(PLACE[display.ammo_type]).."'" .." '"..tostring(ammoRichText).."'" debug_msg(msg) else @@ -312,6 +356,7 @@ function TitanPanelRightClickMenu_PrepareAmmoMenu() local info = {}; info.text = L["TITAN_AMMO_BULLET_NAME"]; info.func = function() TitanPanelRightClickMenu_ToggleVar({TITAN_AMMO_ID, "ShowAmmoName"}) + GetAmmoCount() TitanPanelButton_UpdateButton(TITAN_AMMO_ID); end info.checked = TitanUtils_Ternary(TitanGetVar(TITAN_AMMO_ID, "ShowAmmoName"), 1, nil); @@ -329,14 +374,13 @@ function TitanPanelRightClickMenu_PrepareAmmoMenu() end function TitanPanelAmmoButton_GetTooltipText() - local txt = "" - if IsThrown(display.ammo_type) then + local txt = display.tool_tip + if display.mismatch then txt = txt - ..tostring(display.weapon).."" + .."\n\n" + ..tostring(display.mismatch_text).."" else - txt = txt - ..tostring(display.weapon).."\n" - ..tostring(display.ammo_name).."" + -- weapon and projectile match end return txt end -- 1.7.9.5