Aller au contenu


Joueur Indemne, Santé Au Maximum, Où Est-Ce ?


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

#1 Spitoven

Spitoven

Posté 17 mai 2014 - 13:20

Bonjour.

Je suis effectivement très très crispé par le fait que je ne trouve pas (mais alors vraiment pas malgré tous mes crispants efforts) comment faire pour que, en guise de condition préalable à son exécution, un script crispant vérifie que la santé du joueur est à son maximum, bref qu'il n'est pas blessé et qu'il ne souffre pas, contrairement à moi qui suis vraiment très très crispé. Si quelqu'un pouvait m'aider à me décrisper en me donnant la réponse ce serait vraiment très très gentil parce que là ça comenbnhe )n decvenoirenjv fTT/kj!v 2c544 ajazg Daedraeka ! Mannimarco Daedroth Kvatch Mannimarco Erandur Vangaril Oblivion Tska Tska Takaesh ! WABBAJACK WABBAJACK WABBAJACK WABBAJACK WABBAJACK WABBAJACK NGASTAKVATAKVAKISSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

Modifié par Spitoven, 17 mai 2014 - 13:23.

Image IPB

#2 Troglodyte

Troglodyte

Posté 17 mai 2014 - 13:39

T'as regardé dans les conditions liées au dialogue des personnages qui te disent d'aller voir un guérisseur quand t'es blessé ?

#3 Spitoven

Spitoven

Posté 17 mai 2014 - 14:22

Tu es un malin, toi ! Je n'y avais pas pensé :)

Alors, il y a bien une fonction nommée "PC Health Percent" dans cesdits dialogues, mais ni la syntaxe PCHealthPercent ni la syntaxe GetPCHealthPercent n'est reconnue dans les scripts, pas plus que la syntaxe HealthPercent ou GetHealthPercent  :(

:vampire: TAMRIEL :vampire: AE :vampire: DAEDROTH :vampire:

Modifié par Spitoven, 17 mai 2014 - 14:23.

Image IPB

#4 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 17 mai 2014 - 19:15

Quote

if ( player->GetHealthGetRatio >= 1 )

0/0 ça fait aussi 1 pour Morrowind mais normalement ça ne doit pas poser de problème dans ce cas...

#5 Spitoven

Spitoven

Posté 17 mai 2014 - 21:09

Merci beaucoup Nerwal ! :beat:

Par contre ensuite je ne parviens pas à faire fonctionner mon script. Il est censé recalculer et actualiser la santé max du joueur quand celui-ci est indemne...et il ne le fait pas. Il ne fait rien, sans que j'aie de message d'erreur à la compilation :(

Le voilà, ce vilain :

Quote

(...)

Short Memory

if ( Player->GetHealthGetRatio >= 1.0 )
    Set Memory to ( ( ( Player->GetStrength ) / 2 ) + ( ( Player->GetEndurance ) / 2 ) + ( ( Player->GetEndurance ) * ( Player->GetLevel ) / 10 ) )
    Player->SetHealth Memory
endif

(...)

Image IPB

#6 Troglodyte

Troglodyte

Posté 17 mai 2014 - 21:48

Figures-toi qu'une fois j'avais un script qui marchait pas, et qui n'avait pas de fautes. Je l'ai copié, créé un nouveau script, et collé, et il marchait. Je dis ça, je dis rien... Mais n'empêche... :assassin:

Vivement OpemMW. :mdr:

#7 Spitoven

Spitoven

Posté 17 mai 2014 - 22:01

Merci. Du coup j'ai essayé, mais le problème ne vient pas de là :)

Bon, j'ai cherché quelle était la ligne qui faisait dérailler le script. En écrivant "Set Memory to 10" ça fonctionne, donc le problème vient de la formule :

Quote

( ( ( Player->GetStrength ) / 2 ) + ( ( Player->GetEndurance ) / 2 ) + ( ( Player->GetEndurance ) * ( Player->GetLevel ) / 10 ) )
Mais je ne vois pas ce qui le chagrine là-dedans, puisqu'il ne se plaint de rien...

EDIT : J'ai remplacé la formule par...

Quote

( ( ( Player->GetStrength ) / 2 ) + ( ( Player->GetEndurance ) * ( ( 1 / 2 ) +  ( ( Player->GetLevel ) / 10 ) ) ) )
...afin de ne pas avoir deux fois le GetEndurance sur la même ligne, mais ça n'a rien résolu.

Modifié par Spitoven, 17 mai 2014 - 22:07.

Image IPB

#8 Nerwal

Nerwal

    SAMU Kalendaarien


Posté 17 mai 2014 - 22:27

De façon générale le compilo n'aime pas du tout ce genre de formule parenthésée un peu longue. Pour éviter ces débuggages pénibles on rédige souvent différemment, en fractionnant les calculs :

Quote

short memory
short endu

(...)

set memory to ( ( Player->GetStrength ) / 2 )
set endu to ( Player->GetEndurance )
set memory to ( memory + ( endu / 2 ) )

etc. etc.


Faudra penser à vérifier si travailler seulement avec des locales short ne sème pas la pagaille dans les calculs.

#9 Spitoven

Spitoven

Posté 18 mai 2014 - 00:12

Oui, c'est la conclusion à laquelle je suis parvenu, et c'est même encore pire que ça : Cette grosse feignasse ne supporte pas deux opérations différentes sur la même ligne ! Donc entre autres la troisième ligne de ton exemple ne passerait même pas :dry:

Bref, voilà ce que ça donne :

Quote

Set Mem1 to ( Player->GetEndurance / 2 )
Set Mem2 to ( Player->GetStrength / 2 )
Set Memory to ( Player->GetEndurance / 10 )
Set Memory to ( Memory * Player->GetLevel )
Set Memory to ( Memory + Mem1 + Mem2 )

Ouf !

Merci en tout cas ! Maintenant ça marche :)

Et la séquence complète, pour les yeux :D

Quote

Begin SpitowindMain

;définition des variables locales
Short Done
Short Memory
Short Mem1
Short Mem2

(...)

;augmentation du multiplicateur de santé du joueur après la caverne de l'Incarné
if ( Done != 1 )
if ( Player->GetItemCount "moon_and_star" > 0 )
Set Done to 1
Say "blank" "Au contact d'Astre-Lune, vous sentez remonter en vous une force inconnue enfouie au plus profond de votre être. Votre capital de santé a augmenté."
endif
endif

;pas de réactualisation de la santé du joueur en début de partie pour éviter les problèmes d'affichage sur l'écran de création de personnage
if ( GetPCCell "Seyda Nihyn, entrepôt du Bureau des Taxes" == 1 )
Return
endif

;définition et actualisation du nouveau montant de santé max du joueur
if ( Done == 1 )
Set Mem1 to ( Player->GetEndurance )
Set Mem2 to ( Player->GetStrength )
else
Set Mem1 to ( Player->GetEndurance / 2 )
Set Mem2 to ( Player->GetStrength / 2 )
endif
Set Memory to ( Player->GetEndurance / 10 )
Set Memory to ( Memory * Player->GetLevel )
Set Memory to ( Memory + Mem1 + Mem2 )

;réactualisation en boucle de la santé du joueur s'il n'est pas blessé
if ( Player->GetHealthGetRatio >= 1.0 )
Player->SetHealth Memory
endif

End SpitowindMain

Modifié par Spitoven, 27 mai 2014 - 21:02.

Image IPB

#10 Spitoven

Spitoven

Posté 27 mai 2014 - 20:38

Je viens de réaliser qu'il y avait une faille dans mon script. En effet, si un joueur parvient à se donner un gros bonus provisoire en force et en endurance - et ainsi en santé - puis à maintenir sa santé un peu en-dessous du maximum après la fin de cet effet, il peut conserver son bonus de santé indéfiniment. Il faut donc transformer le dernier paragraphe.

Quote

;réactualisation en boucle de la santé du joueur s'il est trop vivace ou s'il n'est pas blessé
if ( Player->GetHealth >= Memory )
Player->SetHealth Memory
elseif ( Player->GetHealthGetRatio >= 1.0 )
Player->SetHealth Memory
endif

Image IPB




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

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