搜索
查看: 19305|回复: 111

分享装备对比Lua

  [复制链接]
发表于 2020-6-24 15:40:15 | 显示全部楼层 |阅读模式
--获取物品属性
function on_getItemInfo(item, actor, itemFrom, itemPos, mainAppend)
        local ret, _temp, _mainItemInfo, _steelInfo, _steelSuitInfo, _suitInfo ,_mainItemInfo2= "", "", "", "", "", "",""
        --local _startTime = os.clock()
        itemInfo.init(item, actor, itemFrom, itemPos, mainAppend)
       
       
       
        local dbitem = nil
       
        if item:getName() ~= "" then
                --根据物品ID获取数据库实例
                dbitem = c.item.getDBItem(item:getIndex())
                if dbitem == nil then return "" end
               
                --获取物品信息
                _mainItemInfo = itemInfo.getItemInfo(item, dbitem, actor, itemFrom, itemPos)
                if _mainItemInfo ~= "" then
                        --获取钢纹属性
                        _steelInfo = itemInfo.getItemSteelInfo(item, dbitem)
                end
        end

        --装备栏专有属性
        if in_array(itemFrom, {const.ift_state, const.ift_herostate, const.ift_user1state}) then
                if item:getName() ~= "" then
                        if _mainItemInfo ~= "" then
                                --获取钢纹套装属性
                                _steelSuitInfo = itemInfo.getItemSteelSuitInfo(item, dbitem, actor, itemFrom, itemPos)
                                --获取套装属性
                                _suitInfo = itemInfo.getItemSuitProp(itemFrom, itemPos)
                        end
                end       
                --检测装备栏头盔位是否存在面巾或斗笠
                if itemPos == const.item_helmet or itemPos == const.item_fasguin_helmet then
                        local _nowItemPos
                        if itemPos == const.item_helmet then
                                _nowItemPos = const.item_zhuli
                        else
                                _nowItemPos = const.item_fasguin_zhuli
                        end
                               
                        --获取斗笠或面巾
                        local _ZLItem = nil
                        if itemFrom == const.ift_state then
                                _ZLItem = c.item.getMyEquipPos(_nowItemPos)
                        elseif itemFrom == const.ift_herostate then
                                _ZLItem = c.item.getHeroEquipPos(_nowItemPos)
                        elseif  itemFrom == const.ift_user1state then
                                _ZLItem = c.item.getUser1EquipPos(_nowItemPos)
                        end
                               
                        if _ZLItem ~= nil then
                                dbitem = c.item.getDBItem(_ZLItem:getIndex())
                                if dbitem ~= nil then
                                        _temp = itemInfo.getItemInfo(_ZLItem, dbitem, actor, itemFrom, _nowItemPos)
                                        if _temp ~= "" then
                                                if _mainItemInfo ~= "" then
                                                        _temp = _temp.."\\ \\".._mainItemInfo
                                                end
                                                _mainItemInfo = _temp
                                               
                                                --获取钢纹属性
                                                if _steelInfo == "" then
                                                        _steelInfo = itemInfo.getItemSteelInfo(_ZLItem, dbitem)
                                                end
                                               
                                                --获取钢纹套装属性
                                                if _steelSuitInfo == "" then
                                                        _steelSuitInfo = itemInfo.getItemSteelSuitInfo(_ZLItem, dbitem, actor, _nowItemPos)
                                                end
                                               
                                                --获取套装属性
                                                if _suitInfo == "" then
                                                        _suitInfo = itemInfo.getItemSuitProp(itemFrom, _nowItemPos)
                                                end
                                        end       
                                end
                        end
                end
                --鉴定星级套装
                _mainItemInfo = _mainItemInfo..itemInfo.getIdentifySuitProp(item, itemFrom, itemPos)
               
                --体格属性
                _mainItemInfo = _mainItemInfo..itemInfo.getPhysiqueProp(actor, itemFrom, itemPos)
        end
       
        --整理最后输出hint字符串
        if _mainItemInfo ~= "" then
                _temp = ""
                if _steelInfo ~= "" or _steelSuitInfo ~= "" then
                        _temp = hintHelper.addParent()
                        if _steelInfo ~= "" then
                                _temp = _temp..hintHelper.addSubParent().._steelInfo
                        end
                        if _steelSuitInfo ~= "" then
                                _temp = _temp..hintHelper.addSubParent().._steelSuitInfo
                        end
                end
                _steelInfo = _temp
        end
       
       
        if _suitInfo ~= "" then
                _suitInfo = hintHelper.addParent()..hintHelper.addSubParent().._suitInfo
        end
        ret = _mainItemInfo..mainAppend.._steelInfo.._suitInfo
       
       
        --包裹里对比身上装备
        if itemFrom == 0 and g_var["item_duibi"] then --包裹里的物品 g_var["item_duibi"] 装备对比控制
                --获取当前装备处于哪个位置的装备
                local index = stdModeToItemPos(dbitem:getStdMode())
                _mainItemInfo2 = on_getEquipByPos(index,actor)
                if _mainItemInfo2 ~= "" then
                        _mainItemInfo2 = hintHelper.addParent("right")..hintHelper.addSubParent()..hintHelper.set(100,10,nil,nil,nil,nil)..hintHelper.img("ui_n", 1953, 64, 51).."\\"..hintHelper.set(nil,-2,nil,2,nil,nil).._mainItemInfo2
                end
                if index ==const.item_ringl or index == const.item_armringl then -- 手镯和戒指需要对比2个装备位置
                       
                        index = index + 1
                        local _mainItemInfo3 = on_getEquipByPos(index,actor)
                        if _mainItemInfo3 ~= "" then
                                _mainItemInfo2 =_mainItemInfo2..hintHelper.addParent("right")..hintHelper.addSubParent()..hintHelper.set(100,10,nil,nil,nil,nil)..hintHelper.img("ui_n", 1953, 64, 51).."\\"..hintHelper.set(nil,-2,nil,2,nil,nil).._mainItemInfo3
                        end
                end
        end
       
        --local _endTime = os.clock()
        --print(string.format("所用时间:%.4fms",_endTime-_startTime))
       
        return ret.._mainItemInfo2
