BuscarEntrar al ChatboxPortal del foroÍndiceSpellsRegistrarseConectarseGrupos de Usuarios
Eventos Actuales
No hay eventos actualmente
¡ Bienvenido Invitado!

Editar Perfil

Tus temas
Tus Mensajes ()

Enlaces rápidos








Comparte | .
 

 [Sistema] ReviveEvent v2.0

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: [Sistema] ReviveEvent v2.0 Vie Jul 18, 2014 6:24 pm

Revive Event:

- Que hace de bueno?
 Revives Unidades entre otras cosas...

Descripcion completa (pendiente, hoy ando apurado xD)
Aqui el codigo:

[JASS]
library ReviveEvent uses TimerUtils, UnitIndexer, Table
/***********************************************************
*
*   ReviveEvent
*   __________________
*   v2.0.0.1
*   by Thelordmarshall
*  
*   Previously HeroAliveSystem.
*   Now again this system takes a new level...
*
*   Pros:
*   _____
*
*   You can:
*       - Revive units (not hero units).
*       - Revive any unit/hero automatically or manually.
*       - Use custom fx to revive unit/hero.
*       - See the countdown in a timerdialog or leaderboard.
*       - Get the countdown to implement in a custom multiboard.
*       - All parameters are configurables for any unit.
*
*   Cons:
*   _____
*
*       - Only allows one leaderboard per hero :/.
*       - For this version i removed the buyback feature.
*       - I did not find other ^_^.
*
*   API:
*   ____
*
*   struct Revive extends array:
*       - method execute takes nothing returns nothing
*           - Revive a unit.
*       - static method getLast takes nothing returns unit
*           - Get last revived unit.
*       - method getCountDown takes nothing returns integer
*           - Get the countdown (or cooldown) of a unit.
*       - method setAutomatic takes real timeBase, boolean upgradeTime, real x, real y, boolean instantSelect returns nothing
*           - Set the revive for a unit automatic. Useful for AoE maps, like DotA.
*       - method setManual takes nothing returns nothing
*           - Set revive manual...
*
*   method operator:
*       - method showTimerdialog takes boolean show returns nothing
*       - method showLeaderboard takes boolean show returns nothing
*       - method simpleLeaderBoard takes boolean show returns nothing
*           - When is enabled only show the timer of your hero/unit in the leaderboard
*             and not the timer of the other players units.
*       - method selectInstant takes boolean show returns nothing
*           - Select the unit instant or not on revive.
*       - method removeInstant takes boolean instant returns nothing
*           - When revive a not hero unit is removed, then another is
*             created to replace this. Use this to remove with delay or not.
*       - method awakenFx takes boolean show returns nothing
*           - Set your custom awaken fx.
*       - method onX takes boolean show returns nothing
*           - x point of the unit.
*       - method onY takes boolean show returns nothing
*           - y point of the unit.
*
*   Functions:
*   __________
*
*       - function ReviveUnit takes unit whichUnit, real x, real y, string fx returns nothing
*       - function GetLasRevivedUnit takes nothing returns unit
*       - function GetUnitCountDown takes unit whichUnit returns integer
*       - function UnitReviveAutomatic takes unit whichUnit, real timeBase, boolean upgradeTime, real x, real y, boolean instantSelect returns nothing
*       - function UnitReviveManual takes unit whichUnit returns nothing
*
*   Credits:
*   ________
*
*       - Bribe: Table.
*       - Vexorian: TimerUtils.
*       - Nestharus: UnitIndexer.
*       - This time special thanks to Bannar.
*
*   Notes:
*   ______
*
*       - I want to implement the buyback feature in a separate system.
*       - I wait for your suggestions.
*
*   Copyright © 2014.
*********************************************************************/

//=======================================================================//
//CONFIGURATION                                                          
//=======================================================================//
   globals
       private constant string     TIMER_TITLE       = "Respawn in"            //Your title.
       private constant string     TITLE_PREFIX      = "seconds"               //Use in the leaderboard only.
       private constant string     PLAYERS_TITLE     = "Players respawn in:"   //(If use simpleLeaderBoard).
       private constant real       SECONDS_X_LVL     = 4.00                    //Seconds per each lvl (on death).
       private constant integer    TD_RED            = 150                     //Timerdialog red
       private constant integer    TD_GREEN          = 100                     //Timerdialog green
       private constant integer    TD_BLUE           = 200                     //Timerdialog blue
       private constant string     DEFAULT_AWAKEN_FX = "Abilities\\Spells\\Other\\Awaken\\Awaken.mdl"
   endglobals
