修正[自定义AI_生物]
1、增加CustomCreatureHook-动态分配AI生物脚本; 2、去掉“移动范围”,修改为“逃跑”; 3、添加md和说明文档
This commit is contained in:
parent
1ad0565da2
commit
7b6e27c422
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
// modules\mod_GhostScripts\src\mod_Scripts\CustomScripts.h
|
||||
|
||||
#pragma once
|
||||
enum GobActionTypes
|
||||
{
|
||||
gob_ACTION_TYPE_NONE,
|
||||
@ -38,13 +39,13 @@ enum CreatureEventTypes
|
||||
enum CreatureActionTypes
|
||||
{ // actionParam1 actionParam2 actionParam3
|
||||
ACTION_TYPE_NONE,
|
||||
ACTION_TYPE_CAST_SPELL, //释放技能 SPELL_ID_1, SPELL_ID_2, -
|
||||
ACTION_TYPE_TALK, //说话 说话内容 -
|
||||
ACTION_TYPE_ACTIVE_OR_DEACTIVE_OBJECT, //激活 CreatureEntry GameObjectEntry -
|
||||
ACTION_TYPE_SUMMON, //召唤生物或物体 CreatureEntry或- GameObjectEntry 持续时间 坐标ID
|
||||
ACTION_TYPE_ALT_PHASE, //设定阶段 eventPhase -
|
||||
ACTION_TYPE_ALT_GOB, //打开或关闭物体 GameObjectEntry或- GameObjectEntry 范围
|
||||
ACTION_TYPE_MOVE_RANDOM
|
||||
ACTION_TYPE_CAST_SPELL, // 释放技能 SPELL_ID_1, SPELL_ID_2, -
|
||||
ACTION_TYPE_TALK, // 说话 说话内容 -
|
||||
ACTION_TYPE_ACTIVE_OR_DEACTIVE_OBJECT, // 激活 CreatureEntry GameObjectEntry -
|
||||
ACTION_TYPE_SUMMON, // 召唤生物或物体 CreatureEntry或- GameObjectEntry 持续时间 坐标ID
|
||||
ACTION_TYPE_ALT_PHASE, // 设定阶段 eventPhase -
|
||||
ACTION_TYPE_ALT_GOB, // 打开或关闭物体 GameObjectEntry或- GameObjectEntry 范围
|
||||
ACTION_TYPE_FLEE // 逃跑
|
||||
};
|
||||
|
||||
struct CreatureScriptTemplate
|
||||
@ -158,6 +159,8 @@ public:
|
||||
|
||||
|
||||
void CastRandSpell(Creature* creautre, uint32 diff);
|
||||
|
||||
void ReloadCreatureAI(uint32 entry); // 强制重新分配AI
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
322
modules/mod_GhostScripts/src/mod_Scripts/README.md
Normal file
322
modules/mod_GhostScripts/src/mod_Scripts/README.md
Normal file
@ -0,0 +1,322 @@
|
||||
AzerothCore 自定义脚本模块 - mod_GhostScripts
|
||||
此模块为 AzerothCore 提供了强大的自定义脚本功能,允许通过数据库配置实现复杂的游戏对象和生物行为,无需修改核心代码。
|
||||
|
||||
🚀 功能特性
|
||||
核心功能
|
||||
动态AI分配:无需修改creature_template表,通过数据库配置自动为生物分配AI
|
||||
|
||||
事件驱动:支持多种事件触发机制(进入战斗、血量变化、死亡等)
|
||||
|
||||
丰富的动作类型:说话、释放技能、召唤、移动、阶段切换等
|
||||
|
||||
阶段系统:支持多阶段AI行为,适合复杂的Boss战斗
|
||||
|
||||
重复执行:支持动作的定时重复执行,可配置随机间隔
|
||||
|
||||
延迟执行:支持动作的延迟触发
|
||||
|
||||
兼容性
|
||||
✅ 使用现代的JustEngagedWith而非过时的EnterCombat
|
||||
|
||||
✅ 不影响现有的SmartAI和其他AI系统
|
||||
|
||||
易用性
|
||||
📝 中文界面友好的数据库表结构
|
||||
|
||||
🔧 详细的字段注释和使用说明
|
||||
|
||||
📖 丰富的示例和最佳实践
|
||||
|
||||
🐛 完善的错误处理和调试日志
|
||||
|
||||
🏗️ 系统架构
|
||||
组件概览
|
||||
图表
|
||||
代码
|
||||
graph TD
|
||||
A[数据库配置] --> B[CustomScript]
|
||||
B --> C[CustomCreatureScriptAI]
|
||||
C --> D[事件处理器]
|
||||
C --> E[动作执行器]
|
||||
F[游戏世界] --> C
|
||||
C --> F
|
||||
核心类说明
|
||||
CustomScript:主要的脚本管理类,负责从数据库加载配置
|
||||
|
||||
CustomCreatureScriptAI:自定义AI实现,继承自ScriptedAI
|
||||
|
||||
CustomCreatureHook:动态AI分配钩子,在生物创建时自动分配AI
|
||||
|
||||
ActionTemplate:动作模板结构,存储具体的AI行为配置
|
||||
|
||||
📦 安装配置
|
||||
前置要求
|
||||
AzerothCore服务器(最新版本)
|
||||
|
||||
MySQL数据库
|
||||
|
||||
支持自定义模块的编译环境
|
||||
|
||||
安装步骤
|
||||
复制源代码文件
|
||||
|
||||
bash
|
||||
# 将以下文件复制到你的模块目录
|
||||
src/mod_Scripts/CustomScripts.h
|
||||
src/mod_Scripts/CreatureScripts.cpp
|
||||
创建数据库表
|
||||
|
||||
sql
|
||||
-- 在acore_custom数据库中执行
|
||||
CREATE TABLE IF NOT EXISTS `_自定义AI_生物` (
|
||||
`生物ID` int NOT NULL,
|
||||
`事件类型` varchar(50) NOT NULL,
|
||||
`事件阶段ID` int DEFAULT '0',
|
||||
`延迟时间` int DEFAULT '0' COMMENT '秒',
|
||||
`最小重复时间` int DEFAULT '0' COMMENT '秒',
|
||||
`最大重复时间` int DEFAULT '0' COMMENT '秒',
|
||||
`动作类型` varchar(50) NOT NULL,
|
||||
`动作参数1` varchar(255) DEFAULT NULL,
|
||||
`动作参数2` int DEFAULT '0',
|
||||
`动作参数3` int DEFAULT '0',
|
||||
`comment` varchar(255) DEFAULT NULL COMMENT '规则描述'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `_模板_随机技能组` (
|
||||
`随机技能组ID` int NOT NULL,
|
||||
`技能ID` int NOT NULL,
|
||||
`释放下一技能最小延迟` int DEFAULT '0' COMMENT '秒',
|
||||
`释放下一技能最大延迟` int DEFAULT '0' COMMENT '秒'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
注册脚本(在模块加载器中添加)
|
||||
|
||||
cpp
|
||||
AddSC_CustomCreatureScript();
|
||||
编译并重启服务器
|
||||
|
||||
bash
|
||||
# 重新编译服务器
|
||||
make -j$(nproc)
|
||||
|
||||
# 重启服务器以加载新的AI系统
|
||||
./worldserver
|
||||
🗄️ 数据库表结构
|
||||
主表:_自定义AI_生物
|
||||
字段名 类型 说明
|
||||
生物ID int 生物模板ID
|
||||
事件类型 varchar 触发事件(进入战斗/血量变化等)
|
||||
事件阶段ID int 阶段ID(0表示所有阶段)
|
||||
延迟时间 int 动作延迟时间(秒)
|
||||
最小重复时间 int 动作最小重复时间(秒)
|
||||
最大重复时间 int 动作最大重复时间(秒)
|
||||
动作类型 varchar 执行动作类型
|
||||
动作参数1 varchar 主要动作参数
|
||||
动作参数2 int 次要动作参数
|
||||
动作参数3 int 扩展动作参数
|
||||
comment varchar 规则描述(可选)
|
||||
辅助表:_模板_随机技能组
|
||||
字段名 类型 说明
|
||||
随机技能组ID int 技能组标识ID
|
||||
技能ID int 法术ID
|
||||
释放下一技能最小延迟 int 最小延迟(秒)
|
||||
释放下一技能最大延迟 int 最大延迟(秒)
|
||||
|
||||
🎯 事件类型详解
|
||||
1. 进入战斗 (EVENT_TYPE_COMBAT)
|
||||
触发时机:生物与玩家或其他单位开始战斗
|
||||
|
||||
对应函数:JustEngagedWith()
|
||||
|
||||
使用场景:开场台词、初始技能释放、战斗准备
|
||||
|
||||
2. 杀死玩家 (EVENT_TYPE_KILL)
|
||||
触发时机:生物成功击杀一个单位
|
||||
|
||||
对应函数:KilledUnit()
|
||||
|
||||
使用场景:嘲讽台词、特殊奖励、连击效果
|
||||
|
||||
3. 怪物死亡 (EVENT_TYPE_DIED)
|
||||
触发时机:生物死亡时
|
||||
|
||||
对应函数:JustDied()
|
||||
|
||||
使用场景:遗言、死亡爆炸、召唤援军
|
||||
|
||||
4. 血量事件 (EVENT_TYPE_HP_X)
|
||||
触发时机:生物血量首次降至指定百分比以下
|
||||
|
||||
支持阈值:90%, 75%, 50%, 25%, 10%
|
||||
|
||||
使用场景:阶段转换、愤怒技能、求救信号
|
||||
|
||||
5. 重置AI (EVENT_TYPE_RESET)
|
||||
触发时机:AI重置时(通常在脱战或重生时)
|
||||
|
||||
对应函数:Reset()
|
||||
|
||||
使用场景:状态清理、回到初始阶段
|
||||
|
||||
⚡ 动作类型详解
|
||||
1. 说话 (ACTION_TYPE_TALK)
|
||||
参数2值 说话方式 范围 说明
|
||||
0或1 Say 附近 普通说话,附近玩家可见
|
||||
2 Yell 大范围 大喊,更大范围玩家可见
|
||||
3 Whisper 单体 密语,仅对当前目标可见
|
||||
4 区域文本 区域 向当前区域所有玩家发送
|
||||
5 区域触发 区域 区域触发消息
|
||||
6 区域文本+触发 区域 同时发送文本和触发消息
|
||||
7 全服屏幕 全服 向全服玩家发送屏幕消息
|
||||
参数配置:
|
||||
|
||||
动作参数1: 要说的话内容
|
||||
|
||||
动作参数2: 说话方式(见上表)
|
||||
|
||||
动作参数3: 保留(通常为0)
|
||||
|
||||
2. 释放技能 (ACTION_TYPE_CAST_SPELL)
|
||||
参数配置:
|
||||
|
||||
动作参数1: 主要技能ID(spell表中的ID)
|
||||
|
||||
动作参数2: 备选技能ID(可选,随机选择)
|
||||
|
||||
动作参数3: 保留(通常为0)
|
||||
|
||||
特殊功能:
|
||||
|
||||
如果同时设置两个技能ID,系统会随机选择其中一个释放
|
||||
|
||||
支持对当前目标或自身释放技能
|
||||
|
||||
3. 设定阶段 (ACTION_TYPE_ALT_PHASE)
|
||||
参数配置:
|
||||
|
||||
动作参数1: 目标阶段ID(数字字符串)
|
||||
|
||||
动作参数2: 保留(通常为0)
|
||||
|
||||
动作参数3: 保留(通常为0)
|
||||
|
||||
使用说明:
|
||||
|
||||
阶段系统允许创建复杂的多阶段战斗
|
||||
|
||||
不同阶段可以有不同的AI行为
|
||||
|
||||
初始阶段为0
|
||||
|
||||
4. 召唤 (ACTION_TYPE_SUMMON)
|
||||
参数配置:
|
||||
|
||||
动作参数1: 召唤对象ID(正数=生物ID,负数=游戏对象ID)
|
||||
|
||||
动作参数2: 持续时间(秒,0=永久)
|
||||
|
||||
动作参数3: 召唤位置ID(配合自定义传送点系统)
|
||||
|
||||
5. 移动范围 (ACTION_TYPE_MOVE_RANDOM)
|
||||
参数配置:
|
||||
|
||||
动作参数1: 移动半径(码)
|
||||
|
||||
动作参数2: 保留(通常为0)
|
||||
|
||||
动作参数3: 保留(通常为0)
|
||||
|
||||
6. 激活或使失活 (ACTION_TYPE_ACTIVE_OR_DEACTIVE_OBJECT)
|
||||
参数配置:
|
||||
|
||||
动作参数1: 目标GUID或Entry(正数=激活,负数=禁用)
|
||||
|
||||
动作参数2: 对象类型(0=生物,1=游戏对象)
|
||||
|
||||
动作参数3: 操作模式(负数=按Entry删除,其他=按GUID修改状态)
|
||||
|
||||
📚 使用示例
|
||||
基础示例
|
||||
简单的战斗台词
|
||||
|
||||
sql
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('野猪愤怒台词', 3100, '进入战斗', 0, 0, 0, 0, '说话', '你激怒我了!', 1, 0);
|
||||
死亡时的遗言
|
||||
|
||||
sql
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('守卫临终遗言', 1234, '怪物死亡', 0, 0, 0, 0, '说话', '我...失败了...', 2, 0);
|
||||
中级示例
|
||||
血量触发的技能释放
|
||||
|
||||
sql
|
||||
-- BOSS血量50%时释放愤怒技能
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS愤怒技能', 12345, '血量低于50%', 0, 2, 0, 0, '释放技能', '12345', 0, 0);
|
||||
|
||||
-- 同时说话
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS愤怒台词', 12345, '血量低于50%', 0, 0, 0, 0, '说话', '感受我的愤怒!', 2, 0);
|
||||
定期技能释放
|
||||
|
||||
sql
|
||||
-- 每15-20秒释放一次AOE技能
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('精英怪AOE', 54321, '进入战斗', 0, 5, 15, 20, '释放技能', '54321', 0, 0);
|
||||
高级示例
|
||||
多阶段BOSS战斗
|
||||
|
||||
sql
|
||||
-- 第一阶段:正常战斗
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS第一阶段技能', 99999, '进入战斗', 1, 3, 8, 12, '释放技能', '11111', 0, 0);
|
||||
|
||||
-- 75%血量时进入第二阶段
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS阶段转换', 99999, '血量低于75%', 1, 0, 0, 0, '设定阶段', '2', 0, 0);
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS阶段转换台词', 99999, '血量低于75%', 1, 0, 0, 0, '说话', '第二阶段开始!', 2, 0);
|
||||
|
||||
-- 第二阶段:更强的技能
|
||||
INSERT INTO `_自定义AI_生物` VALUES
|
||||
('BOSS第二阶段技能', 99999, '进入战斗', 2, 2, 5, 8, '释放技能', '22222', 0, 0);
|
||||
🧩 开发者API
|
||||
核心方法
|
||||
cpp
|
||||
// 重新加载生物AI配置
|
||||
sCustomScript->ReloadCreatureAI(entry);
|
||||
|
||||
// 施放特定类型的法术
|
||||
sCustomScript->Cast(caster, target, SMT_DIRECT_DMG, 1000);
|
||||
|
||||
// 对附近玩家施法
|
||||
sCustomScript->CastSpellToNearbyPlayers(caster, 12345, 0, 30.0f);
|
||||
法术修改类型
|
||||
cpp
|
||||
enum SpellModTypes {
|
||||
SMT_DIRECT_DMG, // 直接伤害
|
||||
SMT_DIRECT_HEAL, // 直接治疗
|
||||
SMT_MOVE_SPEED_INS, // 移动速度增加
|
||||
SMT_MOVE_SPEED_DES, // 移动速度减少
|
||||
SMT_DMG_PCT, // 伤害百分比
|
||||
SMT_HEAL_PCT, // 治疗百分比
|
||||
SMT_DMG_PCT_TAKEN, // 承受伤害百分比
|
||||
SMT_HEAL_PCT_TAKEN, // 承受治疗百分比
|
||||
SMT_ATTACK_SPEED, // 攻击速度
|
||||
SMT_STUN, // 昏迷
|
||||
SMT_STUN_BREAKABLE // 可打破的昏迷
|
||||
};
|
||||
⚠️ 注意事项
|
||||
所有时间参数在数据库中配置为秒,在代码中会自动转换为毫秒
|
||||
|
||||
使用 ReloadCreatureAI 可动态重载生物AI配置
|
||||
|
||||
生物死亡时会自动清理所有召唤单位
|
||||
|
||||
为避免冲突,自定义AI生物的事件ID从2开始(1保留给血量检查)
|
||||
|
||||
在开发环境中启用详细日志可查看脚本执行细节
|
||||
|
||||
复杂的AI逻辑应拆分为多个简单规则
|
||||
|
||||
使用comment字段记录规则用途,便于后期维护
|
||||
198
modules/mod_GhostScripts/src/mod_Scripts/说明文档.txt
Normal file
198
modules/mod_GhostScripts/src/mod_Scripts/说明文档.txt
Normal file
@ -0,0 +1,198 @@
|
||||
_自定义AI_生物 自定义生物AI系统 - 字段依赖关系详细文档
|
||||
|
||||
📋 字段层级结构概览
|
||||
动作类型 (主字段)
|
||||
|
||||
├── 说话
|
||||
│ ├── 动作参数1 = 说话内容文本
|
||||
│ ├── 动作参数2 = 说话方式类型
|
||||
│ └── 动作参数3 = 保留参数(通常为0)
|
||||
|
||||
├── 释放技能
|
||||
│ ├── 动作参数1 = 主要技能ID
|
||||
│ ├── 动作参数2 = 备选技能ID
|
||||
│ └── 动作参数3 = 保留参数(通常为0)
|
||||
|
||||
├── 召唤
|
||||
│ ├── 动作参数1 = 召唤对象ID
|
||||
│ ├── 动作参数2 = 持续时间(秒)
|
||||
│ └── 动作参数3 = 召唤位置ID
|
||||
|
||||
├── 设定阶段
|
||||
│ ├── 动作参数1 = 目标阶段ID
|
||||
│ ├── 动作参数2 = 保留参数(通常为0)
|
||||
│ └── 动作参数3 = 保留参数(通常为0)
|
||||
|
||||
├── 移动范围
|
||||
│ ├── 动作参数1 = 移动半径
|
||||
│ ├── 动作参数2 = 保留参数(通常为0)
|
||||
│ └── 动作参数3 = 保留参数(通常为0)
|
||||
|
||||
└── 激活或使失活
|
||||
├── 动作参数1 = 目标GUID或Entry
|
||||
├── 动作参数2 = 对象类型
|
||||
└── 动作参数3 = 操作模式
|
||||
|
||||
🎯 动作类型详细配置规则
|
||||
动作类型 = "说话"
|
||||
动作参数1: 说话内容文本
|
||||
- 类型: 字符串
|
||||
- 示例: "你激怒我了!"
|
||||
- 说明: 生物要说的具体话语内容
|
||||
|
||||
动作参数2: 说话方式类型
|
||||
- 0 = Say (普通说话,附近玩家可见)
|
||||
- 1 = Say (与0相同)
|
||||
- 2 = Yell (大喊,更大范围玩家可见)
|
||||
- 3 = Whisper (密语,仅对当前目标玩家可见,需要有玩家目标)
|
||||
- 4 = 区域文本 (向当前区域所有玩家发送)
|
||||
- 5 = 区域触发消息 (向当前区域所有玩家发送触发消息)
|
||||
- 6 = 区域文本+触发消息 (同时发送区域文本和触发消息)
|
||||
- 7 = 全服屏幕消息 (向全服玩家发送屏幕消息)
|
||||
|
||||
动作参数3: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
|
||||
动作类型 = "释放技能"
|
||||
动作参数1: 主要技能ID
|
||||
- 类型: 字符串(数字)
|
||||
- 示例: "133" (火球术)
|
||||
- 说明: spell表中的技能ID,必填
|
||||
|
||||
动作参数2: 备选技能ID
|
||||
- 类型: 整数
|
||||
- 示例: 116 (霜箭术)
|
||||
- 说明: 可选技能ID,如果设置则随机选择主要或备选技能释放
|
||||
- 特殊值: 0 = 不使用备选技能
|
||||
|
||||
动作参数3: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
|
||||
动作类型 = "召唤"
|
||||
动作参数1: 召唤对象ID
|
||||
- 类型: 字符串(数字)
|
||||
- 正数 = 生物ID (creature_template.entry)
|
||||
- 负数 = 游戏对象ID (gameobject_template.entry)
|
||||
- 示例: "1234" (召唤生物ID 1234)
|
||||
- 示例: "-180000" (召唤游戏对象ID 180000)
|
||||
|
||||
动作参数2: 持续时间(秒)
|
||||
- 类型: 整数
|
||||
- 范围: 0-999999
|
||||
- 0 = 永久存在(直到被杀死或服务器重启)
|
||||
- >0 = 指定秒数后自动消失
|
||||
- 示例: 300 = 5分钟后消失
|
||||
|
||||
动作参数3: 召唤位置ID
|
||||
- 类型: 整数
|
||||
- 0 = 在当前生物位置召唤
|
||||
- >0 = 使用自定义传送点系统的位置ID
|
||||
- 说明: 配合自定义传送点系统使用
|
||||
|
||||
|
||||
动作类型 = "设定阶段"
|
||||
动作参数1: 目标阶段ID
|
||||
- 类型: 字符串(数字)
|
||||
- 范围: 0-999
|
||||
- 示例: "2" (切换到阶段2)
|
||||
- 说明: AI将切换到指定阶段,影响后续事件触发
|
||||
|
||||
动作参数2: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
动作参数3: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
|
||||
动作类型 = "移动范围"
|
||||
动作参数1: 移动半径
|
||||
- 类型: 字符串(数字)
|
||||
- 单位: 码(yard)
|
||||
- 范围: 1-100
|
||||
- 示例: "10" (在10码范围内随机移动)
|
||||
|
||||
动作参数2: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
动作参数3: 保留参数
|
||||
- 固定值: 0
|
||||
- 说明: 当前版本未使用,保持为0
|
||||
|
||||
|
||||
动作类型 = "激活或使失活"
|
||||
动作参数1: 目标GUID或Entry
|
||||
- 类型: 字符串(数字)
|
||||
- 正数 = 激活目标对象
|
||||
- 负数 = 禁用目标对象
|
||||
- 示例: "12345" (激活GUID为12345的对象)
|
||||
- 示例: "-12345" (禁用GUID为12345的对象)
|
||||
|
||||
动作参数2: 对象类型
|
||||
- 0 = 生物 (Creature)
|
||||
- 1 = 游戏对象 (GameObject)
|
||||
|
||||
动作参数3: 操作模式
|
||||
- 负数 = 按Entry查找并删除对象
|
||||
- 0或正数 = 按GUID查找并修改对象状态
|
||||
- 示例: -1 (按Entry删除)
|
||||
- 示例: 0 (按GUID修改状态)
|
||||
|
||||
|
||||
🔄 事件类型与阶段系统关系
|
||||
事件阶段ID 配置规则
|
||||
事件阶段ID: 阶段限制
|
||||
- 0 = 任何阶段都可触发 (推荐用于基础事件)
|
||||
- 1 = 仅在阶段1触发
|
||||
- 2 = 仅在阶段2触发
|
||||
- 3 = 仅在阶段3触发
|
||||
- ... (以此类推)
|
||||
|
||||
阶段系统工作原理:
|
||||
- 初始阶段: 0
|
||||
- 阶段切换: 通过"设定阶段"动作实现
|
||||
- 阶段影响: 只有匹配当前阶段的事件才会触发
|
||||
⏰ 时间控制系统详解
|
||||
延迟时间 配置规则
|
||||
延迟时间: 执行延迟(秒)
|
||||
- 0 = 立即执行
|
||||
- >0 = 延迟指定秒数后执行
|
||||
- 示例: 3 = 事件触发3秒后执行动作
|
||||
重复时间 配置规则
|
||||
最小重复时间 & 最大重复时间: 重复执行间隔(秒)
|
||||
- 两者都为0 = 不重复执行
|
||||
- 最小=最大 = 固定间隔重复
|
||||
- 最小<最大 = 随机间隔重复
|
||||
|
||||
示例配置:
|
||||
- 最小=0, 最大=0: 只执行一次
|
||||
- 最小=10, 最大=10: 每10秒重复一次
|
||||
- 最小=5, 最大=15: 每5-15秒随机间隔重复
|
||||
📝 完整配置示例
|
||||
示例1: 多阶段BOSS完整配置
|
||||
-- 第一阶段:基础攻击
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS第一阶段开场', 12345, '进入战斗', 1, 0, 0, 0, '说话', '愚蠢的冒险者!', 2, 0);
|
||||
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS第一阶段技能', 12345, '进入战斗', 1, 3, 8, 12, '释放技能', '1001', 1002, 0);
|
||||
|
||||
-- 75%血量:切换到第二阶段
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS阶段转换', 12345, '血量低于75%', 1, 0, 0, 0, '设定阶段', '2', 0, 0);
|
||||
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS阶段转换台词', 12345, '血量低于75%', 1, 1, 0, 0, '说话', '第二阶段开始!', 2, 0);
|
||||
|
||||
-- 第二阶段:召唤小怪
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS召唤小怪', 12345, '进入战斗', 2, 2, 0, 0, '召唤', '5678', 120, 0);
|
||||
|
||||
INSERT INTO `_自定义ai_生物` VALUES
|
||||
('BOSS第二阶段技能', 12345, '进入战斗', 2, 2, 5, 8, '释放技能', '2001', 0, 0);
|
||||
Loading…
x
Reference in New Issue
Block a user