Aller au contenu


[truc&astuce]Tester une position de cellule


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 Gilles_k

Gilles_k

    Camembérisateur des mods poids lourds


Posté 24 juin 2004 - 20:02

Vous avez un petit problème avec les noms des cellules.
Plusieures cellules, ayant le même nom, ne disent pas réellement leur position dans le monde.
De plus si le nom est trop grand, le teste échoue.
Voici un truc pour tester une cellule suivant sa position X/Y.

Forme pour des cellules allant de X-99 à X99 et de Y99 à Y-99
Begin _TestCell

; Explication générale :
; La position X de la cell est calculée dans la variable Cell, puis multipliée par 100 si elle est positive ou par -100 si elle est négative.
; Si la position X est négative on ajoute 10000 pour retenir le signe négatif
; La position Y de la cell est calculée dans la variable Cell en l'ajoutant a Cell sans multiplication si elle est positive ou par -1 si elle est négative.
; Si la position Y est négative on ajoute 20000 pour retenir le signe négatif
; En resultat :
; dans les unitées/dizaine la cellule Y, dans les centaines/millier la cellule X et dans la dizaine de millier le signe X/Y.
; Les signes sont retenus ainsi :
; 3 -> X négatif et Y négatif
; 2 -> X positif et Y négatif
; 1 -> X négatif et Y positif
; rien ( 0 ) -> X positif et Y positif
; 
; Exemple :
; 31616 -> Cellule Y -16 / X -16
; 11616 -> Cellule Y 16 / X -16
; 21616 -> Cellule Y -16 / X 16
; 1616 -> Cellule Y 16 / X 16
; CQFD !

float xpos
float ypos
float zpos
short Cell

set xpos to ( Player->GetPos x )
set ypos to ( Player->GetPos y )
set zpos to ( Player->GetPos z )

If ( xpos < 0 )
   set Cell to ( ( xpos / 8192 ) - 1 )
   set Cell to ( Cell * -100 ) + 10000
Else
   set Cell to ( xpos / 8192 )
   set Cell to ( Cell * 100 ) 
Endif
If ( ypos < 0 )
   set Cell to Cell + ( ( ( ypos / 8192 ) - 1 ) * -1 )
   set Cell to Cell + 20000
Else
   set Cell to Cell + ( ypos / 8192 ) 
Endif

; ICI ACTION SUIVANT LE RESULTAT ( UNE SEULE CONDITION A EFFECTUEE )
If ( Cell == 30209 ) ; ICI SEYDA NIHYN POUR EXEMPLE (-2/-9)
 ; BlaBlaBla...
Endif

End _TestCell


Forme pour des cellules allant de X-999 à X999 et de Y999 à Y-999
Begin _TestCell

; Explication générale :
; La position X de la cell est calculée dans la variable Cell, puis multipliée par 1000 si elle est positive ou par -1000 si elle est négative.
; Si la position X est négative on ajoute 1000000 pour retenir le signe négatif
; La position Y de la cell est calculée dans la variable Cell en l'ajoutant a Cell sans multiplication si elle est positive ou par -1 si elle est négative.
; Si la position Y est négative on ajoute 2000000 pour retenir le signe négatif
; En resultat :
; dans les unitées/dizaine/centaine la cellule Y, dans les millier/dizaine de millier/centaine de millier la cellule X
; et dans le million le signe X/Y.
; Les signes sont retenus ainsi :
; 3 -> X négatif et Y négatif
; 2 -> X positif et Y négatif
; 1 -> X négatif et Y positif
; rien ( 0 ) -> X positif et Y positif
; 
; Exemple :
; 3016016 -> Cellule Y -016 / X -016
; 1016016 -> Cellule Y 016 / X -016
; 2016016 -> Cellule Y -016 / X 016
; 16016 -> Cellule Y 016 / X 016
; CQFD !

float xpos
float ypos
float zpos
long Cell

set xpos to ( Player->GetPos x )
set ypos to ( Player->GetPos y )
set zpos to ( Player->GetPos z )

If ( xpos < 0 )
   set Cell to ( ( xpos / 8192 ) - 1 )
   set Cell to ( Cell * -1000 ) + 1000000
Else
   set Cell to ( xpos / 8192 )
   set Cell to ( Cell * 1000 ) 
Endif
If ( ypos < 0 )
   set Cell to Cell + ( ( ( ypos / 8192 ) - 1 ) * -1 )
   set Cell to Cell + 2000000
Else
   set Cell to Cell + ( ypos / 8192 ) 
Endif

; ICI ACTION SUIVANT LE RESULTAT ( UNE SEULE CONDITION A EFFECTUEE )
If ( Cell == 3002009 ) ; ICI SEYDA NIHYN POUR EXEMPLE (-2/-9)
 ; BlaBlaBla...
Endif

End _TestCell

Grosse bête à cornes. Le premier qui se moque....




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)