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=7fc899e7e47df8e310b349223b5cc3adMé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

Incoherence - Player Unit Death

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Wareditor
The Master of Nothing


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


MessagePosté le: 13/05/12 14:19    Sujet du message: Incoherence - Player Unit Death Citer

J'ai un système de "Kill Points" qui ajoute la valeur d'une unité tué au compteur du tueur. Mais le problème c'et qu'il arrive que des points sont données par "hasard". Je m'explique : Le Joueur 0 n'a plus d'unité, mais pourtant il arrive qu'il gagne des points comme même. Je pense que ça vient du fait que il y est trop d'unités qui se tue dans des intervalles de temps très brefs. Pourtant tout a l'air correcte.


Voici le début de la fonction ( la seul partie qui nous intéresse ) :

Jass:
    private function UnitIsKilled takes nothing returns nothing
   
        local unit k = GetKillingUnit()
        local unit d = GetDyingUnit()
        local unit u
       
        local integer pk = GetPlayerId(GetOwningPlayer(k))
        local integer pd = GetPlayerId(GetOwningPlayer(d))
       
        local string s
        local timer tim
       
   
        set KillPts[pk] = KillPts[pk] + GetUnitPointValue(d)
        call BJDebugMsg("Kill Pts of P"+I2S(pk)+" ="+I2S(KillPts[pk]) )


La création du trigger ( à l'initialisation ) :

Jass:
        set t = CreateTrigger()
       
        call TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_DEATH )
        call TriggerAddAction(t, function UnitIsKilled )


Merci

EDIT : Si jamais vous avez besoin de la map, MPez moi.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 13/05/12 14:51    Sujet du message: Citer

Euh, c'est vrai que je vois pas trop ce qui cloche...
Peut-être que GetOwningPlayer renvoie 0 quand l'unité est morte?
_________________
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: 13/05/12 15:02    Sujet du message: Citer

Non, car sinon tout les points irait au rouge. Mais c'est sur que l'erreur vient de cette partie : à un moment pk se nulifie.

EDIT : En fait, oui c'est surement cette erreur. Car dans certains cas l'unit killer peut être tué presque instantanément après !

EDIT 2: Mais est ce que l'intervalle entre l'évent prend en compte l'action et le GetOwningPlayer() est il assez grand pour que l'unit qui a tué se fasse tué ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 13/05/12 15:12    Sujet du message: Citer

Essaie de remove l'unité de la carte directement après sa mort pour voir ce que ça donne.
Ou alors quand elle meurt tu mets un boolean à false, et tu n'exécute le déclencheur que s'il est égal à true.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 13/05/12 15:32    Sujet du message: Citer

A priori, même si une unité est morte, on peut utiliser GetOwningPlayer dessus sans bug tant qu'elle n'est pas remove de la partie (donc ça devrait marcher même si le killer meurt avant de tuer une autre unité).

Je pense plutôt que tu devrais rajouter la condition :
Jass:
if k == null then
    call BJDebugMsg(GetUnitName(d)+" est mort sans avoir été tué !")
    return
endif

_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
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: 13/05/12 16:58    Sujet du message: Citer

Ouais Tir', l'erreur vient de la. Mais comment est-ce que c'est possible vue que je n'ai pas d'autres éléments qui peuvent tuer ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
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