Un Script Pour Générer Des Objets Aleatoirement
#1
Posté 29 décembre 2005 - 12:47
Nous avons le model mais pas le scripts qui va avec!^^
L'idée sera donc d'avoir un placard a balais qui genere des objets aleatoirement. Des qu'on l'ouvre, un objet apparait dans notre inventaire mais ne reste que quelques minutes.
ces objets peuvent allez de la cuillere ou de l'oeuf de kawa à la plus grosse épée du jeu!
Alors si l'un des scripteur voit comment faire ou veux bien nous aider nous en serions ravi!
merci a vous et bonne journée
http://independentgeeks.wordpress.com/
#2
Posté 29 décembre 2005 - 13:27
global short Truc
Begin ScriptArmoire short objet if ( OnActivate ) if ( Truc != 0 ) messagebox "Il vous reste un objet incongru, vous ne pouvez pas en avoir un autre !" return endif set objet to ( 1 + Random100 / 25 ) set Truc to objet startscript ScriptRetireObjet if ( objet == 1 ) messagebox "Vous trouvez un objet débile dans l'armoire." player->additem "objet débile" 1 elseif ( objet == 2 ) messagebox "Vous trouvez un objet idiot dans l'armoire." player->additem "objet idiot" 1 elseif ( objet == 3 ) messagebox "Vous trouvez un objet stupide dans l'armoire." player->additem "objet stupide" 1 elseif ( objet == 4 ) messagebox "Vous trouvez un objet inutile dans l'armoire." player->additem "objet inutile" 1 endif endif End
Begin ScriptRetireObjet float timer short retrait if ( MenuMode == 1 ) return endif set timer to ( timer + GetSecondsPassed ) if ( timer > 300 ); délais de 5 minutes... set retrait to 1 endif if ( retrait == 1 ) if ( Truc == 1 ) if ( player->getItemCount "objet débile" > 0 ) player->removeItem "objet débile" 1 set retrait to 2 endif elseif ( Truc == 2 ) if ( player->getItemCount "objet idiot" > 0 ) player->removeItem "objet idiot" 1 set retrait to 2 endif elseif ( Truc == 3 ) if ( player->getItemCount "objet stupide" > 0 ) player->removeItem "objet stupide" 1 set retrait to 2 endif elseif ( Truc == 4 ) if ( player->getItemCount "objet inutile" > 0 ) player->removeItem "objet inutile" 1 set retrait to 2 endif endif endif if ( retrait == 2 ) set Truc to 0 set retrait to 0 stopscript ScriptRetireObjet endif End
Voilà. Comme on peut le constater, c'est super pénible à faire pour plein d'objets différents (et on atteint vite la limite de taille des scripts).
Modifié par Angora, 29 décembre 2005 - 13:27.
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#3
Posté 29 décembre 2005 - 13:44
http://independentgeeks.wordpress.com/
#4
Posté 29 décembre 2005 - 14:57
Quand l'objet a finalement disparu, le second script efface la "dette" et s'arrête tout seul.
Pour le premier, j'ai utilisé quatre objets pour l'exemple, c'est pour ça que Random100 est divisé par 25. Pour en avoir plus, il faut diviser par moins. Par exemple, par 20 pour cinq objets, par 10 pour dix objets, par 5 pour vingt objets, etc.
La variable globale est utilisée pour se souvenir de quel objet fut donné, et donc lequel doit disparaître. Quand elle vaut zéro, c'est que le PJ n'a pas ou plus de "dette" et peut obtenir un nouvel objet.
Tiens, j'ai oublié de remettre timer à zéro... Faut le faire dans la partie "if ( retrait == 2 )"...
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#5
Posté 29 décembre 2005 - 15:03
#6
Posté 29 décembre 2005 - 16:03
Evidemment, ce serait beaucoup plus simple de tout simplement faire ceci dans le script de l'armoire :
If ( OnActivate == 1 ) Additem "random_pos" 1 Activate EndIf
(Ou encore mieux, on créé une nouvelle liste à niveau, armoire_superrandom, dans laquelle on met un exemplaire de chaque autre liste à niveau... Le n'importe quoi est garanti !)
Mais deux problèmes. Le premier c'est que si le joueur fait "Tout prendre", ça ne marche plus. (Bon, on peut contourner le problème en faisant Player->AddItem au lieu de AddItem et Activate, mais c'est moins joli.)
Le second c'est qu'il est strictement impossible de savoir quel est l'objet créé pour pouvoir ensuite le supprimer. C'est pour ça que je disait ça :
Angora, le 29.12.2005 à 13:27, dit :
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#7
Posté 29 décembre 2005 - 16:10
Euh sinon la question a deux pieces d'or : "ou qu'cest qu'on les met ces scripts?"
Le premier sur l'armoir je suppose mais le deuxieme??
http://independentgeeks.wordpress.com/
#8
Posté 29 décembre 2005 - 17:19
En bref, si j'étais toi, j'abandonnerai l'idée pour diverses raisons. Notamment le fait qu'il faudrait créer une ID spéciale pour chaque objet pouvant apparaitre pour éviter que le joueur perde aussi un objet identique qu'il aurait dans son inventaire.
C'est toi qui voit si c'est très important pour ton mod ou si tu peux t'en passer.
Modifié par a3jv, 29 décembre 2005 - 17:20.
#9
Posté 29 décembre 2005 - 17:47
a3jv, le 29.12.2005 à 17:19, dit :
Non, ça c'est pas grave. Le joueur porte cinq oeufs de Kwama, il en gagne un nouveau, cinq minutes après il en perd un, était-ce egg-zactement le même ? Aucune importance !
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#10
Posté 29 décembre 2005 - 18:00
Il paraît donc plus simple de créer des IDs nouvelles pour tes objets, et de leur adjoindre à toutes ce script: (Tribuanl recquis)
BEGIN ScriptObjetsQuiDisparaissent_local float timer short compteur_suppr if ( MenuMode == 1 ) ; capital, puisque l'on utilise un timer Return endif if ( compteur_suppr >= 1 ) Set compteur_suppr to ( compteur_suppr + 1 ) if ( compteur_suppr >= 15 ) Set compteur_suppr to 0 SetDelete, 1 endif Return endif Set timer to ( timer + GetSecondsPassed ) if ( timer >= 300 ) Disable MessageBox "L'objet invoqué a été rappellé." Set timer to 0 Set compteur_suppr to 1 ; lance la suppression propre de cet objet Set PLACARD_ACTIVE to 0 ; on peut prendre un nouvel objet endif END
Il faut aussi que tu crées une variable globale, que dans le script j'ai appellé pour l'exemple PLACARD_ACTIVE. Quand elle est à 1, le PJ a sur lui un des objets donnés par ton placard magique.
Et tu colles au placard ce script (pardon Angora de reprendre quelque peu le tiens )
BEGIN ScriptArmoire_local short objet if ( OnActivate == 0 ) Return endif if ( PLACARD_ACTIVE == 1 ) MessageBox "Il vous reste un objet incongru, vous ne pouvez pas en avoir un autre !" Return endif Set PLACARD_ACTIVE to 1 Set objet to ( 1 + Random100 / 25 ) if ( objet == 1 ) MessageBox "Vous trouvez un objet débile dans l'armoire." Player->AddItem "objet débile" 1 elseif ( objet == 2 ) MessageBox "Vous trouvez un objet idiot dans l'armoire." Player->AddItem "objet idiot" 1 elseif ( objet == 3 ) MessageBox "Vous trouvez un objet stupide dans l'armoire." Player->AddItem "objet stupide" 1 elseif ( objet == 4 ) MessageBox "Vous trouvez un objet inutile dans l'armoire." Player->AddItem "objet inutile" 1 endif END
En tout cas, si les leveled lists acceptent des objets persos scriptés, tu devrais pouvoir les utiliser.
#11
Posté 29 décembre 2005 - 18:34
MysticalShadow, le 29.12.2005 à 18:00, dit :
Non, normalement, pas avec les scripts que j'ai proposés.
Le script de retrait d'objet va, une fois le temps écoulé, à chaque frame, vérifier si le PJ possède l'objet à retirer, et sinon remettre ça à la frame prochaine. Ce n'est qu'une fois l'objet "rendu" qu'il va s'arrêter, et ce même si ça fait 15 ans que le script attend.
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#12
Posté 29 décembre 2005 - 21:42
Merci encore pour votre aide!
http://independentgeeks.wordpress.com/
#13
Posté 29 décembre 2005 - 22:15
Mais n'oublie pas de le modifier pour changer les IDs des objets, etc.
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
#14
Posté 29 décembre 2005 - 23:04
Je ne vois pas de raison pour laquelle ca ne marcherait pas, mais peut être qu'il faudrait faire 1 test.
#15
Posté 30 décembre 2005 - 02:29
Modifié par yukimura, 01 janvier 2006 - 23:42.
http://independentgeeks.wordpress.com/
#16
Posté 01 janvier 2006 - 23:43
http://independentgeeks.wordpress.com/
#17
Posté 02 janvier 2006 - 00:05
global short Truc
Begin ScriptArmoire if ( OnActivate ) if ( Truc != 0 ) messagebox "Il vous reste un objet incongru, vous ne pouvez pas en avoir un autre !" return endif set Truc to ( 1 + Random100 ) set Truc to ( Truc / 25 ) startscript ScriptRetireObjet if ( Truc == 1 ) messagebox "Vous trouvez un objet débile dans l'armoire." player->additem "objet débile" 1 elseif ( Truc == 2 ) messagebox "Vous trouvez un objet idiot dans l'armoire." player->additem "objet idiot" 1 elseif ( Truc == 3 ) messagebox "Vous trouvez un objet stupide dans l'armoire." player->additem "objet stupide" 1 elseif ( Truc == 4 ) messagebox "Vous trouvez un objet inutile dans l'armoire." player->additem "objet inutile" 1 endif endif End
Begin ScriptRetireObjet float timer short retrait if ( MenuMode == 1 ) return endif set timer to ( timer + GetSecondsPassed ) if ( timer > 300 ); délais de 5 minutes... set retrait to 1 set timer to 0 endif if ( retrait == 1 ) if ( Truc == 1 ) if ( player->getItemCount "objet débile" > 0 ) player->removeItem "objet débile" 1 set retrait to 2 endif elseif ( Truc == 2 ) if ( player->getItemCount "objet idiot" > 0 ) player->removeItem "objet idiot" 1 set retrait to 2 endif elseif ( Truc == 3 ) if ( player->getItemCount "objet stupide" > 0 ) player->removeItem "objet stupide" 1 set retrait to 2 endif elseif ( Truc == 4 ) if ( player->getItemCount "objet inutile" > 0 ) player->removeItem "objet inutile" 1 set retrait to 2 endif endif endif if ( retrait == 2 ) set Truc to 0 set retrait to 0 stopscript ScriptRetireObjet endif End
En français, il n'y a jamais, jamais, JAMAIS, J-A-M-A-I-S, de cédille à un 'c' devant un 'e', un 'i' ou un 'y'. Jamais. Sans aucune exception. Pas la moindre. Zéro. Cédille devant e, i ou y = faute. Un point, c'est tout, c'est comme ça, ça a toujours été comme ça, et ça le sera toujours.
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)