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
 

 Sistema de Lenteos

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Sistema de Lenteos Sistema de Lenteos Clock10Jue Ago 22, 2013 7:54 pm

Mi librería para aplicar bonificaciones y reducciones de velocidad de ataque y movimiento, también sirve para aplicar un buff de reducción o bonificación de daño en base a porcentaje. Le puse de nombre "MS and AS Modifier"(o MSASModifier)

Información adicional:
Requisitos:
-Tener JASS NewGen Pack
-Copiar las habilidades y buffs
-Copiar el dummy

Funciones brindadas:

-AddSlowAS
-AddBonusAS
-RemoveBuffAS
-RemoveSlowAS
-GetSlowAS
-GetBonusAS
-AddSlowMS
-AddBonusMS
-RemoveBuffMS
-RemoveSlowMS
-GetSlowMS
-GetBonusMS
-AddSlowAM
-AddBonusAM
-RemoveBuffAM
-RemoveSlowAM
-GetSlowAM
-GetBonusAM


Notas:

-Si usas el mismo buff para 2 lenteos del mismo tipo, no stackeará.
-Esta librería ocasionó dolores de cabeza a su autor por errores tan simples como una variable no declarada y un compilador que anda cuando quiere.
-El valor máximo de reducción y bonificación es 160%. No es 100% ya que si se aplica un modificador sin usar la librería iba a ser evidente, así la librería tendrá un margen de 60% para que un modificador pueda hacerse notar
-A pesar del valor máximo de 160% el sistema "cree" que tiene valores mayores
-Impide el uso de la habilidad "Slow" o "Ralentizar", así que ya saben e_e

Explicación de las funciones:

-AddSlowAS:
Está función es la función principal del sistema ya que desde esta aplicarán un modificador(principalmente lenteos). La función toma (en este orden) una unidad, un valor real (duración), un valor entero (porcentaje de lenteo), un valor entero o buff (para el buff), y un string (este último es para el punto donde se colocará el modelo del buff)

Un ejemplo de uso sería algo así

[jass] call AddSlowAS(GetTriggerUnit(), 6.00, 50, 'Bslo', "origin")[/jass]
Y tenemos una reducción de velocidad de ataque de 50% durante 6 segundos con el buff de Ralentizar y "origin" al final es porque el modelo del buff de Ralentizar está colocado en Origin. Si usáramos por ejemplo, el buff de "Trueno", el string sería "overhead"

-AddBonusAS:
Es basicamente lo mismo que la anterior función(es más, solo está hecha de relleno, pues lo que hace es llamar a la función anterior como una BJ). La función toma (en este orden) una unidad, un valor real (duración), un valor entero (porcentaje de lenteo), un valor entero o buff (para el buff), y un string (este último es para el punto donde se colocará el modelo del buff)

-RemoveBuffAS
Esta función es utilizada para desactivar el modificador de un buff. Toma una unidad y un integer o buff (el buff a desactivar), su uso principal (por lo menos por mi parte xD) es para remover un buff antes de aplicar el mismo con mayor o menor intensidad.

Un ejemplo sería así

[jass] call RemoveBuffAS(GetTriggerUnit(), 'Bslo')[/jass]
Si la unidad contiene el buff de Ralentizar, su efecto le será removido.

-RemoveSlowAS
Esta función es la encargada de remover totalmente los modificadores de velocidad de ataque. Toma una unidad, y un ejemplo sería

[jass] call RemoveSlowAS(GetTriggerUnit())[/jass]
Y triggering unit perderá todos sus modificadores

-GetSlowAS
Función simple, nos devolverá el valor del lenteo que afecta a la unidad actualmente. Este valor puede ser negativo en caso de ser afectado por una bonificación. Toma una unidad y devuelve un número entero, un ejemplo sería así

[jass] call GetSlowAS(GetEnumUnit())[/jass]
Si, un ejemplo sin triggering unit. En este caso, esta función nos devuelve el lenteo actual de Picked Unit

