FloatingTextStringOnCreature ?

Répondre
Partager Rechercher
Bonjour à tous,

J'ai un petit problème ...qui ne doit pas être bien compliqué à résoudre, mais à mon avis je doit me borner à chercher du mauvais côté.

Je pose le contexte: j'ai un prêtre, assis sur un banc (ça c'est ok ). Lorsque l'on essaye d'engager la conversation un message d'ambiance doit apparaître pour signaler que le pretre ne peut vous répondre.
J'ai donc supprimé le code du OnConversation du prêtre pour y mettre celui-ci

Code PHP:

void main()
{
    
object oPC GetPCSpeaker();
    if(
GetIsPC(oPC))
        
FloatingTextStringOnCreature("Cette prêtresse semble absorbée dans sa méditation... elle ne vous porte pas la moindre attention."oPC);

Mais ça marche pôooo.

Merci d'avance
__________________
MadCat
Cela se compile c'est ca???

Moi je sais quand je vois que cela ne marche pas et que cela se compile bien pourtant, je fais plein de petits tests.


Du style, Je vire le GetPCSpeaker, et je tente avec un GetLastSpeaker() et je regarde si ca passe.
Sinon je mets la condition en commentaire et je reteste aussi et ainsi de suite ...
Sinon tu peux essayer avec un autre trigger etc...

J'appelles cela des tests standards

Donc je préviens que je ne donne pas de solution, mais je te propose plein de tests que tu pourrais faire pour te simplifier la vie!!
des tests...
des tests ...mon pauvre...je fais que ça
J'ai plutôt le soucis du travail bien fait et je passe 3/4 du temps à tester !
Si c'est pas un module qui tourne rond là, je me coupe un bras

Autrement je vais essayer avec GetLastSpeaker() ...pas 'core essayé ça.

Merci pour tes pistes RAT
Bonjour,

Je crois que la fonction "FloatingTextStringOnCreature()" marche que sur les PJ, en effet j'ai un sort qui est cencé marquer quelque chose au dessus de la tête de la cible quand je le lance marche cela marche pas sur les créatures, mais ca marche sur les PJ.
Effectivement...
Effectivement tu ne peux à priori pas affecter le messge sur un pnj.

Mais mon problème ne se trouvait pas là puisque j'essayais bien d'affecter le message au PC.
Finallement, comme RAT le suggerait, il s'agissait d'utiliser GetLastSpeaker() à la place de GetPCSpeaker() ... va comprendre Charles
__________________
MadCat
Re: FloatingTextStringOnCreature ?
GetPCSpeaker n'est défini que dans les conversations pas dans le OnDialog.
Si je puis me permettre tu devrais changer ton code ainsi:

Code PHP:

void main()
{
    
    
int nMatch GetListenPatternNumber();
    
object oShouter GetLastSpeaker();
    switch(
nMatch)
    {
         case -
1:
              if(
GetCommandable(OBJECT_SELF)) {
                   
FloatingTextStringOnCreature("Cette prêtresse semble absorbée dans sa méditation... elle ne vous porte pas la moindre attention."oShouter);
             } 
             break;
     } 
Edit: j'avais oublié ton getIsPC, donc à moins que tu lui donne des patterns de compagnons, tu es tranquille . Ceci dit sur le principe je maintiens.
parce que pour l'instant tu interceptes toutes les patterns qu'il pourrait reconnaître, y compris celles qui ne sont absolument pas sensées lancer une conversation. Au mieux ça rend ton code non extensible, et en décalage avec ce qu'est le OnDialog event. Au pire, si un combat se déclenche à côté du PNJ, il se peut que se message apparaisse périodiquement au-dessus de sa tête (cela dépend de son OnSpawn, a priori non , mais tu ne peux pas lui faire comprendre les cris de combat non plus).

EDIT: tant qu'à faire j'ai ajouté le GetCommandable, le GetIsPC n'est pas vraiment nécessaire.
Ya une variable bolèenne dans la fonction FloatingMachin.
Par défaut, cette variable est en TRUE, c'est peut-être pour cette raison qu'on ne peux voir le message...
Peut-être que tu as déjà essayé, même surement mais dans le cas contraire ça pourrait être intéressant
Citation :
// - bBroadcastToFaction: If this is TRUE then only creatures in the same faction
// as oCreatureToFloatAbove
// will see the floaty text, and only if they are within range (30 metres).
compliqué...
C'est un peu compliqué ton code ...

C'est pas plus simple que cela:

Code PHP:

void main()
{
    
object oPC GetLastSpeaker(); //et non GetPCSpeaker()
    
if(GetIsPC(oPC))
        
FloatingTextStringOnCreature("Cette prêtresse semble absorbée dans sa méditation... elle ne vous porte pas la moindre attention."oPC);

et ça marche très bien
__________________
MadCat
De toute façon, le plus important, ce n'est pas la complexité du code, ou l'optimisation du code. Le plus important, c'est que la personne qui met le script et qui va devoir bosser avec ce script, comprenne le script .


Donc je ne peux que te conseiller de prendre celui que tu comprends le mieux)
Citation :
Donc je ne peux que te conseiller de prendre celui que tu comprends le mieux)
C'est pas faux, tu fais comme tu veux MadCat.

Ceci dit, quand tu cliques sur un PNJ, la valeur de GetListenPatternNumber est -1.

Ton script est à peu près equivalent à mettre:
SetLocalInt(OBJECT_SELF,"int",1);
dans tous les scripts affectés à un PNJ, alors que tu veux juste que ce "int" soit initialisé On Spawn.

Bien sûr ça va marcher, mais c'est pas vraiment utile, et ça peut avoir des effets secondaires. Le jour ou tu décides de faire passer la valeur de "int" à 2 au cours d'une conversation avec un PJ tu as un bug parce que le OnHeartbeat te la fait repasser à 1.

Le code que tu écris ne devrais jamais faire ni plus ni moins que ce qu'il est sensé faire, pour une raison au moins: sans cela, il n'est pas réutilisable. Ce genre de raisonnement "C'est pas grave, je le laisse, dans ce contexte ça marche." c'est le meilleur moyen de se retrouver un jour avec un bug absolument incompréhensible.

Tu veux que je te donne un exemple?
décommente:
//SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET);
dans le OnSpawn des prêtresses (bon tu as foutu en l'air une partie de L'IA de combat en supprimant le script Bio de toute façon) , maintenant attaque un de ses alliés , le message va apparaître au dessus de sa tête.

Enfin ce que j'en dis hein...
J'ai du mal
Je t'avoue que j'ai eu beaucoup de mal à te suivre...

je crois que j'ai compris finalement la finalité de cette apparente complexification du code
sauf un truc peut-être : pourquoi faire un GetCommandable() ici ?

Merci de ton aide Pom Pom
__________________
MadCat
Je l'ai mis parce que Bioware le met.. pas d'autre raison.
C'est toujours le même principe, ne change que ce que tu as besoin de changer dans un script, comme ça, tu sauras toujours à quoi t'attendre. Empêcher qu'un joueur commence une conversation avec un PNJ à qui tu as mis SetCommandable(FALSE), ça paraît logique, donc garde le comme comportement par défaut, même s'il te semble pour l'instant que jamais tu ne feras de SetCommandable sur ce PNJ.
Répondre

Connectés sur ce fil

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