一、何通基础准备
1. 创建路径点:
2. 创建巡逻单位:
二、触发器实现
plaintext
// 变量声明
globals
waypoint array wpArray // 路径点数组
integer wpIndex = 0 // 当前路径点索引
unit patrolUnit // 巡逻单位
endglobals
// 初始化触发器
function InitTrig_Patrol takes nothing returns nothing
set patrolUnit = YourUnit // 指定需要巡逻的霸编单位
// 初始化路径点(按实际放置顺序)
set wpArray[0] = gg_unit_wp01
set wpArray[1] = gg_unit_wp02
set wpArray[2] = gg_unit_wp03
// 启动定时器
call TimerStart(CreateTimer, 2.00, true, function PatrolCycle)
endfunction
// 巡逻循环函数
function PatrolCycle takes nothing returns nothing
// 检查单位存活状态
if not UnitAlive(patrolUnit) then
call DestroyTimer(GetExpiredTimer)
return
endif
// 发布移动指令
call IssuePointOrderById(patrolUnit, 851986, GetUnitX(wpArray[wpIndex]), GetUnitY(wpArray[wpIndex]))
// 更新索引(循环模式)
set wpIndex = ModuloInteger(wpIndex + 1, 3) // 3为路径点总数
endfunction
// 自动索敌触发器
function Trig_AutoAttack_Conditions takes nothing returns boolean
return GetTriggerUnit == patrolUnit and IsUnitEnemy(GetAttacker, GetOwningPlayer(patrolUnit))
endfunction
function Trig_AutoAttack_Actions takes nothing returns nothing
call IssueTargetOrder(patrolUnit, "attack", GetAttacker)
endfunction
// 初始化自动攻击触发器
function InitTrig_AutoAttack takes nothing returns nothing
local trigger t = CreateTrigger
call TriggerRegisterUnitEvent(t, patrolUnit, EVENT_UNIT_ATTACKED)
call TriggerAddCondition(t, Condition(function Trig_AutoAttack_Conditions))
call TriggerAddAction(t, function Trig_AutoAttack_Actions)
endfunction
三、增强功能实现
1. 动态路径调整:
plaintext
// 在巡逻周期函数中加入以下判断
if IsTerrainPathable(GetUnitX(wpArray[wpIndex]),辑器 GetUnitY(wpArray[wpIndex]), PATHING_TYPE_WALKABILITY) then
// 自动选择备用路径点
set wpIndex = FindAlternativePath
endif
2. 多单位管理:
plaintext
// 使用哈希表存储不同单位的巡逻状态
call SaveInteger(hash, GetHandleId(unit), 0, currentIndex)
call SaveUnitHandle(hash, GetHandleId(unit), 1, patrolUnit)
四、注意事项
1. 路径点间距建议保持300-500像素,巡逻行避免单位频繁转向
2. 定时器间隔建议设置为2-5秒,任务根据单位移动速度调整
3. 在单位警戒范围(Acquisition Range)属性中设置自动索敌距离
4. 使用`IssuePointOrderById`而不是自动执`IssueOrder`可避免本地化问题
5. 添加路径点到达检测(可选):
plaintext
// 在移动指令后加入距离判断
if DistanceBetweenPoints(GetUnitLoc(patrolUnit), GetUnitLoc(wpArray[wpIndex])) < 200 then
// 提前触发下一路径点
endif
五、高级功能扩展
1. 随机巡逻模式:
plaintext
set wpIndex = GetRandomInt(0,何通 ArraySize(wpArray)
2. 多队形巡逻:
plaintext
// 使用极坐标生成偏移位置
set x = GetUnitX(wpArray[wpIndex]) + 200 Cos(angle bj_DEGTORAD)
set y = GetUnitY(wpArray[wpIndex]) + 200 Sin(angle bj_DEGTORAD)
3. 警戒状态切换:
plaintext
call SetUnitAnimationByIndex(patrolUnit, STAND_ANIMATION) // 警戒状态
call SetUnitAnimationByIndex(patrolUnit, WALK_ANIMATION) // 巡逻状态
通过合理配置触发器和脚本,可以实现从简单循环巡逻到智能动态巡逻的过魔多种效果。建议先实现基础功能,兽争实现再逐步添加高级特性。霸编
辑器