Modifier le sort de vision nocturne des Khajiits

Vous trouverez ici les tutoriels et l'entraide sur les outils et techniques de modding spécifiques à Morrowind.
Répondre
Avatar du membre
RavenGhost
Moddeur en herbe | Traducteur et testeur aspirant
Moddeur en herbe | Traducteur et testeur aspirant
Messages : 121

Modifier le sort de vision nocturne des Khajiits

Message par RavenGhost »

Bonsoir à tous et joyeux Halloween !

Je boss sur un autre mod pour Morrowind : Je voudrais faire en sorte que le sort de vision nocturne et la respiration aquatique des Khajiits et Argoniens soient activable et désactivable en relançant le même sort. Exactement comme le mod de vision nocturne pour Khajiits sur Oblivion. Seulement je sais pas trop comment faire, une idée ?

Merci d'avance !
Venez découvrir mon site ! Ce sont principalement des fic' : http://le-monde-de-raven.jimdo.com/
Avatar du membre
Opial
Traducteur aspirant
Traducteur aspirant
Messages : 53

Re: Modifier le sort de vision nocturne des Khajiits

Message par Opial »

Bonjour. Alors, revenu à l'état dit normal après la nuit de Valpurgis des confiseurs? :pompom:
Voilà ton script, testé et fonctionnel.
; d'abord, créer et enregistrer deux sorts dans le spellmaker, afin que le script les reconnaisse à la compilation :
; un sous forme "capacité", en l'occurrence vision noctune X + respiration aquatique + nage rapide Y
; un autre sous forme "sort" à caster en "self" d'effet et de durée 0 (MCP obligatoire), en l'occurrence j'ai choisi une lévitation pour avoir l'anim de cast "altération"
► Afficher le texte
Pour tester par la console :

Code : Tout sélectionner

Startscript zRav_respivi_script
Player->addspell zRav_respivi_cast (ou l'id que tu auras choisie)
fermer la console et lancer le sort, œuf côrse.
Si tu veux que ce soit une capacité de race, il faut qu'un autre script, en start script -attention aux écrasements d'autres mods qui ont des starscripts!- ou placé sur un objet caché à la sortie du bureau des taxes -attention aux autres mods qui utilisent ce truc et modifient la cell [par ex "Nérévarine nationaliste"]- :
- teste cette race après la création du perso
- retire la capacité native
- ajoute le sort d'activation/désactivation à caster
- démarre ce script de test de toggle en global.
Tu peux aussi en faire, pour les autres races, une capacité enseignée, effectuant ces mêmes opérations en résults de dialogue ou de lecture de book. Si tu veux que même les Argoniens ou/et Khajitts doivent l'apprendre, le mieux est de modifier les race au départ pour qu'elles ne les possèdent pas (on peut sans doute alors modifier aussi les écrans d'info de création de perso par MWSE, mais là je ne pourrais pas t'aider avant une paye ^^ )
Ou bien faire porter les fonctions par l'équipement d'un item. Bon c'est une autre histoire et je n'ai plus trop le temps là, pardonne moi. :bye:
Je est un autre
"A vouloir vivre on peut finir par exister."
Gael Faye
Avatar du membre
RavenGhost
Moddeur en herbe | Traducteur et testeur aspirant
Moddeur en herbe | Traducteur et testeur aspirant
Messages : 121

Re: Modifier le sort de vision nocturne des Khajiits

Message par RavenGhost »

Bon j'ai tester, j'ai juste fixé le sort (pas la capacité) sur la race, en remplaçant le sort de base mais rien ne se passe quand j'active le sort.

Aussi je me demandais si ont peut pas faire plus simple dans ce genre par exemple :

J'ai mon sort de vision nocturne => Je l'active en le lançant et il reste jusqu'à ce que je le relance et que ça le désactive.

Je suis une buse en scripts mais j'imaginais un truc du genre : "Vision nocturne ON" Vision nocturne OFF"
Venez découvrir mon site ! Ce sont principalement des fic' : http://le-monde-de-raven.jimdo.com/
Avatar du membre
Opial
Traducteur aspirant
Traducteur aspirant
Messages : 53

Re: Modifier le sort de vision nocturne des Khajiits

Message par Opial »

Je te poste en mp le lien de dl d'un esp testé et validé dans plusieurs conditions (cf à la fin).
J'ai refait toute la chose au complet, c'est à dire pour les deux races, et de façon à respecter les données vanilla d'intensités et de durée (de là on peut facilement lister dans l'algo toutes les races qui ont des sorts et faire pareil). C'est à dire qu'au niveau de l'effet la seule chose qui change est l'ajout de ce "toggle" ( <==> "interrupteur on/off" ) par re-cast du sort d'activation comme tu le souhaitais (et puis que j'ai remplacé les noms vanilla "respiration aquatique" et "vision nocturne", qui sont juste les noms descriptifs des sorts d'altération de base sans rapport aux données de races du lore, par "Respiration amphibie" et "Œil d'Elsweyr", avec un double espace au début de ces noms pour qu'ils restent en tête de la liste des sorts qui seront achetés plus tard).
► Afficher le texte
Ci-dessous maintenant voilà tout le code commenté (double en txt avec l'esp dans le .zip à dl).
► Afficher le texte
J'ai testé ça dans les conditions suivantes :
- sur une install toute neuve sans aucun mod d'abord puis avec "démarrage rapide". OK.
- sur une plus ancienne install bourrée de mods (cf liste dans le spoil)
  • En installant le mod sur une partie en cours (12 jours, level 4)
Ça tourne nickel dans tous les cas. Une réserve : peut être que ça ne marchera plus après 72 heures (temps de conservation des valeurs de variables locales) si l'on ne rejoue pas la partie entre-temps, mais je ne crois pas car le startscript réinitialisera chaque fois les tests. Au pire le PJ devra relancer son sort si on avait sauvegardé avec, il ne sera peut être plus actif après 72h sans jouer.
Liste des mods :
► Afficher le texte
Je est un autre
"A vouloir vivre on peut finir par exister."
Gael Faye
Avatar du membre
RavenGhost
Moddeur en herbe | Traducteur et testeur aspirant
Moddeur en herbe | Traducteur et testeur aspirant
Messages : 121

Re: Modifier le sort de vision nocturne des Khajiits

Message par RavenGhost »

Je me suis mal exprimé, j'ai fait exactement comme tu l'expliquais. Ne va pas croire que je fais preuve de flemme ou de précipitation au contraire. Je viens de trouver, grâce à mon compagnon ainsi qu'à un mod anglais, ce que je cherchais exactement. Le tout tient en un seul script et une modification du sort de base et la création d'une capacité. Autrement dit 3 manip toutes simples et qui me parlent mieux que de la théorie avec des mots que je ne maîtrise pas ou des options du TESC que je ne connais pas.

Merci de ton aide, voila le sujet résolu :)
Venez découvrir mon site ! Ce sont principalement des fic' : http://le-monde-de-raven.jimdo.com/
Avatar du membre
Opial
Traducteur aspirant
Traducteur aspirant
Messages : 53

