Foro especializado en Warcraft III y su editor
 
BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarse
Eventos Actuales
¡ Bienvenido Invitado !

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte
 

 Damage

Ver el tema anterior Ver el tema siguiente Ir abajo 
Ir a la página : 1, 2  Siguiente
AutorMensaje
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Damage Damage Clock10Miér Ago 21, 2013 8:49 pm

Damage


Nuevamente volví a actualizar esta utilidad, de hecho la hice desde cero pero esta vez usando solamente JASS (por lo que puede ser usada con World Editor común Smile). Muy satisfecho con el resultado, no debería dar problemas. Es simple de utilizar tanto en JASS como en GUI.

Provee:

  • Evento unidad recibe daño antes y después
  • Detección de daño físico o mágico
  • Bloquear daño
  • Limpia leaks en los eventos


Requiere: Nada

Nota: Si remueven una unidad que esta registrada, hagan:

[gui]Custom script:   call Trig_Damage_UnregisterUnit(unidad)
Unit - Remove (unidad) from the game[/gui]

Mapa ejemplo


http://www.epicwar.com/maps/237573/
Spoiler:
 

Código


[jass]// ---------------------------------------------------
// Damage
// ---------------------------------------------------
// Utilidad que nos permite disponer del evento
// "Unidad recibe daño"
// ---------------------------------------------------

// ---------------------------------------------------
// @version 2.0.0
// @author Franco Montenegro - "Sauron"
// @www worldofeditors.foroactivo.com
// ---------------------------------------------------

// Se verifica si una unidad esta registrada
// @param unit whichUnit
// @return boolean
function Trig_Damage_IsUnitRegistered takes unit whichUnit returns boolean
return HaveSavedInteger(udg_Damage_Hashtable, GetHandleId(whichUnit), 0)
endfunction

// Dispara evento despues de daño
function Trig_Damage_FireAfterEvent takes nothing returns nothing
local unit source
local unit target
local real amount
local boolean isMagic
local real block
local real magicFixer
local real life

local unit prevSource
local unit prevTarget
local real prevAmount
local boolean prevIsMagic
local real prevBlock

local boolean prevEnabled

local integer stack = 1

loop
set source = udg_Damage_After_Source[stack]
set target = udg_Damage_After_Target[stack]
set amount = udg_Damage_After_Amount[stack]
set isMagic = udg_Damage_After_IsMagic[stack]
set block = udg_Damage_After_Block[stack]
set magicFixer = udg_Damage_After_MagicFixer[stack]

// Solo disparamos el evento si la unidad esta registrada
// y la utilidad activada
if ( Trig_Damage_IsUnitRegistered(target) and udg_Damage_Enabled ) then
if ( block > 0 ) then
set life = GetWidgetLife(target)
call UnitRemoveAbility(target, udg_Damage_ExtraLifeAbility)

if ( life > 0.405 ) then
call SetWidgetLife(target, life)
endif
endif

if ( isMagic ) then
if ( magicFixer > 0.405 ) then
call SetWidgetLife(target, magicFixer)
else
set prevEnabled = udg_Damage_Enabled
set udg_Damage_Enabled = false

call UnitDamageTarget(source, target, 999999, true, true, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, null)

set udg_Damage_Enabled = prevEnabled
endif
endif

set prevSource = udg_Damage_Source
set prevTarget = udg_Damage_Target
set prevAmount = udg_Damage_Amount
set prevIsMagic = udg_Damage_IsMagic
set prevBlock = udg_Damage_Block

set udg_Damage_Source = source
set udg_Damage_Target = target
set udg_Damage_Amount = amount
set udg_Damage_IsMagic = isMagic
set udg_Damage_Block = block

set udg_Damage_Event = 2.00
set udg_Damage_Event = 0.00

set udg_Damage_Source = prevSource
set udg_Damage_Target = prevTarget
set udg_Damage_Amount = prevAmount
set udg_Damage_IsMagic = prevIsMagic
set udg_Damage_Block = prevBlock
endif

set udg_Damage_After_Source[stack] = null
set udg_Damage_After_Target[stack] = null
set udg_Damage_After_Amount[stack] = 0.
set udg_Damage_After_IsMagic[stack] = false
set udg_Damage_After_Block[stack] = 0.
set udg_Damage_After_MagicFixer[stack] = 0.

exitwhen stack == udg_Damage_After_Stack
set stack = stack + 1
endloop

