Aller au contenu


Questions En Vrac


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

#1 kebra

kebra

Posté 02 juin 2011 - 20:44

Juste quelques petites questions, surtout pour confirmation,

Est-il possible de verifier que le PJ ait complétement vidé son inventaire? (sinon j'utiliserai une ruse comme decrit par Von Zeeple plus haut).

Pour les frontières de Crépuscule, j'utilise le MarkerBox de Tribunal x 2. Mais pas moyen quand on s'approche, ou quand on le heurte d'obtenir le declenchement d'une MessageBox. Est-ce dut à sa taille? Sinon, est-il possible quand un objet n'a pas de système de collision, de lui en ajouter un (en le changeant de catégorie par exemple), ou faut il passer par un outil de modélisation?
Quoi qu'il en soit, si le problème est la taille, je placerai des detecteurs invisibles.

Et un problème un peu vexant (mais je n'ai pas la bosse des maths),
Je voudrai faire tourner un objet sur lui-meme, en soit pas de problèmes, mais:
j'ai un objet positionné comme suit, X 90 Y 0 Z 0 auquel j'imprime une rotation en Y, ça marche,
mais sur un autre positionné en, X 0 Y 90 Z 0, pas moyen de le faire tourner sur lui meme, que ce soit en changeant les parametres de rotation (X, Y ou Z), ou le positionnement initial (auquel je souhaite conserver son Y 90 ),
Si quelqu'un à la solus clef en main, ce serait chouette. J'en ai marre de faire des essais...

#2 Kira

Kira

    Top-modeleuse...


Posté 02 juin 2011 - 23:08

Bonjour Kebra....

Pour l'inventaire, je ne sais pas trop, je vais donc laisser ce sujet à quelqu'un de plus compétent....
Pour ton marker de collision, il me semble bien me souvenir que c'est un static... En faire un autre, en activateur, te permettra d'y placer un script détectant l'approche du joueur afin de déclencher une boîte de message...

Et quand à la rotation de ton objet, tu as deux commandes possibles "rotate xyz" qui fait tourner l'objet autour d'un de ses axes, et "RotateWorld xyz" qui le fait tourner par rapport aux axes du monde....

Il me semble que la commande "RotateWorld" ne devrait pas être gênée par le placement de ton objet....
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...)

#3 kebra

kebra

Posté 03 juin 2011 - 00:08

Que je suis C... Oublié le World, alors que ces scripts sont remplis de MoveWorld, j'étais resté à Rotate. :dry:
Bon, teste fait, c'est impec, merci Kira.

En revanche j'avais déjà placé le MarkerBox en activateur et utilisé des scripts, mais aucun, que ce soit en collision ou en detection de distance ne fonctionnent, ça doit etre la taille, il s'étend sur 2 Cells!

#4 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 03 juin 2011 - 08:39

Pour l'inventaire, le mieux est d'utiliser MWSE.

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


#5 kebra

kebra

Posté 03 juin 2011 - 08:56

Voir le messageFinraïl, le 03 juin 2011 - 08:39, dit :

Pour l'inventaire, le mieux est d'utiliser MWSE.

Oui, mais si je ne me trompe pas, cela signifie que le joueur aussi doit l'utiliser (j'ai testé ça dans Fallout pour le mod Real Time Settler, mais pas dans Morro)?
Si c'est le cas, ça m'embete.

Je crois que je vais réduire sa force à 0 pour l'immobiliser le temps qu'il décharge son matériel dans un coffre (cf Von Zeeple), j'ai déjà plus ou moins monté le pretexte, mais je n'ai pas eu le temps de tester (je bute sur un autre truc insignifiant pour le moment, un petit problème d'AiTravel que je n'arrive pas à cadrer dans un fond de bateau qui manque d'espace), on verra bien...

#6 Finraïl

Finraïl

    Modèle de wiwilandais nanotechnologique


Posté 03 juin 2011 - 18:38

Voir le messagekebra, le 03 juin 2011 - 08:56, dit :

Oui, mais si je ne me trompe pas, cela signifie que le joueur aussi doit l'utiliser (j'ai testé ça dans Fallout pour le mod Real Time Settler, mais pas dans Morro)?
Si c'est le cas, ça m'embete.
Oui. Mais il faut aussi savoir que MWSE est importé par MGE, utilisé par nombre de joueurs.  :grin:

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