//=======================================================================//
//ENDCONFIGURATION                                                        
//=======================================================================//

   //Core
   struct Revive extends array
       private static constant group REVIVE_GROUP = CreateGroup()
       private static constant real  TIMER_PERIOD = 0.03125
       private static constant real  REMOVE_DELAY = 0.05 //Delay to remove unit when is "revived".
       private static integer boardsInUse = 0
       private static Table ta
       static unit re_lastRevivedUnit = null
       private unit u
       private player p
       private string fx
       private real timeBase
       private real countDown
       private real x
       private real y
       private integer lvl
       private boolean showDialog
       private boolean showBoard
       private boolean simpleBoard
       private boolean upgradeTime
       private boolean instantSelect
       private boolean removeInst
       private group boardGroup
       private thistype pn
       private timerdialog td
       implement UnitIndexStruct

       private method selectUnit takes nothing returns nothing
           if (GetLocalPlayer() == .p) then
               call PanCameraToTimed(.x,.y,0.)
               call ClearSelection()
               call SelectUnit(.u,true)
           endif
       endmethod
       
       //Period to revive the hero per each lvl.
       private method timeFactor takes nothing returns real
           return .timeBase+SECONDS_X_LVL*I2R(.lvl)
       endmethod
       
       static method getLast takes nothing returns unit
           return re_lastRevivedUnit
       endmethod
       
       method getCountDown takes nothing returns integer
           return R2I(.countDown)
       endmethod
       
       private static method delay takes nothing returns nothing
           local timer t = GetExpiredTimer()
           call RemoveUnit(GetUnitById(GetTimerData(t)))
           set t = null
       endmethod
       
       //.execute method ("revive" not hero units).
       method execute takes nothing returns nothing
           local player p = GetOwningPlayer(this.unit)
           local thistype newId
           local unit u
           local timer t

           if not IsUnitType(this.unit,UNIT_TYPE_HERO) then
               if this.removeInst then //I recomended used .removeInstant = false.
                   call RemoveUnit(this.unit)
               else
                   set t = NewTimerEx(this)
                   call TimerStart(t,REMOVE_DELAY,false,function thistype.delay)
                   set t = null
               endif
               
               //Replacing unit.
               set u = CreateUnit(p,GetUnitTypeId(this.unit),0.,0.,0.)
               set re_lastRevivedUnit  = u
               set newId               = GetUnitId(u)
               set newId.u             = u
               set newId.p             = p
               set newId.fx            = this.fx
               set newId.x             = this.x
               set newId.y             = this.y
               set newId.timeBase      = this.timeBase
               set newId.upgradeTime   = this.upgradeTime
               set newId.instantSelect = this.instantSelect
               
               if IsUnitInGroup(this.unit,REVIVE_GROUP) then
                   call GroupRemoveUnit(REVIVE_GROUP,this.unit)
                   call GroupAddUnit(REVIVE_GROUP,u)
               endif
               
               call SetUnitPosition(u,newId.x,newId.y)
               
               if newId.fx != null or newId.fx != "" then
                   call DestroyEffect(AddSpecialEffectTarget(newId.fx,u,"origin"))
               endif
               
               if .instantSelect then
                   call newId.selectUnit()
               endif
       
               set u = null
               set newId.u = null
               set newId.p = null
           else
               debug call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,60.,"[ReviveEvent]|c00FF0000Error|r: Invalid unit type, use ReviveHero instead.")
           endif
       endmethod

       private static method onDialogEnd takes nothing returns nothing
           local timer t = GetExpiredTimer()
           local thistype this = GetTimerData(t)
           call DestroyTimerDialog(.td)
           call ReleaseTimer(t)
       endmethod

       private method configDialog takes nothing returns nothing
           local timer t = NewTimerEx(this)
   
           if .showDialog then
               set .td = CreateTimerDialog(t)
               if (GetLocalPlayer() == .p) then
                   call TimerDialogDisplay(.td,true)
               endif
               call TimerDialogSetTitle(.td,TIMER_TITLE)
               call TimerDialogSetTitleColor(.td,TD_RED,TD_GREEN,TD_BLUE,0)
               call TimerStart(t,.countDown,false,function thistype.onDialogEnd)
           endif
       endmethod

       private method udapdeBoard takes nothing returns nothing
           local integer i = 0
           loop
               exitwhen i == bj_MAX_PLAYERS
               call LeaderboardSetItemValue(ta.leaderboard[i],LeaderboardGetPlayerIndex(ta.leaderboard[i],.p),.getCountDown())
               set i = i+1
           endloop
           call LeaderboardSetLabel(ta.leaderboard[.pn],TIMER_TITLE+" "+I2S(.getCountDown())+" "+TITLE_PREFIX)
       endmethod

       //Some textmacros.
       //! textmacro LeaderBoard takes METHOD_NAME,DISPLAY_BOARD,METHOD_START,METHOD_END
       private method $METHOD_NAME$ takes nothing returns nothing
           local integer i = 0
           $METHOD_END$set boardsInUse = boardsInUse-1
           if not .simpleBoard then
               loop
                   exitwhen i == bj_MAX_PLAYERS
                   $METHOD_START$call LeaderboardAddItem(ta.leaderboard[i],GetPlayerName(.p),R2I(.countDown),.p)
                   $METHOD_END$call LeaderboardRemovePlayerItem(ta.leaderboard[i],.p)
                   if boardsInUse == 0 then
                       call LeaderboardSetLabel(ta.leaderboard[i],PLAYERS_TITLE)
                       $METHOD_END$call LeaderboardResizeBJ(ta.leaderboard[i])
                       $METHOD_END$call LeaderboardDisplay(ta.leaderboard[i],false)
                   $METHOD_END$else
                       $METHOD_END$call LeaderboardSetLabel(ta.leaderboard[.pn],PLAYERS_TITLE)
                       $METHOD_END$call LeaderboardResizeBJ(ta.leaderboard[i])
                   endif
                   $METHOD_START$call LeaderboardResizeBJ(ta.leaderboard[i])
                   $METHOD_START$call LeaderboardDisplay(ta.leaderboard[i],true)
                   set i = i+1
               endloop
           else
               call LeaderboardDisplay(ta.leaderboard[.pn],$DISPLAY_BOARD$)
               $METHOD_END$call LeaderboardSetLabel(ta.leaderboard[.pn],TIMER_TITLE)
               $METHOD_END$call LeaderboardResizeBJ(ta.leaderboard[.pn])
           endif
           $METHOD_START$if LeaderboardHasPlayerItem(ta.leaderboard[.pn],.p) then
               $METHOD_START$call LeaderboardRemovePlayerItem(ta.leaderboard[.pn],.p)
               $METHOD_START$call LeaderboardResizeBJ(ta.leaderboard[.pn])
           $METHOD_START$endif
           $METHOD_START$set boardsInUse = boardsInUse+1
       endmethod
       //! endtextmacro

       //! runtextmacro LeaderBoard("boardStart","true","","//")
       //! runtextmacro LeaderBoard("boardEnd","false","//","")
       
       //Actions on revive.
       private method onRevive takes nothing returns nothing
           if IsUnitType(.u,UNIT_TYPE_HERO) then
               call ReviveHero(.u,.x,.y,true)
               call DestroyEffect(AddSpecialEffectTarget(.fx,.u,"origin"))
               if .instantSelect then
                   call .selectUnit()
               endif
           else
               call .execute()
           endif
           if .showBoard and IsUnitInGroup(.u,pn.boardGroup) then
               call GroupRemoveUnit(pn.boardGroup,.u)
               call .boardEnd()
           endif
       endmethod
       
       //Loop on death (If have).
       private static method onDeathLoop takes nothing returns nothing
           local timer t = GetExpiredTimer()
           local thistype this = GetTimerData(t)
           set .countDown = .countDown-TIMER_PERIOD
           if .showBoard and IsUnitInGroup(.u,pn.boardGroup) then
               call .udapdeBoard()
           endif
           if .countDown <= 0. then
               call .onRevive()
               set .u = null
               set .p = null
               call ReleaseTimer(t)
           endif
           set t = null
       endmethod
       
       //The system start here.
       private static method onDeath takes nothing returns boolean
           local unit u        = GetTriggerUnit()
           local thistype this = GetUnitId(u)
           local timer t

           if IsUnitInGroup(u,REVIVE_GROUP) then
               set .u    = u
               set .p    = GetTriggerPlayer()
               set .pn   = GetPlayerId(.p)
               set .lvl  = GetUnitLevel(.u)
               if .upgradeTime then
                   set .countDown = .timeFactor()
               else
                   set .countDown = .timeBase
               endif
               if .showBoard and IsUnitGroupEmptyBJ(pn.boardGroup) and .pn <= 11 then
                   call GroupAddUnit(pn.boardGroup,.u)
                   call .boardStart()
               endif
               if .showDialog then
                   call .configDialog()
               endif
               set t = NewTimerEx(this)
               call TimerStart(t,TIMER_PERIOD,true,function thistype.onDeathLoop)
               set t = null
           endif
           set u = null
           return false
       endmethod
       
       //The automatic method whit the default config.
       method setAutomatic takes real timeBase, boolean upgradeTime, real x, real y, boolean instantSelect returns nothing
           call GroupAddUnit(REVIVE_GROUP,.unit)
           set .timeBase      = timeBase
           set .upgradeTime   = upgradeTime
           set .instantSelect = instantSelect
           set .fx = DEFAULT_AWAKEN_FX
           set .x  = x
           set .y  = y
       endmethod

       method setManual takes nothing returns nothing
           call GroupRemoveUnit(REVIVE_GROUP,.unit)
       endmethod

       //I have saved some lines here.
       //! textmacro Operator takes TYPE,VARIABLE_TYPE,VARIABLE_NAME,VALUE
       method operator $TYPE$= takes $VARIABLE_TYPE$ returns nothing
           set .$VARIABLE_NAME$ = $VALUE$
       endmethod
       //! endtextmacro

       //! runtextmacro Operator("showTimerdialog","boolean show","showDialog","show")
       //! runtextmacro Operator("showLeaderboard","boolean show","showBoard","show")
       ///! runtextmacro Operator("showCustomTimer","boolean show","showCustom","show") (Work for the next version, maybe).
       //! runtextmacro Operator("simpleLeaderBoard","boolean simple","simpleBoard","simple")
       //! runtextmacro Operator("selectInstant","boolean select","instantSelect","select")
       //! runtextmacro Operator("removeInstant","boolean instant","removeInst","instant")
       //! runtextmacro Operator("awakenFx","string fx","fx","fx")
       //! runtextmacro Operator("onX","real x","x","x")
       //! runtextmacro Operator("onY","real y","y","y")

       private static method onInit takes nothing returns nothing
           local trigger t  = CreateTrigger()
           local thistype i = 0
           local player p
           set ta = Table.create()
           loop
               exitwhen i == bj_MAX_PLAYERS
               set p = Player(i)
               if GetPlayerController(p) == MAP_CONTROL_USER and GetPlayerSlotState(p) == PLAYER_SLOT_STATE_PLAYING then
                   set ta.leaderboard[i] = CreateLeaderboard()
                   call PlayerSetLeaderboard(p,ta.leaderboard[i])
                   call LeaderboardSetLabel(ta.leaderboard[i],TIMER_TITLE)
                   call LeaderboardDisplay(ta.leaderboard[i],false)
               endif
               set i.boardGroup = CreateGroup()
               set i = i+1
           endloop
           call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_DEATH)
           call TriggerAddCondition(t,Condition(function thistype.onDeath))
       endmethod
   endstruct

   //Functions.
   function ReviveUnit takes unit whichUnit, real x, real y, string fx returns nothing
       set Revive[whichUnit].onX = x
       set Revive[whichUnit].onY = y
       set Revive[whichUnit].awakenFx = fx
       call Revive[whichUnit].execute()
   endfunction

   function GetLasRevivedUnit takes nothing returns unit
       return Revive.getLast()
   endfunction

   function GetUnitCountDown takes unit whichUnit returns integer
       return Revive[whichUnit].getCountDown()
   endfunction

   function UnitReviveAutomatic takes unit whichUnit, real timeBase, boolean upgradeTime, real x, real y, boolean instantSelect returns nothing
       call Revive[whichUnit].setAutomatic(timeBase,upgradeTime,x,y,instantSelect)
   endfunction

   function UnitReviveManual takes unit whichUnit returns nothing
       call Revive[whichUnit].setManual()
   endfunction
