La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 15:06:08


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Cland Cain
Ecuyer
Inscrit le: 26 Fév 2005
Messages: 66
Répondre en citant
Posté le : 31/08/2006 17:45:49 Sujet du message : EffectKnockDown +Vote pour la clémence

Salut à tous et à toutes !
Encore Cland, oui, mais celà veut dire que je suis motivé (et ignorant Laughing).

Bref, je vais vous expliquer le script que j'essaie de créer.

Dans une arène, PC1 et PC2 se battent dans un duel à mort...PC1 prend le dessus et lui donne le coup final, PC2 tombe à terre
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

et c'est à ce moment que un dialogue s'ouvre pour PC3 ,PC4 et PC5, qui étaient spéctateurs.

Code :
- <PC1> a mit à terre son adversaire... voulez-vous que <PC2> soit épargné ?

-> *Accorder la clémence*
-> *A mort*


Ensuite, un script qui pourrait stocker tous les votes, le plus haut score de vote donnera le jugement, et pour n'importe quelle réponse, NPC_CRIEUR crie (dans toute la zone)
NWScript :
""
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Voilà pour les explications !

Maintenant je vous montre ce que j'ai commencé,

NWScript :
void main()
{
effect eDeath = EffectDeath(FALSE, FALSE);
object oDead = GetLastPlayerDying();
effect eKnockDown = EffectKnockdown();

if (GetTag(GetArea(oDead)) == "Arene_001")
    {
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oDead);
    ClearAllActions(TRUE);
    SurrenderToEnemies();
    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eKnockDown,oDead));
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Merci d'avance pour votre aide !!
_________________
Hé hé hé ! You you ! - Tutoriaux pour les dialogues (Bases)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 31/08/2006 21:24:52 Sujet du message :

Je pense qu'il faudrait passer en revue et compter tous les PJ de la zone ;

NWScript :

object oPC= GetFirstObjectInArea(oArea);
object oArea = GetArea(oPC);
int i = GetLocalInt(NPC_CRIEUR, "compteur_pj");

while(GetIsObjectValid(oPC))
    {
    if(GetIsPC(oPC) != OBJECT_INVALID)
      {
      i = i++;
      SetLocalInt(NPC_CRIEUR, "compteur_pj", i);// a chaque PJ on rajoute +1 au compteur
      ActionStartConversation(oPC, "dialogue_vote")
      }
    oPC = GetNextObjectInArea(oArea);
    }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ensuite dans le dialogue, si le PJ clique sur "epargner" tu lui implemente une variable "epargner",
si il clic sur "a mort", une variable "mort".

Te récuperes ensuite le nombre total de vote ;
NWScript :

int epargner;
int mort;
int total;
total = epargner+mort;
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Lorsque total == nombre de PJ, tu test la variable la plus haute ;

NWScript :

if(epargner > mort)
  {
 
  }
  else
  {
 
  }
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Bien évidement, rien n'est testé, donc c'est à toi de bidouiller, mais ça me semble être un début de solution Smile
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 01/09/2006 18:17:43 Sujet du message :

Une remarque, si tu mets le code dans le OnDying, le code ne se lancera que si ses PVs ne déscendent pas en dessous de -10, si il meurt par un coup trop puissant sa mort ne passera que par le OnDeath, et le code ne sera donc pas pris en compte (il me semble).
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cland Cain
Ecuyer
Inscrit le: 26 Fév 2005
Messages: 66
Répondre en citant
Posté le : 01/09/2006 18:31:25 Sujet du message :

A ce moment là, il faudrait rendre le Pj en difficulté invulnérable à partir de 1PdV, et le remettre vulnérable quand il quitte la zone... Déjà que j'ai beaucoup de mal pour le reste malgres tes explications, là je ne trouve pas la fonction.

Edit : j'ai trouvé ça, mais apparament c'est pour les Cutscene
NWScript :Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


NWScript :
void SetImmortal(object oCreature, int bImmortal);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