set udg_Damage_After_Stack = 0
call PauseTimer(udg_Damage_After_Timer)

set source = null
set target = null

set prevSource = null
set prevTarget = null
endfunction

// Dispara evento antes de daño
function Trig_Damage_FireBeforeEvent takes nothing returns boolean
local unit target = GetTriggerUnit()
local real amount = GetEventDamage()

local unit prevSource
local unit prevTarget
local real prevAmount
local boolean prevIsMagic
local real prevBlock

local real newLife

if ( Trig_Damage_IsUnitRegistered(target) and amount != 0.00 and udg_Damage_Enabled ) then
set prevSource = udg_Damage_Source
set prevTarget = udg_Damage_Target
set prevAmount = udg_Damage_Amount
set prevIsMagic = udg_Damage_IsMagic
set prevBlock = udg_Damage_Block

set udg_Damage_Source = GetEventDamageSource()
set udg_Damage_Target = target
set udg_Damage_Amount = amount
set udg_Damage_IsMagic = amount < 0
set udg_Damage_Block = 0.00

if ( udg_Damage_IsMagic ) then
set udg_Damage_Amount = -amount
endif

set udg_Damage_Event = 1.00
set udg_Damage_Event = 0.00

set udg_Damage_After_Stack = udg_Damage_After_Stack + 1

set udg_Damage_After_Source[udg_Damage_After_Stack] = udg_Damage_Source
set udg_Damage_After_Target[udg_Damage_After_Stack] = udg_Damage_Target
set udg_Damage_After_Amount[udg_Damage_After_Stack] = udg_Damage_Amount
set udg_Damage_After_IsMagic[udg_Damage_After_Stack] = udg_Damage_IsMagic

if ( udg_Damage_Block > 0 ) then
if ( udg_Damage_Block > udg_Damage_Amount ) then
set udg_Damage_Block = udg_Damage_Amount
endif

set newLife = GetWidgetLife(udg_Damage_Target) + udg_Damage_Block
call SetWidgetLife(udg_Damage_Target, newLife)

if ( GetWidgetLife(udg_Damage_Target) < newLife ) then
call UnitAddAbility(udg_Damage_Target, udg_Damage_ExtraLifeAbility)
call SetWidgetLife(udg_Damage_Target, newLife)

set udg_Damage_After_Block[udg_Damage_After_Stack] = udg_Damage_Block
endif
endif

if ( udg_Damage_IsMagic ) then
set udg_Damage_After_MagicFixer[udg_Damage_After_Stack] = GetWidgetLife(udg_Damage_Target) - udg_Damage_Amount
endif

call PauseTimer(udg_Damage_After_Timer)
call TimerStart(udg_Damage_After_Timer, 0, false, function Trig_Damage_FireAfterEvent)

set udg_Damage_Source = prevSource
set udg_Damage_Target = prevTarget
set udg_Damage_Amount = prevAmount
set udg_Damage_Block = prevBlock
set udg_Damage_IsMagic = prevIsMagic

set prevSource = null
set prevTarget = null
endif

set target = null

return false
endfunction

// Reciclamos bucket
// @param integer bucket
function Trig_Damage_RecycleBucket takes integer bucket returns nothing
call DestroyTrigger(udg_Damage_Triggers[bucket])
set udg_Damage_Triggers[bucket] = null

call GroupClear(udg_Damage_RegisteredUnits[bucket])

set udg_Damage_RecycledBuckets[udg_Damage_RecycledBucketsCounter] = bucket
set udg_Damage_RecycledBucketsCounter = udg_Damage_RecycledBucketsCounter + 1
endfunction

// Creamos trigger en bucket
// @param integer bucket
function Trig_Damage_CreateTriggerInBucket takes integer bucket returns nothing
set udg_Damage_Triggers[bucket] = CreateTrigger()
call TriggerAddCondition(udg_Damage_Triggers[bucket], Condition(function Trig_Damage_FireBeforeEvent))
endfunction

// Obtenemos bucket listo para usar
// @return integer
function Trig_Damage_GetBucket takes nothing returns integer
if ( udg_Damage_UnitsInBucket[udg_Damage_Bucket] >= udg_Damage_BucketSize ) then
if ( udg_Damage_RecycledBucketsCounter == 0 ) then
set udg_Damage_Bucket = udg_Damage_Bucket + 1
set udg_Damage_Buckets = udg_Damage_Buckets + 1
else
set udg_Damage_Bucket = udg_Damage_RecycledBuckets[udg_Damage_RecycledBucketsCounter]
set udg_Damage_RecycledBucketsCounter = udg_Damage_RecycledBucketsCounter - 1
endif
endif

