自定义蜡烛、火把、灯光类物品掉持久,先定StdMode是否属于照明物,再定Source走时间消耗还是受击消耗,最后用QFunction做按分钟扣持久、亮度联动、下限保护。蜡烛位置在穿戴触发里通常是2,武器1、衣服0、项链3,写脚本按位置号对,不按物品分类瞎套。
StdItems基础字段
DBC打开Mud2/DB/StdItems,新建蜡烛类条目。Name按实际叫“魔法蜡烛”“幽冥火把”“长明灯”;StdMode按引擎照明物规则填,老Hero/Leg标准里照明物走专用StdMode,不要用武器0、不要用普通首饰3/7/8,避免M2按武器或首饰逻辑扣持久。Looks给客户端Data里蜡烛WIL索引,没有对应图就先套原版蜡烛Looks,后期再换补丁。Weight按实际,太重会影响捡取和交易。DuraMax按1000=1点游戏持久填写,想要50点持久填50000,想要200点填200000;初始Dura可等于DuraMax,也可低于上限让玩家修。Source字段决定掉法:0是按时间掉,1是按受攻击/攻击掉,和勋章、火把类特殊物品通用。 DuraMax单位参考StdItems解析,1000代表1点持久,40000代表40点,改大改小都按这个进制。
按时间掉持久的标准做法
只做“点燃后慢慢烧”不需要脚本。StdItems里Source=0,DuraMax给目标总持久,初始Dura可按满值或活动初值。M2参数里确认照明物时间消耗开关开启;GOM/GEE高版本在物品属性、全局控制可看特殊物品时间损耗,部分版本另有蜡烛亮度换算,按“持久越高亮度越高、持久降低亮度降低”处理。若某版本把10000持久折算1亮度、最高5亮度,就给DuraMax=50000起步,Source=0,不加任何QF定时扣持久,避免双套扣减导致狂掉。 想整体变慢,改Mir200/!Setup.txt的ItemDuraRate,数值越大越慢,默认常1000,改2000整体减半;只让蜡烛慢就别动全局,改用下面QF单独计时更准。
按受攻击掉持久的做法
蜡烛不想随时间烧,只希望被打、撞怪、承受伤害时掉,StdItems里Source=1。这样照明物近似普通装备逻辑,在线挂机不点怪也几乎不耗,适合挂机服、合击服、低损耗版本。注意Source=1后如果DuraMax很低,频繁受击仍会很快没持久;把DuraMax调高、配合修复油即可。勋章类改受击也用同样Source思路,蜡烛套用不会错。
QFunction按分钟自定义扣持久
要做“每5分钟掉1点、低于10点自动提示、到1点停止再不自动消失”用QFunction-0。文件在Mir200/Envir/Market_Def/QFunction-0.txt,只追加不覆盖原内容。
佩戴启动:
[@TakeOn2]
IF
CheckItemW 魔法蜡烛 1
ACT
SetOnLineTimer 300 蜡烛扣持久
SendMsg 5 已点燃魔法蜡烛,每5分钟消耗1点持久
脱下清理:
[@TakeOff2]
IF
CheckTakeOffItem 魔法蜡烛
ACT
KillOnLineTimer 蜡烛扣持久
SendMsg 5 已熄灭魔法蜡烛,停止计时
定时执行段按引擎定时器命令写,思路是用变量记录该位置蜡烛当前持久,每次减1000代表1点;若低于10000则不再减,只发“亮度不足请修复”。部分引擎定时器不直接改装备Dura,需要用TakeOutItem/Give新物、或用M2物品指令SetItemDura;没有对应命令就用“佩戴时写人物变量记录剩余分钟,脱下/上线按变量重新给Dura”的折中方案。多蜡烛名称就每个物品名写一组CheckItemW,别用模糊匹配。
多档火把示例:
[@TakeOn2]
IF
CheckItemW 幽冥火把 1
ACT
SetOnLineTimer 600 火把扣持久
SendMsg 5 幽冥火把每10分钟掉1点
[@TakeOff2]
IF
CheckTakeOffItem 幽冥火把
ACT
KillOnLineTimer 火把扣持久
如果引擎不支持SetOnLineTimer,改在[@PlayTimer]或M2定时脚本里遍历在线角色,检测蜡烛位CheckItemW,再按自定义算法扣。不要同时在Source=0和QF定时器双扣,否则会出现上线几分钟持久见底。
亮度与持久联动
纯时间蜡烛若引擎支持亮度,按Dura比例控制最省事:DuraMax=50000、初始50000为满亮,25000半亮,5000微亮,0灭。自定义服不想依赖引擎亮度,就用QF读取Dura分段发消息,30以上提示“照明充足”,10到30提示“光线昏暗”,1到10提示“烛火摇曳”,0处理为自动卸下或发“蜡烛已灭”。读取Dura的命令各引擎不同,Hero可用GetItemDura类扩展,GOM用物品变量,Blue按QFunction变量;没有读取命令就用在线定时器计数代替真实Dura,脱下时把剩余计数写回Dura。
防止异常掉持久和自动消失
蜡烛没原因狂掉,先查三处:StdItems的Source是否0但同时又写QF定时;M2全局ItemDuraRate是否过小,或!Setup里WeaponDuraRate/ItemDuraRate被改成很小值;地图是否挂了MapSetup损耗倍率或ItemDuraLost强制扣照明物。 全服不想任何装备掉持久可设NoItemDura=1,但蜡烛会完全不耗,只做展示服可用。 只想蜡烛不掉就Source=1且不写QF,或者Source=0但DuraMax给极大值、M2关照明时间损耗。
持久到0自动消失是正常机制,蜡烛也适用。想“到1点停用但不消失”做下限保护:QF定时扣之前判断Dura>1000再扣,等于或小于1000只发提示不执行扣减;用变量方案就在剩余分钟>1时才减,1分钟时停止并提示修复。修复用普通蜡烛修复NPC、杂货店修理、或自定义脚本TakeItem修复油再SetItemDura。
全局慢耗与分物品慢耗
全服装备都慢:!Setup写WeaponDuraRate=2000、ItemDuraRate=2000,武器和通用物品消耗减半;只想蜡烛慢不要动全局,避免武器衣服也跟着变,导致打BOSS不耗装、经济失衡。 分地图慢耗用MapSetup,格式按所用引擎写地图编号和损耗倍率,安全区可配合IfMap安全区ThenItemDuraLost全0。 指定蜡烛慢耗若引擎支持ItemDuraLost物品编号,就给蜡烛Idx单独低倍率;不支持就用Source=1+高DuraMax,基本能达到“很少掉”的效果。
GOM/GEE补充
GOM类照明物Source=0/1规则通用;高版本M2物品属性里可图形化看特殊物品时间损耗,自定义蜡烛先试Source再试QF,不要一上来改WIL和PAK。若用微端和PAK加密,蜡烛图标改完要重新生成登录器,否则客户端只显示原版烛火、服务端却按新Dura扣,容易被误认为“掉持久异常”。 部分GOM资料把10000持久当1亮度、最高5亮度,自定义长明蜡烛给50000到100000足够,再高只是延长在线时间,不改变亮度上限。
Hero/Leg补充
Hero用DBC,Source含义以所用Hero版本说明为准;多数Hero蜡烛、勋章按Source=0时间、1受击。照明物StdMode按Hero物品规则,不要当Stdmode=16特殊面巾处理,Source字段在Stdmode=16时可能代表其他含义。 自定义属性可用M2新增属性给蜡烛加光环、范围回血等,但持久仍交给Source或QF,不要把“吸收伤害”“回血”和“掉持久”写在同一段导致逻辑混乱。
Blue补充
Blue QFunction同样用@TakeOn2/@TakeOff2,变量命令用Blue官方QF变量,不混用GOM的SetOnLineTimer名称。定时扣用Blue周期函数或M2全局定时器,检测蜡烛位后按分钟写变量;佩戴触发只做启动和提示,脱下触发做KillTimer和变量存档。多角色、英雄蜡烛要分别判断主号位置与英雄物品位置,英雄不戴就跳过,避免主号扣英雄蜡烛。
测试流程
建测试号,数据库建三种蜡烛:A源0时间、DuraMax50000;B源1受击、DuraMax50000;C源0时间+DuraMax50000但额外写QF五分钟扣1000。分别点燃站安全区、站怪物区、被怪打、手动脱戴。观察1小时:A应缓慢按时间掉,B安全区几乎不动、被打才掉,C若同时原生时间掉和QF掉会明显比A快,说明双扣,必须关Source或删QF定时。到下限后确认是否自动消失,按需要加1点保护。改完备份StdItems、QFunction-0、!Setup、M2物品属性配置,回滚直接覆盖。
常见错误
Source=0又写每秒QF扣持久,结果刚点燃几分钟没;DuraMax按1=1填成50而不是50000,蜡烛一上线就0;Looks乱填导致客户端蜡烛透明但服务端还在扣;地图MapSetup损耗倍率写太大,全照明物异常;多蜡烛不按Name分组,只用@TakeOn2无条件扣,结果戴普通火把也被按魔法蜡烛算法扣;脱下不KillTimer,下次再戴两个定时器并行,越掉越快。按StdMode分组、Source定模式、QF只做补充计时、DuraMax用1000进制、脱戴成对写,基本不会出异常。
传奇自定义蜡烛火把照明物按时间受攻击掉持久与防异常消失全配置
来源:
作者:
点击:

