|
我自己做了个动态注册的演示:羊进圈选英雄
一个人的时候很好,但人一多就出问题了:一次出来10多个,不知道怎么回事
[codes=jass]function I2H takes integer i returns handle
return i
return null
endfunction
function H2I takes handle h returns integer
return h
return 0
endfunction
function I2RE takes integer i returns rect
return i
return null
endfunction
//==============================================================
function SetHeroType takes rect rec,integer herotype returns nothing
call StoreInteger(udg_GC,"HeroType",I2S(H2I(rec)),herotype)
endfunction
//====================================================================
function choose_Conditions takes nothing returns boolean
local unit u=GetTriggerUnit()
return ( GetUnitTypeId(u) == 'nshe' )
endfunction
function choose_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local rect out = I2RE(GetStoredInteger(udg_GC,I2S(H2I(u)),"OutRect"))
local integer i=1
local integer n=4
local string rec
local integer herotype
local unit hero
loop
exitwhen i>n
if RectContainsUnit(udg_Rect,u)==true then
set rec=I2S(H2I(udg_Rect))
endif
set i=i+1
endloop
set herotype = GetStoredInteger(udg_GC,"HeroType",rec)
call CreateNUnitsAtLoc( 1, herotype, GetOwningPlayer(u), GetRectCenter(out), bj_UNIT_FACING )
set hero= bj_lastCreatedUnit
call RemoveUnit( u )
call PanCameraToTimedLocForPlayer( GetOwningPlayer(hero), GetUnitLoc(hero), 0 )
endfunction
//===========================================================================
function SelectHero takes unit u,rect in,rect out returns nothing
local trigger choose = CreateTrigger()
call StoreInteger(udg_GC,I2S(H2I(u)),"OutRect",H2I(out))
call TriggerRegisterEnterRectSimple( choose, in )
call TriggerAddCondition( choose, Condition( function choose_Conditions ) )
call TriggerAddAction( choose, function choose_Actions )
endfunction[/codes]
[trigger]对战初始化
事件
地图初始化
条件
动作
可见度 - 创建一个状态为 允许 的可见度修正器给 玩家1(红色) ,设置 可见 在 (可用地图区域)
游戏缓存 - 创建游戏缓存,使用文件名: JASS.w3v
设置 GC = (最后创建的游戏缓存)
设置 RectOut = 矩形区域 out <预设>
设置 Rect[1] = 矩形区域 1 <预设>
设置 Rect[2] = 矩形区域 2 <预设>
设置 Rect[3] = 矩形区域 3 <预设>
设置 Rect[4] = 矩形区域 4 <预设>
[/trigger]
[trigger]s
事件
时间 - 游戏开始 0.00 秒
条件
动作
自定义代码: call SetHeroType(udg_Rect[1],'Hpal')
自定义代码: call SetHeroType(udg_Rect[2],'Hamg')
自定义代码: call SetHeroType(udg_Rect[3],'Hmkg')
自定义代码: call SetHeroType(udg_Rect[4],'Hblm')
玩家组 - 选取 (所有 用户 控制的玩家) 内所有玩家做动作
Loop - 动作
单位 - 创建 1 个 绵羊 给 (选取玩家) 在 ((选取玩家) 的游戏开始位置) ,面向角度为 默认建筑朝向 度
设置 Unit_Chooser = 最后创建的单位 [R]
选择 - 选择 Unit_Chooser 对 (选取玩家)
自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[1],udg_RectOut)
自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[2],udg_RectOut)
自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[3],udg_RectOut)
自定义代码: call SelectHero(udg_Unit_Chooser,udg_Rect[4],udg_RectOut)
设置 Unit_Chooser = 没有单位
[/trigger] |
|