Aller au contenu


Tableau De Variable Et Son Utilisation


  • Veuillez vous connecter pour répondre
4 réponses à ce sujet

#1 drakan

drakan

Posté 28 mars 2010 - 21:02

bonjour,

depuis quelque temps , j'ai fait un telle script qui permet de ne pas avoir 30.000 variable et de les ranger.


Son fontionnement:


->le principe est de decomposer une variable long . d'un nombre , on extrait 9 chiffres

c'est assimilable à une fonction: 1 variable global ( pph0 ) pour entrée et 9 variable global a la sortie ( pph1 , pph1 , pph2 , pph3 , pph4 , pph5 , pph6 , pph7 , pph8 , pph9 )


ex: pph0 = 123456789

pph9 = 1 , pph8 = 2 , pph7 = 3 ....

cette astuce est utile pour stocker des donnée

->la recompilation est tres simple :

set variable to ( pph9*100000000 + pph8*10000000 + pph7*1000000 + pph6*100000 + pph5*10000 + pph4*1000 + pph3*100 + pph2*10+ 2 )

( dans l'exemple on changer seulement pph1 et garder tt le reste des info )




mon probleme

mon programme fct parfaitement avec la decomposition de 6 chiffres, mais depuis que j'ai introduit le 7eme , le 8 eme et le 9 eme chiffres ca ne fonctionne plus. j'obtient des resultat erroné ( seulement pour les deux premier chiffre )

j'ai essayer de trouver l'origine du probleme et a priori ca vient que la fonction set ne sait pas calculer avec 9 chiffres , ou du moins le resultat est un peu aleatoire , un coup l'addition est bonne et un coup ca foire

je voudrais bien savoir si le probleme vient de la et si c'est soluble. mais la je pense que je me fais des illusions...
toutefois si quelqu'un a le courage d'essayer de se pencher sur mon programme , je lui en saurai gré

le script:


begin PhExtractionChiffre


; LE PROGRAMME VA TESTER LE CHIFFRE DES MILLARDS PUIS CELUI D'AVANT JUSQU'AU UNITE

; PHH VA CONTENIR LE NOMBRE QUE L'ON VA TESTER

long phh

long test1
long test2
long test3
long test4
long test5
long test6
long test7
long test8
long test9


long OperationVariable1
long OperationVariable2
long OperationVariable3
long OperationVariable4
long OperationVariable5
long OperationVariable6
long OperationVariable7
long OperationVariable8
long OperationVariable9

short chiffre_1eme;		 chiffre des unité
short chiffre_2eme;		 chiffre des dizaine
short chiffre_3eme
short chiffre_4eme
short chiffre_5eme
short chiffre_6eme
short chiffre_7eme
short chiffre_8eme
short chiffre_9eme

set phh to pph0 

set test1 to 100000000
set test2 to 200000000
set test3 to 300000000
set test4 to 400000000
set test5 to 500000000
set test6 to 600000000
set test7 to 700000000
set test8 to 800000000
set test9 to 900000000


set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 ) 
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )




if ( OperationVariable9 >= 0 ); 	test du chiffre des milliaires
		set chiffre_9eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_9eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_9eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_9eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_9eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_9eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_9eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_9eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_9eme to 1

		set phh to OperationVariable1 



else
		set chiffre_9eme to 0 

endif




set test1 to ( test1 /10 )	; je divise par 10 pour reculer d'un zero et donc tester le chiffre avant celui des milliards
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )




if ( OperationVariable9 >= 0 )
		set chiffre_8eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_8eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_8eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_8eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_8eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_8eme to 4
		set phh to OperationVariable4 

elseif ( OperationVariable3 >= 0 )
		set chiffre_8eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_8eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_8eme to 1
		set phh to OperationVariable1 

else
		set chiffre_8eme to 0 

endif




set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )







if ( OperationVariable9 >= 0 )
		set chiffre_7eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_7eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_7eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_7eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_7eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_7eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_7eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_7eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_7eme to 1
		set phh to OperationVariable1 

else
		set chiffre_7eme to 0 

endif


set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )






















if ( OperationVariable9 >= 0 )
		set chiffre_6eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_6eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_6eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_6eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_6eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_6eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_6eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_6eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_6eme to 1
		set phh to OperationVariable1 

else
		set chiffre_6eme to 0 

endif




set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )



if ( OperationVariable9 >= 0 )
		set chiffre_5eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_5eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_5eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_5eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_5eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_5eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_5eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_5eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_5eme to 1
		set phh to OperationVariable1 

else
		set chiffre_5eme to 0 

endif




set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )



if ( OperationVariable9 >= 0 )
		set chiffre_4eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_4eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_4eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_4eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_4eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_4eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_4eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_4eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_4eme to 1
		set phh to OperationVariable1 

else
		set chiffre_4eme to 0 

endif




set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )



if ( OperationVariable9 > 0 )

		set chiffre_3eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_3eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_3eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_3eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_3eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_3eme to 4
		set phh to OperationVariable4 

elseif ( OperationVariable3 >= 0 )
		set chiffre_3eme to 3
		set phh to OperationVariable3 

elseif ( OperationVariable2 >= 0 )
		set chiffre_3eme to 2
		set phh to OperationVariable2 

elseif ( OperationVariable1 >= 0 )
		set chiffre_3eme to 1
		set phh to OperationVariable1 

else
		set chiffre_3eme to 0 

endif


set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 )
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )




if ( OperationVariable9 >= 0 )
		set chiffre_2eme to 9
		set phh to OperationVariable9 

elseif ( OperationVariable8 >= 0 )
		set chiffre_2eme to 8
		set phh to OperationVariable8

elseif ( OperationVariable7 >= 0 )
		set chiffre_2eme to 7
		set phh to OperationVariable7

elseif ( OperationVariable6 >= 0 )
		set chiffre_2eme to 6
		set phh to OperationVariable6 

elseif ( OperationVariable5 >= 0 )
		set chiffre_2eme to 5
		set phh to OperationVariable5

elseif ( OperationVariable4 >= 0 )
		set chiffre_2eme to 4
		set phh to OperationVariable4 


elseif ( OperationVariable3 >= 0 )
		set chiffre_2eme to 3
		set phh to OperationVariable3 


elseif ( OperationVariable2 >= 0 )
		set chiffre_2eme to 2
		set phh to OperationVariable2 


elseif ( OperationVariable1 >= 0 )
		set chiffre_2eme to 1
		set phh to OperationVariable1 

else
		set chiffre_2eme to 0 

endif



set test1 to ( test1 /10 )
set test2 to ( test2 /10 )
set test3 to ( test3 /10 )
set test4 to ( test4 /10 )
set test5 to ( test5 /10 )
set test6 to ( test6 /10 )
set test7 to ( test7 /10 )
set test8 to ( test8 /10 )
set test9 to ( test9 /10 )

set OperationVariable1 to ( phh - test1 )
set OperationVariable2 to ( phh - test2 )
set OperationVariable3 to ( phh - test3 )
set OperationVariable4 to ( phh - test4 ) 
set OperationVariable5 to ( phh - test5 )
set OperationVariable6 to ( phh - test6 )
set OperationVariable7 to ( phh - test7 )
set OperationVariable8 to ( phh - test8 )
set OperationVariable9 to ( phh - test9 )


if ( OperationVariable9 >= 0 )
		set chiffre_1eme to 9

elseif ( OperationVariable8 >= 0 )
		set chiffre_1eme to 8

elseif ( OperationVariable7 >= 0 )
		set chiffre_1eme to 7

elseif ( OperationVariable6 >= 0 )
		set chiffre_1eme to 6

elseif ( OperationVariable5 >= 0 )
		set chiffre_1eme to 5

elseif ( OperationVariable4 >= 0 )
		set chiffre_1eme to 4

elseif ( OperationVariable3 >= 0 )
		set chiffre_1eme to 3

elseif ( OperationVariable2 >= 0 )
		set chiffre_1eme to 2


elseif ( OperationVariable1 >= 0 )
		set chiffre_1eme to 1

else
		set chiffre_1eme to 0 

endif




set pph1 to chiffre_1eme
set pph2 to chiffre_2eme
set pph3 to chiffre_3eme
set pph4 to chiffre_4eme
set pph5 to chiffre_5eme
set pph6 to chiffre_6eme
set pph7 to chiffre_7eme
set pph8 to chiffre_8eme
set pph9 to chiffre_9eme



;messagebox " 	%g %g %g %g %g %g 	%g %g %g 	" , chiffre_9eme , chiffre_8eme , chiffre_7eme , chiffre_6eme , chiffre_5eme , chiffre_4eme , chiffre_3eme , chiffre_2eme , chiffre_1eme




