Aller au contenu


Poursuivre Le Mode Romance


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

#1 Vasumitra

Vasumitra

Posté 25 février 2009 - 17:22

bonjour tout le monde.
Je suis nouveau ici (mon premier message).
Alors, comme je n'ai pas trouvé de topic de présentation, je viens ici pour en faire une courte. Je voudrai ensuite exposer une série d'idée, avec déjà des propositions de solutions.

Présentation : étudiant à créteil, en info, mais trouve les cours trop facile. A commencé morrowind il y a longtemps, a arrêté, puis à repris et à pris gout au script.
Je précise que je trouve que le langage n'est pas particulièrement compliqué, mais qu'il manque un peu d'une solide documentation en français. Ceci dit, je comprend absolument ce que font les script, même si parfois certaines variable me semblent sortit de nulle part :)

Bon, le sujet de ce topic : j'ai installé le mode romance, je l'ai essayé, et je le trouve super. Et le script n'est pas des plus compliqué non plus (si on excepte les parties pour les scène, ou il y a plein de disposition d'objet, de changement d'équipement etc). Mais je trouve qu'il n'est pas complet. Aussi, je voudrai apporter plusieurs idées d'améliorations. Et j'argumente les méthodes de codages derrière :evil:

tout d'abord pour la première, je présente le contexte : j'étais en train de piller une tombeau à vampire, et je tombe sur la dernière. Pris d'un soudaine pitié, je me demande si elle n'a pas une dernière volonté. Je lance donc mon sors d'apaisement d'humanoide (qui marche pour une fois, miracle) et j'entame la conversation. La je vois le topic romance. Pour rire, j'entame une romance, et je lui demande de me suivre. Mn but était de l'entrainer dehors et de la faire griller au soleil :) . Bon, apparement les vampire de morrowind ne craignent pas la lumière du soleil. Donc, je ne sais pas quoi faire avec, et visiblement le fait que le sors d'apaisement d'humanoide ai pris fin n'a pas suffit. Elle reste là à me suivre gentiment. C'est quand elle s'est jeté sur un éclaireur kwama pour me proteger que j'ai pris la décision : je la amène à balmora et je l'épouse.

Bon, voila, ma petite elfette voulait épouser une vampire. J'ai du aller taper sur le script pour qu'il accepte les mariage homo XD (première modif ^^).
Mais surtout, ce qui m'étonne c'est que je ne me change pas en vampire, jamais. Bon, je sais que ce n'est pas prévu dans le script, mais l'amélioration que je propose est

1) si le compagnon est un/une vampire, lorsque l'on fait l'amour avec on a une chance sur X de devenir atteint par la maladie.
Solution (pseudo code):

Si ( leJoueur != unVampire )
    si ( leCompagnon == unVampire )
        set RandVamp to ( Random 100 )
        si ( RandVamp <= 10 )
            leJoueur->attrapeMaladie Vampire
        finsi
    finsi
finsi

C'est juste une idée. Dans la pratique, il faudrait aussi voir si le joueur n'a pas déjà la maladie.
le script est à mettre au même niveau que "deviens enceinte ?". D'une certaine façon, c'est sa position logique ("deviens enceinte ?" se passe une seule fois, et pour tout acte amoureux. Indépendemment de si c'est avec le compagnon ou si c'est par la prostitution).

Le problème est : récupérer le type du compagnon, et celui du perso. je crois que j'ai déjà vu la commande pour ajouter la maladie en revance.

Suivante idée : sur la prostitution. Ce qui me semble bizarre c'est qu'à la moindre incartade le conjoint le sache. Il faudrait y avoir un facteur de hasard. Et puis, comme le conjoint ne se fache que quand on retourne le voir, il faudrait pouvoir aller à un temple pour se "purifier". La encore il faudrait un facteur de hasard. Et en plus, il faudrait compter le nombre de fois de prostitution. La purification n'aurait alors qu'à diminuer ce nombre de un, ou non, aléatoirement. Ce n'est pas un ajout très compliqué, le plus dur étant sans doute de rajouter l'élément dans les temple. Je pense qu'il faudrait éditer les sortes de pilone ou on fait des rpière à vélothi et autre.
Pour info, la variable qui gère la prostitution est _tlr_prost, et elle est mise à deux en cas de prostitution, à 0 sinon (enfin, pour le "sinon" je n'en suis pas sur).

Donc, résumé de l'amélioration numéro deux :
2) améliorer le mode prostitution. Ajouter une possibilité de se "laver de ses péchées".

Comme petite idée en plus, je me demande si il serait possible de s'inspirer du mod qui fait que quand on est recherché dans une ville on ne l'est pas dans toute pour faire que si on va faire crac-crac loin du domicile conjugale on n'est pas cramé à la maison.

3) mon pnj est en train d'attendre un gosse (de la vampire... oui oui, sans tricher, par défaut, une pnj peut tomber enceinte d'une pnj). Mais j'ai lu qu'il ne grandira pas. Alors je vais voir ce que je peux faire pour changer cet état de fait.  

4) c'est plus esthétique mais ... je me demande si il ne serait pas possible de faire en sorte qu'on puisse changer les habits du pnj conjoint. Je suis sur que c'est psosible sans trop de prob. J'en suis réduit à la faire avec "removeitem" et "additem". Je pense qu'en s'inspirant du mode "acheter les habits des marchands de vètements" et en ajouter "vendre des vètements" au conjoint, ça passerait.


J'espère ne pas avoir été trop ennuyeux. Je pense qu'on peut faire beaucoup avec ce mod (par exemple laisser le conjoint s'occuper du gosse, non mais).
Je vais bosser dessus, car je trouve que c'est l'un des meilleurs mod qui soit.

P.S. il y a des images dans les tutos sur ce forum qui ne marchent plus. du coup, le tuto deivens illisible (eh oui). Ca viens apparement du fait que les images étaient hébergées sur lycos, et que le compte à fermé.)Je n'ai pas trouvé où MP ça.

#2 abg

abg

    L'ABG pour les civilisés


Posté 25 février 2009 - 18:35

Voir le messageVasumitra, le 25.02.2009 à 17:21, dit :

bonjour tout le monde.
Je suis nouveau ici (mon premier message).

Bonjour à toi (et bienvenue !)

(snip... amélioration du mod romance, pleins d'idées qui me plaisent beaucoup...)

Citation

tout d'abord pour la première, je présente le contexte : j'étais en train de piller une tombeau à vampire, et je tombe sur la dernière. Pris d'un soudaine pitié, je me demande si elle n'a pas une dernière volonté. Je lance donc mon sors d'apaisement d'humanoide (qui marche pour une fois, miracle) et j'entame la conversation.

Tiens, ça me rappelle les aventures d'un de mes persos :) Dans une occasion similaire j'avais été ravi de m'apercevoir que les vampires avaient de la conversation (comprendre : des topics rien qu'à eux). On peut d'ailleurs les rendre définitivement pacifiques en remontant leur disposition à 100 (comme tous les PNJs dont l'AIFight n'est "qu'à" 90). Attention quand même à ne pas leur brandir une arme sous le nez !

Citation

La je vois le topic romance. Pour rire, j'entame une romance, et je lui demande de me suivre. Mn but était de l'entrainer dehors et de la faire griller au soleil :) . Bon, apparement les vampire de morrowind ne craignent pas la lumière du soleil.

Même constat...

Citation

Donc, je ne sais pas quoi faire avec, et visiblement le fait que le sors d'apaisement d'humanoide ai pris fin n'a pas suffit. Elle reste là à me suivre gentiment. C'est quand elle s'est jeté sur un éclaireur kwama pour me proteger que j'ai pris la décision : je la amène à balmora et je l'épouse.

Tant qu'elle est en mode IA "follow", elle est parfaitement solidaire du PJ. Elle peut redevenir hostile si elle repasse/est remise en mode Wander (sauf si grande "disposition", voir ci-dessus). Sans le mode romance, on parvient au même résultat avec les sorts de commandement d'humanoïde...

Citation

Bon, voila, ma petite elfette voulait épouser une vampire. J'ai du aller taper sur le script pour qu'il accepte les mariage homo XD (première modif ^^).

Il me semble qu'il y a un add-on pour ça...

