From c72b3c1890943a0f7d4f547d46be8f51f59bfe3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=9A=E7=BE=8E?= <2370337237@QQ.COM> Date: Wed, 18 Jun 2025 01:21:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9D=90=E9=AA=91=E5=8F=AC=E5=94=A4=E5=A4=84?= =?UTF-8?q?=E7=90=86=EF=BC=9A=20=E5=A4=84=E7=90=86=E2=80=9C=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E5=8F=AC=E5=94=A4=E5=9D=90=E9=AA=91=E2=80=9D=E5=8F=AC?= =?UTF-8?q?=E5=94=A4=E9=9A=8F=E6=9C=BA=E6=89=80=E8=B5=B7=EF=BC=8COK=20?= =?UTF-8?q?=E5=A4=84=E7=90=86=E2=80=9C=E5=8F=8C=E5=87=BB=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E2=80=9D=E5=8F=AC=E5=94=A4=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E5=BA=A7=E6=9C=BA=EF=BC=8COK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SM_Events.lua | 90 ++++++++++++------------- SM_UI_MainFrame.lua | 25 +++---- SM_UI_SplitPanel.lua | 7 ++ mod-Collection/src/CollectionMgr.cpp | 5 ++ mod-Collection/src/CollectionScript.cpp | 19 ++---- 5 files changed, 72 insertions(+), 74 deletions(-) diff --git a/SM_Events.lua b/SM_Events.lua index 4865f24..3b65d00 100644 --- a/SM_Events.lua +++ b/SM_Events.lua @@ -100,52 +100,52 @@ function SM_Collections:HandleAttributesData(msg) end -- 处理物品属性数据的函数 -function SM_Collections:HandleItemAttributesData(msg) - -- 按换行符分割每一行属性数据 - local lines = {} - for line in msg:gmatch("[^\r\n]+") do - table.insert(lines, line) - end - - local allAttributes = {} - - -- 处理每一行属性数据 - for _, line in ipairs(lines) do - -- 使用自定义的MessageSplit函数将每行按"|"分隔符拆分 - local data = self:MessageSplit(line, "|") - - -- 每3个元素为一组进行循环处理(属性名、属性值、属性类型) - for i = 1, #data, 3 do - if data[i] and data[i + 1] and data[i + 2] then - -- 创建属性对象 - local attribute = { - Name = data[i], -- 属性名称 - value = tonumber(data[i + 1]), -- 属性数值 - valueType = data[i + 2], -- 属性类型(百分比/固定数值) - isPositive = tonumber(data[i + 1]) >= 0 -- 根据数值正负判断是否为正面属性 - } - - -- 输出每个属性的值 - print("Name= " .. attribute.Name .. ", value= " .. attribute.value .. ", valueType= " .. attribute.valueType) - - -- 添加到属性数组 - table.insert(allAttributes, attribute) - end - end - end - - -- 检查是否存在待处理的回调函数 - if self.pendingCallbacks and self.pendingCallbacks.item_attributes then - local response = { - success = true, - data = allAttributes - } - - self.pendingCallbacks.item_attributes(response) - self.pendingCallbacks.item_attributes = nil - end -end +function SM_Collections:HandleItemAttributesData(msg) + -- 按换行符分割每一行属性数据 + local lines = {} + for line in msg:gmatch("[^\r\n]+") do + table.insert(lines, line) + end + local allAttributes = {} + + -- 处理每一行属性数据 + for _, line in ipairs(lines) do + -- 使用自定义的MessageSplit函数将每行按"|"分隔符拆分 + local data = self:MessageSplit(line, "|") + + -- 每3个元素为一组进行循环处理(属性名、属性值、属性类型) + for i = 1, #data, 3 do + if data[i] and data[i + 1] and data[i + 2] then + -- 创建属性对象 + local attribute = { + Name = data[i], -- 属性名称 + value = tonumber(data[i + 1]), -- 属性数值 + valueType = data[i + 2], -- 属性类型(百分比/固定数值) + isPositive = tonumber(data[i + 1]) >= 0 -- 根据数值正负判断是否为正面属性 + } + + -- 输出每个属性的值 + print("Name= " .. + attribute.Name .. ", value= " .. attribute.value .. ", valueType= " .. attribute.valueType) + + -- 添加到属性数组 + table.insert(allAttributes, attribute) + end + end + end + + -- 检查是否存在待处理的回调函数 + if self.pendingCallbacks and self.pendingCallbacks.item_attributes then + local response = { + success = true, + data = allAttributes + } + + self.pendingCallbacks.item_attributes(response) + self.pendingCallbacks.item_attributes = nil + end +end -- 处理小伙伴数据 function SM_Collections:HandleCompanionsData(msg) local data = self:MessageSplit(msg, "|") diff --git a/SM_UI_MainFrame.lua b/SM_UI_MainFrame.lua index 57618dc..d9b9932 100644 --- a/SM_UI_MainFrame.lua +++ b/SM_UI_MainFrame.lua @@ -62,7 +62,6 @@ function SM_Collections:CreateMainFrame() rightSidePanel.CallButon:SetNormalTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") rightSidePanel.CallButon:SetHighlightTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") rightSidePanel.CallButon:SetPushedTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") - rightSidePanel.CallButon:SetScript("OnClick", function() print("召唤") end) rightSidePanel.CallButon = rightSidePanel.CallButon @@ -374,22 +373,20 @@ function SM_Collections:ShowTab(tabID) -- 坐骑收藏,显示召唤按钮并设置文本为"随机召唤坐骑" self.MainFrame.RightSidePanel.CallButon:Show() self.MainFrame.RightSidePanel.CallButon.String:SetText("随机召唤坐骑") - self.MainFrame.RightSidePanel.CallButon:SetNormalTexture( - "Interface\\ICONS\\Ability_Mount_RidingHorse.blp") - self.MainFrame.RightSidePanel.CallButon:SetHighlightTexture( - "Interface\\ICONS\\Ability_Mount_RidingHorse.blp") - self.MainFrame.RightSidePanel.CallButon:SetPushedTexture( - "Interface\\ICONS\\Ability_Mount_RidingHorse.blp") + self.MainFrame.RightSidePanel.CallButon:SetNormalTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") + self.MainFrame.RightSidePanel.CallButon:SetHighlightTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") + self.MainFrame.RightSidePanel.CallButon:SetPushedTexture("Interface\\ICONS\\Ability_Mount_RidingHorse.blp") + self.MainFrame.RightSidePanel.CallButon:SetScript("OnClick", function() + SendAddonMessage("SM_C_SUMMON_MOUNT", 0, "GUILD") + end) elseif tabID == 2 then -- 小伙伴收藏,显示召唤按钮并设置文本为"随机召唤小伙伴" self.MainFrame.RightSidePanel.CallButon:Show() self.MainFrame.RightSidePanel.CallButon.String:SetText("随机召唤小伙伴") - self.MainFrame.RightSidePanel.CallButon:SetNormalTexture( - "Interface\\ICONS\\Ability_Hunter_BeastCall.blp") - self.MainFrame.RightSidePanel.CallButon:SetHighlightTexture( - "Interface\\ICONS\\Ability_Hunter_BeastCall.blp") - self.MainFrame.RightSidePanel.CallButon:SetPushedTexture( - "Interface\\ICONS\\Ability_Hunter_BeastCall.blp") + self.MainFrame.RightSidePanel.CallButon:SetNormalTexture("Interface\\ICONS\\Ability_Hunter_BeastCall.blp") + self.MainFrame.RightSidePanel.CallButon:SetHighlightTexture("Interface\\ICONS\\Ability_Hunter_BeastCall.blp") + self.MainFrame.RightSidePanel.CallButon:SetPushedTexture("Interface\\ICONS\\Ability_Hunter_BeastCall.blp") + self.MainFrame.RightSidePanel.CallButon:SetScript("OnClick", function() print("随机召唤小伙伴") end) elseif tabID == 3 then -- 卡牌收藏,隐藏召唤按钮 self.MainFrame.RightSidePanel.CallButon:Hide() @@ -451,7 +448,7 @@ function SM_Collections:ShowItems() return panel end --- 下面补充内容切换的函数(示例) +-- 内容切换 function SM_Collections:ShowMounts() -- diff --git a/SM_UI_SplitPanel.lua b/SM_UI_SplitPanel.lua index 411e26b..0845420 100644 --- a/SM_UI_SplitPanel.lua +++ b/SM_UI_SplitPanel.lua @@ -554,10 +554,17 @@ function SM_Collections:CreateListItems(parent, data, itemType, model, nameText, OnItemClick(btn, btn.itemData, itemType, panel) end + -- 列表按钮单击 button:SetScript("OnClick", function() selectButton(button) end) + --列表按钮双击 + button:SetScript("OnDoubleClick", function() + print("列表按钮双击") + SendAddonMessage("SM_C_SUMMON_MOUNT", item.id, "GUILD") + end) + -- 在鼠标悬停时在工具提示中显示获得状态 button:SetScript("OnEnter", function() GameTooltip:SetOwner(button, "ANCHOR_RIGHT") diff --git a/mod-Collection/src/CollectionMgr.cpp b/mod-Collection/src/CollectionMgr.cpp index df6672d..fb9cbe6 100644 --- a/mod-Collection/src/CollectionMgr.cpp +++ b/mod-Collection/src/CollectionMgr.cpp @@ -416,6 +416,11 @@ void CollectionMgr::ApplyCollectionBonus(Player* player, CollectionConfig const* player->ApplyStatBuffMod(STAT_SPIRIT, bonus.value, apply); break; + case BONUS_ARMOR: + // 护甲值加成 + player->HandleStatModifier(UNIT_MOD_ARMOR, modType, bonus.value, apply); + break; + case BONUS_MELEE_ATTACK_POWER: // 近战攻击强度加成 player->HandleStatModifier(UNIT_MOD_ATTACK_POWER, modType, bonus.value, apply); diff --git a/mod-Collection/src/CollectionScript.cpp b/mod-Collection/src/CollectionScript.cpp index c9683cd..530671e 100644 --- a/mod-Collection/src/CollectionScript.cpp +++ b/mod-Collection/src/CollectionScript.cpp @@ -156,7 +156,7 @@ public: } } - // 玩家获取物品时检查物品收藏 + // 玩家获取物品时检查物品收藏 void OnPlayerStoreNewItem(Player* player, Item* item, uint32 count) override { if (!player || !player->IsInWorld() || !item) @@ -164,8 +164,8 @@ public: uint32 itemId = item->GetEntry(); - // 检查是否是物品收藏 - if (sCollectionMgr->IsCollectibleItem(itemId)) // 您需要实现 CollectionMgr::IsCollectibleItem 方法 + // 检查是否是物品收藏 + if (sCollectionMgr->IsCollectibleItem(itemId)) // 您需要实现 CollectionMgr::IsCollectibleItem 方法 { // 检查是否已经收藏 bool alreadyCollected = sCollectionMgr->HasInCollection(player, COLLECTION_ITEM, itemId); @@ -174,18 +174,7 @@ public: if (added && !alreadyCollected) { sLog->outMessage("server", LogLevel::LOG_LEVEL_INFO, "玩家 {} 获得新物品 {},已添加到物品收藏。", player->GetName(), itemId); - - // 发送实时更新通知 - std::ostringstream updateMsg; - updateMsg << "item|" << itemId << "|1"; - sCollectionMgr->SendAddonMessageToPlayer(player, "SM_S_COLLECTION_UPDATE", updateMsg.str(), CHAT_MSG_WHISPER); - - // 通知玩家 - std::string itemName = item->GetTemplate()->Name1; - std::string message = "您已收集到新物品: " + itemName; - ChatHandler(player->GetSession()).SendNotification(message.c_str()); - - // 发送更新数据到客户端 + // 发送更新数据到客户端 sCollectionMgr->SendItemsData(player); } }