set ph1 to 1


stopscript PhExtractionChiffre


end PhExtractionChiffre





et voici la commande d'appellede la fonction



if (onactivate ==1 )

		if ( ph1 == 0 )

				set pph0 to ( random100 * 1000000 + random100 * 10000 + random100 * 100 + random100 )
				startscript PhExtractionChiffre
				return
		else
				set ph1 to 0

		endif

endif



debug scipt ne detecte aucune erreur

Modifié par drakan, 28 mars 2010 - 21:48.


#2 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 28 mars 2010 - 23:01

Il me semble que les variables "long" (au moins les globales comme ta pph0, peut-être aussi les variables "intermédiaires" pour les expressions mathématiques, mais je ne crois pas que ce soit le cas des locales) ne sont pas réellement des entiers mais sont implémentés comme des flottants. On perd donc la précision à l'unité près à 2^23 (taille de la mantisse d'un float), soit environ 8 millions. C'est donc logique que les résultats soient erronés à partir du septième chiffre décimal.

Un tableau de taille arbitraire n'est utile que si tu as un gros calcul à faire à un moment donné. Si tu peux faire en sorte que le joueur reste dans une unique cellule tout le temps du calcul, alors tu peux émuler ce genre de tableau en utilisant des objets invisibles indexés par leurs coordonnées dans la cellule. Tu les crées avec placeitem, détruis avec setdelete, et y accèdes via des variables globales (à raison d'un accès par frame). C'est cette méthode que j'ai utilisé dans mon mod Laby Connection et elle permet notamment de faire un tableau d'objets (avec plusieurs variables et méthodes membres) et pas seulement de valeurs assez limitées.

Mais si tu tiens à poursuivre sur ta voie, l'utilisation d'une variable locale sur un objet "persistant" (accédée via "iddelobjet".pph0) à la place de la globale pph0 devrait (note le conditionnel) suffire.
You look like you need a monkey!

Attention : perfectionniste paresseux.

#3 drakan

drakan

Posté 29 mars 2010 - 10:05

merci pour ta reponse kafou , meme si je ne comprend pas tout ce que tu dis ^^
je viens de commencer à sur l'editeur il y a moins d'une semaine et je connais que tres peu de fonction
je sais en revanche qu'il faut bien traité les fonctions sinon elles font rapidement la tete :D


Citation


Il me semble que les variables "long" (au moins les globales comme ta pph0, peut-être aussi les variables "intermédiaires" pour les expressions mathématiques, mais je ne crois pas que ce soit le cas des locales) ne sont pas réellement des entiers mais sont implémentés comme des flottants. On perd donc la précision à l'unité près à 2^23 (taille de la mantisse d'un float), soit environ 8 millions. C'est donc logique que les résultats soient erronés à partir du septième chiffre décimal.



je ne sais pas vraiment ce qu'est une mantisse mais t'a tout a fait raison, mon programme commence a ne plus marcher à partir de 8 chiffres. j'ai rajuster mon programme à 7 chiffres et il marche tres bien



Citation


Un tableau de taille arbitraire n'est utile que si tu as un gros calcul à faire à un moment donné. Si tu peux faire en sorte que le joueur reste dans une unique cellule tout le temps du calcul, alors tu peux émuler ce genre de tableau en utilisant des objets invisibles indexés par leurs coordonnées dans la cellule. Tu les crées avec placeitem, détruis avec setdelete, et y accèdes via des variables globales (à raison d'un accès par frame). C'est cette méthode que j'ai utilisé dans mon mod Laby Connection et elle permet notamment de faire un tableau d'objets (avec plusieurs variables et méthodes membres) et pas seulement de valeurs assez limitées.



tu veux dire que tu peux crée par cette artifice une variable globale temporaire?

et comment stock tu l'information avec ces objets invisibles ?
par leur coordonnée ou par ce que tu m'a dis apres (accédée via "iddelobjet".pph0) ?

si jamais t'a un exemple sous la main , ca m'aiderai pas mal pour mieux comprendre

parce que si il y a moyen de stocker une variable sur un objet et en plus à la maniere d'un enregistrement , tu ferais un heureux ^^

Modifié par drakan, 29 mars 2010 - 10:05.


#4 Kafou