Re: Modifier le sort de vision nocturne des Khajiits

Message par Opial »

Ma qué, "théorie"? Télécharge l'esp et teste le, ce n'est plus de la théorie. Il en faut, pour rédiger des scripts, qui ne sont rien d'autre que de l'application de "théorie". Mes manips ne sont pas "compliquées" (et surtout ne sont pas "miennes" non plus, juste basiques depuis le temps que ce tescs est utilisé). D'ailleurs d'après ce que tu me racontes ce sont assez probablement les mêmes sans le startscript. J'ai aussi d'abord testé par la modif des sort de base et bien évidemment ça marche aussi bien, mais je m'y suis finalement refusé parce qu'un PNJ vend le sort "Eye of night" quelque part dans un donjon Camona-Tong. Ce sont les explications, qui sont peut être un peu compliquées, je pensais que tu en avais vraiment besoin, si donc tu as quelqu'un de proche qui fait ça en direct tant mieux, salut à lui. :bye:
Si vous voulez bien me passer votre algo et vos scripts en retour, merci, ça m'intéresse de voir une autre solution (si c'en est vraiment une autre, ce dont je doute puisqu'il y a création d'une capacité... peut être avez-vous fait l'impasse sur le timer qui restitue l'effet vanilla exact pour ne conserver que la fonction d'interrupteur sur une durée illimitée autrement -ce qui ma foi ne va pas mal avec la notion de "capacité d'espèce", je suis d'accord, les chats n'ont pas une vision nocturne ni les poissons une respiration amphibie timées- ?... j'ai aussi commencé par là, et puis j'ai trouvé plus marrant de réaliser quelque chose d'un peu plus complexe en effet ^^ , en reconstituant le fonctionnement d'origine et en essayant d'assurer au max la compatibilité en ne modifiant ni la race ni les sorts de base ni surtout "Player" auquel n'est attaché aucun script).