if ( udg_Damage_Triggers[udg_Damage_Bucket] == null ) then
call Trig_Damage_CreateTriggerInBucket(udg_Damage_Bucket)
endif

return udg_Damage_Bucket
endfunction

// Registramos unidad
// @param unit whichUnit
// @return boolean Si se registro, true de lo contrario false
function Trig_Damage_RegisterUnit takes unit whichUnit returns boolean
local integer bucket

if ( Trig_Damage_IsUnitRegistered(whichUnit) ) then
return false
endif

set bucket = Trig_Damage_GetBucket()

set udg_Damage_UnitsInBucket[bucket] = udg_Damage_UnitsInBucket[bucket] + 1

call TriggerRegisterUnitEvent(udg_Damage_Triggers[bucket], whichUnit, EVENT_UNIT_DAMAGED)

call SaveInteger(udg_Damage_Hashtable, GetHandleId(whichUnit), 0, bucket)
call GroupAddUnit(udg_Damage_RegisteredUnits[bucket], whichUnit)

call UnitAddAbility(whichUnit, udg_Damage_DetectorAbility)
call UnitMakeAbilityPermanent(whichUnit, true, udg_Damage_DetectorAbility)

return true
endfunction

// Sacamos unidad para que ya no lo tenga en cuenta
// @param unit whichUnit
// @return boolean Si lo saco, true de lo contrario false
function Trig_Damage_UnregisterUnit takes unit whichUnit returns boolean
local integer bucket

if ( not(Trig_Damage_IsUnitRegistered(whichUnit)) ) then
return false
endif

set bucket = LoadInteger(udg_Damage_Hashtable, GetHandleId(whichUnit), 0)

set udg_Damage_UnitsInBucket[bucket] = udg_Damage_UnitsInBucket[bucket] - 1
set udg_Damage_Leaks[bucket] = udg_Damage_Leaks[bucket] + 1

call RemoveSavedInteger(udg_Damage_Hashtable, GetHandleId(whichUnit), 0)
call GroupRemoveUnit(udg_Damage_RegisteredUnits[bucket], whichUnit)

call UnitRemoveAbility(whichUnit, udg_Damage_DetectorAbility)

return true
endfunction

// Registramos todas las unidades que esten
// en el inicio del mapa
function Trig_Damage_RegisterUnitsInMap takes nothing returns nothing
local unit enumUnit

call GroupEnumUnitsInRect(bj_lastCreatedGroup, bj_mapInitialPlayableArea, null)

loop
set enumUnit = FirstOfGroup(bj_lastCreatedGroup)
exitwhen enumUnit == null
call GroupRemoveUnit(bj_lastCreatedGroup, enumUnit)

call Trig_Damage_RegisterUnit(enumUnit)
endloop
endfunction

// Usado por Trig_Damage_AutoRegisterEnteringUnits
function Trig_Damage_RegisterEnterUnit takes nothing returns boolean
call Trig_Damage_RegisterUnit(GetFilterUnit())
return false
endfunction

// Registramos automaticamente las unidades
// que entren en el mapa
function Trig_Damage_AutoRegisterEnteringUnits takes nothing returns nothing
local trigger enterRegionTrigger = CreateTrigger()
local region mapRegion = CreateRegion()

call RegionAddRect(mapRegion, bj_mapInitialPlayableArea)
call TriggerRegisterEnterRegion(enterRegionTrigger, mapRegion, Condition(function Trig_Damage_RegisterEnterUnit))

set enterRegionTrigger = null
set mapRegion = null
endfunction

// Limpiamos leaks en bucket
// @param integer bucket
function Trig_Damage_ClearLeaks takes integer bucket returns nothing
local group tmpGroup = CreateGroup()
local unit enumUnit

call DestroyTrigger(udg_Damage_Triggers[bucket])

call Trig_Damage_CreateTriggerInBucket(bucket)

loop
set enumUnit = FirstOfGroup(udg_Damage_RegisteredUnits[bucket])
exitwhen enumUnit == null
call GroupRemoveUnit(udg_Damage_RegisteredUnits[bucket], enumUnit)
call GroupAddUnit(tmpGroup, enumUnit)

call TriggerRegisterUnitEvent(udg_Damage_Triggers[bucket], enumUnit, EVENT_UNIT_DAMAGED)
endloop