end

function on_getEquipByPos(index,actor)
        if index < 0 then return "" end
        local  item2 =nil
        if actor:getRace() == 0 then --主号
                item2 = c.item.getMyEquipPos(index)
               
        end
        if actor:getRace() == 1 then -- 英雄
                item2 = c.item.getHeroEquipPos(index)
        end
        if item2:getName() ~= "" then
                --根据物品ID获取数据库实例
                dbitem2 = c.item.getDBItem(item2:getIndex())
                if dbitem2 == nil then return "" end
                --获取物品信息
                return itemInfo.getItemInfo(item2, dbitem2, actor, 2, index)
        end
        return ""
end       





补充内容 (2020-6-24 15:45):
代码都是 Bindevent.lua 里/// 不影响底层的排版

补充内容 (2020-6-24 16:12):
仅供参考 需要0601版后 登陆器解压出来的lua   (/传奇目录/lua/) 复制到自己专属目录 修改BingEvent.lua 方法

补充内容 (2020-6-24 17:28):
https://bbs.hgem2.net/forum.php? ... =1716&pid=13557

补充内容 (2020-6-24 22:54):
不要问我QQ啥的, 纯新手,提供的只能是一种思路方法。纯粹分享而已 没有其他啥想法,有的话 只想说LUA牛逼!Lua 万岁

评分

参与人数 5金钱 +25 热心值 +5 收起 理由
工会经费 + 1 很给力!
1580 + 5 + 1 很给力!
咔咔咔咔咔咔 + 1 很给力!
远奥 + 10 + 1 很给力!
青菜萝卜 + 10 + 1 很给力!

查看全部评分

 楼主| 发表于 2020-6-24 16:16:37 | 显示全部楼层
