Aller au contenu


Probleme De Script Avec Disable


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

#1 Athila

Athila

Posté 12 octobre 2005 - 20:40

bonsoir,

j'espère que quelqu un pourra m'aider.

J'ai fait un script qui disable un objet ( casque ) au bout de 10 jours suivant un événement spécial, dans mon test, l'objet se delete bien au bout de jour après la mise à jour du journal.
Mais mon probleme c'est :

-si le joueur a pris l'objet dans sont inventaire, l'objet se deletera aussi au bout de 10 jours quand le joueur le déposera alors qu'en fait cela ne dois pas se produire.

voici un exemple de mon script ( celui attribué a l objet ) :

IF ( évènement spécial  == 1 )
     if ( jour passé >= 10 )
        "casque"-> disable
     endif
endif

on comprend bien qu'avec ca  que meme si le joueur a pris le casque, qu'il finira par s éffacer au bout des 10 jours
voila a partir de là, j ai essayer 36 solution mais rien n y fait.

ps : je sais , je souhaite toujours obtenir des choses quazi impossibles à faire, je m'en excuse d'avance ^^

merci !

#2 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 12 octobre 2005 - 20:46

Salut

Je n'ai pas compris ce que tu voulais que ton casque fasse exactement.

Pour detecter si l'objet a été ajouté a l'inventaire, il faut utiliser OnPCAdd.
Cette variable est a declarer, et elle doit etre dans le script local du casque.
Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#3 Athila

Athila

Posté 12 octobre 2005 - 20:52

ouaww je dois dire que c est du rapide aujourd hui ^^

merci pour ta réponse

en fait je veux qu un casque soir deleté au bout de 10 jours, pour ca pas d eprobleme je sasi ce qu'il faut faire, mais meme si je prend ce casque dasn mon inventaire, au bout de 10 jour le casque disparait du jeux et ca je veux éviter. en bref si le joueur a pris le casque, ce casque ne doit plus disparaitre du jeux.

En fait j'ai pas très bien compris ta commande "ONPcAdd".

#4 Fandorn Delavie

Fandorn Delavie

    Défilé de mods


Posté 12 octobre 2005 - 21:57

Ah ok ... c'est un script global ou local que tu utilises dis moi ?

Il me semble que tu est partie pour un script global. Ce qui est une bonne idée car un script local ne tournerai pas si tu est loin du casque, et donc le compteur de jour ne fonctionnerai pas.

Je te propose alors de laisser tomber le OnPCAdd et d'etoffer ton script global.

en ajoutant ces 3 lignes en debut de script

if ( player->GetItemCount, "IDduCasque" == 1 )
stopscript NomDuScriptEnQuestion
endif

if ( évènement spécial == 1 )
if ( jour passé >= 10 )
"casque"-> disable
endif
endif

Les 3 lignes arrete le script des que le joueur a le casque dans l'inventaire... propre, efficace, pas cher ^^

edit : J'ai oublier de cliquer sur envoyer :/ dsl pour la reponse tardive

Modifié par Fandorn Delavie, 12 octobre 2005 - 22:08.

Modules bêta sur True Morrowind en attendant d'être sur wiwiland... Deja des millions de téléchargements :)

#5 Athila

Athila

Posté 13 octobre 2005 - 00:48

No problème fandorn, c'est très gentil a toi de m'avoir répondu.

Pour te dire la vérité, il n y'a pas qu'un casque, mais aussi des épées des tasses, des goblets et j'en passe...
Je comprend très bien les 3 lignes que tu as écrite, cela signifie aussi si j'ai bien compris que je vais devoir faire un script différent pour chaque objets c 'est de ça que j'avais vraiment  :D  :lol:  :oops:  :o  ;)  :woot  :shock:

Je suis en train d'aider quelqu'un qui sortira un mod ici bientot.
Cette personne est très motivée et je tiens à ne pas la décevoir c'est pour ça que j'écrit ici car je sais qu'il y a beaucoup de spécialistes au grand coeur et ca c'est cool.

