Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=db4f33d38846f1f3f4366aac073cb072Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Problème Repop RPG

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Autre
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Geronimo
Membre récent


Inscrit le: 11 Mar 2010
Messages: 91
Sujets: 32



MessagePosté le: 03/09/10 09:58    Sujet du message: Problème Repop RPG Citer

J'ai utilisé ce tuto : http://worldedit.free.fr/forum/viewtopic.php?t=5853&sid=8dd861ec9b61594645c711242a45b1f4
Pour créer un système de Repop d'unité dans mon RPG.

Sauf que je suis tombé sur un Os, je voudrait que l'unité réapparaisse genre 20-30 secondes après sa mort, et pas instantanément.
Je met pas de wait parce que ça rendrait le declo non MUI si j'ai bien compris.
J'ai donc créer un timer.
Sauf que je suis encore un debutant niveau tables de hachage et timer.
J'ai essayé en mettant un deploiement à mon timer avec une ID qui correspond à l'ID de l'unité qui vient de mourrir pour qu'il y ait la possibilité que plusieurs timer fonctionnent ensemble.
J'arrive pas à récupérer le bon timer.

Donc il faut que je fasse quoi ? un timer simple sans deploiement que je sauve dans la table de Hachage ?

j'ai essayé aussi mais j'arrive pas cette fois à récupérer l'ID de l'unité à laquelle correspond le timer qui vient de se finir.
Et si c'est pas un timer avec deploiement comment être sur que si plusieurs unités viennent à mourrir en même temps il n'y aura pas un conflit vu qu'il n'y a pas de deploiement.

Enfin bref je suis completement paumé Confused

Ce que je voudrait c'est retrouver l'ID de l'unité a laquelle est reliée le timer qui vient d'expirer. Mais j'y arrive pas


Edit : Bon bah faute de pouvoir utiliser les timer j'ai utilisé un système D Laughing A chaque fois qu'une unité meurt je créer un dummy avec un temps d'expiration, je sauvegarde dans la table le dummy et l'unité qui s'y rattache et quand le dummy meurt je créer une unité du même type que celle qui se rattache au dummy. Et ça marche !
Mais si il existe une technique en GUI avec des timers je suis preneur
Sinon je sait pas si quand une unité avec un expiration timer sera prise en compte par le système donc par prévention j'ai préférer préciser que l'unité mourrante est différente de tous les types de dummy que j'ai, sinon j'imagine par le bordel si il me ressuscite tous mes dummy Razz
_________________
La théorie, c'est quand on sait tous, mais que rien ne marche, la pratique c'est quand tous marche mais personne ne sait pourquoi, ici nous avons réunit la théorie et la pratique, rien ne marche et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 03/09/10 17:57    Sujet du message: Citer

Tu les mets dans des variables...
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Geronimo
Membre récent


Inscrit le: 11 Mar 2010
Messages: 91
Sujets: 32



MessagePosté le: 03/09/10 20:53    Sujet du message: Citer

Quand tu a plus de 1500 unités sur la map ça fait beaucoup Very Happy
J'ai deja fait des sorts avec des variables déploiements où à partir d'un certain nombre ça commençait à laguer.
L'avantage de la table de hachage c'est que ça ne lague pas ^^
Mais j'abandonne pas avec les timer pour autant.
_________________
La théorie, c'est quand on sait tous, mais que rien ne marche, la pratique c'est quand tous marche mais personne ne sait pourquoi, ici nous avons réunit la théorie et la pratique, rien ne marche et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Kami-BlackHawk
Membre actif


Inscrit le: 14 Oct 2007
Messages: 110
Sujets: 17
Spécialité en worldedit: Créer des fatals errors :O


MessagePosté le: 03/09/10 22:02    Sujet du message: Citer

Evidemment si tu mets 1500 units sur la map, je te conseille d'activer les units par région, et d'en faire des un peu plus solide plutôt que des très nombreuses.
_________________
Le faucon surveille les vrais cons.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Geronimo
Membre récent


Inscrit le: 11 Mar 2010
Messages: 91
Sujets: 32



MessagePosté le: 04/09/10 09:05    Sujet du message: Citer

Il n'y en a pas beaucoup pour le format de la map, j'ai prit le plus gros qu'on puisse faire pour une map, j'ai aussi plus de 14000 Doodas si tu veut Razz (la limite est de 15 000)
Mais la mon traficotage avec les dummy marchent à merveille, ça fait aucun lag.
_________________
La théorie, c'est quand on sait tous, mais que rien ne marche, la pratique c'est quand tous marche mais personne ne sait pourquoi, ici nous avons réunit la théorie et la pratique, rien ne marche et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Nerzulll
Floodeur prématuré


Inscrit le: 30 Jan 2009
Messages: 669
Sujets: 56
Spécialité en worldedit: Faire des bug
Médailles: 1 (En savoir plus...)
Grand décorateur (Quantité : 1)

MessagePosté le: 04/09/10 11:00    Sujet du message: Citer

Ouais, ou alors tu reprend les systèmes que j'ai expliqué dans les exemples d'avant. A savoir un trigger qui se déclenche toute les 1s, et qui enlève à une variable sauvegardé dans l'ID de l'unité -1. Et quand cette variable arrive à 0, alors tu recréer ton unité.

Quand tu ne peux pas le faire avec les actions de Blizzard, créé toi même tes timers et autre.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Geronimo
Membre récent


Inscrit le: 11 Mar 2010
Messages: 91
Sujets: 32



MessagePosté le: 04/09/10 20:57    Sujet du message: Citer

Ha oui c'est pas bête ça Razz
Je verrais ça quand j'aurais fini de mettre au point mon sort de bouclier qui absorbe les dégâts.
_________________
La théorie, c'est quand on sait tous, mais que rien ne marche, la pratique c'est quand tous marche mais personne ne sait pourquoi, ici nous avons réunit la théorie et la pratique, rien ne marche et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 05/09/10 21:50    Sujet du message: Citer

Je te conseille un spawn quand l'unit rentre dans une region.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Geronimo
Membre récent


Inscrit le: 11 Mar 2010
Messages: 91
Sujets: 32



MessagePosté le: 06/09/10 09:39    Sujet du message: Citer

Trop compliqué, faudrait que je créer des régions partout, ça risque de faire du lag en plus à faire apparaitre toutes les unités d'un coup quand le héro entre dans la région.
Le système de Nerzul est très bien Wink
_________________
La théorie, c'est quand on sait tous, mais que rien ne marche, la pratique c'est quand tous marche mais personne ne sait pourquoi, ici nous avons réunit la théorie et la pratique, rien ne marche et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 jk2pach
Invité








MessagePosté le: 06/09/10 10:54    Sujet du message: Citer

Si tu te mets au Vjass, un petit exemple d'utilisation des timers.
Je fais ça sans l'éditeur,désolé pour les éventuelles erreurs. C'est juste pour que tu comprennes les principes.

Jass:
library CreepsRepop needs AutoIndex, TimerUtils
//Autoindex et timerutils sont des libraries disponibles sur wc3.net
globals
    private constant real WAIT_TIME = 30.//temps avant respawn
    private constant real WAIT_RANDOM = 5.//pour que ca ne soit pas systématiquement 30 secondes.