Citation

Mais surtout, ce qui m'étonne c'est que je ne me change pas en vampire, jamais. Bon, je sais que ce n'est pas prévu dans le script, mais l'amélioration que je propose est

Dans le jeu par défaut on a des chances d'attraper la maladie en combattant un vampire ou en fouillant son cadavre. Donc, sauf scène de ménage un peu outrepassée...

Le script de Romance ne prend pas en compte ce genre de cas particulier. Il y a le même problème avec les esclaves (qu'il est facile de "libérer" en les draguant sous le nez de leur maître)...

Citation

1) si le compagnon est un/une vampire, lorsque l'on fait l'amour avec on a une chance sur X de devenir atteint par la maladie.
Solution (pseudo code):

Si ( leJoueur != unVampire )
    si ( leCompagnon == unVampire )
        set RandVamp to ( Random 100 )
        si ( RandVamp <= 10 )
            leJoueur->attrapeMaladie Vampire
        finsi
    finsi
finsi

C'est juste une idée. Dans la pratique, il faudrait aussi voir si le joueur n'a pas déjà la maladie.

If ( player->GetSpell, "vampire blood aundae" )

je crois (renouveler le test pour les trois clans),

Citation

Le problème est : récupérer le type du compagnon, et celui du perso. je crois que j'ai déjà vu la commande pour ajouter la maladie en revance.

Récupérer la race des deux peut se faire assez facilement par les dialogues ou par script :
GetRace, “RaceID"
renvoie true si c'est la bonne. Pour le PJ il y aussi la variable globale PCRace
Le seul ennui est généralement posé par les mods de races custom mais si l'on se place dans une optique "lore correct" autant les ignorer...

Citation

Suivante idée : sur la prostitution. Ce qui me semble bizarre c'est qu'à la moindre incartade le conjoint le sache. Il faudrait y avoir un facteur de hasard. Et puis, comme le conjoint ne se fache que quand on retourne le voir, il faudrait pouvoir aller à un temple pour se "purifier". La encore il faudrait un facteur de hasard. Et en plus, il faudrait compter le nombre de fois de prostitution. La purification n'aurait alors qu'à diminuer ce nombre de un, ou non, aléatoirement. Ce n'est pas un ajout très compliqué, le plus dur étant sans doute de rajouter l'élément dans les temple. Je pense qu'il faudrait éditer les sortes de pilone ou on fait des rpière à vélothi et autre.
Pour info, la variable qui gère la prostitution est _tlr_prost, et elle est mise à deux en cas de prostitution, à 0 sinon (enfin, pour le "sinon" je n'en suis pas sur).

J'imaginerais bien une sorte de confessionnal... Avec quelques dialogues savoureux avec les prêtres ça peut être  :evil:

Citation

3) mon pnj est en train d'attendre un gosse (de la vampire... oui oui, sans tricher, par défaut, une pnj peut tomber enceinte d'une pnj).

:lol: Manifestement encore une faille des scripts !

Citation

Mais j'ai lu qu'il ne grandira pas. Alors je vais voir ce que je peux faire pour changer cet état de fait.

Ca a déjà était proposé sur l'enfilade de Romance, l'ennui est qu'à l'échelle temporelle du jeu ce n'est pas crédible. Même avec une partie qui nous même jusqu'en 3E429 ou 430 (ce qui laisse pas mal de temps même aux joueurs les plus contemplatifs pour retourner chaque caillou de Vvardenfell). Surtout que quitte à être réaliste, il faut prendre en compte les durées de vie et croissance des races de Tamriel (pour les elfes, ça se mesure en siècle, voire en millénaire)

Citation

4) c'est plus esthétique mais ... je me demande si il ne serait pas possible de faire en sorte qu'on puisse changer les habits du pnj conjoint. Je suis sur que c'est psosible sans trop de prob. J'en suis réduit à la faire avec "removeitem" et "additem". Je pense qu'en s'inspirant du mode "acheter les habits des marchands de vètements" et en ajouter "vendre des vètements" au conjoint, ça passerait.

Cette enfilade devrait te fournir une solution élégante, notamment pour activer le partage d'inventaire sur des PNJs non prévu pour à l'origine...

Citation

J'espère ne pas avoir été trop ennuyeux.

Certainement pas  :beat: N'hésite pas à nous faire part de l'avancement de tes travaux et des obstacles à lever, ça sera avec plaisir !
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#3 Vasumitra

Vasumitra

Posté 25 février 2009 - 20:29

alors, j'ai avancé, j'apprends de nouveaux trucs, j'avance...

d'abord, le statut de vampire n'est pas un race, c'est une faction. Les races sont "nord", "argonian" etc. Donc, je ne peux pas récupérer comme ça le statut de vampire chez le compagnon. J'ai essayé pour les sorts ("vampire blood quarra" et autre, et aussi "vampire attributes", trouvé sur le topic que tu m'as donné pour le partage d'objets), mais ma petite quarra ne l'a déjà pas (testé dans la console : j'adore ce système qui permet en live de voir si un truc marche ou pas).
Je pense que ça viens du fait que c'était un guerrier à la hache. La hache n'a pas trop d'importance, mais je pense qu'elle n'avait pas de sorts.
Je me demande si il serait possible de voir ça par rapport à la poudre de vampire.
VERIFICATION ...
Oui, ça marche comme ça. Alors ce que je fais c'est getitemcount ingred_vampire_dust_01
Bon, elle n'en avait plus parce que je lui avait piqué mais dans le principe ça marche.
Sauf que si je vend ça à un marchand, ça pourrait faire des problèmes, parce qu'il serait considéré comme vampire. Bon, je vais y réfléchir.

Pour ce qui est de l'agressivité, je l'avais constaté que si je lui sortais même un sextan sous le nez, si elle ne me suivait pas elle m'attaquait. J'avais testé en modifiant la variable de fight, et observé la différence. Mais je suis content de voir cela confirmé par une source officielle, parce que je me demandais si c'était juste par hasard.
D'ailleur, à ce propos, une petite amélioration en plus, pas trop dur à mettre en place : récupérer le fight au début de la romance, puis le mettre à 0. A la fin de la romance, lui remettre son ancien fight.
Comme ça ça évitera que mon elfe et tant d'autre soient des femmes battues.
pour l'amélioration, avec la variable companion, si je met dans la console "set companion to 1", il me dit qu'il ne connait pas la variable. Et si je fais "short companion" ça plante morrowind (genre plantage niveau windows, avec message d'erreur de windows).
Bon, je pense que ça veut juste dire qu'il ne veut pas qu'on créé des variables depuis la console (ce qui est normal ^^).
Je parcours l'éditeur, et j'ai trouvé le point d'entrée de la romance (enfin presque, mais c'est étrange).
Ce qui me dérange c'est que je ne vais pas pouvoir faire les tests sans mettre fin à la mienne. Bon, je vais bien sur faire une sauvegarde pour garder la situation comme ça, mais même si ça n'aura pas de conséquence, ça me fait mal de trahir ma petite vampirette (j'ai beaucoup d'affection pour elle ^^).

Sinon, j'ai du mal à utiliser l'éditeur, et surtout à trouver comment on gère les topic. Je vais me renseigner là dessus. Et aussi pour voir le point d'entrée de la romance (je pensais que c'était le script "_tlr_pnj_romance", mais il ne contient pas par exemple le petit texte si on est déjà dans une romance. Je sens une disquette la dessous), pour déclarer et initialiser mes variables proprement, une seule fois.

Bref, à voir pour tout ça. Je m'y remet ^^.

#4 Snaïpe

Snaïpe

    ...itset tnus otroh nI


Posté 25 février 2009 - 20:48

Voir le messageVasumitra, le 25.02.2009 à 20:28, dit :

4) c'est plus esthétique mais ... je me demande si il ne serait pas possible de faire en sorte qu'on puisse changer les habits du pnj conjoint. Je suis sur que c'est psosible sans trop de prob. J'en suis réduit à la faire avec "removeitem" et "additem". Je pense qu'en s'inspirant du mode "acheter les habits des marchands de vètements" et en ajouter "vendre des vètements" au conjoint, ça passerait.

petite précision :

