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
|
Posté le: 13/05/12 14:19 Sujet du message: Incoherence - Player Unit Death |
|
|
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 |
|
|
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...)
|
Posté le: 13/05/12 14:51 Sujet du message: |
|
|
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 |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 13/05/12 15:02 Sujet du message: |
|
|
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 |
|
|
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...)
|
Posté le: 13/05/12 15:12 Sujet du message: |
|
|
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 |
|
|
Tirlititi
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
|
Posté le: 13/05/12 15:32 Sujet du message: |
|
|
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 |
_________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 13/05/12 16:58 Sujet du message: |
|
|
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 |
|
|
|