endglobals

    private struct s_delay//comme un hashtable, en VJass (un peu différent)
        integer victimId
        player owner
        real x
        real y
    endstruct

    private function Respawn takes unit victim returns nothing
        local timer t = GetExpiredTimer() //le timer expiré
        local s_delay dat = GetTimerData(t) //on récupère les données attachées au timer par la struct
            call CreateUnit(dat.owner,dat.victimId,dat.x,dat.y,GetRandomReal(0.,360.)
            call ReleaseTimer(t) //on recycle le timer
            call dat.destroy()//on détruit la struct
           
    endfunction

    private function StartRespawn takes unit victim returns nothing
        local timer t = NewTimer()//on lance un timer
        local s_delay dat = s_delay.create()//on créé une struct (genre de variable stockant d'autres variables)
            set dat.victimId = GetUnitTypeId(victim)
            set dat.x = GetUnitX(victim)
            set dat.y = GetUnitY(victim)
            set dat.owner = GetOwningPlayer(victim)
            call SetTimerData(t,dat)//on attribue la struct au timer
            call TimerStart(t,WAIT_TIME+GetRandomReal(-WAIT_RANDOM,WAIT_RANDOM), function Respawn)//on lance le temps d'attente
    endfunction
   
    private function RepopCreeps takes nothing returns boolean
        local unit victim = GetTriggerUnit()
            if GetOwningPlayer(victim)==Player(PLAYER_NEUTRAL_AGGRESSIVE) then // ou tout autre joueur
                call StartRespawn(victim)
            endif
            set victim = null
            return false
    endfunction
     
    private struct s_Creeps 
        trigger trig = null
       
            private method onCreate takes nothing returns nothing
                        set this.trig = CreateTrigger()
                        call TriggerRegisterUnitEvent(this.trig,me, EVENT_UNIT_DEATH )
                        call TriggerAddCondition(this.trig, Condition(function RepopCreeps))
                    endif
            endmethod
            implement AutoCreate
                   
            private method onDestroy takes nothing returns nothing
                    call DisableTrigger(.trig)
                    call DestroyTrigger(.trig)
                    set .trig = null
            endmethod
            implement AutoDestroy             
           
    endstruct   
   
endlibrary


Version sans passer par AutoIndex (qui te permet de créer autant de triggers que d'unités et de les détruire), avec un trigger tout bête qui se déclenchera pour la mort de toute unité.

Jass:
library CreepsRepop initializer init needs TimerUtils
//Autoindex et timerutils sont des libraries disponibles sur wc3.net
globals
    private constant real WAIT_TIME = 30.//temps avant respawn
    private constant real WAIT_RANDOM = 5.//pour que ca ne soit pas systématiquement 30 secondes.
endglobals

    private struct s_delay//comme un hashtable, en VJass (un peu différent)
        integer victimId
        player owner
        real x
        real y
    endstruct

    private function Respawn takes unit victim returns nothing
        local timer t = GetExpiredTimer() //le timer expiré
        local s_delay dat = GetTimerData(t) //on récupère les données attachées au timer par la struct
            call CreateUnit(dat.owner,dat.victimId,dat.x,dat.y,GetRandomReal(0.,360.)
            call ReleaseTimer(t) //on recycle le timer
            call dat.destroy()//on détruit la struct
           
    endfunction

    private function StartRespawn takes unit victim returns nothing
        local timer t = NewTimer()//on lance un timer
        local s_delay dat = s_delay.create()//on créé une struct (genre de variable stockant d'autres variables)
            set dat.victimId = GetUnitTypeId(victim)
            set dat.x = GetUnitX(victim)
            set dat.y = GetUnitY(victim)
            set dat.owner = GetOwningPlayer(victim)
            call SetTimerData(t,dat)//on attribue la struct au timer
            call TimerStart(t,WAIT_TIME+GetRandomReal(-WAIT_RANDOM,WAIT_RANDOM), function Respawn)//on lance le temps d'attente
    endfunction
   
    private function RepopCreeps takes nothing returns boolean
        local unit victim = GetTriggerUnit()
            if GetOwningPlayer(victim)==Player(PLAYER_NEUTRAL_AGGRESSIVE) then // ou tout autre joueur
                call StartRespawn(victim)
            endif
            set victim = null
            return false
    endfunction

    private function init takes nothing returns nothing
        local trigger t = CreateTrigger()
            call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH)
            call TriggerAddCondition(t,Condition(function RepopCreeps ))
    endfunction   
   
endlibrary

_________________
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Autre Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1
La question posée dans ce topic a été résolue !

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com