装备stdmode 转对应装备位置
--物品stdmode转换装备位置
function stdModeToItemPos(pos)
        local __tbl = {
                [5] = const.item_weapon,
                [6] = const.item_weapon,
                [10] = const.item_dress,
                [11] = const.item_dress,
                [30] = const.item_righthand,
                [19] = const.item_necklace,
                [20] = const.item_necklace,
                [21] = const.item_necklace,
                [28] = const.item_necklace,
                [29] = const.item_necklace,
                [15] = const.item_helmet,
                [24] = const.item_armringl,
                [26] = const.item_armringl,
                [22] = const.item_ringl,
                [23] = const.item_ringl,
                [25] = const.item_bujuk,
                [54] = const.item_belt,
                [64] = const.item_belt,
                [62] = const.item_boots,
                [52] = const.item_boots,
                [7] = const.item_charm,
                [16] = const.item_zhuli,
                [55] = const.item_drum,
                [56] = const.item_plate,
                [57] = const.item_jade,
                [16] = const.item_zhuli,
        }
        return __tbl[pos] or -1
end

方法比较土就是不知道有没有更好的匹配关系
 楼主| 发表于 2020-6-24 17:21:10 | 显示全部楼层
解压到 自己专属目录/lua 下  游戏中GM 执行@ReloadClientLua 重载脚本即可 或者 重新生成客户端

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2020-8-7 17:39:56 | 显示全部楼层
andrew01 发表于 2020-6-24 16:16
装备stdmode 转对应装备位置
--物品stdmode转换装备位置
function stdModeToItemPos(pos)

--里面加了所以位置包括时装对比
--物品stdmode转换装备位置
function stdModeToItemPos(pos)
        local __tbl = {
                [10] =  const.item_dress, --衣服
                [11] =  const.item_dress, --衣服
                [5] =  const.item_weapon, --武器
                [6] =  const.item_weapon, --武器
                [30] =  const.item_righthand, --勋章         
                [19] =  const.item_necklace, --项链
                [20] =  const.item_necklace, --项链
                [21] =  const.item_necklace, --项链
                [15] =  const.item_helmet, --头盔
                [24] =  const.item_armringl, --左手手镯
                [26] =  const.item_armringl, --左手手镯
                [22] =  const.item_ringl, --左戒指
                [23] =  const.item_ringl, --左戒指
                [25] =  const.item_bujuk, --物品(符、毒)
                [54] =  const.item_belt, --腰带              
                [52] =  const.item_boots, --鞋               
                [53] =  const.item_charm, --宝石(印)
                [16] =  const.item_zhuli, --斗笠
                [55] =  const.item_drum, --鼓                 
                [56] =  const.item_plate, --马牌
                [57] =  const.item_jade, --玉
                [58] =  const.item_fasguin, --时装(衣)
                [59] =  const.item_fasguin, --时装(衣)
                [65] =  const.item_fasguin_weapon, --时装(武器)
                [66] =  const.item_fasguin_righthand, --时装(勋章)
                [67] =  const.item_fasguin_necklace, --时装(项链)
                [68] =  const.item_fasguin_helmet, --时装(头盔)
                [69] =  const.item_fasguin_armringl, --时装(左手镯)
                [70] =  const.item_fasguin_ringl, --时装(左戒指)
                [71] =  const.item_fasguin_belt, --时装(腰带)
                [72] =  const.item_fasguin_boots, --时装(鞋)
                [73] =  const.item_fasguin_zhuli, --时装(斗笠、面巾)
                [74] =  const.item_fasguin_zhuli, --时装(斗笠、面巾)




        }
        return __tbl[pos] or -1
end


--原来的这一行
                if index ==const.item_ringl or index == const.item_armringl then -- 手镯和戒指需要对比2个装备位置