endlibrary[/jass]

Descarga: (no es necesario q comentes para descargar, pero si me vendria bien algunas criticas :p )

http://www.hiveworkshop.com/forums/spells-569/revive-event-v2-0-a-253758/


Última edición por Thelordmarshall el Mar Oct 21, 2014 11:58 am, editado 2 veces
Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Lun Jul 21, 2014 4:38 pm

Pueden opinar lo que quieran  Sad , descuiden tengo mucha paciencia Sleep
Volver arriba Ir abajo
Ruke

avatar


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

Mensajes Mensajes : 288
Reputación Reputación : 57
Monedas de oro : 1602
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Lun Jul 21, 2014 6:01 pm

Te recomendaría que comiences a programar en Wurst. vJASS es un lenguaje muerto.
Cuidado con los comentarios en HWS, hay mucho programador noob que asegurara cosas que no son.
Usa nombres mas descriptivos para algunas variables (cosas como u, b, tratar de manejarlo al mínimo).
Null triggers aparentemente es necesario, pero como es tan mínimo el cambio realmente no importa.
Ademas de eso, mirando por arriba, el código luce bien Wink.
Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Miér Jul 23, 2014 1:00 pm

Oye gracias... Al fin alguien que se toma la molestia de revisar mi primer sistema, bueno a parte me Marcos  Smile . Hace un año hacia cosas estupidas en GUI y ahora puedo hacer y deshacer en JASS y vJASS, lo cual me anima a decir que deberiamos de tener en el foro tutoriales de JASS para usuarios que esten interezados en aprender.