[edit 06h37] Bon je ne sais si ce qui précède a été lu, mais pardon ça m'agace un tantinet d'avoir le sentiment d'avoir bossé une 12aine d'heures, dont les 3/4 au moins à rédiger et mettre en forme dans ce forum du tuto pour un algo un minimum exigeant en rapport au jeu, et pour des scripts vraiment basiques, pour rien, alors j'espère qu'au moins d'autres pourront en profiter. Par exemple pour découvrir avec intérêt des fonctions de base qu'ils ne maîtrisent pas encore. Juste affaire de pouvoir mieux jouer avec cette petite machine offerte à cette fin. Il n'y a aucun reproche dans le fait de prendre acte ce que quelqu'un se dise soi-même "buse en script" et de tenter de l'aider à moins l'être, et je ne suppose aucune "paresse" de la part de cette personne étant certain qu'elle a beaucoup moins de temps que moi à consacrer à ses passions et intérêts. :)
Alors au moins pour ton copain qui semble a priori moins "buse" que tu ne t'affirmes, voilà les scripts totalement nettoyés des commentaires qui encombrent la lecture du code a proprement parler. Si vous ne les voyez pas comme "simples" alors je n'imagine pas bien ce que vous pouvez considérer comme "compliqué".
► Afficher le texte
Et je me permets de fournir, dans la mesure où ça ne concerne aucune perspective de mise en ligne, ni de traduction, ni d'autre tests qu'au bénéfice général de quelques rares personnes qui auraient encore envie d'ouvrir la petite bête pour voir et comprendre en jeu cette petite mécanique qu'elle a dans le ventre, si elles ne la connaissent pas déjà par cœur ce qui m'étonnerait le lien de DL de l'esp fonctionnel testé comme raconté plus haut. Il contient aussi les script commentés en tuto (mais moins complètement que dans le post plus haut).
That's all folks, avec mes excuses pour être incapable de traiter en mode tweet de questions un tantinet avancées. :bye:
Je est un autre
"A vouloir vivre on peut finir par exister."
Gael Faye
Avatar du membre
RavenGhost
Moddeur en herbe | Traducteur et testeur aspirant
Moddeur en herbe | Traducteur et testeur aspirant
Messages : 121

Re: Modifier le sort de vision nocturne des Khajiits

Message par RavenGhost »

Voila le script du mod terminé, peut être un peu lourd mais après tout cela ne concerne que 2 sorts dans tout le jeu qui lag déjà de base et puis ça ne me fait pas laguer d'avantage malgré mon pc assez vieillot.

Code : Tout sélectionner

begin VisionNocturneToggle
  if ( Player->GetRace "Khajiit" == 1 )
	if ( Player->GetSpellEffects, "eye of night" == 1 )
		if ( Player->getSpell, "000VisNocCap" == 1 )
			Player->RemoveSpell, "000VisNocCap"
		else
			Player->AddSpell, "000VisNocCap"
		endif
		Player->RemoveSpellEffects, "eye of night"
	endif
  endif
end
La même chose pour l'argonien et sa respiration.

Au final :
- 2 capacités créés, 2 scripts en "starts scripts" et le tour est joué !
Venez découvrir mon site ! Ce sont principalement des fic' : http://le-monde-de-raven.jimdo.com/
Avatar du membre
Opial
Traducteur aspirant
Traducteur aspirant
Messages : 53

Re: Modifier le sort de vision nocturne des Khajiits

Message par Opial »

