找回密码
 注册
搜索
查看: 439|回复: 6

改写weapon_unwield函数,修复公版问题

[复制链接]
门派:明教
发表于 2020-4-27 15:39:10 | 显示全部楼层 |阅读模式
<!-- Produced by MUSHclient v 4.84 - www.mushclient.com -->


unwield lianyu boot 1
unwield taiji sword 1
unwield shentong cap 1
unwield bagua armor 1
unwield tiandi glove 1
unwield zhanlu
unwield taiji sword
unwield mu jian
i
wield taiji sword
wield zhanlu sword
wield taiji sword
i
hp
unset 积蓄
> 你并没有装备这样东西作为武器。
> 你并没有装备这样东西作为武器。
> 你并没有装备这样东西作为武器。
> 你并没有装备这样东西作为武器。
> 你并没有装备这样东西作为武器。
>
你将湛卢剑随手一扔,只见湛卢剑突然变得火红,化做无数的火星四散飘走了!


门派:明教
 楼主| 发表于 2020-4-27 15:40:07 | 显示全部楼层
  1. weapon_unwield=function()
  2.         local x=""
  3.     for p in pairs(Bag) do
  4.                 x=Bag[p].kind
  5.             if Bag[p].kind and not armorKind[x] and (not itemWield or itemWield[p]) then
  6.                    local _,l_cnt = isInBags(Bag[p].fullid)
  7.                    for i = 1,l_cnt do
  8.                        exe('unwield '.. Bag[p].fullid ..' '..i)
  9.                         check_step_num1=check_step_num1+3
  10.                    end
  11.                 end
  12.         end
  13.         -- ain
  14.                 exe('unwield zhanlu')
  15.                 exe('unwield taiji sword')
  16.                 exe('unwield mu jian')
  17.                 --exe('unwield xiao')
  18.         --exe('unwield ansha bishou')
  19.                 --exe('unwield shizi')
  20.                 --exe('unwield coin')
  21.         checkWield()
  22. end
复制代码
门派:明教
 楼主| 发表于 2020-4-27 15:42:57 | 显示全部楼层
旧公版未对Bag[p].kind进行筛选,所以在weapon_unwield函数执行的时候,会对所有具有Bag[p].kind的背包物品进行unwield。

这些物品如下——

    if Bag[l_name].id["armor"] then
            Bag[l_name].kind = "armor"
    end        
    if Bag[l_name].id["glove"] then
            Bag[l_name].kind = "glove"
    end
    if Bag[l_name].id["boot"] then
            Bag[l_name].kind = "boot"
    end        
    if Bag[l_name].id["mantle"] then
            Bag[l_name].kind = "mantle"
    end        
    if Bag[l_name].id["coat"] then
            Bag[l_name].kind = "coat"
    end
    if Bag[l_name].id["cap"] then
            Bag[l_name].kind = "cap"
    end
    if Bag[l_name].id["belt"] then
            Bag[l_name].kind = "belt"
    end                  
    if Bag[l_name].id["dao"] or Bag[l_name].id["blade"] then
            Bag[l_name].kind = "blade"
    end
    if Bag[l_name].id["jian"] or Bag[l_name].id["sword"] then
                    Bag[l_name].kind = "sword"
    end
             if Bag[l_name].id["xiao"] then
                    Bag[l_name].kind = "xiao"
             end
             if Bag[l_name].id["gun"] or Bag[l_name].id["club"] then
                    Bag[l_name].kind = "club"
             end
             if Bag[l_name].id["stick"] or Bag[l_name].id["zhubang"] or Bag[l_name].id["bang"] then
                    Bag[l_name].kind = "stick"
             end
             if Bag[l_name].id["bi"] or Bag[l_name].id["brush"] then
                    Bag[l_name].kind = "brush"
             end
             if Bag[l_name].id["qiang"] or Bag[l_name].id["spear"] then
                    Bag[l_name].kind = "spear"
             end
             if Bag[l_name].id["chui"] or Bag[l_name].id["hammer"] then
                    Bag[l_name].kind = "hammer"
             end
             if Bag[l_name].id["gangzhang"] or Bag[l_name].id["staff"] or Bag[l_name].id["zhang"] or Bag[l_name].id["jiang"] then
                    Bag[l_name].kind = "staff"
             end
             if Bag[l_name].id["bian"] or Bag[l_name].id["whip"] then
                    Bag[l_name].kind = "whip"
             end
             if Bag[l_name].id["hook"] then
                    Bag[l_name].kind = "hook"
             end
             if Bag[l_name].id["fu"] or Bag[l_name].id["axe"] then
                    Bag[l_name].kind = "axe"
             end
             if Bag[l_name].id["bishou"] or Bag[l_name].id["dagger"] then
                    Bag[l_name].kind = "dagger"
             end
             if weaponThrowing[l_name] then
                    Bag[l_name].kind = "throwing"
             end           
门派:明教
 楼主| 发表于 2020-4-27 15:46:23 | 显示全部楼层
可以看到,除了大部分的武器类型之外,上边都是一些护具,这就是weapon_unwield错误执行这些无效code的原因。

由于每次战斗前或走路中,都会执行weapon_unwield,会导致大量无效指令,增加flood风险,所以需要对护具id进行排除,排除的方法分享在二楼,可去weapon.lua中更新替换,还有lujing.lua,去神龙岛的——

  1. sld_unwield=function()
  2.         local x=""
  3.     for p in pairs(Bag) do
  4.           x=Bag[p].kind
  5.       if Bag[p].kind and not armorKind[x] and (not itemWield or itemWield[p]) then
  6.        local _,l_cnt = isInBags(Bag[p].fullid)
  7.        for i = 1,l_cnt do
  8.            exe('unwield '.. Bag[p].fullid ..' '..i)
  9.        end
  10.     end
  11.   end
  12.   exe('unwield mu jian')
  13.   if score.id=='liumaisj' then
  14.          exe('unwield fengyun stick')
  15.   end
  16. end
复制代码
门派:明教
 楼主| 发表于 2020-4-27 15:48:54 | 显示全部楼层
排除的方法很简单,weapon.lua中定义了——

  1. armorKind = {
  2. ["armor"]  = true,
  3. ["coat"]   = true,
  4. ["mantle"] = true,
  5. ["cap"]    = true,
  6. ["glove"]  = true,
  7. ["boot"]   = true,
  8. }
复制代码


只要是这些护具类型,统统不执行unwield即可,另外如果担心程序出错,导致物品不能及时卸下,则可以人工强制添加一些关键武器,比如我的zhanlu,gongbu,mu jian等。

或者干脆删除这些code,写死武器id也可。
门派:桃花岛
发表于 2020-4-27 16:06:53 | 显示全部楼层
师兄又来发福利了,强烈支持。
门派:峨嵋派
发表于 2020-4-27 19:07:33 | 显示全部楼层
感谢小风神分享 回头研究研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|书剑永恒MUD ( 闽ICP备14012032号|闽公网安备 35050202000162号 )

GMT+8, 2025-6-7 04:34 , Processed in 0.043189 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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