call DestroyGroup(udg_Damage_RegisteredUnits[bucket])
set udg_Damage_RegisteredUnits[bucket] = tmpGroup

set tmpGroup = null
endfunction

// Periodica y automaticamente buscamos y limpiamos
// buckets que contengan leaks
function Trig_Damage_PeriodicLeakCleaner takes nothing returns nothing
local integer bucket = 0

loop
if ( udg_Damage_UnitsInBucket[bucket] == 0 ) then
call Trig_Damage_RecycleBucket(bucket)
else
if ( udg_Damage_Leaks[bucket] > 0 ) then
call Trig_Damage_ClearLeaks(bucket)
endif
endif

exitwhen bucket == udg_Damage_Buckets
set bucket = bucket + 1
endloop
endfunction

// Initializer
function InitTrig_Damage takes nothing returns nothing
set udg_Damage_Hashtable = InitHashtable()

if ( udg_Damage_After_Timer == null ) then
set udg_Damage_After_Timer = CreateTimer()
endif

call Trig_Damage_RegisterUnitsInMap()
call Trig_Damage_AutoRegisterEnteringUnits()

call TimerStart(CreateTimer(), 300, true, function Trig_Damage_PeriodicLeakCleaner)
endfunction[/jass]

Saludos.


Última edición por Sauron el Mar Dic 24, 2013 8:34 pm, editado 8 veces
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Miér Ago 21, 2013 9:09 pm

Bien Sauron, esto atraerá a Muzk para criticarte :risa:
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 13, 2013 1:55 pm

Me enseñas a usarlo? Q_Q

Edit: No me lo compila :_
Volver arriba Ir abajo
matchet
Capitán
matchet


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 124
Reputación Reputación : 19
Monedas de oro : 1830
Monedas de Platino : 3 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 13, 2013 2:30 pm

Pues, estaré echándole un buen ojo cuando todo funcione bien y cuando sepa cómo añadir este tipo de cosas porque unit takes dmg es vital para algunos aspectos de mi proyecto. gracias


... ¿Sabíais que un doble negativo o un cálculo dentro de las condiciones hará fallar el spell? ...:
 

Proyecto: Galerías Naga
"Hazlo o no lo hagas, pero no lo intentes"
- Maestro Yoda

Mi filosofía:
 
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 13, 2013 4:11 pm

@Marcos_M escribió:
Me enseñas a usarlo? Q_Q

Edit: No me lo compila :_
[jass]   static if ( AUTO_REGISTER or GUI_EXTENSION ) then
      private static method onInit takes nothing returns nothing
          static if ( AUTO_REGISTER ) then
              call thistype.autoRegisterUnits()
          endif
         
          static if ( GUI_EXTENSION ) then
              call thistype.gui()
          endif
      endmethod
  endif[/jass]

aparentemente no se pueden usar [ljass]or[/ljass]s en static ifs, así que simplemente bórralo y que te quede:

[jass]       private static method onInit takes nothing returns nothing
          static if ( AUTO_REGISTER ) then
              call thistype.autoRegisterUnits()
          endif
         
          static if ( GUI_EXTENSION ) then
              call thistype.gui()
          endif
      endmethod[/jass]




para usarlo es fácil:

[jass]scope example initializer init
private function onDamage takes nothing returns nothing
call BJDebugMsg("La unidad " + GetUnitName(Damage.getSource()) + " hizo " + R2S(Damage.getAmount()) + " de daño a " + GetUnitName(Damage.getTarget()))
endfunction

private function init takes nothing returns nothing
call Damage.registerFunc(function onDamage)
endfunction
endscope[/jass]

saludos.
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 13, 2013 4:20 pm

Sí, removí eso en un principio, pero después me dio este error

Damage Utj8


Última edición por Marcos_M el Jue Oct 17, 2013 8:05 pm, editado 1 vez
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 13, 2013 7:31 pm

en MagicFixer, el método onDamage tiene que devolver [ljass]boolean[/ljass]

[ljass]private static method onDamage takes nothing returns boolean[/ljass]

al final agregas:

[jass]
return false
endmethod
[/jass]
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Jue Oct 17, 2013 8:02 pm

Bueno, nuevamente tengo problemas, tu detector de daño mágico está curando mis unidades. Debería removerlo o arreglarás? :I
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Jue Oct 17, 2013 9:36 pm

