当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

IGE引擎M2笔记:魔王岭脚本完整结构与刷怪弓手逻辑拆解

热度:
一、地图声明与规则标记(MapInfo.txt)
魔王岭地图号固定K004,在Mir200\Envir\MapInfo.txt加一行:
[K004魔王岭]NORECONNECT(0159)MISSIONNOCALLHERONORECALLNOGUILDRECALLNODEARRECALLNOMasterRECALLNORANDOMMOVERUNHUMAN
NORECONNECT(0159)掉线回0159;MISSION标记为任务地图;NOCALLHERO禁召英雄;NORECALL禁记忆回城;NORANDOMMOVE禁随机卷;RUNHUMAN允许人物跑动。地图文件Mir200\Map\K004.map必须存在,尺寸与FINDMAPPATH坐标匹配。

二、脚本存放路径与文件分工
主NPC脚本:Mir200\Envir\QuestDiary\魔王岭\Main.txt(NPC对话、摆放弓手、领奖)
刷怪名库:Mir200\Envir\QuestDiary\魔王岭\刷怪.txt(每行一个怪物名,GetRandomName随机抽)
触发链路:NPC[@main]→[@首次寻路]→[@刷怪](DelayGoto循环)→[@出怪]/MOBPLACE→弓手击杀计数→[@位置]/[@使用]/[@移动]/[@领]
改完M2→控制→重读NPC脚本,不重启全服。

三、核心变量分工(M系列临时变量)
M20=总刷怪数(写59实际刷60只)
M21=每波刷怪数(如5/20)
M22=已刷怪计数
M23=当前波次序号
M24=正在刷怪波数(M22÷M21整除值)
M30=人物击杀计数(弓手杀怪累加)
M1=任务中止标记(=0时刷怪循环break)
S1=GetRandomName抽到的怪物名(字符型)
变量全用M/S,不下线保存,单局任务隔离;别用G/A全局变量否则多玩家串数据。

四、NPC主对话与首次寻路([@main]/[@首次寻路])

[@main]
赶快召唤出弓箭手,盗走天关宝物的怪物就要出现了!\
拦截逃离的怪物,夺回被盗的宝物!\
每次用5个弩牌换取弓箭手,都需要付出一张灵符哦\
请<摆放第一个弓箭手/@首次寻路>\
<移动弓箭手/@移动><领奖/@领><规则/@查看><回城/@返回>\

[@首次寻路]
#IF
FINDMAPPATHk00429235843
#ACT
MOVM2059
MOVM2120
MOVM220
MOVM230
MOVM240
MOVM300
DELAYGOTO2000@刷怪
CLOSE
#ELSESAY
无法到达终点!

FINDMAPPATH地图起点X起点Y终点X终点Y:校验出怪路径可达,仅在首次触发生效;不通则走#ELSESAY。DELAYGOTO2000=2秒后进刷怪循环。

五、刷怪循环([@刷怪]核心)

[@刷怪]
#IF
EQUALM10
#ACT
BREAK
#IF
CHECKMAPNAMESelfK004
#ELSEACT
BREAK
#IF
LARGEM22M20
#ACT
BREAK
#IF
EQUALM23M24
#ACT
INCM231
GETRANDOMNAME..\QuestDiary\魔王岭\刷怪.txtS1
#IF
CHECKRANGEMONCOUNTK00429230=0
#ACT
PARAM129
PARAM223
PARAM31
MOBPLACE<$STR(S1)>
INCM221
DIVM24<$STR(M22)><$STR(M21)>
DELAYGOTO2000@刷怪
#ELSEACT
DELAYGOTO1000@刷怪

执行顺序:M1=0中止→人物离开K004中止→已刷数≥总数中止→波次切换抽新怪名→出怪点(2923)无怪则MOBPLACE刷一只→M22+1→M24=整除波次→2秒后递归;有怪则1秒后重试。CHECKRANGEMONCOUNT地图XY范围数量判定出怪点占用。

六、弓手摆放/移动/换取(弩牌+灵符逻辑)
摆放位用地图坐标硬写,例1号位(5143)、9号位(4847)、8号位(4551):

