pangyongfei 发表于 2019-4-19 13:43

自定义函数:野怪刷兵系统——坐标刷兵

本帖最后由 pangyongfei 于 2019-4-20 09:21 编辑

也是挖了飞飞的通用函数老贴,也是发现有bug,因为里面出现的HT哈希表还没有初始化,所以一直未能测试,要在全局里先初始化,贴上代码:globals
hashtable HT=InitHashtable()
endglobals
function shuaguai_g_Condition takes nothing returns boolean
return IsUnitAliveBJ(GetFilterUnit())
endfunction
function ShuaGuai takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer parentKey=GetHandleId(t)
local player whichplayer=LoadPlayerHandle(HT,parentKey,1)
local integer types=LoadInteger(HT,parentKey,2)
local integer number=LoadInteger(HT,parentKey,3)
local real x=LoadReal(HT,parentKey,4)
local real y=LoadReal(HT,parentKey,5)
local real firsttime=LoadReal(HT,parentKey,6)
local real circle=LoadReal(HT,parentKey,7)
local integer count=LoadInteger(HT,parentKey,8)
local real space=LoadReal(HT,parentKey,9)
local integer min=LoadInteger(HT,parentKey,10)
local integer Count=LoadInteger(HT,parentKey,11)
local integer Number=0
local group shuaguai_g=CreateGroup()
call GroupEnumUnitsInRange(shuaguai_g,x,y,space,Condition(function shuaguai_g_Condition))
call TimerStart(t,circle,true,function ShuaGuai)
if CountUnitsInGroup(shuaguai_g)<=min and min>=0 then
loop
set Number=Number+1
call CreateUnit(whichplayer,types,x,y,bj_UNIT_FACING)
exitwhen Number==number
endloop
set Count=Count+1
call SaveInteger(HT,parentKey,11,Count)
if Count==count and count >0 then
call FlushChildHashtable(HT,parentKey)
call DestroyTimer(t)
endif
endif
call GroupClear(shuaguai_g)
call DestroyGroup(shuaguai_g)
set shuaguai_g=null
set t=null
set whichplayer=null
endfunction
function shuaguai takes player whichplayer,integer types,integer number,real x,real y,real firsttime,real circle,integer count,real space,integer min returns nothing
local timer t=CreateTimer()
local integer parentKey=GetHandleId(t)
call SavePlayerHandle(HT,parentKey,1,whichplayer)
call SaveInteger(HT,parentKey,2,types)
call SaveInteger(HT,parentKey,3,number)
call SaveReal(HT,parentKey,4,x)
call SaveReal(HT,parentKey,5,y)
call SaveReal(HT,parentKey,6,firsttime)
call SaveReal(HT,parentKey,7,circle)
call SaveInteger(HT,parentKey,8,count)
call SaveReal(HT,parentKey,9,space)
call SaveInteger(HT,parentKey,10,min)
call TimerStart(t,firsttime,false,function ShuaGuai)
set t=null
endfunction使用方法:将以上代码复制进地图自定义脚本区
然后新建一个触发器,事件随你。
动作为自定义代码 call shuaguai(给哪个玩家刷,单位ID,一次性刷多少个,刷兵点的x坐标,刷兵点的y坐标,几秒后开始刷第一波,刷兵的周期,刷兵次数(如果此值小于或等于0则没有次数限制),刷兵限制条件--在以刷兵点为圆心的半径(如果此值小于或等于0,则无限制条件)),刷兵限制条件--在半径范围内少于多少个兵,则开始刷(如果此值小于0,则无限制条件))
==========================================================================
参数多了一点,但是优点也显而易见,很详细,使用简单
例如:call shuaguai(Player(PLAYER_NEUTRAL_AGGRESSIVE),'nane',5,-620,-2800,30,20,100,400,1)
这个的意思就是:在坐标(-620,-2800)处,在30秒后为中立敌对开始刷怪,刷怪周期为20秒,一次性刷5个怪,刷出来的怪是'nane',总共刷100次,刷了100次后便不再刷了,还有限制条件:当在以刷兵点400范围内任何活着的单位数目大于1,则不会刷兵,当活着的单位数目小于或等于1时,才会继续刷出一波兵。
--------------------------------------------------------------------------
后面加的限制条件就是为了防止兵会刷太多。只有你把这个刷兵点的怪杀的小于限制数目,刷兵点才会继续刷出兵来。


页: [1]
查看完整版本: 自定义函数:野怪刷兵系统——坐标刷兵