_________________
Hé hé hé ! You you ! - Tutoriaux pour les dialogues (Bases)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 01/09/2006 23:31:55 Sujet du message :

Innutil de rendre le PJ immortel, il suffit de modifier le code du OnDying et du OnDeath Razz
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Cland Cain
Ecuyer
Inscrit le: 26 Fév 2005
Messages: 66
Répondre en citant
Posté le : 02/09/2006 07:51:04 Sujet du message :

Salut !

Aidé d'un ami, j'ai réussi à presque tout finir, je vais vous poster mes scripts. (car le but n'était pas de garder tout pour moi Very Happy)

nwn_arret_combat
NWScript :
void main()
{
effect eDeath = EffectDeath(FALSE, FALSE);
object oDead = GetLastPlayerDying();
effect eKnockDown = EffectKnockdown();

if (GetTag(GetArea(oDead)) == "Arene_001")
    {
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oDead);
    ClearAllActions(TRUE);
    SurrenderToEnemies();
    DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_PERMANENT,eKnockDown,oDead));
    ExecuteScript("nwn_vote_2",GetObjectByTag("NPC_CRIEUR"));
    }


}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


nwn_crieur_hb
NWScript :
void main()
{
    ExecuteScript("nw_c2_default1", OBJECT_SELF);
    int nbVotant = GetLocalInt(OBJECT_SELF, "compteur_pj");
    int nbAmort = GetLocalInt(OBJECT_SELF, "a_mort");
    int nbEpargner = GetLocalInt(OBJECT_SELF, "epargner");

    if ((nbVotant == (nbAmort + nbEpargner))&&(nbVotant>0))
        {
        //le vote est finit.
        if (nbAmort >= nbEpargner)
            {
            //ce n'est que pour tester
            SpeakString("A mort !", TALKVOLUME_SHOUT);
            }
        else
            {
            //idem
            SpeakString("Lopette !", TALKVOLUME_SHOUT);
            }
        }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


nwn_vote_2
NWScript :
void main()
{
object oPC = GetFirstObjectInArea();
object oArea = GetArea(oPC);
object oCrieur = GetObjectByTag("NPC_CRIEUR");
int i = 0;
SetLocalInt(oCrieur, "compteur_pj", i);
SetLocalInt(oCrieur, "epargner", i);
SetLocalInt(oCrieur, "a_mort", i);

while(GetIsObjectValid(oPC))
    {
    if(GetIsPC(oPC) == TRUE)
      {
      i = i++;
      SetLocalInt(oCrieur, "compteur_pj", i);// a chaque PJ on rajoute +1 au compteur
      ActionStartConversation(oPC, "dialogue_vote");
      }
    oPC = GetNextObjectInArea(oArea);
    }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.




nwn_vote_oui
NWScript :
void main()
{
object oCrieur = GetObjectByTag("NPC_CRIEUR");
SetLocalInt(oCrieur, "epargner", GetLocalInt(oCrieur, "epargner")+1);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


nwn_vote_non
NWScript :
void main()
{
object oCrieur = GetObjectByTag("NPC_CRIEUR");
SetLocalInt(oCrieur, "a_mort", GetLocalInt(oCrieur, "a_mort")+1);
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Les problèmes qui se posent : Le deux combatants peuvent voter. Or, il ne faudrait pas...dans la logique.
Petit problème au niveau du script de mort, mais je peux règler ça.
_________________
Hé hé hé ! You you ! - Tutoriaux pour les dialogues (Bases)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Aladar
Chevalier
Inscrit le: 15 Déc 2004
Messages: 96
Localisation: Tours
Répondre en citant
Posté le : 02/09/2006 10:52:44 Sujet du message :

Je sais pas trop compter tous les PJ sauf deux en particulier...

Un début d'idée peut être ; stocker le tueur & le tué en LocalObject sur NPC_CRIEUR, au moment d'ouvrir le dialogue tu vérifies si le PJ n'est ni l'un ni l'autre, dans ce cas le dialogue s'ouvre, sinon, non.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 52.571ms