-GetBonusAS
Función simple, nos devolverá el valor de la bonificación que afecta a la unidad actualmente(A diferencia de "AddBonusAS", esta no es una especie de BJ, pero sí, es basicamente lo mismo que la anterior). Este valor puede ser negativo en caso de ser afectado por un lenteo. Toma una unidad y devuelve un número entero, un ejemplo sería así

[jass] call GetSlowAS(GetEnumUnit())[/jass]
Si, un ejemplo sin triggering unit. En este caso, esta función nos devuelve la bonificación actual de Picked Unit

-AddSlowMS
-AddBonusMS
-RemoveBuffMS
-RemoveSlowMS
-GetSlowMS
-GetBonusMS


-AddSlowAM
-AddBonusAM
-RemoveBuffAM
-RemoveSlowAM
-GetSlowAM
-GetBonusAM

No hace falta explicar esto ya que es lo mismo que las explicadas, pero orientado hacia la velocidad de movimiento.


bueno, sin más que decir. He aquí mi librería rara xD

[jass]library MSASModifier initializer Init
// By Marcos_M
// Agradecimientos a MuSe por librería Slow que sirvió de base .3


globals
// ID DEL DUMMY

private constant integer DUMMY_ID = 'h000'

// HABILIDADES IDs

private constant integer REDUCCION_VELOCIDAD_MOVIMIENTO_ID = 'A004'
private constant integer AUMENTO_VELOCIDAD_MOVIMIENTO_ID = 'A000'
private constant integer REDUCCION_VELOCIDAD_ATAQUE_ID = 'A001'
private constant integer AUMENTO_VELOCIDAD_ATAQUE_ID = 'A005'
private constant integer AUMENTO_ATAQUE_ID = 'A007'
private constant integer REDUCCION_ATAQUE_ID = 'A006'

//Estas habilidades solo sirven para mostrar el BUFF de AS

private constant integer BUFF_DUMMY_REDUCCION_AS_ID = 'A004'
private constant integer BUFF_DUMMY_AUMENTO_AS_ID = 'A003'

//BUFF IDs

private constant integer REDUCCION_VELOCIDAD_MOVIMIENTO_BUFF_ID = 'B003'
private constant integer AUMENTO_VELOCIDAD_MOVIMIENTO_BUFF_ID = 'B002'
private constant integer REDUCCION_VELOCIDAD_ATAQUE_BUFF_ID = 'B000'
private constant integer AUMENTO_VELOCIDAD_ATAQUE_BUFF_ID = 'B001'
private constant integer AUMENTO_ATAQUE_BUFF_ID = 'B005'
private constant integer REDUCCION_ATAQUE_BUFF_ID = 'B004'

////////////////////////////////////


private constant string SLOWORDER_ID = "slow"
private constant string ATTACKORDER_ID = "cripple"
private hashtable HTAS = InitHashtable()
private hashtable HTMS = InitHashtable()
private hashtable HTAM = InitHashtable()
private timer tAS = CreateTimer()
private timer tMS = CreateTimer()
private timer tAM = CreateTimer()
private integer c = 0
private group GROUPAS = CreateGroup()
private group GROUPMS = CreateGroup()
private group GROUPAM = CreateGroup()
private real PERIODIC = 0.05
private unit DUMMY
endglobals

private function ApplyAS takes unit u, integer slow returns nothing