#7 kebra

kebra

Posté 04 juin 2011 - 01:11

Alors peut-etre car le coup du coffre n'a pas fonctionné pour moi, d'ailleurs si quelqu'un a une explication et/ou une solution.... :shocked:
J'explique,

Il s'agit de forcer le PJ a vidé son inventaire dans un coffre en abaissant sa force (il ne peut plus rien porter).
Premier épisode, je me ballade avec le Sunder (en Fr ?), résultat, décès immédiat  :lol: .
Deuxième, je lourde l'engin et ça marche..... heu, non, aprés deux plombes a tout transférer et alors que je ne porte plus rien, il me reste 46 kilos. Je sais que certains objets scriptés peuvent laisser leurs traces comme du pneu au fond d'une culotte et je pense que c'est ça, mais du coup, je ne vois pas d'alternative à MWSE. Si quelqu'un connait l'explication (moi, je me contente de supposer...) ou a une idée pour contourner ce défaut...

C'est dommage, je voulais une phase MinerCraft, de ficelles en bout de bois et autres bidules permettant de créer des outils d'évasions. Pfffff.

Une autre question (ça va devenir un topic complet à force), je sauvegarde un script et ce couillon me trouve une erreur ligne 155 tandis que mon End est en 88, comment c'est possible? Win7 et Morro dans Program Files? Autres? C'est un truc banal?

Je garde les autres questions pour plus tard, sinon, je vais m'ennuyer :mrgreen: .

Modifié par kebra, 04 juin 2011 - 03:23.


#8 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 09 juin 2011 - 10:33

Pour ton problème de frontières, utilises le mesh du mur invisible plutôt que le marker, un truc dans les static nommé dans le genre *** Inviso Wall !!! **** car ce mesh a des collisions.

Pour ton erreur de script, copie le ENTIEREMENT (CTRL+A) dans un éditeur de texte normal essaie de voir si il n'y a pas des caractères cachés et des lignes vides après ton end, supprime tout ce qu'il y a derrière, si l'erreur persiste, essaie de supprimer les lignes vides et retour à la ligne (quitte à les refaire) dans le script des fois que le caractère problématique soit avant le end.

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#9 kebra

kebra

Posté 11 juin 2011 - 18:51

Oui, le nettoyage a bien marché, mais ça laisse réveur quant aux capacités de cet outil, bordel de d....

En revanche les invisos sont trop petits pour couvrir une frontière egale à une moitié des cotes de Solstheim, je vais voir avec des detecteurs et du GetDistance.

Et puis maintenant, je galère avec les AiTravel-Escort-Follow qui ne veulent pas faire leurs PackageDone à cause que je ballade le PNJ sur un paquet de cellules et que les solus proposées, ici et là (Wiwi, scipting for dummies...) ne fonctionnent pas. Pas grave, je finirait bien par trouver un truc...

Merci... :mrgreen:

Modifié par kebra, 11 juin 2011 - 18:52.


#10 kebra

kebra

Posté 17 juin 2011 - 01:38

Bonsoir, un double,

Je continu mon petit chemin dans les joies du scripting (en fait je kif bien), et j'ai encore quelques questions, ça m'évitera peut-etre de répéter les memes erreurs en boucle.

Je vais partir du cas pratique de la soirée,
Je cherche à obtenir que le PJ se prennent des dégats quand il passe dans certaines zones végétales. J'ai obtenu exactement l'effet recherché, ça tourne, sauf deux trucs.

