Problèmes pour retrouver un effect

Répondre
Partager Rechercher
J'ai fait un script gérant la fatigue qui a pour but de réduire les caractéristiques des pc lorsqu'ils commencent a fatiguer. (-1 de charisme après 36 h de veillée, -1 en intelligence l'heure suivant, -1 en sagesse l'heure d'après, etc...).

Quand le pc dors, il regagne les carac perdues, sauf s'il veille depuis très longtemp auquel cas il faut se reposer plusieurs fois.

Mon problème est que je n'arrive pas a récupérer les effect qui correspondent a la caractéristique voulue, mais seulement le type d'effect (par GetEffectType).

Donc pas moyen de repérer si tel effet décroit la force, si tel effet décroit le charisme, etc...

voici mon script :

Code PHP:


effect eEffect 
GetFirstEffect(oPC);
while(
GetIsEffectValid(eEffect))
{
    
nType GetEffectType(eEffect);
    
//La il me faudrais récupérer la charactéristique déchue par l'effet
    
eEffect GetNextEffect(oPC);

voila, si quelqu'un a une idée, en passant par le script commencé si dessus où en utlisant "la ruse" ^_^
Bon bah moi j'avais fait un script pour simuler la fatigue, tu peux le retrouver dans le persistant... mais je crois qu'il est moins bien que ne le sera le tien (une fois qu'il marchera), par contre il a un avantage : il est très facile à utiliser et à customiser, de plus il est très léger pour l'ordi.
A priori, si tu fait marcher tout ton bazar dans un seul script (avec une fonction récurrente par exemple), tu peux conserver la référence sur ton effect au fur et à mesure pour pouvoir supprimer l'effet que tu veux à la fin, mais le script risque d'être un peu confus... A priori, il faudrait décentraliser le processus dans une bibliothèque où tu aurais une fonction pour chaque heure où tu applique un effect à peu près, chacune acceptant un effect de plus comme paramètre par rapport à la précédente... Avec une fonction se répétant fréquemment, tu pourrais conditionner la suppression des effets grâce à un local int positionné dans le OnRest....
g proposé un truc sur le script de fatige
tu pourras crer des objets, qui creaient les effets

pour récupérer les effets
tu fais une boucle sur GetFirstEffect
qui teste le createur
non ?
Et pourquoi pas tous simplement une variable qui t'indiquerai ou tu en est de tes effets ?
Ca me parait tellement simple comme solution que j'ai probablement du rater un épisode
*va relire le post*
Ben ct une très bonne idée au départ, mais malheureusement, on va avoir un problème pour rapatrier l'effect (et on, pas de AssignCommand puisque la fonction renvoie quelquechose

la seule solution serait de faire des ExecuteScript sur l'objet en question, mais je sens que ca va être LOURD....

Enfin bon je pense que j'ai pas le choix :/

ce qui me tue, c'est qu'on se prend la tête pour récupérer une variable toute bète qu'il faut juste récupérer, bioware aurais quand même pu nous donner la fonction adéquoite.....

JE VEUX LE SOURCE CODE Y_Y
Bien il faut stoquer 6 variables en tout, sur 6 objets différents.

De plus, on peut jamais stoquer sur un PC sans passer par un AssignCommand, puisqu'aucun script ne prend le pc comme OBJECT_SELF.
Mais tu n'as qu'à faire une version void de l'EffectAbilityDecrease()+ApplyEffectToObject() et ensuite utiliser un AssignCommand(), je vois pas le problème ?
Bon je ne comprend décidément rien a tous cela, je vais essayer d'expliquer comment j'aurai essayé de faire :

-dernier repos + 36H :
j'applique l'effet 1 (mettons CHA-1)
je stocke "fatigue" à la valeur 36 sur le PJ

-dernier repos + 37H
"fatigue" = 36, je sais que je vais appliquer :
le premier effet (donc CHA -1) ET
le deuxième effet (ex : FOR-1)
je met "fatigue" a 37

-dernier repos +38H
"fatigue" = 36, je sais que je vais appliquer :
-effet 1,2 et 3
etc....

Au prochain repos je remet "fatigue" à 0

On met tous ca dans une fonction avec un switch sur "fatigue" qu'on rappel toute les heures (en n'oubliant pas d'incrémenter la variable même si on est pas à un seuil).

J'espere ne pas être trop a coté quand même
Ben si malheureusement...
Le problème n'est pas de mettre l'effet, mais de le supprimer ensuite, de façon spécifique, sachant qu'on ne peut distinguer un EffectDecreaseStrength() d'un EffectDecreaseDexterity() (oui je sais qu'il n'y a qu'une fonction avec un paramètre !!)
Nota, tu n'as qu'à aller voir mon script pour voir comment j'ai résolu le problème de la fatigue, ça ressemble beaucoup à ce que tu propose.
Bien le problème n'est pas de retrouver l'effet que va donner notre effect, mais l'effect lui même, afin de lancer la fonction RemoveEffect.

Comment puije, avec ton résonnement, retrouver l'effect en lui même ?

C'est bien de savoir que notre pj a perdu 2 en force, encore faut il pouvoir lui rendre

EDIT : grrrrrr y m'enerve se Jedaï




Voila, un peu de chatting avec Ormus m'a permis de trouver ce qui vous mettais dans la mauvaise voie :

Créer un nouvel effect pareil que l'ancien N'EST PAS RECUPERER CET EFFECT
en d'autres thères :

eEffect1 = EffectSleep();
eEffect2 = EffectSleep();
on a:
eEffect1 != eEffect2;

voila, ct le truc a savoir
ba, ok, et comment tu enleve les effets ?
bon, avec ton systeme ils dure qu'une heure et tu relance tt les heure c ca ?
mais si entre deux heures ton PJ pionce, ba il aura qd même les effets, qui ne seront supprimé que qd l'heure seras fini ... donc ba ... voila quoi ^_^
et mettre ca sur un onheartbeat
donc il faut un moyen de stopper les effets, endehors du script
et ca ya pas de fonction, a part le "removeeffect" qui enleve TOUT les effets, et c pas le but

g bon ?

EDIT : ca m'apprendras a tourner 7 fois ma langue ds ma bouche
Citation :
Provient du message de Reyan
[i]ba, ok, et comment tu enleve les effets ?
bon, avec ton systeme ils dure qu'une heure et tu relance tt les heure c ca ?
exactement

Citation :
Provient du message de Reyan
mais si entre deux heures ton PJ pionce, ba il aura qd même les effets, qui ne seront supprimé que qd l'heure seras fini ... donc ba ... voila quoi ^_^
non, pas si tu remet la variable a 0 lors du repos puisque qu'on applique les effet voulus par un switch sur cette variable qui est incrémenté toutes les heures et qui ne déclenche une action qu'a partir de la 36eme
(ca doit pas être évident a prononcer d'une seule traite sans respirer ca )
ah oui ok, je comprend mieux.

Enfin bon, c'est un peu lourd comme système, et le problème est que ca vire tout les effets, même ceux qu'on aurait bien voulu garder...

Moi j'adopte l'idée de Rayan, merci @ toi
Citation :
Provient du message de Iridian
exactement


non, pas si tu remet la variable a 0 lors du repos puisque qu'on applique les effet voulus par un switch sur cette variable qui est incrémenté toutes les heures et qui ne déclenche une action qu'a partir de la 36eme
(ca doit pas être évident a prononcer d'une seule traite sans respirer ca )
je comprend pas ...
si tu veille 36 h : effet
tu repose a 36h + 1min passke t'as vu que t t moins GB, la variable estmise a 0
37h : les effets sont fini, comme la variable est a 0, ba on en relance pas

non ? alors entre 36h + 1min et 37h les effets sont là non ?
aprce que si ils ont été mis sans extraordinary truc, ba une simple sort de dispation et hop plus de fatigue ...
g faux ?

ps : ca va, pas trop dur, faut lire pas trop trop vite et prendre une bonne respiration c tt
Re: Problèmes pour retrouver un effect
Citation :
Provient du message de Azrael07
si quelqu'un a une idée, en passant par le script commencé si dessus où en utlisant "la ruse" ^_^
Chez moi on appelle ça "chier dans son froc".....
Tant pis !! tu n as qu a dire que les effet qui persiste au reveille ( surtout si c moins qu une heure) ce sont les effects a long terme de la fatigue et que c comme une gueule de bois Quand tu te reveille le matin, ca ne t arive jamais de mettre du temps a emerger ?? la c pareil
En plus, ce script doit etre le plus simple, surtout si il est recursif avec un delaycommand + executescript , avec juste une incrementation au demarage du script de la variable pour chaque PJ ! De plus, tu peux faire un script pour tou les pj du module ! ca evite d avoir un delaycommand pour tous les PJ
Citation :
Provient du message de Reyan
j
non ? alors entre 36h + 1min et 37h les effets sont là non ?
aprce que si ils ont été mis sans extraordinary truc, ba une simple sort de dispation et hop plus de fatigue ...
g faux ?
Euh ... vu comme ca non, tu as raison ...
A moins de modifier le script du dispel pour éviter qu'il enlève ces effets la
(bon ok, je me suis planté )
non, tu met du SupernaturalEffect au lieu de Extraordinary...


Attention, messieur, je sais, par defaut, vu que NwNRo utilise les effet un maximum pour changer les regles, que les effets se stackent souvent sans se remplacer (j'avais commence une liste des effets qui stackent et ceux qui ne stackent pas.. mais j'ai abandonné... ), ne negligez pas le nettoyage des effets : Par exemple, je nettoie les effets a chaque fois que je les recalcule avant, car au lieu de risquer un Lagg du a un pb de temps machine, vous risquez surtout un plantage System a cause d'un nombre d'effet ingerable par le moteur (il est limité assez vite a ce niveau)


Donc, preferez un investissemnt temps-machine a un risque de ShutDown... enfin, ce que j'en dis...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés