39传奇素材网 发表于 2025-8-5 17:10:53

分享一下Hero引擎的脚本语法

Hero 引擎作为传奇早期经典引擎,其脚本语法简洁直观,注重基础功能的稳定性,适合复古版本(如 1.76)的简单逻辑触发。以下是其核心脚本语法、常用函数及示例,帮助快速掌握基础用法:
一、脚本文件与基础结构
1. 核心脚本文件
AutoRunQuest.txt:全局触发脚本(每 100ms 执行一次),用于检测玩家状态(等级、地图、物品等)并触发动作。
QFunction.txt:功能型脚本,通过 NPC 对话、命令(如@触发)调用。
DeadMonster.txt:怪物死亡时触发的脚本(需在 M2 引擎中开启 “怪物死亡触发”)。
MapQuest.txt:地图专属脚本(路径:Envir\QuestDiary\地图编号\MapQuest.txt),仅在指定地图生效。
2. 基础语法结构
所有脚本均遵循 “条件判断(#IF)+ 执行动作(#ACT)” 的逻辑,无嵌套条件(不支持#IF内再嵌套#IF)。

ini
#IF          ; 条件判断:满足以下所有条件才执行#ACT
条件1
条件2
#ACT         ; 执行动作:条件满足时执行的操作
动作1
动作2
#ELSEACT   ; 可选:条件不满足时执行的操作
动作3
二、常用条件判断函数(#IF块)
用于检测玩家状态、环境参数等,返回 “真” 或 “假”。

函数格式        功能说明        示例
CHECKLEV [等级]        检查玩家等级是否≥指定值        CHECKLEV 30(等级≥30)
CHECKMAP [地图编号]        检查玩家是否在指定地图        CHECKMAP D717(在祖玛七层)
CHECKITEM [物品编号] [数量]        检查玩家是否持有指定物品及数量        CHECKITEM 30 1(持有屠龙 ×1)
CHECKGOLD [数量]        检查玩家金币是否≥指定值        CHECKGOLD 10000(金币≥1 万)
MONSTERID [怪物编号]        检查目标是否为指定怪物(用于攻击 / 死亡事件)        MONSTERID 145(目标是祖玛教主)
HITMON        检查玩家是否正在攻击怪物        -
DEAD        检查玩家是否死亡        -
三、常用执行动作函数(#ACT块)
满足条件后执行的操作,如修改属性、传送、给予物品等。

函数格式        功能说明        示例
GIVE [物品编号] [数量]        给予玩家指定物品        GIVE 30 1(给屠龙 ×1)
TAKE [物品编号] [数量]        扣除玩家指定物品        TAKE 30 1(扣屠龙 ×1)
GIVEGOLD [数量]        给予玩家金币        GIVEGOLD 10000(给 1 万金币)
TAKEGOLD [数量]        扣除玩家金币        TAKEGOLD 5000(扣 5 千金币)
MOVETOMAP [地图编号]         传送玩家至指定地图坐标        MOVETOMAP S001 50 50(传至 S001 地图 (50,50))
SENDMSG [颜色] [内容]        向玩家发送消息(颜色:0 - 白色,5 - 红色等)        SENDMSG 7 恭喜获得奖励!(紫色消息)
SETLEVEL [等级]        强制修改玩家等级        SETLEVEL 40(将等级改为 40 级)
SETINVINCIBLE [状态]        设置无敌模式(1 = 开启,0 = 关闭)        SETINVINCIBLE 1(开启无敌)
CALLMONS [怪物编号] [数量]        在玩家周围召唤怪物        CALLMONS 101 3(召唤 3 只祖玛卫士)
四、特殊功能脚本示例
1. 新手保护(等级 < 30 级开启无敌)
ini
; 写入AutoRunQuest.txt
#IF
CHECKLEV < 30; 玩家等级<30级
#ACT
SETINVINCIBLE 1; 开启无敌
SENDMSG 7 新手保护:30级前无敌!
#ELSEACT
SETINVINCIBLE 0; 等级≥30级关闭无敌
2. 使用道具 “副本卷轴” 传送至副本
ini
; 写入QFunction.txt(通过NPC对话或命令触发)
#IF
CHECKITEM 1001 1; 检查是否持有“副本卷轴”(编号1001)
#ACT
TAKE 1001 1       ; 扣除卷轴
MOVETOMAP S001 50 50; 传送至副本S001
SENDMSG 6 已进入副本,限时30分钟!
#ELSEACT
SENDMSG 5 你没有副本卷轴!
3. 击杀 BOSS(编号 2001)必掉 “特殊令牌”
ini
; 写入DeadMonster.txt
#IF
MONSTERID 2001; 被击杀的是BOSS(2001)
#ACT
GIVE 200 1      ; 给击杀者“特殊令牌”(编号200)
SENDMSG 0 玩家%s击杀了变异祖玛教主,获得特殊令牌!; 全服公告(%s自动替换为玩家名)
4. 进入指定地图(如 “泡点地图”)获得经验
ini
; 写入地图专属脚本MapQuest.txt(对应“泡点地图”编号)
#IF
CHECKMAP 泡点地图; 确认在泡点地图
#ACT
ADDEXP 1000       ; 每次触发增加1000经验(因AutoRunQuest每100ms执行,需控制频率)
SENDMSG 5 泡点中,每秒获得1000经验!
五、Hero 引擎脚本的局限性
不支持复杂逻辑:无嵌套条件(#IF内不能再写#IF),无法实现多条件 “与 / 或” 判断(需拆分多个脚本)。
高级功能缺失:没有定时器(无法延迟执行)、动态属性倍率(如攻击随血量变化)、复杂特效触发(如全屏技能光效)。
函数参数简单:多数函数仅支持 1-2 个参数,例如CALLMONS无法指定召唤坐标(只能在玩家周围)。
六、实用技巧
控制触发频率:因AutoRunQuest.txt每 100ms 执行一次,高频操作(如泡点加经验)需用RANDOM限制,例如:
ini
#IF
RANDOM 10; 10%概率触发(约1秒1次)
#ACT
ADDEXP 1000

利用 NPC 触发:通过 NPC 对话调用脚本(在NpcGen.txt中绑定 NPC 编号与脚本),避免全局脚本冗余。
配合配置文件:特殊属性(如怪物免疫)需在MapAttr.txt中配置,脚本仅用于提示(如 “该怪物免疫魔法”)。

Hero 引擎脚本适合实现复古版本的基础玩法(如新手保护、简单任务、固定掉落),虽功能有限,但稳定性高、资源消耗低,是 1.76 等经典版本的首选。如需复杂玩法(如多阶段 BOSS、动态特效),建议搭配第三方插件或升级至 GOM/GEE 引擎。

页: [1]
查看完整版本: 分享一下Hero引擎的脚本语法