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 : Precedente  1, 2
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 - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Damage Damage - Página 2 Clock10Miér Ago 21, 2013 8:49 pm

Recuerdo del primer mensaje :

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

AutorMensaje
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 - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Vie Oct 10, 2014 9:07 pm

en el tuto no dice que variables usa, igual, ya solucione lo de el indicador de daño para mi mapa, un gringo me ayudo a hacerlos con triggers
Volver arriba Ir abajo
muzk
Peón
muzk


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

Mensajes Mensajes : 40
Reputación Reputación : 4
Monedas de oro : 188
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Vie Dic 19, 2014 3:30 am

En mi mapa, los Spells usan la siguiente API:

[jass]
   function Damage_Spell takes unit source, unit target, real damage returns boolean
   function Damage_Physical takes unit source, unit target, real damage returns boolean
   function Damage_Block takes real amount returns nothing
   function Damage_BlockAll takes nothing returns nothing
   function Damage_IsPhysical takes nothing returns boolean
   function Damage_IsAttack takes nothing returns boolean
   function Damage_IsSpell takes nothing returns boolean
   function RegisterDamageResponse takes Response r returns nothing
[/jass]

Así puedo cambiarme entre sistemas de daños, implementando esas funciones.

Para los que quieran una versión más "vJASS" con este engine por atrás, pueden usar este código, que implementa los métodos anteriores:

