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

[复制链接]

点击注册会员,更多精品好玩的地图等你来下载!

您需要 登录 才可以下载或查看,没有帐号?注册会员

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

也是挖了飞飞的通用函数老贴,也是发现有bug,因为里面出现的HT哈希表还没有初始化,所以一直未能测试,要在全局里先初始化,贴上代码:
  1. globals
  2. hashtable HT=InitHashtable()
  3. endglobals
  4. function shuaguai_g_Condition takes nothing returns boolean
  5. return IsUnitAliveBJ(GetFilterUnit())
  6. endfunction
  7. function ShuaGuai takes nothing returns nothing
  8. local timer t=GetExpiredTimer()
  9. local integer parentKey=GetHandleId(t)
  10. local player whichplayer=LoadPlayerHandle(HT,parentKey,1)
  11. local integer types=LoadInteger(HT,parentKey,2)
  12. local integer number=LoadInteger(HT,parentKey,3)
  13. local real x=LoadReal(HT,parentKey,4)
  14. local real y=LoadReal(HT,parentKey,5)
  15. local real firsttime=LoadReal(HT,parentKey,6)
  16. local real circle=LoadReal(HT,parentKey,7)
  17. local integer count=LoadInteger(HT,parentKey,8)
  18. local real space=LoadReal(HT,parentKey,9)
  19. local integer min=LoadInteger(HT,parentKey,10)
  20. local integer Count=LoadInteger(HT,parentKey,11)
  21. local integer Number=0
  22. local group shuaguai_g=CreateGroup()
  23. call GroupEnumUnitsInRange(shuaguai_g,x,y,space,Condition(function shuaguai_g_Condition))
  24. call TimerStart(t,circle,true,function ShuaGuai)
  25. if CountUnitsInGroup(shuaguai_g)<=min and min>=0 then
  26. loop
  27. set Number=Number+1
  28. call CreateUnit(whichplayer,types,x,y,bj_UNIT_FACING)
  29. exitwhen Number==number
  30. endloop
  31. set Count=Count+1
  32. call SaveInteger(HT,parentKey,11,Count)
  33. if Count==count and count >0 then
  34. call FlushChildHashtable(HT,parentKey)
  35. call DestroyTimer(t)
  36. endif
  37. endif
  38. call GroupClear(shuaguai_g)
  39. call DestroyGroup(shuaguai_g)
  40. set shuaguai_g=null
  41. set t=null
  42. set whichplayer=null
  43. endfunction
  44. 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
  45. local timer t=CreateTimer()
  46. local integer parentKey=GetHandleId(t)
  47. call SavePlayerHandle(HT,parentKey,1,whichplayer)
  48. call SaveInteger(HT,parentKey,2,types)
  49. call SaveInteger(HT,parentKey,3,number)
  50. call SaveReal(HT,parentKey,4,x)
  51. call SaveReal(HT,parentKey,5,y)
  52. call SaveReal(HT,parentKey,6,firsttime)
  53. call SaveReal(HT,parentKey,7,circle)
  54. call SaveInteger(HT,parentKey,8,count)
  55. call SaveReal(HT,parentKey,9,space)
  56. call SaveInteger(HT,parentKey,10,min)
  57. call TimerStart(t,firsttime,false,function ShuaGuai)
  58. set t=null
  59. 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时,才会继续刷出一波兵。
--------------------------------------------------------------------------
后面加的限制条件就是为了防止兵会刷太多。只有你把这个刷兵点的怪杀的小于限制数目,刷兵点才会继续刷出兵来。

自定义函数演示应用.w3x (39.85 KB, 下载次数: 44)
楼主热帖
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

快速回复 返回顶部 返回列表