Te tomare la palabra con respecto a lo de Wurst  Wink , desde hace un tiempo lo tengo en mi pc pero no he tenido la motivacion de instalarlo.

Ya para finalizar (sin animos de hacer propaganda) invito a otros usuarios a que revisen el sistema  cheers .
Volver arriba Ir abajo
humberto25
Peón
avatar


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

Mensajes Mensajes : 48
Reputación Reputación : 3
Monedas de oro : 199
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Jul 29, 2014 6:07 pm

cuando lo abro sale error

"AddSpecialEffectLoc"

me sale un mensaje de error y se cierra el warcraft
Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Miér Jul 30, 2014 2:06 pm

Tienes que tener el JassNewGenPack, Lo descargas aqui http://www.wc3c.net/showthread.php?t=90999

Comenta si te sirvio.


Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Oct 21, 2014 11:59 am

Segunda actualización a este sistema Wink


Volver arriba Ir abajo
2xmasterx2
Capitán
avatar


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

Mensajes Mensajes : 176
Reputación Reputación : 9
Monedas de oro : 733
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Oct 21, 2014 2:21 pm

como siempre prefiero los detos :v cuando veo jass me da cancer u.u


Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Oct 21, 2014 2:48 pm

Con los detos tambien puedes usar un poco de vjass Wink solo es cuestion de practica.