Le fait d'attacher la Fonction Set Companion to 1 donne accès à l'inventaire du PNJ, qui devient modifiable ( Tibunal requis ) ; c'est  tout de même mieux que les fonctions Additem/Removeitem :laughing1:

Modifié par Snaïpe, 25 février 2009 - 20:48.


#5 abg

abg

    L'ABG pour les civilisés


Posté 25 février 2009 - 22:57

Citation

Je pense qu'en s'inspirant du mode "acheter les habits des marchands de vètements" et en ajouter "vendre des vètements" au conjoint, ça passerait.

Cette idée d'utiliser la fonction de commerce pour faire du partage d'inventaire était utilisée jadis avant que l'extension Tribunal nous propose un vrai partage d'inventaire (variable companion) mais elle est désormais invalidée par le Morrowind Code Patch (les acheteurs n'enfilent plus ce qu'on leur refourgue)

Citation

d'abord, le statut de vampire n'est pas un race, c'est une faction.

Ni une race ni une faction (bien qu'il y ait trois factions se disputant le pouvoir de la nuit en Vvardenfell, il y a aussi des vampires hors-clan)
Et là, au passage, je viens de me rendre compte que je ne savais même pas comment on créait un PNJ vampire dans le TESC :laughing1:
Les sorts ne sont pas non plus déterminant (une maladie est un "sort" pour Morrowind, un peu comme les malédictions mais soignable différemment)
Pour les PNJs vampires membres de clans, la poussière est ajoutée par script à leur mort (pour éviter de la retrouver dans l'inventaire de ceux qui commercent, je présume)
Par contre, l'examen de la série de scripts dont le nom commence par vampire... devrait t'intéresser...

Citation

Pour ce qui est de l'agressivité, je l'avais constaté que si je lui sortais même un sextan sous le nez, si elle ne me suivait pas elle m'attaquait. J'avais testé en modifiant la variable de fight, et observé la différence. Mais je suis content de voir cela confirmé par une source officielle, parce que je me demandais si c'était juste par hasard.
Pour la source "officielle" tu repasseras (voir ma lacune ci-dessus)  :coeur: , mais effectivement, c'est du au fait que brandir une arme diminue d'office la disposition de 15 (d'où recalcul des chances d'attaque du PJ). Effectivement les PNJs considèrent qu'une sonde ou un crochet (et le sextant du mod Vie Aquatique est en effet, pour des motifs d'animation, une sonde scriptée) sans doute pour embêter les PJs voleurs (par contre préparer un sort n'est pas remarqué, sans doute aussi pour ne pas interférer avec les sorts de charmes...)

Citation

D'ailleur, à ce propos, une petite amélioration en plus, pas trop dur à mettre en place : récupérer le fight au début de la romance, puis le mettre à 0. A la fin de la romance, lui remettre son ancien fight.

Évite juste les valeurs trop extrêmes (0 ou 100) qui nuisent au roleplay (PNJ complètement passif et improvocable ou au contraire fanatique impossible à calmer). Par défaut les PNJs pacifiques du jeu ont une IAFight de 30 et les hostiles sont à 90 (sauf certains "border-line" qui sont entre 60 et 80 mais c'est une autre question)...

Citation

pour l'amélioration, avec la variable companion, si je met dans la console "set companion to 1", il me dit qu'il ne connait pas la variable. Et si je fais "short companion" ça plante morrowind (genre plantage niveau windows, avec message d'erreur de windows).
Bon, je pense que ça veut juste dire qu'il ne veut pas qu'on créé des variables depuis la console (ce qui est normal ^^)

Tout à fait, mais dans l'enfilade signalée Mordicus propose un "exploit" très intéressant.

Citation

Ce qui me dérange c'est que je ne vais pas pouvoir faire les tests sans mettre fin à la mienne. Bon, je vais bien sur faire une sauvegarde pour garder la situation comme ça, mais même si ça n'aura pas de conséquence, ça me fait mal de trahir ma petite vampirette (j'ai beaucoup d'affection pour elle ^^).

Ah les millions de PNJs qui ont servi de cobayes aux moddeurs :yahoo: Moi c'est les brigands d'Addamasartus qui ont fait cent fois les frais de mes expériences dignes du docteur Mengele  :angel2:

Modifié par abg, 25 février 2009 - 23:04.

Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#6 Vasumitra

Vasumitra

Posté 26 février 2009 - 00:08

bon, à vouloir aller trop vite, je bloque sur des petits trucs bêtes.

J'avais vu le script, je l'ai mis, mais il ne marche pas (je ne l'avais pas dit, cherchant la solution avant de venir geindre ^^ ).
Bon, à quel niveau ça ne marche pas ?
Tout d'abord, je ne maitrise pas le tescs. Je n'arrive pas à faire un topic visible par tout le monde.
Bon, je met un petit screen de ce que j'ai dans le tescs (parce qu'une petite image vaut mieux que mille questions/réponses)

voir le screen

le truc qui est entouré de rouge, c'est un bouton qui affiche toutes les personnes. A priori ça voudrai dire que tous le monde est concerné. A posteriori ce n'est pas le cas : personne ne l'a.
Le bouton en dessous (all) est un bouton qui fait planter mon éditeur, visiblement par une surcharge de données.

Bon, je ne me suis pas laissé abattre par ça : si je ne peux pas pour l'instant rajouter ce topic, je le pourrais plus tard alors je le met "à la main" (via la console) dans le jeu. Ca marche, je peux leur parler de ce topic.
Cela appel bien le script. J'ai pris la version simple (celle qui active comme une bourrine, sans trop faire de tests) pour ne pas laisser le doute au cas d'une erreur (faire simple, compliquer ensuite : ma philo de programmeur).
Le script est bien appelé (j'ai rajouté l'équivalent d'un "hello world". Pour ceux qui ne savent pas ce que c'est, c'est le fait d'afficher un petit message qui a pour seul but de tester si le script est bien appelé : si le message s'affiche c'est le cas, sinon ... eh bien, généralement ça veut dire que le script n'est pas appelé, mais pas toujours ... Pardon pour cette disgression).
Par contre, un peu comme je l'avais crains, il ne s'applique pas au pnj a qui je cause (c'était du une chance sur deux dans ma tête).
Je m'explique : quand je fais un sv (: affiche toutes les variables) il me met à la fin :
_TLR_PARTAGE_OBJET->companion = 1
c'est à dire le nom du script suivit du nom de la variable.
Ce qui veut dire que la variable existe bien, mais qu'elle est appliquée au script au lieu de l'être au pnj.
Bon, je suppose que j'ai du rater quelque chose.
C'est d'autant comfirmé que quand je parle du même topic à un autre pnj il n'affiche pas le hello world : donc la variable est bien globale.

PFIOU

bon, pour parler du reste.
Si j'arrive à m'en sortir avec tout ça, je ne vous dit pas le nombre d'idée que j'ai encore. Par exemple avoir une maison et qu'il faut être à la maison avant telle heure ou sinon ton conjoint te fais une grosse tête quand tu rentre.

Spoiler

Bref, en gros, refaire un vrai système de vie de tous les jours.
Ca existe pas des jeux comme ça.

Sinon, pour info, j'ai repensé à une quète de blood moon. Le mec nous demande de lui ramener un anneau. Ledit anneau s'appel anneau de charme fatal ou un truc dans le genre. Et celui qui nous le demande nous dit "comment une femme pourrais-t-elle résister à un homme avec cet anneau ?".
Hum hum, si je deviens très doué je vais avoir beaucoup de boulot ...

Pour info, et si ça peut vous être utile, j'ai fait une expérience intéressante : je voulais que des personnes suivent ma femme. J'ai donc utilisé la console avec aifollow. Et là je me suis aperçu que non seulement les personnes m'attaquaient (normal), mais que ma femme aussi.
Moralité : même si on pourrait penser que dire "X suit Y" n'influence que X, ce n'est pas le cas.

Allez, et merci pour votre aide. Je ne lache pas le morceau.
(mais c'est c***** de devoir relancer morrowind à chaque fois :) )

EDIT :
Bon, j'avance, je prospect (je m'imagine avec le casque avec lumière sur la tête, une pioche dans la main et le visage couvert de boue). C'est mon premier script, mon premier "mod", bref la première fois que j'utilise l'éditeur. Mais j'aime ça.

Donc, j'ai continué sur l'idée de la relation avec la vampire. Tout d'abord, ce n'est pas à priori "vampire blood ****" qui détermine si un pnj est un vampire, mais plutôt "vampire ***** specials". En effet, le "blood" sers plutôt au script vampirecheck c'est à dire qu'il indique si le joueur est contaminé.

Ceci dit, ma brave petite vampirette n'a rien de tout ça, ni en fait aucun des sorts. Ce n'est pas un cas particulier, parce qu'en fait quand j'y pense tu m'as dit que tu avais aussi fait le constat que les vampire amicaux ne craignait pas le soleil. Or, c'est dans leur sorts (sun damage, si je m'en souviens). Je me demande si c'est normal. Bon, je verrai ça plus tard.

Pour l'instant, je voudrai pouvoir appeler mon script proprement juste au moment qu'il faut, c'est-à-dire après l'acte amoureux.
J'ai fait le script suivant. Il est sommaire mais c'est un début ^^.

begin _TLR_VAMPIRE
;Gère la relation avec un vampire.
;En cas de relation amoureuse, le joueur à 1 chance sur 20 de se faire mordre.
;La gestion de la maladie est laissée au script "vampirecheck"
;Pour contaminer le joueur, il suffit de lui mettre un des sorts suivant :
;"vampire blood aundae" ou "vampire blood berne" ou "vampire blood quarra"


short mordu_vampire

if ( appel_Vampire == 1 )
	  return
endif

messagebox, "coucou"

set appel_Vampire to 1 

; si le joueur est déjà un vampire, on s'arrête
if ( player -> GetSpell, "Vampire attributes" == 1)
	  return
endif 

; si le conjoint n'est pas un vampire, on s'arrête
if ( ( GetSpell, "Vampire attributes" ) == 0 )
	  return
endif

; à remplacer par un rand. Pour les tests, on veut que ça soit à coup sur.
set mordu_vampire to 2

; une chance sur vingt = cinq chances sur 100
if ( mordu_vampire > 5 ) 
	  return
endif

; on détermine le type de vampire qu'estle conjoint. On colle au joueur la "maladie" correspondante.
if ( ( GetSpell, "Vampire aundae specials" ) == 1 )
	  player -> addSpell "Vampire blood aundae"
elseif ( ( GetSpell, "Vampire berne specials" ) == 1 )
	  player -> addSpell "Vampire blood berne"
elseif ( ( GetSpell, "Vampire quarra specials" ) == 1 )
	  player -> addSpell "Vampire blood quarra"
endif

; Et on l'informe de l'heureux évènement, on n'est pas chien;)
MessageBox, "Je... je crois que je t'ai mordu !"

end

ok ok, c'est long, ça fait un peu pavé. Mais j'ai vraiment différencié les diffférentes étapes.
Le problème c'est qu' il me sors une erreur lors de l'execution. Je n'ai pas compris l'erreur. Mais comme vous pouvez le voir, au début du script j'utilise une variable appel_Vampire, que je n'ai pas déclarée. Avant qu'on vienne me lyncher, je veux juste dire que c'était pour éviter que mon script soit appelé tout le temps. Cette variable doit être déclarée par le script appelant. Mais bon, ça ne marche pas.
Ca m'a d'ailleurs amené à me reposer une question : d'où sorte ces variables "magiques" ? Je parle de _TLR_PCSex par exemple. J'en avais brièvement parlé dans mon premier post, mais je pensais que je comprendrais leur provenance. bon, après avoir cherché, je n'ai toujours pas trouvé, et et et... et c'est tard, alors je finit vite mon message ^^.
Disons qu'elles ne sont déclarée nulle part, mais qu'elles ont des valeurs qui correspondent exactement à ce que l'on a besoin, comme par miracle. Et moi, je fais comment pour en avoir ?
Mais je ne pense pas que ça soit indiqué ici : la variable appel_Vampire ne sers que pour faire une sorte de doOnce.
Je suis en train de me battre avec l'éditeur. J'ai rajouté l'appel à mon script dans le script de scène d'amour, et l'appel se fait (avec bug donc). Ca ne me rend plus triste, parce que je pense que ma dulcinée doit pas mal s'amuser, mais je pense que pour les tests je vais le mettre dans "prendre dans ses bras" (même si pour le compte ça en fait une vampire vachement agressive ^^).

Bon, je renonce pour ce soir, mais la bataille continue (je m'imagine islanders entre le tescs et moi "il n'en restera qu'un" ... )
ok, je vais me coucher -_-'

Bonne nuit à tout le monde.
A demain (... pour la suite de notre programme).

Modifié par Vasumitra, 26 février 2009 - 01:35.


#7 Kira

Kira

    Top-modeleuse...


Posté 26 février 2009 - 02:44

Bonjour Vasumitra, et bienvenue sur Wiwiland....

Tour d'abord, bravo pour ton courage et ta détermination... Commencer le modding par autre chose qu'un ajout de nouvelle maison est un signe d'ambition, ce qui peut être une grande qualité...

Pour ton script, le début du script comporte en général la déclaration des variables que tu utilises pour ce script précis...
Le simple fait de déclarer "short machin" (ou truc, d'ailleurs)  fait de machin ou truc une variable courte....

Donc, si appel_vampire est un apport personnel, tu devras le déclarer par un "short appel_vampire"

Ensuite, pour ce genre de passage:

if ( appel_Vampire == 1 )
		 return
   endif
   
   messagebox, "coucou"
   
   set appel_Vampire to 1

Il vaut mieux bien mettre les points sur les i....

if ( appel_vampire >= 1 )
   return
   endif
   
   if ( appel_vampire < 1 )
   MessageBox "Coucou"
   set appel_vampire to 1 
   endif
il vaut mieux avec le Tescs éviter les égalités pures et dures, car elles ont un coté trop éphémère, très souvent...
De même, il arrive qu'on se retrouve suite à des circonstances indépendantes de notre volonté en possession de plus qu'un objet ou un sort...

Donc, ton
if ( player -> GetSpell, "Vampire attributes" == 1)

sera plus sûr sous cette forme...
 if ( player -> GetSpell, "Vampire attributes" >= 1)

Comme ça, si tu attrapes par miracle deux fois une hémophilie vampirique, ça ne fera pas exploser ton script...

Même suggestion pour cette partie

if ( ( GetSpell, "Vampire aundae specials" ) == 1 )
		 player -> addSpell "Vampire blood aundae"
   elseif ( ( GetSpell, "Vampire berne specials" ) == 1 )
		 player -> addSpell "Vampire blood berne"
   elseif ( ( GetSpell, "Vampire quarra specials" ) == 1 )
		 player -> addSpell "Vampire blood quarra"
   endif

Il vaut mieux comparer avec des ">="... Il vaudrait mieux enlever les parenthèses intérieures, d'ailleurs, qui doivent faire partie d'un langage que tu connais mais qui ne sont pas reconnues par le Tescs, à ma connaissance...

Mais si tu veux apporter une pierre à ce mod, peut-être devrais-tu commencer par contacter les auteurs?...
En général, c'est comme ça que ce genre de choses se pratique, d'abord par politesse, ensuite pour un coté pratique... Il est plus facile de discuter des tenants et des aboutissants des scripts et des mods tout entier avec leurs auteurs, et ils pourront peut-être même te donner quelques conseils...

Ah, et les variables magiques, je pense que tu veux parler des variables globales qui se créent par les onglets en haut du Tescs "GamePlay->Globals"...
Tu peux faire un nombre de choses étonnantes avec ses charmantes petites créatures... Moi, je m'en sers pour mes compagnons, afin de leur donner des caractères qui évoluent avec le temps....

Mais si tu veux te familiariser avec la mécanique assez personnelle, avouons-le, du Tescs, pourquoi ne pas commencer par de saines et instructives lectures?...

Tutoriel pour débutant Un classique...

Les dialogues Toujours utile...

Le Tescs Parce que c'est quand même à lui que tu t'adresses...

Morrowind scripting for dummies Une référence dans le genre....

Bon courage et bon travail, et surtout amuse-toi bien.....
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#8 Vasumitra

Vasumitra

Posté 26 février 2009 - 13:59

Bon, je m'y suis remis.
J'ai pu utiliser les variables globales... mais il y a un bug. Enorme, incompréhensible, fantastique. Je ne m'en suis pas encore remis tellement c'est stupéfiant.
Je vous en parle ensuite. Pour faire court ça engendre une erreur de parsing.

Mon principal problème est maintenant que mon script se lance comme une entité propre.
Par exemple la ligne
if ( ( GetSpell, "Vampire attributes" ) == 0 )

renvoi toujours zéro, indépendement de si la personne à effectivement le sort ou non. Parce que le script ne se lance pas dans le "contexte" de la personne à qui je parle, mais dans le sien propre.
Je pense qu'encore une fois ça doit être un truc à regler quelque part.
Il y a de quoi s'arracher les cheveux de devoir relancer morrowind tout le temps. Mais bon, je ne suis pas le premier, alors je continu, stoïque.

Le gros problème évoqué précédemment est le suivant : dans le but d'accelerer un peu les phases de tests (et de pouvoir le faire avec des gens autour sans risquer d'avoir sur l'écran des images compromettantes ^^), j'ai ajouté l'appel dans le bout de script "prendre dans ses bras". Il se trouve dans le script _TLR_a_Erotisme.
Je cite la partie de code correspondante :

ModDisposition, 1
		Set Bonus to ( 3 * Var1 * Var2 / 1000 )
		StartScript, "_TLR_Fade"
		Set "_TLR_Fade".Time to 1.5

	   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
	   ;;;;;;;;;;;;;;;;;;;;;;; VAMPIRE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;

		Set _TLR_VampireActive to  1
		MessageBox, "hihihi"
		StartScript "_TLR_VAMPIRE"

	   ;;;;;;;;;;;;;;;;;;;;;;; FIN VAMPIRE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;

	else
		MessageBox, "Vous allez trop vite je trouve ... !"
		Set Bonus to ( -1 * Var1 * Var2 / 1000 )
	endif
endif

Bon, rien de fantastique. Le _TLR_VampireActive est la variable de doOnce évoquée plus haut. Elle est globale, pas de problème.
MAIS !
Lors du chargement de la partie, il me sors une erreur : "impossible de trouver la faction ouve ... !" (en traduction).
Pour faire court, il s'agit du bout de texte de la boite de  message située dans le MessageBox dans le else : "Vous allez trop vite je trouve ... !".
Après tests, il semble que ça soit la ligne
Set _TLR_VampireActive
qui engendre ce bug. Le message d'erreur varie de façon aléatoire entre race faction, et il tronque plus ou moins le message ("ite je trouve ... !" "ouve ... !" ... ).
Même si je commente l'appel à mon script, le message persiste. En mettant des guillemets autour de _TLR_VampireActive pareil. En mettant des majuscules, minuscules, pareil. En mettant des parenthèses autour du 1 pareil.
Je ne vois pas d'ou ça proviens. Mais c'est tout simplement fantastique je trouve comme erreur. De plus, rien n'est décelé à la compilation.

Mais disons que je pourrais peut-être m'arranger, si il n'y avait pas ce problème de "script local à lui même".

J'ai déjà parcouru les tuto. Mais disons qu'ils ne sont pas forcément clairs. Et qu'il ne parle pas des erreurs qu'il peut arriver (par exemple pour faire l'ile, ça avait changé tous les intitulé de mon menu objet par des sBidule).
Mais sinon, j'ai toujours le scripting fur dummies ouvert quand je fais du script, et aussi celui qui liste les fonctions (merci vista de ne pas pouvoir lire l'aide du tescs -_- ).


Merci pour votre aide.

#9 abg

abg

    L'ABG pour les civilisés


Posté 26 février 2009 - 15:34

Voir le messageKira, le 26.02.2009 à 02:43, dit :

il vaut mieux avec le Tescs éviter les égalités pures et dures, car elles ont un coté trop éphémère, très souvent...
De même, il arrive qu'on se retrouve suite à des circonstances indépendantes de notre volonté en possession de plus qu'un objet ou un sort...

Donc, ton
if ( player -> GetSpell, "Vampire attributes" == 1)

sera plus sûr sous cette forme...
 if ( player -> GetSpell, "Vampire attributes" >= 1)

Comme ça, si tu attrapes par miracle deux fois une hémophilie vampirique, ça ne fera pas exploser ton script...

Même suggestion pour cette partie

if ( ( GetSpell, "Vampire aundae specials" ) == 1 )
		 player -> addSpell "Vampire blood aundae"
   elseif ( ( GetSpell, "Vampire berne specials" ) == 1 )
		 player -> addSpell "Vampire blood berne"
   elseif ( ( GetSpell, "Vampire quarra specials" ) == 1 )
		 player -> addSpell "Vampire blood quarra"
   endif

Il vaut mieux comparer avec des ">="...

Pour chipoter :
Je suis d'accord avec le "en général, éviter les égalités pures". Morrowind étant un jeu ouvert il est effectivement bon "d'embrasser large", notamment avec les tests sur variables (même locales, leur contenu peut être renseigné par d'autres scripts : syntaxe :

Set "id_objetbidule".variable_locale To x

On parle parfois dans ce cas de variable pointée...

Toutefois l'exemple de Kira tombe un peu à plat (bien que techniquement correct)
if ( player -> GetSpell, "Vampire attributes" >= 1)
GetSpell fait partie des commandes qui renvoient un résultat booléen, il n'y a donc aucune chance de la voir sortir autre chose que 0 (false) ou 1 (true), même si player attrape 25 fois la chtouille vampirique (je ne crois pas que ce soit possible d'ailleurs  :( )

J'en profite pour placer que la syntaxe :
if ( player -> GetSpell, "Vampire attributes" )
est aussi valide (comparaison à 1 implicite).
Ça peut paraître une coquetterie pour "compacter" mon code... Je me suis habitué à trouver cette écriture plus proche du langage naturel...

Par contre, le conseil de Kira prend tout son sens avec les tests sur des variables et sur des commandes renvoyant autre chose qu'un booléen :

If ( GetDistance, player >= 2000 )
If ( GetItemCount, "iron dagger" >= 1 )
...


Voir le messageVasumitra, le 26.02.2009 à 13:58, dit :

Je vous en parle ensuite. Pour faire court ça engendre une erreur de parsing.

Mon principal problème est maintenant que mon script se lance comme une entité propre.
Par exemple la ligne
if ( ( GetSpell, "Vampire attributes" ) == 0 )

renvoi toujours zéro, indépendement de si la personne à effectivement le sort ou non. Parce que le script ne se lance pas dans le "contexte" de la personne à qui je parle, mais dans le sien propre.

Ce qui se passe, si j'ai compris ton problème, c'est que le script étant un script global, il a besoin de savoir quel objet il doit tester. Il te faut donc une redirection :

if ( player->GetSpell, "Vampire attributes" == 0 )

Par exemple...
Au passage, comme Kira vient de te le dire, attention à tes parenthèses, c'est le genre de truc qui passe à la compilation mais engendre des problèmes erratiques à l'exécution. Je vois que tu prends garde aux espaces...
Comme tu t'en es rendu compte, le Morroscript manque singulièrement de garde-fous et de warnings...

Voir le messageVasumitra, le 26.02.2009 à 13:58, dit :

ModDisposition, 1
		Set Bonus to ( 3 * Var1 * Var2 / 1000 )

Scinde tes calculs, au besoin avec une variable temporaire. C'est une autre cause de plantages erratiques...

Pour le bug lié à la messagebox, je t'avoue que je sèche moi aussi  :)

Citation

Mais sinon, j'ai toujours le scripting fur dummies ouvert quand je fais du script, et aussi celui qui liste les fonctions (merci vista de ne pas pouvoir lire l'aide du tescs -_- ).

Pas d'outils, même en free/shareware, pour ouvrir les fichiers *.hlp :evil: ? C'est dommage, ce fichier n'est pas si mal que ça et plus rapide pour retrouver la définition d'une fonction.
Sinon, tu l'as compris, le Morroscript manque singulièrement de documentation (pleins de "features" pas documentées comme les limitations de If...Endif imbriqués ou le nombre de variables par script...) mais le MSfD est effectivement ce qui s'est fait de mieux...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#10 Vasumitra

Vasumitra

Posté 26 février 2009 - 17:06

Citation

Scinde tes calculs, au besoin avec une variable temporaire. C'est une autre cause de plantages erratiques...

désolé mais :evil: . Ce bout de code ne viens pas de moi. Quand j'ai récupéré le code adjacent au mien j'ai aussi récupéré un peu de code d'avant et d'après. J'ai déjà pas mal programmé dans ma vie, mais c'est vraiment un bon conseil. Ceci dit, le fait d'utiliser des variables temporaire n'est pas anodin : d'une part elle apparaissent dans le "sv", et alors on ne voit pas trop à quoi elles servent. De plus, comme le bout de code sera lu relu et archi lu lors du jeu, toute manip à un cout, pas vraiment négligeable. Mais je suis d'accord : pendant les phases de tests, faire du code propre. Même si cela doit nous obliger à repasser pour le rendre plus rapide, il est important d'avoir un première approche très claire.
Je suis content de trouver de vrais programmeurs (par rapport à la fac, je vous dit pas ^^).

Citation

if ( player->GetSpell, "Vampire attributes" == 0 )

hum, non. Dans le script je test deux choses : de l'une l'état du joueur (c'est plus haut), d'autre part l'état du conjoint. J'espérais que le script s'exécuterai dans le conjoint, mais ce n'est pas le cas.
La remarque était judicieuse, mais pas dans le cas présent.
Et j'ai lu dans un tuto "il n'est pas possible de contenir un id d'objet dans une variable. Cela limite les possibilité d'un script".
Heu, c'était pas dit comme ça, je crois que c'était en anglais mais bon. Toujours est-il que je n'ai pas accès au conjoint (donc ni pour lui mettre la variable companion, ni pour savoir si il a le sort, ni pour rien.)
RECTIFICATION :
j'ai accès au conjoint. Stupéfiant, je n'ai rien changé et maintenant je peux savoir si elle a ou non ça ou ça. Bon, ma petite vampirette n'a rien d'un vampire (pas les sorts, pas les objets ... ), sinon le nom mais ...

BIEN !
En rajoutant à la main les sorts demandé, mon script marche : mon perso a attrapé la maladie qu'il faut.
Je vais donc enlever tous ces petits "coucou" ^^.

Bon bon bon, on va peut-être avancer peu à peu.
Je vais continuer à essayer de faire marcher le truc du partage maintenant. Comprendre pourquoi il ne le met même pas en topic global -_-

Et pour celui qui m'a dit "tu ne commence pas par vouloir faire une maison, c'est bien" : Merci . Mais, heu, à l'origine je voulais juste faire une arme de jet "pokeball". Pour attraper les monstres faible, et pouvoir les lancer ensuite (si le monstre est faible on  l'envoi dans une cellule où on ne peut pas aller par voie normal, on rajoute un pokeball avec le monstre (une gemme à ame en fait) qu'on peut utiliser pour invoquer le monstre. Pour le rappeler par contre, c'est plus dur...
Mais bon, j'ai autre chose à faire là.

Ey je préfère de loin scripter que d'utiliser le tescs :)

Bon, en tout cas merci pour toute cette aide. La seule chose que je regrette c'est que ce topic pourrais être plus intéressant si j'avais plus de connaissance. Ca deviens juste une sorte de "help me" et je me sens trahir l'idée du topic. Mais je vais tout faire pour avoir des résultats !

Allez, j'y retourne.

EDIT : bon, j'ai décidé de faire que les vampire soient gentils pour le mode romance. D'une part parce que sinon, si j'active le script chez Bella (le surnom que je donne à ma vampirette), elle m'attaque aussitôt, parce que depuis j'ai tué des vampires, donc j'ai dépassé le seuil de 50 vampire tués, et la partie de script des quarra prend effet :
if ( GetJournalIndex "VA_VampAmulet" == 50 )
	setFight 100
	setDisposition 0
	set cattlekilled to -1
	return
endif

Et puis, je me dit que si je veux que mon script se réalise un jour, il faut donner la chance ou joueur de pouvoir le vivre, sans être une bête en sorsts d'illusion et associé. Je me suis posé la question "est-ce que le jeu sera meilleure ?". La réponse est oui. Pouvoir être un vampire mais cottoyer les êtres normaux la nuit, ou alors pouvoir rendre visite aux vampire est une idée qui change mais qui n'affaiblis pas le jeu. Disons que par la suite, je pourrais par exemple faire que les vampire dorment le jours mais sont des gens tout à fait normaux la nuit. Si on tiens compte du fait qu'il utilise des esclaves pour assouvir leur besoin, on peu imaginer qu'ils ne soient pas rejeté. Je pense que je ne ruine pas l'interet du jeu ainsi. Bien sur, si on tu des vampire il vont nous attaquer, mais c'est normal. Je vais donc réfléchir à ça.
Ensuite, j'ai une question : le script des vampire à bien été codé par la société qui fait morrowind ? Dans ce cas, est-ce que c'est moi ou est-ce que le bout de code
if ( player->GetSpell "Vampire Quarra Specials" == 1 )
			setfight 30
			set done to 2
elseif ( player->GetSpell "Vampire Quarra Specials" != 1 )
à quelque chose d'un peu redondant ? De plus, eux n'utilisent pas d'espaces. Bon, ils font comme ils veulent et ça marche en plus.

Bon, ayant édité les script des vampire, je vais chercher comment les actualiser. Il semble qu'il ne soient pas appelés en fait, d'où leur invulnérabilité au soleil.
Ok, c'étais juste pour vous tenir informé.

EDIT 2 :
Alors, pour ceux qui voudraient faire des infidélités à leur chéri(e) j'informe qu'il est maintenant possible d'aller à ald ruhn, en haut pour se repentir. Il n'y a pas encore de prètre, mais ça viens.
Les améliorations que je vais faire (et pas dans un avenir lointain : maintenant ) sont
1) ajouter un hasard pour la prostitution (on est pas forcément remarqué). Je pense une chance sur deux.
2) ajouter un compteur pour la prostitution.
3) ajouter une "chance" de se chopper une maladie en cas de prostitution. Ben oui, ça vous apprendra à faire n'importe quoi.
4) (mais quand j'aurai appris à faire un npc ... je déteste les menu du tescs :( ) Rajouter un prètre. Je pense que je vais essayer d'ajouter une touche d'humour à ses discours. au pire, j'espère pouvoir poster ici une solution en pseudo code (mais quand même bien agencée) et espérer avoir de l'aide pour ça (mais en ayant déjà travaillé au niveau des discours. Je pense que la partie humaine est la plus dur à réaliser, l'implantation n'est ensuite qu'un exercice de style).

Bon, je m'y met. Mais je suis trop content de voir mon premier script marcher tout seul :) :) :) :)
Il affiche toujours "vous vous sentez mieux", mais en fait il n'a que 8 chance sur 10 de retirer le "flag" de prostitué. Et je vais vérifier derrière pour être sur que j'ai  bien compris comment c'était géré dans Romance.
A plus tout le monde.

Modifié par Vasumitra, 26 février 2009 - 20:53.


#11 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 27 février 2009 - 08:28

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

Citation

Scinde tes calculs, au besoin avec une variable temporaire. C'est une autre cause de plantages erratiques...

désolé mais :mrgreen: . Ce bout de code ne viens pas de moi. Quand j'ai récupéré le code adjacent au mien j'ai aussi récupéré un peu de code d'avant et d'après. J'ai déjà pas mal programmé dans ma vie, mais c'est vraiment un bon conseil. Ceci dit, le fait d'utiliser des variables temporaire n'est pas anodin : d'une part elle apparaissent dans le "sv", et alors on ne voit pas trop à quoi elles servent. De plus, comme le bout de code sera lu relu et archi lu lors du jeu, toute manip à un cout, pas vraiment négligeable. Mais je suis d'accord : pendant les phases de tests, faire du code propre. Même si cela doit nous obliger à repasser pour le rendre plus rapide, il est important d'avoir un première approche très claire.
Tu vas moins rigoler dans une minute. Ce n'est pas un conseil pour faire des tests, c'est un conseil pour scripter Morrowind. Passer par des variables locales pendant les calculs et aussi pour faire des conditions (ne pas écrire "if (mafonction == 1) mais set x to mafonction puis if ( x== 1) ) est beaucoup plus fiable avec ce langage de script. Tellement fiable que c'en devient presque obligatoire pour faire du code robuste sur la durée. Il n'est pas impossible à Morro de se planter sinon.

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#12 Vasumitra

Vasumitra

Posté 27 février 2009 - 11:59

hum, ok, merci pour le conseil.
Je ne voulais pas du tout te critiquer ni me moquer de moi. Je ne riais pas de toi, mais juste de la situation globale.
Merci pour le conseil.
Je comprend un peu la différence entre faire un if sur une fonction et le faire sur une variable, mais pas entièrement. Disons juste que le if ... elseif de morrowind pourrait avoir un comportement différent du if else. Si la situation extérieure change entre le if et le elseif, le résultat pourrait être que ni une partie ni l'autre ne soit exécutée.

Sinon, j'ai implémenté le compteur. .
Mais j'ai une sorte de résultat bizarre. Disons que ça marche, mais que ça me choque niveau console.
Le problème, pour faire court, est le suivant : quand je fais messagebox, "%d", "_tlr_prost" il me renvoi toujours 0.
Même si je fais un set par derrière.
Mais les script agissent comme si il contenait la valeur qu'il faut.
Et la variable n'apparait pas dans les sv.
Bon, comme ça marche je ne vais pas trop me soucier de ça pour l'instant.
D'autant que récemment, sur un compte d'entrée de je-ne-sais-plus-ou il y avait un résultat de 1023 entrée. Je ne sais pas si ça concerne les variables ou quoi mais si c'est le cas, ça voudrai peut-être dire qu'en en mettant plus ça entrainerait un problème (dépassement de la place pour stocker les entrées, 1024, 2 puissance dix).
Mais c'est une simple supposition. Et je vais chercher où j'étais tombé sur ce nombre.

Bon, je progresse peu à peu. Je vais me mettre sur la possibilité de se chopper une maladie (si on va n'importe où).

Voila, je continu. Et désolé pour ceux que j'ai froissé sans le vouloir. Ce n'étais vraiment pas mon intention.

#13 abg

abg

    L'ABG pour les civilisés


Posté 27 février 2009 - 12:30

Remarque d'ordre générale : Vasumitra, cette enfilade est très intéressante et je n'ai rien contre les posts fleuves mais là en 24H ça commence à devenir illisible. Sans doute plus de monde participerait s'il ne fallait se frayer un chemin à la machette dans la jungle des quotes et des edits... Mon conseil serait de garder cette enfilade pour nous faire part de l'avancement de ton projet (en transférant dans Mods et Travaux) et de reporter les demandes d'aide et les considérations de scripting sur de nouvelles enfilades spécialisées...

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

Citation

Scinde tes calculs, au besoin avec une variable temporaire. C'est une autre cause de plantages erratiques...

désolé mais :ortholiberaux: .

Voir le messageFinraïl, le 27.02.2009 à 08:27, dit :

(ne pas écrire "if (mafonction == 1) mais set x to mafonction puis if ( x== 1) ) est beaucoup plus fiable avec ce langage de script.

Autant je suis d'accord pour les lignes comportant plusieurs opérateurs, autant Finraïl, tu sembles "pousser le bouchon" plus loin que moi. Veux-tu dire qu'il faille écrire :
Set fTemp To GetDistance, player
If ( fTemp <= 1000)
...

Plutôt que
If ( GetDistance, player <= 1000 )
:) ?

Et pourquoi pas aussi avec les fonctions renvoyant un booléen ? Dans ce cas, depuis 2002, on a un sacré paquet de scripts fautifs à corriger :
If ( MenuMode == 1 )
...

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

Ceci dit, le fait d'utiliser des variables temporaire n'est pas anodin : d'une part elle apparaissent dans le "sv", et alors on ne voit pas trop à quoi elles servent.
Certes, mais là c'est à toi de te forger une convention de nommage...

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

De plus, comme le bout de code sera lu relu et archi lu lors du jeu, toute manip à un cout, pas vraiment négligeable.

Certes encore mais l'optimisation du Morroscript passe parfois par d'étranges détours. La stabilité est l'objectif premier et n'est pas évidente à atteindre (voire ci-dessus mon petit débat avec Finraïl). Après on voit si on peux éviter de trop impacter le framerate. Note que malgré ses bugs, le morroscript a quand même une qualité : il est rapide, ce qui est appréciable quand on voit qu'il doit tourner à côté d'un moteur 3D qui bouffe 99% du temps machine...

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

Citation

if ( player->GetSpell, "Vampire attributes" == 0 )

hum, non. Dans le script je test deux choses : de l'une l'état du joueur (c'est plus haut), d'autre part l'état du conjoint. J'espérais que le script s'exécuterai dans le conjoint, mais ce n'est pas le cas.
La remarque était judicieuse, mais pas dans le cas présent.

Ok, c'est moi qui n'avait rien compris (ça m'arrive souvent  :peur: ). En fait, ce que tu veux faire s'apparente à ce que Ghan Buri Ghan appelle "targeted script" dans son MSfD...

Voir le messageVasumitra, le 26.02.2009 à 17:05, dit :

j'ai accès au conjoint. Stupéfiant, je n'ai rien changé et maintenant je peux savoir si elle a ou non ça ou ça. Bon, ma petite vampirette n'a rien d'un vampire (pas les sorts, pas les objets ... ), sinon le nom mais ...

Tu vas te heurter à deux obstacles (et les scripts de Bethesda s'y heurtent aussi, bug à rapporter aux mainteneurs du PNO.)

- Les sorts "maladie" sont ajoutés par ces scripts. Ils vont donc disparaître trois jours après la dernière rencontre, si tu laisses ta vampirette en carafe pour partir à l'aventure. C'est la fameuse "feature" de l'amnésie des trois jours

- Comme beaucoup de PNJs génériques, ta vampirette (aundae vampire 1 ?) doit avoir le drapeau "Auto Calculate Stats" coché. Ça signifie que ses caractéristiques et sa liste de sorts ne sont pas conservées dans la sauvegarde (mais régénéré à la volée quand le jeu l'active). Je suis près à parier que si tu charges ta partie tu vas t'apercevoir qu'elle n'a plus ces fameux sorts de vampire...

Ces deux problèmes sont ici tournables mais ça nécessite de réécrire les vampire scripts :
De base on a le script Vampire_Aundae qui dit :

if ( done == 0 )
	AddSpell, "Vampire Blood Aundae"	;this is the blood disease
	AddSpell, "Vampire Attributes"
	AddSpell, "Vampire Skills"
	AddSpell, "Vampire Immunities"
	AddSpell, "Vampire Sun Damage"
	AddSpell, "Vampire Touch"
	AddSpell, "Vampire Aundae Specials"
	ModRestoration 75
	set done to 1
endif

Moi je corrige ça en :

if ( GetSpell, "Vampire Blood Aundae" == 0 )
	AddSpell, "Vampire Blood Aundae"	;this is the blood disease
	AddSpell, "Vampire Attributes"
	AddSpell, "Vampire Skills"
	AddSpell, "Vampire Immunities"
	AddSpell, "Vampire Sun Damage"
	AddSpell, "Vampire Touch"
	AddSpell, "Vampire Aundae Specials"
	ModRestoration 75
	set done to 1
endif

De façon à m'assurer que les sorts soient bien restaurés en cas d'absence du premier qui fait office de drapeau témoin...
Le set done to 1 est à laisser car la variable est interrogée ailleurs...
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#14 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 27 février 2009 - 13:07

Voir le messageabg, le 27.02.2009 à 12:29, dit :

Voir le messageFinraïl, le 27.02.2009 à 08:27, dit :

(ne pas écrire "if (mafonction == 1) mais set x to mafonction puis if ( x== 1) ) est beaucoup plus fiable avec ce langage de script.

Autant je suis d'accord pour les lignes comportant plusieurs opérateurs, autant Finraïl, tu sembles "pousser le bouchon" plus loin que moi. Veux-tu dire qu'il faille écrire :
Set fTemp To GetDistance, player
If ( fTemp <= 1000)
...

Plutôt que
If ( GetDistance, player <= 1000 )
:ortholiberaux: ?
Oui. Il est en général plus sûr de stocker en local. Il me semble que c'est Kafou qui m'avait montré ça. Ca permet d'éviter certains problèmes étranges de left eval notamment.

Not Quite Dead, le 22.06.2006 à 19:42, dit :

[...]un changement avatarien, même infime, est PAS BIEN et nuisible [...]
Les lisez-moi c'est bon, mangez-en !! Image IPB

Fervent Partisan de l'Immuabilité Avatarienne.

Morrowind Renaissance


#15 Kaar'Eern

Kaar'Eern

Posté 27 février 2009 - 15:37

N'étant pas du tout scripteur, je ne peux qu'admirer le travail fait pour rajouter des options à ce mod qui m'avait bien plut en donnant un coté plus humain aux rencontres avec les pnjs.

Bonne continuation ! :ortholiberaux:

#16 alliop

alliop

    Renaissance de l'art magique.


Posté 27 février 2009 - 17:22

Salut les romantiques :ortholiberaux:
Rendre les vampires sensibles à la lumière du jour (y compris au sort "lumière", si on le décide, et en proportion de son intensité...), ne doit pas être terriblement compliqué (certains morts-vivants portent déjà par défaut un script de quelques lignes qui diminue leurs stats s'ils quittent une cellule intérieure).
... tiens je vais le faire, çà, un de ces jours prochains.

*******

"Finrail" dit :

(ne pas écrire "if (mafonction == 1) mais set x to mafonction puis if ( x== 1) ) est beaucoup plus fiable avec ce langage de script.
J'ai également lu ça sur le forum de Yacobi, dans un post de Galsiah ; de même, si l'on veut utiliser la valeur d'une globale dans une opération complexe ou certaines fonctions, il vaudrait mieux passer par une locale temp. (même source). On le sait pour les fonctions "set" et "mod" qui ne fonctionnent pas du tout avec des globales directes, mais j'ai déjà eu des surprises désagréables avec d'autres fonctions (sais plus lesquelles précisément par contre).

"Bienvenue à toi, lent homme lié, poussif tresseur des vitesses."
Alain Damasio


#17 Vasumitra

Vasumitra

Posté 27 février 2009 - 18:17

[b dit :

"Kaar'Eern"[/b]]N'étant pas du tout scripteur, je ne peux qu'admirer le travail fait pour rajouter des options à ce mod qui m'avait bien plut en donnant un coté plus humain aux rencontres avec les pnjs.

Bonne continuation ! :peur:

Merci :ortholiberaux: . Mais pour être franc, je ne suis pas un scripteur non plus, je commence. Mais je progresse. Merci en tout cas pour ces encouragements.

Citation

Rendre les vampires sensibles à la lumière du jour (y compris au sort "lumière", si on le décide, et en proportion de son intensité...)
Ce n'est pas vraiment le problème. Mais celui-çi est réglé. Pour information, ce qui rend les vampire sensible à la lumière c'est le sorts "vampire sun damage". Ajoute le à ton perso, tu auras la même chose (je pense, je n'ai pas essayé).
Le problème précédent est résolu, mais je veux juste ajouter :

Citation

Moi je corrige ça en :

[CODE]if ( GetSpell, "Vampire Blood Aundae" == 0 )[code]
Et rajouter par derrière un script qui se fais une fois et qui remet la variable done à 0. Sinon, elle vaut -1, et on peu dire tout ce qu'on veut plus bas ça n'a plus d'importance.
Merci en tout cas, ça règle pas mal de problème.

Je commence à bien comprendre le fonctionnement des script, la notion de script local et global (et je comprend le "onactivate" du _tlr_pnj_romance qui servait à "vérifier qu'on parle au bon pnj ... pas évident sans la notion claire de script local).
Ce problème est aussi résolu donc.

Je souhaitera que ce topic soit déplacé dans le forum "Mods et Travaux" (oh là là, je vais aller dans la cours des grands... mais je n'ai rien fait encore pour l'instant ^^).

Je vais faire un nouveau topic ici parce que maintenant j'ai bien ciblé le problème. Si tout se passe bien, je pourrais même faire une petite île au large des côtes de la mélancolie, avec une petite ville pleine de vampires ... une île ou il fera toujours nuit ...
Sinon, je pose encore une question, mais c'est parce que je viens de me rendre compte que mes derniers travaux étaient très moches : jusqu'à maintenant, je chargeait dans le tescs l'extension romance en la précisant comme active file... je suppose que je vais être obligé de refaire tout ce que j'ai fait dans une propre extension ... d'ailleur, je me demande si le fait d'avoir modifié les script vampire sera accepté... Bon, je verrai tout ça.

Dernier point : eut égard du fait que les vampire sont gentils, ils disposerons d'un topic "Mordez-moi !" qui fait attraper au pnj la maladie.

Voila, au revoir tout le monde, et à bientôt sur le site "mod et travaux". Je ne posterais plus mes problèmes, juste l'avancement des travaux. (si cependant on pouvait me dire pour le problème de propreté évoqué plus haut ^^).
Au revoir tout le monde.

#18 elendell

elendell

    Mécano Dell'Arte


Posté 03 mars 2009 - 03:20

Bonjour,

Voir le messageVasumitra, le 27.02.2009 à 18:16, dit :

(si cependant on pouvait me dire pour le problème de propreté évoqué plus haut ^^).
Peux-tu citer le passage qui pose le problème ? (Comme tu as semble-t-il trouvé réponses pour le reste, je ne vais pas tout relire).

#19 Vasumitra

Vasumitra

Posté 21 mars 2009 - 19:20

Bien, tout d'abord rebonjour tout le monde.
Je suis assez absent, même si je parle avec l'un ou l'autre par mp.
Mais je n'ai ps laissé tombé. C'est juste que les cours on repris et que j'ai des interros alors ...

Concernant le problème de propreté, c'est par rapport aux autres mods : quand on commence, on ne sait pas trop ce qu'il faut faire, on clique sur un peu tout, et ça marche alors on refait la même manip les fois suivantes ... jusqu'à ce qu'on comprenne et qu'on apprenne que la méthode qu'on utilisais avant n'est pas propre.
Avant je travaillais directement sur le mods romance.
Puis j'ai créé mon propre mods, et j'ai continué à enregistrer les modifs dessus. Mais cela ne change pas le fait qu'une partie des modifs sont toujours inclues dans le mods romance, alors ...
Bon, il n'y a rien de fantastique, mais est-ce qu'il n'existerais pas une méthode pour "extraire" mes modifications du mods romance ?
D'un point de vue algorithmique, ça consisterait à enregistrer dans un nouveau mods toutes les différence entre mon romance modifié et un romance de référence.
Bon, sinon je le fais à la main ;)

Pour info, je continu à réfléchir et à coder un peu dès que j'ai du temps. Mais la double licence m'en prend beaucoup.
Pour l'instant, il y a une île avec dessus quelques vampires, une nouvelle race de vampire spécialisée dans le marchandage, l'éloquence etc. Avec même une petite histoires dans des livres. Pour le chef de guilde, il aura des stats à la vivec donc préparez vous :mdr: .
J'ai aussi fait quelques missions, et je dois dire que je suis stupéfait de constater que faire des choses "comme dans le jeu" (aller chercher ça, tuer untel et ramener un bidule) sont SUPER simples à faire, rien qu'avec des dialogues ou presque (juste une petite variable globale qui mesure l'avancement dans le jeu) :blush:
Je pense que je n'ai pas commencé par le plus simple au début.

Bon, je vous laisse, mais juste avant, je voudrai vous faire une petite demande : est-ce qu'il serait possible de faire une texture d'humain ... sans texture !
C'est-à-dire que je voudrai pouvoir avoir une personne dont on ne verrait pas le visage ni rien. Juste une grande robe noir avec capuchon (la mort quoi, mais version sans le squelette).
Sinon, je pense que je vais le faire avec un liche, mais l'idée me déplait.

Merci à tous pour votre aide, et ne vous inquiétez pas : je continue !

P.S. : je pense aussi à faire une communauté de réveur mais c'est juste une idée en l'air.




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

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