Oui le tour est joué, de toute façon. :pompom:
Merci pour ce training -de codage et d'écriture, au fond c'est un peu pareil, n'est-ce pas?-! :top: :smart:
D'abord une généralité : il ne faut pas trop se fier à l'apparence, ce n'est pas le nombre de lignes rédigées dans un script qui compte, c'est le nombre de tests/commandes qu'il exécute par frame.
Nous utilisons bien le même principe exactement (test d'effet casté + add/remove de capacité ; je n'en connais pas d'autre pour ce genre d'effets) mais je n'avais pas pensé à "removespelleffects" (carrément oublié que ça existe), qui permet bien d'utiliser le sort racial de base sans le modifier et qui simplifie la chose de quelques cheveux (ça économise la création de deux sorts, et un changement de sort dans la liste du joueur exécuté une seule fois en une frame à la sortie du bureau des taxes par 2 lignes de script par race). Pour le joueur c'est moins troublant effectivement (sauf que la durée indiquée dans l'effet listé ne correspondra plus à réalité de l'effet illimité). Quoi qu'il en soit bravo et merci de ce rappel :)
Vous avez donc choisi de ne pas reproduire la durée des sorts, ok (le timer ajoute un poil de complexité et, en principe, de la charge de calcul et de mémoire, en effet -pas sensible sur ma bécanne, cf + bas-).
Vos deux scripts exécutent pratiquement, à eux deux, les mêmes tests/commandes que ceux qui sont exécutés dans mon script unique fractionné en deux par des variables et des "elseif".
Mais vous n'êtes pas loin de la meilleure formule, c'est vrai : un seul script par race c'est mieux, oui, ça économise des tests... si un seul est lancé.
Par contre votre algo malgré les apparences est un peu plus lourd du fait que vos 3 tests "if" empilés sont répétés dans 2 scripts globaux qui tournent en même temps, alors qu'en réalité une seule race étant de base testée une fois pour toute déjà par le jeu, il suffirait de lancer un seul script correspondant à cette race et de ne plus la tester dans ce script.
Bon d'après mes essais sous toutes les coutures des deux algos et scripts non modifiés et modifiés, ma petite usine n'est ni plus ni moins lourde, elle totalise à peu près la même quantité de tests, avec son timer, que vos 2 scripts qui tournent en même temps. Mais au final sur une vieille bécanne je suis sur qu'il vaut mieux que tourne un seul global comme les vôtres, que deux ou qu'un comme le mien sans doute, qui fait donc le même nombre de tests que vos deux ensemble (as-tu testé avec mon esp, si tu vois une différence de FPS?) .
J'ai donc fait plusieurs essais sur install de base sans mod ("seulement" MGE-XE avec les options graphiques à fond +1 ou 2 shaders ajoutés), à la sortie du bureau des taxes avec chaque fois une nouvelle partie sous les 2 races et donc sous plusieurs formes d'algo -le mien, le vôtre, l'un puis l'autre modifiés-. Tout se vaut au final, la bécane a sous toutes les formules tourné dans les 45 fps sous ma config système "moyenne contemporaine" :
► Afficher le texte
Je n'ai pas testé sous mon install de jeu à proprement parler, un peu chargée en mods, mais je suis sûr qu'en début de partie ce serait pareillement égal, avec ou sans cet esp sous toutes ses formules possibles, ça tournera dans les 35fps au lieu de 45 sans mod.
► Afficher le texte
Par contre je suis à peu près sûr que plus une partie va avancer plus vos 2 scripts globaux simultanés vont finir par mettre des bâtons dans les roues d'une vielle bécane (et peut être ma série de tests en un seul script aussi sur ma propre config, en fait dans les 2 cas ça dépendra surtout de tous les autres mods cumulés qui additionnent des entrées de journal et autres collections d'états de variables).

Donc je te propose quelques optimisations :
D'abord, quelle que soit la solution choisie entre lancer un seul script ou les deux, tester la race dans le ou les script(s) de toggle est totalement inutile (un test de trop à supprimer sans hésitation), puisque seule la race concernée possède l'effet concerné.
► Afficher le texte
Et pour cette même raison (sauf si d'autres mods implémentent des PNJS qui vendent des capacités raciales), c'est vraiment tout à fait inutile de lancer plus d'un seul script correspondant au test d'un seul effet racial. Autrement dit un seul starscript qui lance seulement le script nécessaire puis s'arrête suffit.
Donc voilà ce que je propose :
En starscript :

Code : Tout sélectionner

Begin AA_racetest

short state

if ( CharGenState > -1 ) ; c plus propre et plus sûr
	return
endif
if ( state == 0 )
	if ( PCRace == 1 )
		startscript "AA_ArgonianBreatheToggle
	elseif (PCRace == 6 )
		AA_VisionNocturneToggle
	endif
	set state to 1
;==bien gaffe à n' ajouter les 4 lignes qui suivent au script qu'après l'avoir d'abord enregistré sans elles ===
	return
else
 	set state to 0
	stopscript "AA_racetest"
;================================================================
endif

end
Votre test de toggle mais sans le test de race -et pas en startscript, puisque démarré par le test racial- (là pour les Khajits, et donc même script autres ID pour les Argo œuf côrse)

Code : Tout sélectionner

begin AA_VisionNocturneToggle 
 
if ( Player->GetSpellEffects, "eye of night" == 1 ) ;
	if ( Player->getSpell, "000VisNocCap" == 1 )
		Player->RemoveSpell, "000VisNocCap"
	else
		Player->AddSpell, "000VisNocCap"
	endif
	Player->RemoveSpellEffects, "eye of night"
endif
end
C'est encore plus simple, et bien plus léger quoi qu'en dise ma bécane. ;) :bye:
Je est un autre
"A vouloir vivre on peut finir par exister."
Gael Faye
Répondre

Retourner vers « Modder Morrowind »