[jass]
library Damage

   function Damage_Spell takes unit source, unit target, real damage returns boolean
       return UnitDamageTarget(source, target, damage, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
   endfunction

   function Damage_Physical takes unit source, unit target, real damage returns boolean
       return UnitDamageTarget(source, target, damage, false, false, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL, null)
   endfunction

   function Damage_Block takes real amount returns nothing
       set udg_Damage_Block = amount
   endfunction

   function Damage_BlockAll takes nothing returns nothing
       set udg_Damage_Block = udg_Damage_Amount
   endfunction

   function Damage_IsPhysical takes nothing returns boolean
       return not udg_Damage_IsMagic
   endfunction

   function Damage_IsAttack takes nothing returns boolean
       return not udg_Damage_IsMagic
   endfunction

   function Damage_IsSpell takes nothing returns boolean
       return udg_Damage_IsMagic
   endfunction

   // Register

   public function interface Response takes unit damagedUnit, unit damageSource, real damage returns nothing

   struct Damage extends array
       static Response array responses
       static integer count = 0
   endstruct

   function DamageHandler takes nothing returns nothing
       local integer index = 0
       loop
           exitwhen index == Damage.count
           call Damage.responses[index].evaluate(udg_Damage_Target, udg_Damage_Source, udg_Damage_Amount)
           set index = index + 1
       endloop
   endfunction

   function RegisterDamageResponse takes Response r returns nothing
       set Damage.responses[Damage.count] = r
       set Damage.count = Damage.count + 1
   endfunction

   private module Inits
       private static method onInit takes nothing returns nothing
           local trigger t = CreateTrigger(  )
           call TriggerRegisterVariableEvent( t, "udg_Damage_Event", EQUAL, 1.00 )
           call TriggerAddAction( t, function DamageHandler )
           set t = null
       endmethod
   endmodule
   
   private struct Init extends array
       implement Inits
   endstruct

endlibrary
[/jass]

Y por ejemplo, bloquear todo el daño físico:

[jass]
scope BlockAll initializer Init

   private function onDamage takes unit target, unit source, real damage returns nothing
       if Damage_IsPhysical() then
           call Damage_BlockAll()
       endif
   endfunction

   private function Init takes nothing returns nothing
       call RegisterDamageResponse(onDamage)
   endfunction

endscope
[/jass]

PD: Sí, usa interfaces ¬¬
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 - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Sáb Dic 20, 2014 7:37 pm

@muzk escribió:
PD: Sí, usa interfaces ¬¬

Cuando vi que tenias interfaces en el código estaba seguro que algo me ibas a decir xD.
Volver arriba Ir abajo
humberto25
Peón
humberto25


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

Mensajes Mensajes : 55
Reputación Reputación : 6
Monedas de oro : 211
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Dom Oct 09, 2016 9:16 pm

cuando puse este deto en mi mapa, las habilidades como "Locust Swarm"  en vez de curar al heroe lo daña, y no se como corregirlo...

mi mapa trabaja con heroes invocados, y las habilidades se bugean cuando demasiado...
Volver arriba Ir abajo
Marcos_M

Marcos_M


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

Mensajes Mensajes : 3317
Reputación Reputación : 590
Monedas de oro : 10330
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Dom Oct 09, 2016 11:00 pm

Este método buguea varias habilidades..

Como Locust Swarm, Robar Vida, Rayo de la muerte, creo que también buguea si agregas una habilidad de resistencia mágica, y todas esas habilidades tienes que hacerlas por trigger cuando usas este sistema
Volver arriba Ir abajo
humberto25
Peón
humberto25


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

Mensajes Mensajes : 55
Reputación Reputación : 6
Monedas de oro : 211
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Dom Oct 09, 2016 11:20 pm

este detonador tu me recomendaste marcos, y era para utilizar algunas habilidades pasivas, como critical damage en base a str/agi/int... bueno el bug esta ahi, alguien sabe otro deto similar pero q no tenga este bug
Volver arriba Ir abajo
Marcos_M

Marcos_M


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

Mensajes Mensajes : 3317
Reputación Reputación : 590
Monedas de oro : 10330
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 11:11 am

Usando este mètodo para diferenciar entre daño màgico y fìsico, no hay forma de hacerlo. Los sistemas que no tienen este bug no pueden diferenciar entre fìsico y màgico, te piden que todo el daño mágico que hagas en el map sea por triggers y el daño que no está registrado en el sistema, será daño físico de autoattacks.

Fijate si te conviene hacer todo por triggers, o hacer locust swarm, dedo de la muerte, robar vida por triggers(Creo que mana shield también tiene algún problema de interacción pero no estoy seguro).
Volver arriba Ir abajo
humberto25
Peón
humberto25


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

Mensajes Mensajes : 55
Reputación Reputación : 6
Monedas de oro : 211
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 12:33 pm

Me conviene utilizar otro método, para hacer crítica damage basado en str/agi/int/vit pq solo tengo unas 6 habilidades que usen este detonador... Ya estoy viendo que se me ha bugeado muchas habilidades...

Tienes algún deto que haga el crítical damage basado en str...también el primer poder del "destroyer" el arcane..

Volver arriba Ir abajo
Marcos_M

Marcos_M


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

Mensajes Mensajes : 3317
Reputación Reputación : 590
Monedas de oro : 10330
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 3:02 pm

https://www.worldofeditors.net/t1018-pack-heroes-de-dota

La habilidad Impetú de la Enchantress, sólo reemplaza el bonus de daño en base a distancia por un bonus en base a la int del hero.

En cuanto al crítico por str/agi/int...
Para saber si el daño es un básico, el sistema de Weep no permite diferenciar el daño de un ataque o de otra cosa, y Damage Engine de Bribe requiere que TODAS tus habilidades hagan daño por triggers para poder diferenciar entre daño de un ataque y daño màgico.
http://www.hiveworkshop.com/threads/gui-damage-engine-v3-6-0-1.201016/

Por supuesto, tambièn puedes usar otras formas de saber si un ataque es básico, como usar un Orb effect que no haga nada y sólo aplique un debuff durante 0.0 segundos. También, si todos tus ataques son instantáneos puedes revisar (Current order of unit == "attack" ), si tienes proyectiles puedes bloquear el daño inicial y crear un proyectil custom para que haga el daño(el daño que causes tiene que ser puro, si no, la armadura te disminuirá el daño 2 veces, a menos que tengas una forma de saber cuanto daño causa tu unidad[existe la forma de saberlo, pero utiliza vJASS])
Otro método para detectar el daño físico no se me ocurre

corrección: Damage Engine de Bribe diferencia entre físico y mágico sin necesidad de hacer todo en triggers, pero fijate que tiene varias recomendaciones
Volver arriba Ir abajo
humberto25
Peón
humberto25


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

Mensajes Mensajes : 55
Reputación Reputación : 6
Monedas de oro : 211
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 3:31 pm

estoy algo perdido... y no se puede excluir el deto system damage de algunos heroes o unidades que lanzen alguna habilidad... osea exonerar algunas unidades de este sistema para que no surga el bug...

lo del impetu ya esta resuelto, gracias...
solo quedaria resolver el critico, el detalle del orb efect es que no permitira usar otros items con orb efect... y eso no es la idea... es un chance de 15% de ocasionar daño basado en el str.... y como seria la forma en vjass... uso el newgem.

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 : 3317
Reputación Reputación : 590
Monedas de oro : 10330
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 5:16 pm

Siempre puedes excluir unidades con condiciones y demás, pero deberías saber como editar el sistema de alguien más, y yo prefiero no entrar ahí.

Pero fijate que el Damage Engine de Bribe sì distingue entre daño físico y mágico, y menciona las habilidades con las que debe tenerse cuidado en el map
Volver arriba Ir abajo
humberto25
Peón
humberto25


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

Mensajes Mensajes : 55
Reputación Reputación : 6
Monedas de oro : 211
Monedas de Platino : 0 Damage - Página 2 Empty

Inventario :
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10
Damage - Página 2 Empysl10 Damage - Página 2 Empysl10 Damage - Página 2 Empysl10

Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10Lun Oct 10, 2016 6:18 pm

segun esto parece que el locust swarm ya esta bien solo se tiene que poner en negativo?? Mad

pero el "life drain" se tiene que hacer de otra manera...

el resto no manyo bien... scratch

requisitos:
 
Volver arriba Ir abajo
Contenido patrocinado




Damage - Página 2 Empty
Mensaje(#) Tema: Re: Damage Damage - Página 2 Clock10

Volver arriba Ir abajo
 

Damage

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

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