我有一个rpg地图的刷新野怪【中立敌对的野怪啊】方法,就是怪死了x秒之后在原来地点刷新的。
首先新建触发1,下拉菜单里找到“转化为自定义文本”,删除右边【所有】的英文吧。复制下面的代码:
globals
hashtable ht=InitHashtable()//新建一个哈希表
integer irc=0
real array xrc//这个数组用来记录野怪初始位置的x坐标
real array yrc//这个数组用来记录野怪初始位置的y坐标
real array arc//这个数组用来记录野怪初始位置的面向角度
trigger trgrc=CreateTrigger()//新建一个触发器,后面会用来刷新野怪
endglobals
//下面是将要使用到的函数,共三个:timerrc、rc1、rc2===========================================================
function timerrc takes nothing returns nothing
local timer t=GetExpiredTimer()//设置t=到期的计时器
local integer j=GetHandleId(t)//设置j=t的handle值
local integer unitid=LoadInteger(ht,j,1)//从哈希表读取之前保存的数据(这一行是单位类型)
local integer i=LoadInteger(ht,j,2)//从哈希表读取之前保存的数据(单位的自定义值)
local unit u=CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),unitid,xrc[i],yrc[i],arc[i])
//为中立敌对创建单位类型为unitid在xrc、yrc处,面向角度arc
call TriggerRegisterUnitEvent(trgrc,u,EVENT_UNIT_DEATH)//注册事件:为触发器trgrc添加事件:u死亡
call SetUnitUserData(u,i)
call FlushChildHashtable(ht,j)//清空哈希表
call DestroyTimer(t)
set t=null
set u=null
endfunctio
function rc1 takes nothing returns nothing
local unit u=GetTriggerUnit()
local timer t=CreateTimer()
local integer j=GetHandleId(t)
call SaveInteger(ht,j,1,GetUnitTypeId(u))//把触发单位(指定单位死亡事件)的【单位类型】当做整数,记录到哈希表
call SaveInteger(ht,j,2,GetUnitUserData(u))//把触发单位(指定单位死亡事件)的自定义值当做整数,记录到哈希表
call TimerStart(t,120,false,function timerrc)//启动计时器,120秒后到期
set u=null
set t=null
endfunction
function rc2 takes nothing returns nothing
local unit u=GetEnumUnit()
if GetOwningPlayer(u)==Player(PLAYER_NEUTRAL_AGGRESSIVE) then//选取中立敌对的单位做动作
set irc=irc+1
set xrc[irc]=GetUnitX(u)//记录x坐标
set yrc[irc]=GetUnitY(u)//记录y坐标
set arc[irc]=GetUnitFacing(u)//记录面向角度
call SetUnitUserData(u,irc)//设置自定义值为irc
call TriggerRegisterUnitEvent(trgrc,u,EVENT_UNIT_DEATH)//注册事件:为触发器trgrc添加事件:u死亡
endif
set u=null
endfunction
//函数已经在上面准备好了。=============================================================================
function revivecreeps takes nothing returns nothing
local group g=GetUnitsInRectAll(GetPlayableMapRect())
call TriggerAddAction(trgrc,function rc1)//为trgrc这个触发器添加事件,事件内容在函数rc1里
call ForGroup(g,function rc2)//选取单位,动态注册(查看函数rc2)
call DestroyGroup(g)
set g=null
endfunction
然后新建触发器2:
事件-地图初始化
动作-自定义代码:call revivecreeps()
保存即可。注意两个触发器建立的先后顺序,别弄反了。
保存地图之后,你we里继续加到地图上的野怪也会刷新。如果你需要修改刷新的时间间隔,找代码中的120。这120是我设置的120秒刷新。