Kafou

    Le canari a bouffé le rominet !


Posté 29 mars 2010 - 10:32

Voir le messagedrakan, le 29 mars 2010 - 10:05, dit :

je ne sais pas vraiment ce qu'est une mantisse
Désolé, vu que tu fais du champ de bits et que tu parlais de tableaux à la C, je pensais que tu étais informaticien ^^

La mantisse c'est la partie "entière" (pas au sens mathématique du terme) d'une variable float (et donc sa précision). Un entier utilise 31 bits de précision (va de -2 millards à 2 milliards). Un flottant en utilise 23 (de -8 millions à 8 millions), le reste étant utilisé pour l'exposant (l'ordre de grandeur, par lequel tu multiplies la mantisse pour obtenir un nombre potentiellement énorme ou minuscule : c'est la "virgule flottante").

Citation

j'ai rajuster mon programme à 7 chiffres et il marche tres bien
Attention, tu risques d'avoir à nouveau une erreur si tu mets un 9 dans le dernier chiffre (le plus élevé dans le gros nombre total).

Edit : my bad, en réalité un float peut représenter un nombre à l'unité près jusqu'à 16 millions et non 8 millions (grâce à la magie de l'exposant). Donc à 7 chiffres ça fonctionne.

Citation

et comment stock tu l'information avec ces objets invisibles ?
par leur coordonnée ou par ce que tu m'a dis apres
Leurs coordonnées sont les indices, mais peuvent aussi être utilisées comme données (puisque tu as 3 degrés de liberté dans une cellule en 3D, plus l'angle de rotation). Mais tu peux aussi stocker d'autres données en utilisant des variables sur ces objets (voir plus loin).

Citation

(accédée via "iddelobjet".pph0)
Ceci est une autre solution, qui permettrait simplement de faire comme tu fais mais en étant limité à 9 chiffres décimaux au lieu de 7 (puisqu'on a toute la précision d'un entier 32 bits). Cette solution nécessite que l'objet soit unique et persistant, elle n'est donc pas utilisable conjointement à la méthode des objets placés selon des coordonnées.

Edit : au passage, si tu utilisais un découpage binaire et non décimal de la variable, tu y gagnerais encore en nombre de valeurs stockables (enfin ça dépend de ce que tu veux faire).

Citation

parce que si il y a moyen de stocker une variable sur un objet et en plus à la maniere d'un enregistrement , tu ferais un heureux ^^
Tu peux associer un script à n'importe quel objet de Morrowind. Et tu peux déclarer des variables locales dans n'importe quel script de Morrowind. Si tu places plusieurs fois un même objet dans une cellule, chacun utilisera le même script mais aura sa propre instanciation des variables locales (de la même façon qu'en programmation orientée objet) et donc tu peux stocker des valeurs différentes sur chacun.

La limitation étant, comme je te l'ai dit, que les scripts locaux ne sont exécutés que lorsque le joueur est dans la même cellule que les objets. S'il va ailleurs, tout s'arrête et tu n'as plus accès à ton "tableau".

Pour un exemple, il y a bien mon mod mais ça risque de pas être clair du tout... j'avais dans l'idée de rédiger un document sur cette méthode il y a un moment déjà, mais j'ai autre chose à faire ^^
You look like you need a monkey!

Attention : perfectionniste paresseux.

#5 drakan

drakan

Posté 29 mars 2010 - 20:24

merci j'y vois finalement plus clair Image IPB , je vais pas tarder à essayer ces " nouvelles " variables qui me semble bien pratique

mais pour l'instant , je suis en train de me debattre pour reussir à faire un truc à priori tout con:

identifier une personne qui marche sur un objet ( pour ensuite le télé-transporter )
la commande onactivate presise bien qu'il y a quelqu'un mais qui? ca reste pour l'instant un mystere.
j'ai deja penser à un moyen de faire ca ... tres compliqué .
c'est pourquoi je cherche actuellement à comprendre les fonctions MWSE mais c'est pas gagné...
connaitrais tu un tuto pour apprendre à les utiliser?
j'en ai bien trouver un mais c'est pas tres clair (et c'est en anglais ^^ )

edit: vu que c'est un autre sujet j'ai poster un nouveau sujet
http://forum.wiwilan...fonctions-mwse/

Modifié par drakan, 29 mars 2010 - 20:55.





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

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