一、何通基础准备

1. 创建路径点:

  • 在物体编辑器中创建多个路径点(Waypoint)
  • 在地图上的过魔关键位置放置这些路径点(按顺序排列)
  • 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)

  • 1)
  • 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) // 巡逻状态

    通过合理配置触发器和脚本,可以实现从简单循环巡逻到智能动态巡逻的过魔多种效果。建议先实现基础功能,兽争实现再逐步添加高级特性。霸编

    辑器