Probleme De Script Avec Disable
#1
Posté 12 octobre 2005 - 20:40
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
Posté 12 octobre 2005 - 20:46
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.
#3
Posté 12 octobre 2005 - 20:52
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
Posté 12 octobre 2005 - 21:57
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.
#5
Posté 13 octobre 2005 - 00:48
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
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
Posté 13 octobre 2005 - 14:40
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
#7
Posté 13 octobre 2005 - 15:04
#8
Posté 13 octobre 2005 - 16:02
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
; 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" !
Modifié par Nenfëa, 13 octobre 2005 - 16:08.
- 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
Posté 13 octobre 2005 - 16:49
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
Posté 13 octobre 2005 - 18:12
Athila, le 13.10.2005 à 17:49, dit :
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 endifPour 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 !
- 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
Posté 13 octobre 2005 - 19:56
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
Posté 14 octobre 2005 - 12:13
Athila, le 13.10.2005 à 20:56, dit :
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...
- 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
Posté 14 octobre 2005 - 14:12
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
Posté 15 octobre 2005 - 10:42
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)