En gros, il se prend 1 de dégat tant qu'il stationne dans la zone (<=300) d'où l'usage d'un timer. J'ai ajouté trois effets, une MessageBox, un son et, l'apparition d'une brume nauséeuse (verte, par PlaceAtMe d'un Activator persistant) qui disparait quand le PJ sort de la zone (script sur l'activator) et réapparait s'il y revient.

Bon, tout ça marche bien, sauf si je place une seconde zone, dans ce cas, MessageBox et son se declenchent mais la brume n'apparait qu'avec la 1ere zone (un editormarker).
En gros, je ne peux pas appeler deux fois l'instance brume. Si quelqu'un peut m'expliquer pourquoi, ( un peu de théorie m'évitera beaucoup de galère ) et s'il est possible de résoudre ça autrement qu'en recréant tout le processus pour chaque zone (par un général peut-etre?).

Et puis, toujours dans la théorie, je me suis apperçu que malgré le timer, la perte de santé variait selon les lieus, enfin selon le framerate (comme avec GetScale+timer). On meurt moins vite à Crépuscule (framerate chargé) qu'à la campagne (saleté de sélection sociale). J'utilise ModCurrentHealth -1, pendant un cours interval de temps (deux secondes  if timer>=1 if<=2 ). Si quelqu'un sait regler et expliquer ça, merci... :wacko:

#11 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 17 juin 2011 - 10:51

Pour le dernier point, il faut savoir que le script est exécuté à chaque frame. Si tu mets un timer, l'instruction Modcurrenthealth est exécutée à chaque frame pour toutes les frames calculées durant la seconde délimitée par le timer. C'est donc dépendant du framerate. Par contre des instructions comme moveworld n'ont pas ce problème car on indique une distance/seconde et non une distance/frame. Mais un setpos = getpos + x auraient le même problème de dépendance au framerate.

Pour ton autre problème, il faudrait plus de précision sur quels sont les activateurs utilisés et les scripts attachés pour déterminer les interactions indésirables.

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#12 kebra

kebra

Posté 17 juin 2011 - 12:17

Voir le messageKorfandar, le 17 juin 2011 - 10:51, dit :

Pour le dernier point, il faut savoir que le script est exécuté à chaque frame.
Pour ton autre problème, il faudrait plus de précision sur quels sont les activateurs utilisés et les scripts attachés pour déterminer les interactions indésirables.

Oui, en gros, un gars avec une machine poussive ne prendra aucun degat et un autre avec une rapide sera seché sur place, la revanche sociale :jester: . Bon, plus sérieusement, ça m'embete, j'ai mis des timer partout. A voir...

Alors, il y'a deux script et deux meshes placé en activator.
La principale un bete editormarker qui porte le script et agit suite à un GetDistancePlayer.
La seconde, une meshe de ??, db_ , un nuage vert, que j'ai place en activator et rendu persistant. Il porte un script de Disable, quand le PJ sort de la zone...

Le mieux, c'est que je les envoie, bon, je suis pas un cador et il y'aura du degraissage, mais j'apprend...
Le PJ entre dans la zone d'effet, une Box, un son et une brume verte le previennent d'un truc, il perd vie et fatigue jusqu'à une certaine limite. S'il sort de la zone, le nuage disparait, si il y retourne, le meme processus complet redemarre.


float timer
short lieu
short doOnce

if ( GetDistance Player >= 300 )
	  set timer to 0
	  set lieu to 0
	  set doOnce to 0
	  return
endif

if ( GetDistance Player <= 300 )
	  set timer to ( timer + GetSecondsPassed )
	  set lieu to 1
endif

if ( lieu == 1)
   if ( timer >= 0 )
	   if ( doOnce == 0 )
			MessageBox "Ces plantes malsaines semblent aspirer votre vitalité."
			PlaySound "bl_serpent_01"
			set doOnce to 1
			 "bl_detec_02"->PlaceAtMe bl_effetmarais_01 1 0 0
	endif

	if ( timer <=1 )
			Player->ModCurrentFatigue -1
			Player->ModCurrentHealth -1
			set lieu to 2
	 endif
   endif