if slow == 0 then
call UnitRemoveAbility(u, AUMENTO_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(u, AUMENTO_VELOCIDAD_ATAQUE_BUFF_ID)
call UnitRemoveAbility(u, BUFF_DUMMY_AUMENTO_AS_ID)
call UnitRemoveAbility(u, REDUCCION_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(u, REDUCCION_VELOCIDAD_ATAQUE_BUFF_ID)
call UnitRemoveAbility(u, BUFF_DUMMY_REDUCCION_AS_ID)
elseif slow > 0 then

call UnitRemoveAbility(u, AUMENTO_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(u, AUMENTO_VELOCIDAD_ATAQUE_BUFF_ID)
call UnitRemoveAbility(u, BUFF_DUMMY_AUMENTO_AS_ID)

if GetUnitAbilityLevel(u, BUFF_DUMMY_REDUCCION_AS_ID) > 0 then
call SetUnitAbilityLevel(u, REDUCCION_VELOCIDAD_ATAQUE_ID, slow)
else
call UnitAddAbility(u, REDUCCION_VELOCIDAD_ATAQUE_ID)
call UnitAddAbility(u, BUFF_DUMMY_REDUCCION_AS_ID)
call SetUnitAbilityLevel(u, REDUCCION_VELOCIDAD_ATAQUE_ID, slow)
endif
else

call UnitRemoveAbility(u, REDUCCION_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(u, REDUCCION_VELOCIDAD_ATAQUE_BUFF_ID)
call UnitRemoveAbility(u, BUFF_DUMMY_REDUCCION_AS_ID)

if GetUnitAbilityLevel(u, BUFF_DUMMY_AUMENTO_AS_ID) > 0 then
call SetUnitAbilityLevel(u, AUMENTO_VELOCIDAD_ATAQUE_ID, -slow)
else
call UnitAddAbility(u, AUMENTO_VELOCIDAD_ATAQUE_ID)
call UnitAddAbility(u, BUFF_DUMMY_AUMENTO_AS_ID)
call SetUnitAbilityLevel(u, AUMENTO_VELOCIDAD_ATAQUE_ID, -slow)
endif
endif

endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

//! textmacro APPLY takes NAME, BONUS_ID, REDUCE_ID, BONUS_BUFF_ID, REDUCE_BUFF_ID, ORDER

private function Apply$NAME$ takes unit u, integer slow returns nothing

if slow == 0 then
call UnitRemoveAbility(u, $BONUS_BUFF_ID$)
call UnitRemoveAbility(u, $REDUCE_BUFF_ID$)
elseif slow > 0 then

call UnitRemoveAbility(u, $BONUS_BUFF_ID$)

call UnitAddAbility(DUMMY, $REDUCE_ID$)
call SetUnitAbilityLevel(DUMMY, $REDUCE_ID$, slow)

else

call UnitRemoveAbility(u, $REDUCE_BUFF_ID$)

call UnitAddAbility(DUMMY, $BONUS_ID$)
call SetUnitAbilityLevel(DUMMY, $BONUS_ID$, -slow)

endif

call IssueTargetOrder(DUMMY, $ORDER$, u)

call UnitRemoveAbility(DUMMY, $BONUS_ID$)
call UnitRemoveAbility(DUMMY, $REDUCE_ID$)

endfunction
//! endtextmacro

//! runtextmacro APPLY("MS", "AUMENTO_VELOCIDAD_MOVIMIENTO_ID", "REDUCCION_VELOCIDAD_MOVIMIENTO_ID", "AUMENTO_VELOCIDAD_MOVIMIENTO_BUFF_ID", "REDUCCION_VELOCIDAD_MOVIMIENTO_BUFF_ID", "SLOWORDER_ID")
//! runtextmacro APPLY("AM", "AUMENTO_ATAQUE_ID", "REDUCCION_ATAQUE_ID", "AUMENTO_ATAQUE_BUFF_ID", "REDUCCION_ATAQUE_BUFF_ID", "ATTACKORDER_ID")

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////

//! textmacro LOOP takes NAME

private function Loop$NAME$ takes nothing returns nothing
local unit u = GetEnumUnit()
local integer Id = GetHandleId(u)
local integer i = LoadInteger(HT$NAME$, Id, StringHash("0"))
local integer Slow = LoadInteger(HT$NAME$, Id, 0)
local real duration
local integer slow
local effect e
local integer n = LoadInteger(HT$NAME$, Id, StringHash("0"))
local boolean B = true
local integer N = 0

loop
exitwhen i == 0


if LoadBoolean(HT$NAME$, Id, StringHash(("Bool" + I2S(i)))) then

if GetWidgetLife(u) < 0.405 then
set duration = 0.00
else
set duration = LoadReal(HT$NAME$, Id, StringHash(("Dur" + I2S(i)))) - PERIODIC
endif


call SaveReal(HT$NAME$, Id, StringHash(("Dur" + I2S(i))), duration)

if duration <= 0.00 then

call SaveBoolean(HT$NAME$, Id, StringHash(("Bool" + I2S(i))), false)
set slow = Slow - LoadInteger(HT$NAME$, Id, StringHash(("Lenteo" + I2S(i))))
set e = LoadEffectHandle(HT$NAME$, Id, StringHash(("Efecto" + I2S(i))))
call SaveInteger(HT$NAME$, Id, 0, slow)

call RemoveSavedInteger(HT$NAME$, Id, StringHash(("Buff" + I2S(i))))

call DestroyEffect(e)

call Apply$NAME$(u, slow)

loop
set B = LoadBoolean(HT$NAME$,Id, StringHash(("Bool" + I2S(n))))
set n = n - 1
exitwhen n < 0
if not(B) then
set N = N + 1
endif
set B = true
endloop


if N == LoadInteger(HT$NAME$, Id, StringHash("0")) then
call GroupRemoveUnit(GROUP$NAME$, u)
call FlushChildHashtable(HT$NAME$, Id)
if FirstOfGroup(GROUP$NAME$) == null then
call PauseTimer(t$NAME$)
endif
endif
endif
endif

set i = i - 1

endloop

////////////////////////
////////////////////////

set e = null
set u = null

endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

private function Timer$NAME$ takes nothing returns nothing
call ForGroup(GROUP$NAME$, function Loop$NAME$)
endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function RemoveBuff$NAME$ takes unit u, integer buff1 returns nothing
local integer Id = GetHandleId(u)
local integer i = LoadInteger(HT$NAME$, Id, StringHash("0"))
local integer n

loop
exitwhen i == 0

set n = LoadInteger(HT$NAME$, Id, StringHash(("Buff" + I2S(i))))

if n == buff1 then

call SaveReal(HT$NAME$, Id, StringHash(("Dur" + I2S(i))), 0.00)

endif

set i = i - 1

endloop

endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function RemoveSlow$NAME$ takes unit u returns nothing
local integer Id = GetHandleId(u)
local integer i = LoadInteger(HT$NAME$, Id, StringHash("0"))
local effect e

loop
exitwhen i == 0

call SaveReal(HT$NAME$, Id, StringHash(("Dur" + I2S(i))), 0.00)

set i = i - 1

endloop

endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function AddSlow$NAME$ takes unit u, real duration, integer slow, integer buff1, string attachpoint returns nothing
local integer Id = GetHandleId(u)
local integer NewSlow = LoadInteger(HT$NAME$, Id, 0) + slow
local effect e = AddSpellEffectTargetById(buff1, EFFECT_TYPE_TARGET, u, attachpoint)
local integer i = LoadInteger(HT$NAME$, Id, StringHash("0"))
local boolean B = false
local integer buff2


loop
set buff2 = LoadInteger(HT$NAME$,Id, StringHash(("Buff" + I2S(i))))
set i = i - 1
exitwhen i < 0
if buff1 == buff2 then
set B = true
endif
endloop

if not(B) then

if FirstOfGroup(GROUP$NAME$) == null then
call TimerStart(t$NAME$, PERIODIC, true, function Timer$NAME$)
endif

call Apply$NAME$(u, NewSlow)

call SaveInteger(HT$NAME$, Id, 0, NewSlow)

set i = LoadInteger(HT$NAME$, Id, StringHash("0")) + 1
call SaveInteger(HT$NAME$, Id, StringHash("0"), i)

call SaveReal(HT$NAME$, Id, StringHash(("Dur" + I2S(i))), duration)
call SaveInteger(HT$NAME$, Id, StringHash(("Buff" + I2S(i))), buff1)
call SaveEffectHandle(HT$NAME$, Id, StringHash(("Efecto" + I2S(i))), e)
call SaveInteger(HT$NAME$, Id, StringHash(("Lenteo" + I2S(i))), slow)
call SaveBoolean(HT$NAME$, Id, StringHash(("Bool" + I2S(i))), true)

call GroupAddUnit(GROUP$NAME$, u)

else
call DestroyEffect(e)
endif
///////////////////////////////////////////////////////

set e = null
endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function AddBonus$NAME$ takes unit u, real duration, integer slow, integer buff1, string attachpoint returns nothing
call AddSlow$NAME$(u, duration, -slow, buff1, attachpoint)
endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function GetSlow$NAME$ takes unit u returns integer
return LoadInteger(HT$NAME$, GetHandleId(u), 0)
endfunction

///////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////

function GetBonus$NAME$ takes unit u returns integer
return -LoadInteger(HT$NAME$, GetHandleId(u), 0)
endfunction

//! endtextmacro

//! runtextmacro LOOP("AS")
//! runtextmacro LOOP("MS")
//! runtextmacro LOOP("AM")



private function Init takes nothing returns nothing
set DUMMY = CreateUnit(Player(15), DUMMY_ID, 0,0,0)
call UnitAddAbility(DUMMY, REDUCCION_VELOCIDAD_MOVIMIENTO_ID)
call UnitAddAbility(DUMMY, AUMENTO_VELOCIDAD_MOVIMIENTO_ID)
call UnitAddAbility(DUMMY, AUMENTO_VELOCIDAD_ATAQUE_ID)
call UnitAddAbility(DUMMY, REDUCCION_VELOCIDAD_ATAQUE_ID)
call UnitAddAbility(DUMMY, REDUCCION_ATAQUE_ID)
call UnitAddAbility(DUMMY, AUMENTO_ATAQUE_ID)
call UnitRemoveAbility(DUMMY, REDUCCION_VELOCIDAD_MOVIMIENTO_ID)
call UnitRemoveAbility(DUMMY, AUMENTO_VELOCIDAD_MOVIMIENTO_ID)
call UnitRemoveAbility(DUMMY, AUMENTO_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(DUMMY, REDUCCION_VELOCIDAD_ATAQUE_ID)
call UnitRemoveAbility(DUMMY, REDUCCION_ATAQUE_ID)
call UnitRemoveAbility(DUMMY, AUMENTO_ATAQUE_ID)
endfunction

endlibrary[/jass]

Espero que les guste la librería y que opinen lo que piensan, también pueden pedir extensiones y aconsejar mejoras en el código

http://www.epicwar.com/maps/234518/


Última edición por Marcos_M el Dom Sep 29, 2013 2:34 pm, editado 5 veces
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Jue Ago 22, 2013 9:05 pm

Mas descriptivo en lo que queres que haga (la utilidad).

Así como lo tenes no creo que lo revise nadie xD.
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Jue Ago 22, 2013 9:39 pm

Es simple. Provee de funciones que reducen la velocidad de ataque o velocidad de movimiento de una unidad.

La función toma una unidad, la duración, el porcentaje del lenteo(160 máx.), el RawCode del buff que creará el efecto y el attachpoint del efecto.

Actualmente tiene las funciones

SetSlowAS: Luego de tomar los valores enunciados, reducirá la vel de ataque en el valor colocado

SetSlowMS: Luego de tomar los valores enunciados, reducirá la vel de movimiento en el valor colocado

RemoveSlowAS: Toma una unidad y le remueve la reducción de AS (Quizás necesite mejora en su código[Para detener los timers activos])

RemoveSlowMS: Toma una unidad y le remueve la reducción de MS(Quizás necesite mejora en su código[Para detener los timers activos])

AddSlowAS: Luego de tomar los valores enunciados, aumentará la reducción de vel de ataque en el valor colocado (Es una suma >_> )

AddSlowMS: Luego de tomar los valores enunciados, aumentará la reducción de vel de movimiento en el valor colocado (Es una suma >_> )

GetSlowAS: Toma una unidad y devuelve el porcentaje de reducción de AS (Número entero)

GetSlowMS: Toma una unidad y devuelve el porcentaje de reducción de MS (Número entero)

Y el objetivo es agregarle funciones para trabajar con bonificaciones de AS y MS (usando el mismo "motor")
El segundo objetivo es ver si hay una forma más eficiente de hacer esto (Sin entrar mucho en vJASS)
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Vie Ago 23, 2013 12:42 am

Si es porcentaje, entonces los valores pueden ser de 0 a 100.

¿Por qué no vJASS?

Bueno mira, pienso que con hashtables te va a salir bastante fácil, pero realmente yo haría uso del spell slow (haría los que necesito, total, ¿cuántos podría llegar a necesitar?).
Volver arriba Ir abajo
MuSe

MuSe


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

Mensajes Mensajes : 219
Reputación Reputación : 46
Monedas de oro : 2590
Monedas de Platino : 5 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Vie Ago 23, 2013 12:53 am

Vaya, me perdi en el codigo de Marcos xD.

Bueno lo probe y no funciona, o solo es mi impresión, y no entiendo por qué tantas habilidades, y no tiene sentido reducir la velocidad de movimiento más de un 100% no?

Para el slow solo bastaría con una de 100 niveles, para el AS alli estarías limitado, o tambien se puede hacer como la Libreria de añadir daño de Distor para el AS ?)

Bueno en si sería darle un remake a al código, o tratarlo de hacer de una manera diferente. :/
Volver arriba Ir abajo
Distor
Peón
Distor


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

Mensajes Mensajes : 41
Reputación Reputación : 9
Monedas de oro : 245
Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Vie Ago 23, 2013 10:30 am

Yo tmb medio como que me perdi xD tal ves podrias hacer uso solo de las funciones AddSlowMS/AS em lugar de Set, en caso de que se usen 2 o mas efectos de slow en una misma unidad el Set podria sobreeescribir el slow anterior...
Igual me parece copadisimo los de los efectos y el attachpoint Wink 
+rep  bro
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Vie Ago 23, 2013 10:59 am

Uso hashtable. El 160% es para reducir bonificaciones de mov. No quiero mucho vJASS porque solo sé usar Globales, scope y library. Uso hashtable en el sistema

El sistema funciona te lo aseguro O.O Tenías razón xDD

Y uso muchas habi, no se porque la verdad. Podría hacer 2 de 160 levels.

Y los que no entienden el code. Es que es librería muy improvisada

el SetSlow busca sobreescribir el slow anterior e.e
Aunque podría necesitar modificación para eliminar los slows anteriores.

Link Resubido.
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Mar Sep 10, 2013 6:27 pm

Sistema actualizado, totalmente rehecho
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Mar Sep 10, 2013 7:13 pm

No estoy seguro pero, ¿el movimiento no es que puede llegar a tener decimales (es decir, en lugar de [ljass]integer[/ljass], [ljass]real[/ljass])?

[jass]    function GetBonusMS takes unit u returns integer
       return LoadInteger(HTMS, GetHandleId(u), 0) * -1
   endfunction[/jass]

->

[jass]    function GetBonusMS takes unit u returns integer
       return -LoadInteger(HTMS, GetHandleId(u), 0)
   endfunction[/jass]

[jass]    function AddBonusMS takes unit u, real duration, integer slow, integer buf, string attachpoint returns nothing
       call AddSlowMS(u, duration, (slow * -1), buf, attachpoint)
   endfunction[/jass]

->

[jass]    function AddBonusMS takes unit u, real duration, integer slow, integer buf, string attachpoint returns nothing
       call AddSlowMS(u, duration, -slow, buf, attachpoint)
   endfunction[/jass]

[ljass]buf[/ljass] -> [ljass]buff[/ljass]

Si queres, podes hecharle una mirada a los structs, puesto que éstos van bastante bien para esta librería Smile.

Saludos, buen trabajo Wink.
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Mar Sep 10, 2013 9:55 pm

@Sauron escribió:
No estoy seguro pero, ¿el movimiento no es que puede llegar a tener decimales (es decir, en lugar de [ljass]integer[/ljass], [ljass]real[/ljass])?

[jass]    function GetBonusMS takes unit u returns integer
       return LoadInteger(HTMS, GetHandleId(u), 0) * -1
   endfunction[/jass]

->

[jass]    function GetBonusMS takes unit u returns integer
       return -LoadInteger(HTMS, GetHandleId(u), 0)
   endfunction[/jass]

[jass]    function AddBonusMS takes unit u, real duration, integer slow, integer buf, string attachpoint returns nothing
       call AddSlowMS(u, duration, (slow * -1), buf, attachpoint)
   endfunction[/jass]

->

[jass]    function AddBonusMS takes unit u, real duration, integer slow, integer buf, string attachpoint returns nothing
       call AddSlowMS(u, duration, -slow, buf, attachpoint)
   endfunction[/jass]

[ljass]buf[/ljass] -> [ljass]buff[/ljass]

Si queres, podes hecharle una mirada a los structs, puesto que éstos van bastante bien para esta librería Smile.

Saludos, buen trabajo Wink.
Bueno, el sistema se basa en porcentajes y por medio de habilidades normales no logramos un valor de porcentaje con decimales por eso uso integer.

Lo del menos antes del valor no se me ocurrió. Pensamiento de GUI xD

Por último, los structs serán para otro momento, primero trataré de entenderlos y aprender a aplicarlos
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Miér Sep 11, 2013 12:05 am

¿Para qué le removes las habilidades al dummy?.

Asi como está, está perfecto. Sin embargo, si queres seguir aprendiendo/profundizando conocimientos, hay un par de temas que podrías ver para aplicar a esta librería.

La primera son structs (con ellos vas a ver que todo te va a quedar mas legible/mantenible y en el mayor de los casos, lograrás ser mas productivo).

La segunda, doubly linked list (mejora legibilidad y aplica seguridad al código).

Insisto, solo opcionales y en el caso en el que quieras aprender mas.

Saludos.

edit: Otra cosa, el uso de nombres descriptivos es muy importante. No tengas miedo de poner nombres ligeramente largos (tratemos de no exagerar tampoco xD).
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Miér Sep 11, 2013 12:16 pm

Bueno, agregué las modificaciones que pediste pero lo de [ljass]buff[/ljass] es imposible, porque "buff" es un tipo de variable y me tira error.

En cuanto a los structs, estaré aprendiendo eso y lo de las listas ni idea xD
Quizas lo vea, quizas no xD
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Dom Sep 29, 2013 2:35 pm

Actualizada.

Agregada Attack Modifier, para modificar el daño del ataque en base a porcentaje.
Reducido el número de líneas de código
Esperando que Sauron me putee xD
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 Sistema de Lenteos Empty

Inventario :
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10
Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10 Sistema de Lenteos Empysl10

Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10Dom Sep 29, 2013 3:43 pm

Ok, hice mi propio código para mostrarte.

Pero primero, impongamos un par de justas condiciones:

1) el usuario debe ser capaz de agregar sus buffs de una manera sencilla, preocupándose únicamente por el funcionamiento del mismo (del buff).

2) el usuario debe ser capaz de modificar el comportamiento de un buff ya establecido pero sin repetirse (es decir, tener que hacer copy-paste).

El 2, significa que por ejemplo, vos tenes el buff de movement speed, pero queres que cuando se aplique salte un mensaje. Exceptuando el mensaje, el comportamiento es el mismo.

Dicho esto, pasamos al código.

Primero necesitamos un manejador, que es el que se encarga de disparar los eventos (cuando se agrega un buff, cuando se lo remueve y periódicamente):

[jass]library BuffHandler
globals
private hashtable hashTable = InitHashtable()
endglobals

struct Buff
stub method onApply takes unit target returns nothing
endmethod

stub method onPeriodic takes unit target returns nothing
endmethod

stub method onRemove takes unit target returns nothing
endmethod
endstruct

private function Periodic takes nothing returns nothing
local timer expiredTimer = GetExpiredTimer()
local integer expiredTimerId = GetHandleId(expiredTimer)

local unit target = LoadUnitHandle(hashTable, expiredTimerId, 0)
local real timeout = LoadReal(hashTable, expiredTimerId, 1)
local real duration = LoadReal(hashTable, expiredTimerId, 2)
local Buff whichBuff = LoadInteger(hashTable, expiredTimerId, 3)

call whichBuff.onPeriodic(target)

set duration = duration - timeout

if ( duration > 0 ) then
call SaveReal(hashTable, expiredTimerId, 2, duration)
else
call whichBuff.onRemove(target)

call FlushChildHashtable(hashTable, expiredTimerId)

call PauseTimer(expiredTimer)
call DestroyTimer(expiredTimer)
endif

set expiredTimer = null
set target = null
endfunction

public function Apply takes unit whichUnit, real timeout, real duration, Buff whichBuff returns nothing
local timer periodicTimer = CreateTimer()
local integer periodicTimerId = GetHandleId(periodicTimer)

call SaveUnitHandle(hashTable, periodicTimerId, 0, whichUnit)
call SaveReal(hashTable, periodicTimerId, 1, timeout)
call SaveReal(hashTable, periodicTimerId, 2, duration)
call SaveInteger(hashTable, periodicTimerId, 3, whichBuff)

call whichBuff.onApply(whichUnit)

call TimerStart(periodicTimer, timeout, true, function Periodic)

set periodicTimer = null
endfunction
endlibrary[/jass]

Y ahora, pasamos a los buffs individuales:

[jass]struct BuffMovementSpeed extends Buff
stub method onApply takes unit target returns nothing
call BJDebugMsg("aplicado buff movement speed")
endmethod

stub method onPeriodic takes unit target returns nothing
call BJDebugMsg("periodic buff movement speed")
endmethod

stub method onRemove takes unit target returns nothing
call BJDebugMsg("removido buff movement speed")
endmethod
endstruct[/jass]

[jass]struct BuffAttackSpeed extends Buff
stub method onApply takes unit target returns nothing
call BJDebugMsg("aplicado buff attack speed")
endmethod

stub method onPeriodic takes unit target returns nothing
call BJDebugMsg("periodic buff attack speed")
endmethod

stub method onRemove takes unit target returns nothing
call BJDebugMsg("removido buff attack speed")
endmethod
endstruct[/jass]

Y por supuesto, un ejemplo:

[jass]scope Prueba initializer Init
private function Init takes nothing returns nothing
local unit u = CreateUnit(Player(0), 'hfoo', 0, 0, 0)

local Buff movementSpeed = BuffMovementSpeed.create()
local Buff attackSpeed = BuffAttackSpeed.create()

call BuffHandler_Apply(u, 1, 9, movementSpeed)
call BuffHandler_Apply(u, 3, 5, attackSpeed)
endfunction
endscope[/jass]

Cumplimos con el requerimiento 1, ¿qué pasa con el 2?.

Siguiendo el mismo ejemplo (que queremos que salga un mensaje al aplicarlo):

[jass]struct BuffCustomMovementSpeed extends BuffMovementSpeed
stub method onApply takes unit target returns nothing
call BJDebugMsg("Mi super mensaje que aparece cuando el buff es agregado")
call super.onApply(target)
endmethod
endstruct[/jass]

Y el ejemplo:

[jass]scope Prueba initializer Init
private function Init takes nothing returns nothing
local unit u = CreateUnit(Player(0), 'hfoo', 0, 0, 0)

local Buff customMovementSpeed = BuffCustomMovementSpeed.create()

call BuffHandler_Apply(u, 1, 9, customMovementSpeed)
endfunction
endscope[/jass]

¿Se entiende? Wink.
Volver arriba Ir abajo
Contenido patrocinado




Sistema de Lenteos Empty
Mensaje(#) Tema: Re: Sistema de Lenteos Sistema de Lenteos Clock10

Volver arriba Ir abajo
 

Sistema de Lenteos

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.

 Temas similares

-
» Silhouette Core - Sistema de rol con d6
» Sobre la educación moderna & Sistema educativo español
» Filosofía de la Política: El Sistema Político Ideal
» Nuevo sistema de crianza
» Planeswalker Points

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