魔兽地图编辑器吧 关注:65,231贴子:3,839,183
  • 9回复贴,共1

求野怪再生触发

只看楼主收藏回复

我做的时候发现野怪变成无限刷,无法终止,求一套像dota一样刷怪的触发


IP属地:浙江来自手机贴吧1楼2013-10-22 20:10回复
    请先关注本吧


    IP属地:浙江2楼2013-10-22 20:13
    回复
      2025-05-26 12:51:23
      广告
      新人不明觉厉


      3楼2013-10-22 20:14
      回复
        先把另一个贴删了吧


        来自Android客户端4楼2013-10-22 20:16
        回复
          添加其中一个条件
          某区域野怪势力的单位数量为0且区域的单位是存活状态
          因为魔兽里面尸体也是单位。


          IP属地:福建来自iPhone客户端5楼2013-10-23 23:15
          收起回复
            我有一个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秒刷新。


            6楼2013-10-24 16:29
            收起回复
              6楼正解,我来顶贴


              IP属地:新疆来自Android客户端7楼2013-10-24 18:34
              回复