endif




et


if ( GetDistance Player >= 300 )
	  Disable
endif



Sinon, j'en ai fait un qui fait trebucher le PJ (fatigue à 0 et retour de la fatigue l'instant d'aprés). Hier, je le teste dans les marais, et Plouf, j'ai en prime l'effet de noyade au milieu des joncs, avec bruit de bulle SVP. Marrant, je vais envoyer une vidéo, tiens.

#13 Kira

Kira

    Top-modeleuse...


Posté 17 juin 2011 - 13:08

Bonjour Kebra....


Je suis désolée si je dis une bêtise, mais ne serait-il pas plus simple de déclencher sur ton joueur un effet de poison qui s'interrompt quand le personnage a perdu n points de santé?.....

L'effet poison retire des points et produit un nuage verdâtre bien malsain d'aspect...
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...)

#14 abg

abg

    L'ABG pour les civilisés


Posté 17 juin 2011 - 13:24

De façon globale, c'est un bon réflexe que d'exploiter à fond les mécanismes déjà codés du jeu plutôt que de réinventer la roue à grands coups de script...
Donc je rejoins Kira : Quelque chose comme un "explodespell 'sort_de_poison'" lorsque le PJ est en contact avec la plante vénéneuse et tous ces problèmes de timer et framerate sont réglés, automatiquement gérés par le jeu !
C'est une politique à généraliser : IA, effets magiques, animations...etc. Un bon scripteur doit savoir être fainéant  :mrgreen:
Antoninus Bibulus Glaber
Coaching de PNJs chez Morrowind Renaissance

#15 kebra

kebra

Posté 17 juin 2011 - 13:44

Voir le messageabg, le 17 juin 2011 - 13:24, dit :

Un bon scripteur doit savoir être fainéant  :mrgreen:

Oui, mais justement, je ne suis pas un bon scripteur :D .

Cela dit, pigé comment ça marche ou pas me sert pour d'autres trucs, mais je retiens le conseil.

Et puis parfois implementé ou pas... j'arrive pas à faire fonctionner Fall d'où le script modifiant la santé etc... Rrrah, c'est bon.

#16 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 17 juin 2011 - 14:55

J'ai simplifié ton script et trouvé l'origine de ton problème :
float timer
short lieu
short doOnce

if ( GetDistance Player >= 300 )
	  set timer to 0
	  set doOnce to 0
	  return
endif

set timer to ( timer + GetSecondsPassed )

if ( doOnce == 0 )
			MessageBox "Ces plantes malsaines semblent aspirer votre vitalité."
			PlaySound "bl_serpent_01"
			PlaceAtMe bl_effetmarais_01 1 0 0
			set doOnce to 1
endif

if ( timer <=1 )
			Player->ModCurrentFatigue -1
			Player->ModCurrentHealth -1
endif

Explications :

Simplification :
- le RETURN placé dans le test de distance suffit à contrôler tout le reste de l'exécution à part le timer. Le second test de distance est inutile, déjà il aurait mieux valu utiliser un else plutôt qu'un nouveau if, mais le return le rend de toute manière inutile puisque si le joueur est à plus de 300, le script s'interrompt avec le return sans que le reste soit exécuté. Enfin mais c'est plus anecdotique, la condition du second if aurait du être < 300 et non <= 300.
- le test sur lieu ne sert à rien puisqu'il est forcément remis à 1 à partir du moment où le joueur est à moins de 300

