\(MONY> 山海守卫HP:<\)是通鉴2.1.3内置的守护型怪物,定位为地图定点守卫,具备仇恨锁定、血量分段技能、濒死召唤小怪、死亡掉落专属道具的逻辑,3K引擎怪物脚本放置在MonAi.txt,怪物基础属性在Monster.DB配置,编写前备份MonAi.txt、Monster.DB、QFunction-0.txt,修改怪物AI后需要重载怪物AI,语法错误会导致怪物不刷新、不攻击、技能失效。
\(MONY> 山海守卫HP:<\)基础设定,怪物编号自定义,怪物名称\(MONY> 山海守卫HP:<\),属于静态守卫怪,默认在指定坐标定点驻守,不会主动大范围巡逻,玩家进入攻击范围触发仇恨。血量分段设置三段阈值,血量70%、40%、15%分别触发不同技能,血量低于15%召唤山海护卫小怪,死亡掉落山海信物、通鉴残页。3K引擎怪物AI使用[@MonsterDie]、[@MonsterHurt]、[@MonsterHPChange]事件,怪物脚本写在MonAi内,以怪物名称作为匹配标记。
Monster.DB基础配置,在怪物数据库添加\(MONY> 山海守卫HP:<\)条目,字段依次为怪物名称,形象编号,血量,魔法,防御,魔御,攻击下限,攻击上限,攻击速度,移动速度,攻击范围,AI类型。AI类型填写1为定点守卫,锁定原地,不会远距离追击,超出攻击范围仇恨丢失。移动速度调低,保证守卫不会脱离驻守点位。
MonAi.txt\(MONY> 山海守卫HP:<\)主体脚本,3K引擎识别怪物名称匹配,不要写错怪物名称。
[@MonsterHurt]
#IF
ISMONNAME \(MONY> 山海守卫HP:<\)
#ACT
;受到伤害触发,获取当前怪物血量百分比
GETMONHP S1
#IF
LARGE S1 70
#ACT
;血量大于70%,普通近战攻击,无额外技能
BREAK
#IF
SMALL S1 70
LARGE S1 40
#ACT
;血量70%-40%,释放范围群体攻击
MONCASTSKILL \(MONY> 山海守卫HP:<\) 群体重击
SENDMAPMSG 0 255 255 0 \(MONY> 山海守卫HP:<\)催动大地之力,周围震动!
BREAK
#IF
SMALL S1 40
LARGE S1 15
#ACT
;血量40%-15%,释放减益,降低目标防御
MONCASTSKILL \(MONY> 山海守卫HP:<\) 破甲冲击
SENDMAPMSG 0 255 100 0 \(MONY> 山海守卫HP:<\)发动破甲,目标防御下降!
BREAK
#IF
SMALL S1 15
#ACT
;血量低于15%,召唤2只山海护卫
MONSPAWN 山海护卫 2
SENDMAPMSG 0 255 0 0 \(MONY> 山海守卫HP:<\)召唤护卫前来助战!
BREAK
BREAK
[@MonsterDie]
#IF
ISMONNAME \(MONY> 山海守卫HP:<\)
#ACT
;死亡事件,掉落道具,全局地图消息
DROPMONITEM
SENDMAPMSG 0 0 255 0 \(MONY> 山海守卫HP:<\)被击败,掉落山海信物!
BREAK
[@MonsterHPChange]
#IF
ISMONNAME \(MONY> 山海守卫HP:<\)
#ACT
GETMONHP S1
;血量变动实时刷新,可增加地图飘字,显示剩余血量百分比
CREATEMAPFLOATTEXT <$MONMAP> <$MONX> <$MONY> \(MONY> 山海守卫HP:<\)HP:<$STR(S1)>%
BREAK
定点驻守限制,3K引擎怪物AI类型1定点守卫,默认不会离开出生坐标。如果出现\(MONY> 山海守卫HP:<\)乱跑,在MonAi增加坐标判定,当怪物离开出生坐标范围,强制传送回刷新点位。
[@MonsterHurt]
#IF
ISMONNAME \(MONY> 山海守卫HP:<\)
#ACT
GETMONPOS S0 S1 S2
GETMONBIRTHPOS S3 S4 S5
;判断和出生坐标距离大于5格,传回出生点
GETDIST <$STR(S1)> <$STR(S2)> <$STR(S4)> <$STR(S5)> S6
#IF
LARGE S6 5
#ACT
MONMOVE <$STR(S3)> <$STR(S4)>
SENDMAPMSG 0 255 0 0 \(MONY> 山海守卫HP:<\)回归驻守位置
BREAK
BREAK
仇恨机制配置,\(MONY> 山海守卫HP:<\)只攻击主动攻击的玩家,不主动攻击路过玩家。在[@MonsterSee]事件配置视野范围,视野设置4格,玩家进入4格范围并且攻击怪物才触发仇恨,单纯路过不会激活。
[@MonsterSee]
#IF
ISMONNAME \(MONY> 山海守卫HP:<\)
#ACT
GETMONSEE S0
#IF
EQUAL S0 1
#ACT
SENDMAPMSG 0 255 255 255 \(MONY> 山海守卫HP:<\)注意到入侵者
BREAK
BREAK
山海护卫小怪配套脚本,山海护卫为召唤物,存活时间限制,30秒自动消失,死亡无掉落。在MonAi增加山海护卫事件。
[@MonsterBorn]
#IF
ISMONNAME 山海护卫
#ACT
MONTIMER 1 30000
BREAK
[@MonsterTimer1]
#IF
ISMONNAME 山海护卫
#ACT
MONDELETE
BREAK
爆率文件配置,在MonDrop文件夹新建\(MONY> 山海守卫HP:<\).txt,设置基础掉落,山海信物、通鉴残页,低概率掉落通鉴碎片。
;\(MONY> 山海守卫HP:<\)爆率
山海信物 1/1
通鉴残页 1/3
通鉴碎片 1/20
地图NPC刷新配置,在Npc.txt或者MonGen.txt设置\(MONY> 山海守卫HP:<\)刷新,MonGen条目格式为地图号 X Y 怪物名称 数量 刷新间隔。例如
3 120 120 \(MONY> 山海守卫HP:<\) 1 360
代表地图3,坐标120,120刷新1只\(MONY> 山海守卫HP:<\),死亡360秒重新刷新。
技能数据库配置,打开Skills.DB,添加群体重击、破甲冲击两个技能,设置技能动画、伤害系数、作用范围,怪物技能必须在技能库存在,MONCASTSKILL才能正常释放,技能名称必须和脚本内完全一致,区分大小写。
常见报错与异常排查,怪物名称大小写不一致,MonAi脚本匹配失败,\(MONY> 山海守卫HP:<\)无AI、不释放技能。怪物AI类型选错,设置为巡逻AI,守卫到处乱跑。MONCASTSKILL技能名称错误或者技能库不存在,怪物不会释放技能。召唤小怪MONTIMER没有设置,山海护卫永久存在不消失。脚本内使用中文全角符号,怪物AI加载失败。修改MonAi之后没有重载怪物AI,改动不生效,3K引擎重载怪物AI命令为@ReloadMonAI。怪物血量百分比读取指令写错,血量分段判断失效,不会触发分段技能。地图坐标范围判断距离数值写错,守卫无法回位。
性能优化要点,\(MONY> 山海守卫HP:<\)属于地图定点BOSS,不要大批量同时刷新,单地图数量控制在3只以内。[@MonsterHPChange]事件会频繁触发,不要在里面写入大量SENDMAPMSG,避免刷屏。召唤小怪设置自动销毁定时器,防止大量召唤怪堆积占用资源。
调试步骤,配置Monster.DB、MonAi、爆率、技能库,重载怪物AI,进入地图触发\(MONY> 山海守卫HP:<\)。测试不同血量阶段,验证三段技能触发、召唤小怪。测试怪物被拉扯远离点位,确认自动回归出生坐标。击杀\(MONY> 山海守卫HP:<\),核对掉落道具与地图公告。等待召唤的山海护卫,确认30秒自动清除。多账号同时攻击,检查仇恨锁定是否正常,不会出现仇恨错乱。
扩展功能,增加\(MONY> 山海守卫HP:<\)护盾机制,血量第一次降到70%生成护盾,护盾存在期间减免伤害。增加击杀计数,机器人脚本统计全服\(MONY> 山海守卫HP:<\)击杀数量,完成任务可领取通鉴奖励。增加守卫阵营判定,同阵营NPC不会被\(MONY> 山海守卫HP:<\)攻击。增加难度动态调整,地图内玩家数量越多,\(MONY> 山海守卫HP:<\)攻击、血量同步提升。全部配置完成,长时间挂机测试,确认怪物不会卡AI、召唤小怪不会残留、技能触发稳定。
盛大传奇十周年通鉴2.1.3版本\(MONY> 山海守卫HP:<\)3K引擎怪物AI脚本、触发事件与
来源:
作者:
点击:

