PNJ arrete combat et discute

Répondre
Partager Rechercher
Re tout le monde :-)

J'ai vu quelque part un script permettant a un PNJ d'arréter un combat et de commencer une conversation....

Auriez vous l'obligeance de m'aiguiller si ça vous dit quelque chose?

Merci d'avance :-)
Une solution consiste à rendre un PNJ immortel dans l'éditeur (immortel et non invulnérable). Ainsi, ce PNJ ne descendra jamais en dessous de 1 point de vie.

Pour qu'il se rende, juste ces quelques fonctions suffiront dans le script lié à l'évènement "OnDamaged" :
Code PHP:

void main()
{
    
object oPC GetLastDamager();
    
    if(
GetCurrentHitPoints()==&& GetLocalInt(OBJECT_SELF,"SE_REND")==FALSE)
    {
        
ClearAllActions(TRUE);
        
SurrenderToEnemies();
        
SetLocalInt(OBJECT_SELF,"SE_REND",1);

        
// J'ai rajouté un petit délai pour faire bien.
        
DelayCommand(1.0,AssignCommnd(oPC,ActionStartConversation(OBJECT_SELF,"ton_dialogue")));
    }

Concernant ce script, le pnj "se rends" mais le pj lui il continue a attaquer?

En faite j'ai fait 2 tests et dans le 1er, le dialogue s'est déclenché mais le pj a continué à attaquer, et dans le 2nd test, le pnj s'est arrêté et j'ai lu comme quoi la conversation ne pouvait être déclenché car la personne était occupée.

Donc faut-il rajouter une fonction pour faire cesser définitivement le combat (genre ajuster les réputation -> oui, le pnj est en hostile au départ pour qu'il attaque).
ce script fonctionne chez moi (toujours OnDamaged):
Code PHP:

const float RADIUS 10.0;//Rayon à l'interieur duquel les autres créatures vont également se rendre
const string SURRENDER_SPEAK "Je vous en supplie, arrêtez ! je me rends !";//Phrase dite quand la créature frappée se rendra

void main()
{
    
object oCreature OBJECT_SELF;//Créature qui s'est fait taper
    
object oPC GetLastDamager();//Celui qui a tapé (en général un joueur)
    
    
if(GetCurrentHitPoints(oCreature)==&& !GetLocalInt(oCreature"bSurrender"))
    {
    
        
//==> Passage en ami de toutes les créatures de la même faction que oCreature
        
int n=1;
        
//Pour chaque créature amie (de oCreature) autour qui ne soit pas un joueur
        
object oNearCreature GetNearestCreature(CREATURE_TYPE_REPUTATIONREPUTATION_TYPE_FRIENDoCreaturenCREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_NOT_PC);
        while(
GetIsObjectValid(oNearCreature) && GetDistanceBetween(oCreatureoNearCreature)<=RADIUS)
        {
            
//On stoppe toute les actions et change la faction
            
SetLocalInt(oNearCreature"bSurrender"TRUE);
            
AssignCutsceneActionToObject(oNearCreatureClearAllActions());
            
ChangeToStandardFaction(oNearCreatureSTANDARD_FACTION_COMMONER);
        
            
n++;
            
oNearCreature GetNearestCreature(CREATURE_TYPE_REPUTATIONREPUTATION_TYPE_FRIENDoCreaturenCREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_NOT_PC);
        }
        
//<==
        
        
        //On fait de même pour oCreature
        
SetLocalInt(oCreature"bSurrender"TRUE);
        
AssignCutsceneActionToObject(oCreatureClearAllActions());
        
ChangeToStandardFaction(oCreatureSTANDARD_FACTION_COMMONER);
        
SpeakString(SURRENDER_SPEAK);
        
        
//On stoppe également celui qui vient de frapper (pour pas qu'il continue)
        
AssignCutsceneActionToObject(oPCClearAllActions());
        
DelayCommand(3.0,AssignCommand(oPC,ActionStartConversation(oCreature)));
    }

note : le dialogue doit être placé dans les propriétés de la créature
Répondre

Connectés sur ce fil

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