Source du problème :
Le script ne fonctionne pas à cause du "bl_detec_02"->PlaceAtMe bl_effetmarais_01 1 0 0
Je suppose que bl_detec_02 est l'id de l'activateur de type editormarker et que tu utilises plusieurs instances de cette id. Le problème est que si il y a plusieurs instances d'un même activator dans la même cell, seule la première chargée peut être référencée par script. C'est la raison pour laquelle on ne peut pas agir globalement sur toutes les instances d'une même id.
Donc pour corriger ton problème, il suffit de remplacer la ligne visée par "PlaceAtMe bl_effetmarais_01 1 0 0" tout court car là ça référence l'instance locale qui porte le script. En effet, chaque instance de ton bl_detec_02 exécute une version qui lui est propre du script notamment au niveau de l'état des variables.
Sinon la solution proposée par Kira et abg est une bonne alternative.

Enfin il serait intéressant d'ajouter dans le script du nuage vert un setdelete afin de supprimer réellement les nuages qui ne servent plus (je te laisse voir comment cette instruction fonctionne) car sinon si le joueur passe son temps à s'approcher et s'éloigner de la plante, tu vas saturer la mémoire d'activator invisibles mais toujours présents.
La solution de l'explodespell ne présente pas cet inconvénient.

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...


#17 kebra

kebra

Posté 17 juin 2011 - 17:08

:beat:

Testé et ça marche parfaitement, un grand merci, et surtout pour l'explication, j'ai beaucoup appris. Je n'aurai pas pensé à l'activateur initial, par exemple (si il y a plusieurs instances d'un même activator dans la même cell, seule la première chargée peut être référencée par script.). J'avais cependant fait gaffe à ne placer qu'une instance par cellule pour les tests... Et je vais pouvoir exploiter, d'autres scripts que j'avais laissé de coté.

J'arrive à bidouiller, je comprend de mieux en mieux la logique de l'ensemble, mais je suis loin de savoir vraiment scripter. Par exemple, je ne maitrise pas concretement, les else, elseif etc... Donc, je les évitent, comme je préfère laisser une condition dont je doute de l'utilité, plutot que la supprimer. Mine de rien, je n'aurai jamais cru etre capable de faire bouger un mur il n'y a pas si longtemps, alors faire des extincteurs de nuage vert, je suis plutot content. :P
Et puis, comme je progresse, je me dis que je degraisserai quand je maitriserai mieux...

Reste, que je vois le chemin a parcourir, ton explication est clair et simple, tout en maitrise, ça parait évident...

Pour savoir, ces instances invisibles peuvent avoir une réelle incidence? Parcqu'il est joli mon nuage qui part et qui revient (et pour d'autres usages surtout).

Au fait, Kira, j'use et j'abuse des effets magiques comme ceux du poison pour créer des monstres ou des ambiances puisque je ne sais pas modeler. C'est vrai qu'il y a beaucoup a détourner et c'est souvent plus marrant  :rolleyes:.

Modifié par kebra, 17 juin 2011 - 17:18.


#18 Korfandar

Korfandar

    Ch'ti dragon normand...dans son trou


Posté 17 juin 2011 - 17:51

En fait, les nuages ne partent pas, ils sont juste masqués et comme il sont persistants, ils sont en plus sauvegardés. Donc à chaque fois que le joueur active la plante, un nouveau nuage est créé et tous les anciens sont conservés. Si ils sont dans une zone où le joueur risque de passer régulièrement en les activant, on peut vite se retrouver avec des centaines d'activator masqués qui ne servent à rien mais qui en plus continue à exécuter leur script à chaque frame or le getdistance n'est pas la moins couteuse des instructions donc à terme on peut avoir une sacré chute de framerate, un grossissement de la sauvegarde etc...
Le minimum serait de transformer le script comme suit :
short doonce

if ( doonce == 0 )
if ( GetDistance Player >= 300 )
	  Disable
set doonce to 1
endif
endif
Au moins le getdistance des cachés ne s'exécutera plus, mais il faudrait utiliser setdelete pour être plus propre, voir le mod magasins de miniatures pour des exemples.

L'abus de SMS est dangereux pour l'élocution mentale

Le mod qui révèle (presque) tout sur les dwemers : Dwarmor

Fervent Partisan de l'Instabilité Avatarienne
Quart du quarteron des VGM...





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

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