Volver arriba Ir abajo
JhOtAm
Héroe
avatar


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

Mensajes Mensajes : 1570
Reputación Reputación : 342
Monedas de oro : 8948
Monedas de Platino : 0

Inventario :



Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Oct 21, 2014 10:23 pm

Buen aporte, lastima que no se de esto +rep




Volver arriba Ir abajo
Trigger.edge

avatar


Barra de Salud : Este usuario es invulnerable ¿Será que es fiel a las normas?

Mensajes Mensajes : 958
Reputación Reputación : 100
Monedas de oro : 1182
Monedas de Platino : 0

Inventario :
Cetro del Rey Armadura Mágica Daga Mística


Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0 Mar Mayo 03, 2016 11:28 am

De momento tiene algunos bugs y no se si lo vuelva a actualizar, muevo a la papelera.


Volver arriba Ir abajo
Contenido patrocinado




Mensaje(#) Tema: Re: [Sistema] ReviveEvent v2.0

Volver arriba Ir abajo
 

[Sistema] ReviveEvent v2.0

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

 Temas similares

-
» ACTUALIZACION SISTEMA!!!!!!!!!!! ¿VUELVE PSN?
» El sistema de rachas de muertes de MW3 ha sido completamente cambiado.
» Actualización 3.70 de software de sistema Ps3
» Reglas: Sistema de dioses
» Formula 1 2012 (Calendario Gp,Sistema de puntuación,Equipos y pilotos y )

Permisos de este foro:No puedes responder a temas en este foro.
Warcraft III - WorldEditor :: Papelera-