1 [Libreria] UnitInCombat Sáb Mayo 19, 2012 12:15 pm
Rogue_Mc
Novato
Hola .
Acá les traigo una librería, que simula la característica en wow de poner a unidades en Combate. Lo pueden usar para como una condición, o para realizar acciones cuando una unidad sale de combate. En el map hay el Ejemplo de la daga del Dota;)
Agradecimientos: Sauron
Bueno acá el link.
[Tienes que estar registrado y conectado para ver este vínculo]
Cualquier duda/segurencia/critica adelante.
Si tienes problemas para implementarlo me dicen .
Saludos.
Acá les traigo una librería, que simula la característica en wow de poner a unidades en Combate. Lo pueden usar para como una condición, o para realizar acciones cuando una unidad sale de combate. En el map hay el Ejemplo de la daga del Dota;)
- Spoiler:
- Código:
library UnitInCombat initializer Init /* v1.0.0.0
*************************************************************************************
*
* Librería para detectar cuando una unidad está en combate.
* El estado de combate dura @CD (default: 4 seg.).
* Si una unidad ya esta en combate su contador se reinicia.
*
*************************************************************************************
*
* */requires/*
* */ Table /* hiveworkshop.com/forums/jass-resources-412/snippet-new-table-188084/
* */ CTL /* hiveworkshop.com/forums/jass-resources-412/snippet-constant-timer-loop-32-a-201381/
*
*************************************************************************************
*
* function AddCombatUnit takes unit u returns nothing
* Agrega el estado de combate a la unidad "u"
*
* function SetUnitCombatTime takes unit u, real t returns nothing
* Modifica el tiempo de combate de la unidad "u" a "t"
*
* function IsUnitInCombat takes unit u returns boolean
* Devuelve true si la unidad "u" está en combate
*
* function RemoveCombatUnit takes unit u returns nothing
* Remueve el estado de combate a la unidad "u"
*
*************************************************************************************
*
* GUI globals
* - udg_Combat_Event <-- Variable global tipo real usado para el evento Game - Value Of Real Variable, para realizar acciones cuando una unidad sale de combate.
* - udg_Combat_LeavingUnit <-- Especifica a la ultima unidad que salio de combate.
*
**************************************************************************************/
globals
private constant real CD = 4.
private constant real Prd = 0.031250000
private Table TABLE
endglobals
private function OnLeave takes unit u returns nothing
set udg_Combat_LeavingUnit = u
set udg_Combat_Event = 1.
set udg_Combat_Event = 0.
endfunction
private struct UnitInCombat extends array
private unit u
private integer i
implement CTLExpire
set TABLE.real[this.i] = TABLE.real[this.i] - Prd
if (TABLE.real[this.i] <= 0) or (GetWidgetLife(this.u) <= .405) then
call OnLeave(this.u)
set this.u = null
set this.i = 0
call this.destroy()
endif
implement CTLEnd
public static method new takes unit u returns nothing
local thistype this = thistype.create()
set this.u = u
set this.i = GetHandleId(u)
endmethod
endstruct
function IsUnitInCombat takes unit u returns boolean
return TABLE.real[GetHandleId(u)] > 0
endfunction
function SetUnitCombatTime takes unit u, real t returns nothing
set TABLE.real[GetHandleId(u)] = t
endfunction
function AddCombatUnit takes unit u returns nothing
if (IsUnitInCombat(u) == false) then
call UnitInCombat.new(u)
endif
call SetUnitCombatTime(u, CD)
endfunction
function RemoveUnitCombat takes unit u returns nothing
if not IsUnitInCombat(u) then
return
endif
call SetUnitCombatTime(u,0)
endfunction
private function Init takes nothing returns nothing
set TABLE = Table.create()
endfunction
endlibrary
Agradecimientos: Sauron
Bueno acá el link.
[Tienes que estar registrado y conectado para ver este vínculo]
Cualquier duda/segurencia/critica adelante.
Si tienes problemas para implementarlo me dicen .
Saludos.