ChangeHumAbility是传奇脚本中用于调整人物属性的执行命令,而非判断命令。该命令直接修改角色防御、攻击、魔法、道术等属性值,效果仅在角色在线期间有效。判断属性变化需结合其他检测命令或变量记录实现。
ChangeHumAbility命令格式与属性编号
命令基本格式:ChangeHumAbility 属性编号 操作符 效果值 时间秒。属性编号1-20对应不同属性:1防御下限、2防御上限、3魔御下限、4魔御上限、5攻击下限、6攻击上限、7魔法下限、8魔法上限、9道术下限、10道术上限、11最大HP、12最大MP、13HP恢复、14MP恢复、15毒恢复、16毒躲避、17魔法躲避、18准确、19敏捷、20幸运。操作符支持+(增加)、-(减少)、=(设置)三种。效果值为1-65535的整数。时间秒参数可选,不带时间参数时效果在线一直有效,带时间参数则在指定秒数后恢复原状。
示例:ChangeHumAbility 2 + 10 60 表示角色防御上限增加10点,持续60秒后恢复。
命令执行原理与效果判断方式
ChangeHumAbility直接修改角色内存中的属性值,不提供内置判断机制。检测属性变化需通过以下三种方式:
1. 属性值直接检测:使用CHECKLEVELEX、CHECKDC、CHECKMC、CHECKSC等命令检测角色当前攻击、魔法、道术上下限。例如检测攻击上限:CHECKDC 2 > 10。
2. 变量记录对比:执行ChangeHumAbility前用MOV命令保存原始属性值到变量,修改后通过变量对比判断变化。示例:
#IF
#ACT
MOV N10 <$MAXDC> ;保存攻击上限到N10
ChangeHumAbility 6 + 15 300 ;攻击上限增加15点
SENDMSG 6 攻击上限从<$STR(N10)>提升至<$MAXDC>
3. 时间到期检测:带时间参数的ChangeHumAbility效果结束后,属性自动恢复。可通过定时器或登录触发检测恢复状态。例如设置定时器在效果结束后提示:
#ACT
ChangeHumAbility 6 + 15 300
SetOnTimer 1 300 0
[@OnTimer1]
#ACT
SENDMSG 6 攻击加成效果已结束。
属性检测命令与ChangeHumAbility配合使用
传奇脚本提供多种属性检测命令,可与ChangeHumAbility配合实现条件判断:
• CHECKDC 符号 数值:检测物理攻击上下限。符号为>、<、=,数值为具体点数。CHECKDC 2 > 50 检测攻击上限是否大于50点。
• CHECKMC 符号 数值:检测魔法攻击上下限。
• CHECKSC 符号 数值:检测道术攻击上下限。
• CHECKHP 符号 数值:检测当前HP值。
• CHECKMP 符号 数值:检测当前MP值。
• CHECKLEVEL 符号 等级:检测角色等级。
• CHECKITEM 物品名 数量:检测背包物品。
条件判断示例:
#IF
CHECKDC 2 > 100 ;检测攻击上限是否大于100
CHECKITEM 战神戒指 1 ;检测是否佩戴战神戒指
#ACT
ChangeHumAbility 6 + 20 180 ;满足条件则攻击上限增加20点持续3分钟
#ELSESAY
你的攻击力不足或未佩戴战神戒指。
变量系统记录属性变化状态
通过变量记录ChangeHumAbility执行状态,实现复杂判断逻辑:
1. 状态标记变量:使用私人变量记录属性加成是否生效。
#ACT
ChangeHumAbility 6 + 20 600
SETHUMAN 攻击加成 1 ;设置标记变量为1
SAVEVAR HUMAN 攻击加成 ..\QuestDiary\数据\攻击加成.txt
2. 时间记录变量:记录加成生效时间,用于计算剩余时间。
#ACT
ChangeHumAbility 6 + 20 600
SETHUMAN 加成开始时间 <$DATETIME>
SETHUMAN 加成剩余时间 600
3. 多层加成判断:多个ChangeHumAbility效果叠加时,通过变量记录叠加层数。
#IF
EQUAL <$HUMAN(攻击加成层数)> 2 ;检测是否已达2层
#ACT
SENDMSG 6 攻击加成已达最大层数。
#ELSEACT
ChangeHumAbility 6 + 15 300
CALCVAR HUMAN 攻击加成层数 + 1 ;层数加1
装备触发与ChangeHumAbility联动判断
ChangeHumAbility常与装备穿戴触发结合,通过检测装备判断是否执行属性调整。
装备触发示例(QFunction-0.txt中):
[@TakeOn1] ;装备穿戴触发
#IF
CHECKITEMW 斩魄刀 1 ;检测是否穿戴斩魄刀
#ACT
ChangeHumAbility 5 + 20 300 ;攻击下限+20
ChangeHumAbility 6 + 20 300 ;攻击上限+20
SENDMSG 6 斩魄刀效果:攻击上下限各增加20点,持续5分钟。
[@TakeOff1] ;装备取下触发
#IF
#ACT
ChangeHumAbility 5 - 20 ;移除攻击下限加成
ChangeHumAbility 6 - 20 ;移除攻击上限加成
SENDMSG 6 斩魄刀效果已移除。
地图进入触发属性调整判断
通过地图触发脚本,在玩家进入特定地图时自动调整属性。
地图触发示例(MapQuest_def目录下地图编号.txt):
[@EnterMap]
#IF
ISONMAP 盟重省 ;检测是否在盟重省地图
#ACT
ChangeHumAbility 1 + 5 ;防御下限+5
ChangeHumAbility 2 + 5 ;防御上限+5
SENDMSG 6 盟重省地图效果:防御增加5点。
[@LeaveMap]
#IF
#ACT
ChangeHumAbility 1 - 5 ;移除防御加成
ChangeHumAbility 2 - 5
SENDMSG 6 离开盟重省,防御加成移除。
时间条件判断与ChangeHumAbility结合
根据游戏内时间条件判断是否执行属性调整。
时间判断示例:
#IF
HOUR 20 22 ;检测是否在20-22点之间
#ACT
ChangeHumAbility 11 + 100 ;最大HP+100
ChangeHumAbility 12 + 50 ;最大MP+50
SENDMSG 6 晚间活动时间:HP+100,MP+50。
#IF
DAYOFWEEK 6 7 ;检测是否为周六或周日
#ACT
ChangeHumAbility 20 + 1 ;幸运+1
SENDMSG 6 周末福利:幸运+1点。
多条件复合判断实现精准控制
组合多个条件实现精确的属性调整判断。
复合条件示例:
#IF
CHECKLEVELEX > 40 ;等级大于40
CHECK [VIP会员] 1 ;VIP标记为1
CHECKGUILD 战神行会 ;行会为"战神行会"
CHECKITEM 荣誉勋章 1 ;佩戴荣誉勋章
#ACT
ChangeHumAbility 5 + 15 ;攻击下限+15
ChangeHumAbility 6 + 15 ;攻击上限+15
ChangeHumAbility 18 + 3 ;准确+3
SENDMSG 6 精英玩家加成生效!
属性恢复判断与状态清除
带时间参数的ChangeHumAbility效果到期后自动恢复,但有时需要手动清除效果。
手动清除示例:
#IF
EQUAL <$HUMAN(攻击加成状态)> 1 ;检测是否有攻击加成状态
#ACT
ChangeHumAbility 6 = <$MAXDC> ;将攻击上限设为当前值(实际效果为清除加成)
SETHUMAN 攻击加成状态 0 ;清除状态标记
SENDMSG 6 攻击加成效果已手动清除。
不同引擎的ChangeHumAbility差异判断
HERO引擎与GOM引擎在ChangeHumAbility属性编号上存在差异,编写脚本时需注意引擎版本。
HERO引擎属性编号1-12对应:1防御下限、2防御上限、3魔御下限、4魔御上限、5攻击下限、6攻击上限、7魔法下限、8魔法上限、9道术下限、10道术上限、11MaxHP、12MaxMP。
GOM引擎部分版本属性编号0-9对应:0攻击、1魔法、2道术、3攻击速度、4最大HP值、5最大MP值、6减攻击、7减魔法、8减道术、9按设置的值计算人物HP MP上限。
判断引擎类型示例:
;通过检测引擎特有命令判断引擎类型
#IF
CHECKCMD ChangeHumAbility
#ACT
;按HERO引擎编号编写
ChangeHumAbility 6 + 10
#ELSESAY
当前引擎不支持ChangeHumAbility命令。
实际应用案例:BUFF系统判断逻辑
完整BUFF系统示例,包含触发、判断、清除全流程:
;BUFF触发脚本
[@UseItemBUFF药水]
#IF
CHECKITEM BUFF药水 1
#ACT
TAKE BUFF药水 1
ChangeHumAbility 6 + 30 180 ;攻击上限+30持续3分钟
SETHUMAN 攻击BUFF剩余时间 180
SETHUMAN 攻击BUFF状态 1
SetOnTimer 10 1 0 ;启动1秒计时器
SENDMSG 6 BUFF生效:攻击+30,持续3分钟。
;计时器脚本(每秒执行)
[@OnTimer10]
#IF
LARGE <$HUMAN(攻击BUFF剩余时间)> 0
#ACT
CALCVAR HUMAN 攻击BUFF剩余时间 - 1
#ELSEACT
ChangeHumAbility 6 = <$MAXDC>
SETHUMAN 攻击BUFF状态 0
SENDMSG 6 BUFF效果已结束。
SetOffTimer 10
;BUFF状态查询
[@查询BUFF]
#IF
EQUAL <$HUMAN(攻击BUFF状态)> 1
#ACT
SENDMSG 6 攻击BUFF剩余时间:<$HUMAN(攻击BUFF剩余时间)>秒。
#ELSESAY
当前没有激活的攻击BUFF。
脚本调试与判断验证方法
编写完成后通过以下方法验证ChangeHumAbility判断逻辑:
1. 消息输出调试:在每个判断分支添加SENDMSG输出当前状态。
#ACT
SENDMSG 6 调试:当前攻击上限=<$MAXDC>,变量值=<$HUMAN(攻击加成)>
2. 临时变量记录:使用P0-P99临时变量记录中间值,验证判断逻辑。
#ACT
MOV P0 <$MAXDC> ;记录当前攻击上限
ChangeHumAbility 6 + 10
MOV P1 <$MAXDC> ;记录修改后攻击上限
SENDMSG 6 攻击上限从<$STR(P0)>变为<$STR(P1)>
3. 分段测试:将复杂判断拆分为多个简单脚本,分别测试每个条件分支。
4. 引擎控制台查看:通过M2引擎控制台查看脚本执行日志,定位错误行号。
常见判断错误与解决方法
1. 属性编号错误:使用错误属性编号导致调整错误属性。对照引擎说明书确认属性编号对应关系。
2. 变量未初始化:检测未初始化的变量导致判断失败。所有检测变量前确保已赋值。
3. 时间参数遗漏:忘记时间参数导致效果永久生效。明确是否需要时间限制。
4. 操作符错误:使用错误操作符,如该用=时用了+。根据需求选择+、-、=。
5. 效果值超范围:效果值超过1-65535范围导致命令失效。确保数值在有效范围内。
6. 条件顺序错误:多个条件判断顺序不合理。按从特殊到一般顺序排列条件。
通过正确组合ChangeHumAbility与属性检测命令,配合变量系统记录状态,可实现复杂的属性调整判断逻辑。关键在于理解ChangeHumAbility是执行命令而非判断命令,属性变化判断需依赖其他检测机制完成。
传奇脚本ChangeHumAbility命令判断方法与属性检测详解
来源:
作者:
点击:

