offline
Опыт:
7,009
Активность:
|
Скрытый патруль
Название говорит само за себя, дает дополнительное место для 1 скила.
Для импорта требуется:
1. JassNewGenPack
2. Скопировать единственный триггер LIB себе в карту
3. Извлечь и скопировать 2 текстовых файла, по такому же пути, в свою карту
4. Отключить всем нужным юнитам "показать UI" в РО
» code
Код:
library Patrol initializer Init
globals
trigger TR = CreateTrigger()
hashtable HT = InitHashtable()
group GR = CreateGroup()
unit Max = null
unit uuu = null
item Max2= null
real Record = 0
real M_x1 = 0
real M_y1 = 0
endglobals
function ItemFilter takes nothing returns boolean
local item u = GetFilterItem()
local real dist = SquareRoot((GetItemX(u)-M_x1)*(GetItemX(u)+M_x1) + (GetItemY(u)+M_y1)*(GetItemY(u)+M_y1))
if dist > Record then
set Record = dist
set Max2 = u
endif
return false
endfunction
function UnitFilter takes nothing returns boolean
local unit u = GetFilterUnit()
local real dist = SquareRoot((GetUnitX(u)-M_x1)*(GetUnitX(u)+M_x1) + (GetUnitY(u)+M_y1)*(GetUnitY(u)+M_y1))
if dist > Record and IsUnitEnemy(u,GetOwningPlayer(uuu)) then
set Record = dist
set Max = u
endif
return false
endfunction
function Cond takes nothing returns boolean
return OrderId2String(GetIssuedOrderId()) == "patrol"
endfunction
function TrigAn takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(HT,GetHandleId(t),3)
local real x = LoadReal(HT,GetHandleId(t),1)
local real y = LoadReal(HT,GetHandleId(t),2)
local boolexpr bl= Filter(function UnitFilter)
local rect recct
set M_x1 = x
set M_y1 = y
set uuu = u
call GroupEnumUnitsInRange(GR,x,y,50,bl)
if Max != null then
call IssueTargetOrder(u, "attack", Max)
else
set recct = Rect(x-65,y-65,x+65,y+65)
call EnumItemsInRect(recct,null, function ItemFilter)
call RemoveRect(recct)
if Max2 != null then
call IssueTargetOrder(u, "attack", Max2)
else
call IssuePointOrder(u,"attack",x,y)
endif
endif
set Max = null
set Record = 0
set Max2 = null
call FlushChildHashtable(HT,GetHandleId(t))
call DestroyTimer(t)
call DestroyBoolExpr(bl)
set bl = null
set u = null
set recct = null
set t = null
endfunction
function MAIN takes nothing returns nothing
local timer t
if GetOrderTargetUnit() != null then
call IssueTargetOrder(GetTriggerUnit(), "attack", GetOrderTargetUnit() )
else
set t = CreateTimer()
call SaveReal(HT,GetHandleId(t),1,GetOrderPointX())
call SaveReal(HT,GetHandleId(t),2,GetOrderPointY())
call SaveUnitHandle(HT,GetHandleId(t),3,GetTriggerUnit())
call TimerStart(t,0.0,false,function TrigAn)
endif
endfunction
function Init takes nothing returns nothing
local integer i = 0
loop
exitwhen i>=11
call TriggerRegisterPlayerUnitEvent(TR,Player(i),EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDE R,null)
call TriggerRegisterPlayerUnitEvent(TR,Player(i),EVENT_PLAYER_UNIT_ISSUED_ORDER,null)
call TriggerRegisterPlayerUnitEvent(TR,Player(i),EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER ,null)
set i = i+1
endloop
call TriggerAddCondition(TR, Condition( function Cond ) )
call TriggerAddAction( TR, function MAIN )
endfunction
endlibrary
Отредактировано Msey, 22.02.2012 в 19:05.
|