[@32110号]
#IF
CHECKMAPMOBCOUNTK0045143弓箭手1>0
#ACT
MESSAGEBOX该位置已有弓箭手
#ELSEACT
TAKE弩牌5
TAKE灵符1
MOVEMOBTO弓箭手1K004<$STR(M10)><$STR(M11)>K0045143
CLOSE

MOVEMOBTO怪物名源地图源X源Y目标地图目标X目标Y:把已存在的“弓箭手1”从暂存位移到指定格。换弓手扣5弩牌+1灵符;纯移动扣1弩牌;CHECKMAPMOBCOUNT防重叠。弓手实体名在Monster.DB加“弓箭手1…弓箭手6”,Appr指向武器弓箭手动作帧。

七、击杀计数与奖励结算([@领])
QF里挂击杀触发,弓手杀怪算人物拦截数:

[@KillMonInMap_K004]
#IF
CHECKMAPNAMESelfK004
#ACT
INCM301
SAVEVARHUMAN拦截数<$STR(M30)>..\QuestDiary\魔王岭\个人数据.txt

领奖按M30分段:

[@领]
#IF
LARGEM3046
#ACT
GIVE银宝箱1
SENDMSG6拦截47-49只,获银宝箱!
#ELSEIF
LARGEM3040
#ACT
GIVE铜宝箱1
SENDMSG6拦截41-46只,获铜宝箱!
#ELSEIF
LARGEM300
#ACT
GIVE木宝箱1
SENDMSG6拦截少于41只,获木宝箱!
#ELSE
#ACT
MESSAGEBOX未拦截到任何怪物

拦截越多宝箱越高,0逃怪可加额外大奖(在M30=M20时判)。

八、刷怪名库格式(刷怪.txt)

白野猪
红野猪
黑野猪
角蝇

祖玛卫士
祖玛弓箭手
魔龙射手

GETRANDOMNAME按行随机取一行写入S1,MOBPLACE直接用S1名字刷怪;要分阶段难度就建魔王小怪.txt/魔王中怪.txt/魔王大怪.txt,在[@刷怪]里用SMALLM2210/35/40分段抽不同文件。

九、IGE/GEE/HERO差异点
•FINDMAPPATH、GETRANDOMNAME、MOBPLACE、MOVEMOBTO、CHECKRANGEMONCOUNT在IGE/GEE原生支持;老HERO无FINDMAPPATH,用MAPMOVE强传替代路径校验。

-IGE的MOBPLACE支持PARAM1/2/3出怪坐标参数;老BLUE需写MOBPLACE怪物名地图XY全参。
•弓手实体必须进Monster.DB且StdMode正常,否则MOBPLACE刷出透明怪不攻击。

-多人在同K004会共享M变量串数据,正经做法每人独立子地图K004-1/K004-2或用HUMAN自定义变量替代M系列。

十、常见坏象定位
•点摆放不刷弓手:弩牌/灵符不足、CHECKMAPMOBCOUNT坐标错、Monster.DB无“弓手1”

-刷怪只刷一种:M23=M24分支没INCM23,或刷怪.txt只有一行
•怪刷在墙里不动:2923非可站立格,MapInfo阻挡层与坐标不符

•离开地图还在刷:CHECKMAPNAMESelfK004写成CHECKMAPNAMEK004(缺Self)

-领奖计数0:QF杀怪触发标签名错(IGE用@KillMonInMap_K004,非@KillMon)
•重读脚本不生效:NPC在MapQuest_def而非QuestDiary,路径放错目录

整套魔王岭链路:MapInfo标K004→QuestDiary\魔王岭\Main.txt写[@main]/[@首次寻路]/[@刷怪]/[@领]→刷怪.txt备怪名→Monster.DB加弓手实体→QF挂击杀计数→M2重读NPC脚本→进图5弩牌+1灵符换弓手→FINDMAPPATH起刷→MOBPLACE出怪→弓手拦截→M30结算宝箱。任一层坐标、变量、实体名、标签名错位即不刷怪或领不到奖。
[顶部]