Encore merci  à ++

Modifié par Athila, 13 octobre 2005 - 00:50.


#6 a3jv

a3jv

    ... à 4 je reviens.


Posté 13 octobre 2005 - 14:40

Athila, tu as l'air parti pour faire une bonne floppée de scripts globaux donc il va faloir les arrêter dès qu'ils auront rempli leur rôle.
Je reprends la proposition de Fandorn Delavie qui est la bonne en l'arrangeant donc un peu :
if ( player->GetItemCount, "IDduCasque" == 1 )
	 stopscript NomDuScriptEnQuestion
	 return
endif

if ( évènement spécial == 1 )
	 if ( jour passé >= 10 )
		  "casque"-> disable
		  stopscript NomDuScriptEnQuestion
	 endif
endif

Les choses n'ont que l'importance ou la valeur qu'on leur donne.

#7 Athila

Athila

Posté 13 octobre 2005 - 15:04

Oui juste, merci pour l'info a3jv

#8 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 13 octobre 2005 - 16:02

Encore une pitite amélioration : plutôt que de faire tourner un script global par objet (ce qui serait lourdaud en mémoire... :oops:), autant n'en faire tourner qu'un seul qui mette à jour une variable globale "DisableObjetX" à 1 par objet une fois le délai expiré ! :lol: Cette variable globale interviendra dans un script local lié à chaque objet, qui le mettra en disable si la variable vaut 1.
Si le joueur prend l'objet, on met la variable globale à 2 pour indiquer de ne pas le disable à la fin du délai. Tu auras donc un script global du genre :

Citation

Begin NomDuScript

; Compteur du temps

Blablabla...


; On disable les objets dès que le temps dépasse une certaine valeur

if ( évènement spécial == 1 )

if ( jour passé >= 10 )

if ( DisableObjetX != 2 )
Set DisableObjetX to 1
endif

if ( DisableObjetY != 2 )
Set DisableObjetY to 1
endif

... etc...

stopscript NomDuScript

endif

endif

End