--要修改的内容  
                if index ==const.item_ringl or index == const.item_armringl or index ==const.item_fasguin_ringl or index == const.item_fasguin_armringl then -- 手镯和戒指需要对比2个装备位置(包括时装)








 楼主| 发表于 2020-6-24 15:41:14 | 显示全部楼层
效果展示图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2020-6-24 15:48:48 | 显示全部楼层
给力,真正的大神。
 楼主| 发表于 2020-6-24 15:49:09 | 显示全部楼层
通过lua双向通讯实现 装备对比的控制。大小退都能保存配置

补充内容 (2020-6-24 15:50):
--鼠标单击事件
function DCheckBoxGAHideTitle_OnClick(sender, x, y)
        --c.share.addChat(tostring(g_var["item_duibi"]),1,2)
         local isOpen = true
        if g_var["item_duibi"] then
                isOpen = false
        ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2020-6-24 15:51:27 | 显示全部楼层
--鼠标单击事件
function DCheckBoxGAHideTitle_OnClick(sender, x, y)
        --c.share.addChat(tostring(g_var["item_duibi"]),1,2)
         local isOpen = true
        if g_var["item_duibi"] then
                isOpen = false
                g_var["item_duibi"] = false
                sender:setChecked (false)
        else
                g_var["item_duibi"] = true
                sender:setChecked (true)
        end
        local _table ={code=2, data=isOpen}
        c.event.sendNetMsg(1, serialize(_table))
  --此处放置事件代码

  return false--返回true代表执行内部事件
end
 楼主| 发表于 2020-6-24 15:52:50 | 显示全部楼层
--后端

--登陆游戏时回调
function on_Actor_in_game(actor)       
--[[  --取身上衣服物品对像,并设置物品来源
  local itme = actor:getUserItem(0)  
  if itme then
     local ItemName = itme:getName()--名称
         local ItemMakeIndex = itme:getMakeIndex()--制造ID
         print("["..ItemName.."]制造ID:"..tostring(ItemMakeIndex))
         itme:setItemFrom(0,"A","[荣耀]","C")--设置物品来源(关闭物品来源显示)
  end--]]
        if actor:getRace()== 0 then --获取[555]查询是否开启装备对比功能
           local QuestNum = actor:getQuest(555)
           local isOpen = true
           if QuestNum == 0 then
                isOpen =false
           end
           local _table ={code=2, data=isOpen}
       actor:sendNetMsg(2,serialize(_table))
        end
  check_Items_buff(actor)
end
 楼主| 发表于 2020-6-24 15:55:06 | 显示全部楼层
lua 通讯后端
function msgFunc_1(actor, smsg) --统一通讯 根据code不同执行不同方法
  print(smsg)
  local msg = deserialize(smsg)--反序列化
  if type(msg) ~= "table" then
    return
  end
  local code =tonumber(msg["code"])
  local data =msg["data"] and 1 or 0
  if code ==2 then
        actor:setQuest(555, data)
  end
end
发表于 2020-6-24 15:57:28 | 显示全部楼层
大佬求带 求教 求舔。
 楼主| 发表于 2020-6-24 16:04:13 | 显示全部楼层
青菜萝卜 发表于 2020-6-24 15:48
给力,真正的大神。

初学者而已

点评

傻逼 人家欠你的? 能看懂就赚 看不懂就别BB自己写去 人家说的也没毛病,LUA高手按年薪算的 谁搞破B私服  发表于 2021-3-17 02:04
傻逼 人家欠你的? 能看懂就赚 看不懂就别BB自己写去 人家说的也没毛病,LUA高手按年薪算的 谁搞破B私服  发表于 2021-3-17 02:04
这样说的人最讨厌,你是大神吗?那怎么不贡献一下?  发表于 2020-6-25 06:40
 楼主| 发表于 2020-6-24 16:04:41 | 显示全部楼层
HGE-小乔 发表于 2020-6-24 15:57
大佬求带 求教 求舔。

乔老板 什么时候带我去嫖娼
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|HGEM2论坛

GMT+8, 2024-11-23 17:26 , Processed in 0.606828 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表