Ahora en un rato lo estoy arreglando.
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Vie Oct 18, 2013 8:55 pm

Actualizado.
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Oct 20, 2013 1:30 pm

Siguen curandose esos malditos campesinos. Haré lo simple, sacaré el MagicFixer

PD: Si usan esta librería para bonificadores de daño, hacer

unregister(unidadquedañamos)
dañar
register(unidadquedañamos)

No me sirvió, así que deben desactivar su detonador o algo así para eso.
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Sáb Dic 21, 2013 3:24 am

Actualizado.
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Dic 22, 2013 12:23 am

Tienes un error xD

En la función Trig_Damage_RegisterUnit te olvidas de agregar esta importante línea

[ljass]call TriggerAddCondition(udg_Damage_Triggers[bucket], Condition(function Trig_Damage_FireBeforeEvent))[/ljass]
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Dic 22, 2013 12:25 pm

@Marcos_M escribió:
Tienes un error xD

En la función Trig_Damage_RegisterUnit te olvidas de agregar esta importante línea

[ljass]call TriggerAddCondition(udg_Damage_Triggers[bucket], Condition(function Trig_Damage_FireBeforeEvent))[/ljass]

Fijate [ljass]Trig_Damage_GetBucket[/ljass]
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Dic 22, 2013 12:28 pm

@Sauron escribió:
@Marcos_M escribió:
Tienes un error xD

En la función Trig_Damage_RegisterUnit te olvidas de agregar esta importante línea

[ljass]call TriggerAddCondition(udg_Damage_Triggers[bucket], Condition(function Trig_Damage_FireBeforeEvent))[/ljass]

Fijate [ljass]Trig_Damage_GetBucket[/ljass]

Yo te digo que hasta que no puse la línea allí, los triggers no me corrían
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Dic 22, 2013 3:31 pm

Acabo de probar los ejemplos que están en el mapa. Todos están corriendo.

¿Qué código probaste?
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Dom Dic 22, 2013 3:40 pm

@Sauron escribió:
Acabo de probar los ejemplos que están en el mapa. Todos están corriendo.

¿Qué código probaste?

Probé el del mapa
Volver arriba Ir abajo
Ruke

Ruke


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 298
Reputación Reputación : 64
Monedas de oro : 1678
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Mar Dic 24, 2013 8:42 pm

Actualizado, version 2.0.0

+ Ahora se puede hacer daño (unit damage target...) correctamente en before/after.
La forma correcta de hacerlo es:

[gui]Actions
   Custom script:   local boolean prevEnabled = udg_Damage_Enabled
   Set Damage_Enabled = False
   Unit - Cause unit to damage unit ...
   Custom script:   set udg_Damage_Enabled = prevEnabled
[/gui]

Pero así también sirve:

[gui]Actions
   Set Damage_Enabled = False
   Unit - Cause unit to damage unit ...
   Set Damage_Enabled = True
[/gui]

+ El daño mágico ya no se corrige haciendo daño, si no asignando directamente la vida (es mas preciso).
+ Se usa array y un solo timer para el después (after) del daño.
+ Corregido error en [ljass]Trig_Damage_PeriodicLeakCleaner[/ljass], como estaba no necesariamente recorrería todos los buckets, ahora si lo hace.
+ Agregada función [ljass]Trig_Damage_CreateTriggerInBucket[/ljass].
Volver arriba Ir abajo
xerocheco
Soldado
xerocheco


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 63
Reputación Reputación : 0
Monedas de oro : 147
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Miér Oct 08, 2014 3:27 pm

cuando copio el codigo me dice que tiene 232 errores :/
Volver arriba Ir abajo
Marcos_M

Marcos_M


Barra de Salud : Su salud está al 100% - Este usuario no ha recibido infracciones

Mensajes Mensajes : 3307
Reputación Reputación : 588
Monedas de oro : 10302
Monedas de Platino : 0 Damage Empty

Inventario :
Damage Empysl10 Damage Empysl10 Damage Empysl10
Damage Empysl10 Damage Empysl10 Damage Empysl10

Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10Miér Oct 08, 2014 4:49 pm

Usaste el código de la versión actual??

Copiaste las variables a tu mapa?
Volver arriba Ir abajo
Contenido patrocinado




Damage Empty
Mensaje(#) Tema: Re: Damage Damage Clock10

Volver arriba Ir abajo
 

Damage

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 2.Ir a la página : 1, 2  Siguiente

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Aportes :: Librerías-