On aura ainsi le même effet avec moins de mémoire vive utilisée, ça remplace juste ta flopée de scripts globaux par une flopée de variables globales+scripts locaux attachés aux objets (moins gourmands que les scripts globaux, car ils ne sont actifs que dans la cell où est l'objet) ! ;)

Edit : les couleurs ne passent pas avec la balise "code", passage en "quote" ! :shock:

Modifié par Nenfëa, 13 octobre 2005 - 16:08.

Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#9 Athila

Athila

Posté 13 octobre 2005 - 16:49

Je m été demandé justement si il n été pas possible de tous réunir en 1 script, parceque bon j'ai au moin une bonne centaine d'objets à deleter donc tu imagine que faire un script pour chaque c est pas possible non plus c est trop long et en effet ca mange de la mémoire vive ce qui n est pas bien juste pour un bête disable.

Je m'interroge sur ton exemple de script car pour moi il y a un comme hik !
Je ne suis pas sure mais je te dois de m'expliquer quand même :

-> Si le joueur a pris l'objet, on va mettre DisableObjetX à 2 pour indiquer de ne pas le disable, mais en analysant ton exemple, je pensse comprendre qu'au bout de 10 jours on met DisableObjetX sur 1 ce qui signifie qu'il finira par être disable non ?
  
                              if ( jour passé >= 10 )
                                  if ( DisableObjetX != 2 )
                                      Set DisableObjetX to 1
                                  endif
                              endif

Mais je vais d'abord mettre en pratique ta proposition avant de juger

Encore merci pour ta réponse

A bientot

Modifié par Athila, 13 octobre 2005 - 16:53.


#10 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 13 octobre 2005 - 18:12

Voir le messageAthila, le 13.10.2005 à 17:49, dit :

-> Si le joueur a pris l'objet, on va mettre DisableObjetX à 2 pour indiquer de ne pas le disable, mais en analysant ton exemple, je pensse comprendre qu'au bout de 10 jours on met DisableObjetX sur 1 ce qui signifie qu'il finira par être disable non ?
Non, justement : le DisableObjetX ne sera mis à 1 (valeur codant pour "on disable l'objet") QUE s'il ne vaut pas 2 (valeur codant pour "le joueur a pris l'objet, donc on ne le disable pas"). :shock:

Quant-à faire un script qui disable tous les objets requis, c'est faisable aussi, j'imagine : on remplace les variables globales DisableObjetX par des variables locales du même nom dans le script principal et on remplace le :
if ( DisableObjetX != 2 )
Set DisableObjetX to 1
endif
... par un :
if ( DisableObjetX != 2 )
"ObjetX"->Disable
endif

Le problème, c'est qu'il faut détecter en permanence si le joueur a ou non l'objet dans son inventaire, c'est à dire qu'on mettrait dans le script global au même niveau que le compteur de temps :
if ( player->GetItemCount "ObjetX" > 0 )
Set DisableObjetX to 2
endif
Pour un, voire une dizaine d'objets, ce n'est pas gênant, mais pour une centaine d'objets, il se peut que ça fasse ramer (problème que l'on n'aurait QUE dans la cell où se trouvent les objets si on opte pour les scripts locaux)... à tester ! ;)
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#11 Athila

Athila

Posté 13 octobre 2005 - 19:56

Ha ok ok ok....

Bon moi j'ai carrément une autre solution :

JE fait pas de script, pas de variable et tan qu'à faire je ne fais pas le mod.

Non je plaisante ^^

Mon but est de vider quelques cell(s) pour pourvoir remeubler ces dernières au bouts de 10jours.
Donc si on comprend bien la chose, il y aura des script pour disable et des script pour enable, le truk de fou qui fera ramer comme tu dis  :)
Alors j ai une autre solution, je vais recopier les cell(s) , et dans la copie je meuble.
Ainssi au bout de 10 jours quand on actionera la porte, on se retrouvera dans une nouvel cellule qui serat identique a l ancienne mais elle sera meublée ect....
Je n' ai qu à changer la Door au bout de 10 jours ainsi c est ok, le jeux ne ramera pas pour une bétise de disable.

PS :Ne pas s'en faire, je sais que les noms des nouvelles cellules doivent êtres un brin différents aux anciennes.
      Je tiens a remercier tous ceux qui se sont cassé la tête pour moi je trouve ça fort sympathique j'aimerais bien vous  le rendre mais je ne vois pas comment pour l'instant.

A bientot

Modifié par Athila, 13 octobre 2005 - 19:57.


#12 Nenfëa

Nenfëa

    Le poisson bavard de Kalendaar


Posté 14 octobre 2005 - 12:13

Voir le messageAthila, le 13.10.2005 à 20:56, dit :

PS :Ne pas s'en faire, je sais que les noms des nouvelles cellules doivent êtres un brin différents aux anciennes.
Pour éviter ce problème, tu peux tout simplement recopier tous les statics/objets de ta pièce et le coller dans la même cell, mais un peu plus loin bien sur... :)

Là dessus, tu mets deux portes avec des door markers menant tous deux à cette même cell MAIS chacun à une des deux pièces (un vers celle avec objets et l'autre vers la pièce vide), et tu enable/disable les portes au bon moment... :D
Nenfëa

- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!

Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!

Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !

#13 Athila

Athila

Posté 14 octobre 2005 - 14:12

oui ca aurait été encore plus imple, mais c est trop tard, j ai deja fait les new cell lol
Maintenant je dois faire en sorte que le joueur ne peut pas faire le sort "Marque" dans les anciennes cell ( ancienne de 10 jours ). mais pour ca je dois rechercher le code , je penss eque c ets un truk du genre : teleportingdisable je ne suis pas sure.

A +

#14 MysticalShadow

MysticalShadow

Posté 15 octobre 2005 - 10:42

Les fonctions sont DisableTeleporting et EnableTeleporting. (qu'il ne faut pas oublier d'activer)
tu es sûr que DisableTeleporting empêche d'utiliser le sort Marque?




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

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