La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 01/11/2024 01:01:23
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Cland Cain Ecuyer Messages: 66 |
Salut à tous et à toutes !
Encore Cland, oui, mais celà veut dire que je suis motivé (et ignorant ). 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 :
"" 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)); } } Merci d'avance pour votre aide !! _________________ Hé hé hé ! You you ! - Tutoriaux pour les dialogues (Bases) |
Revenir en haut | |
Aladar Chevalier Messages: 96 Localisation: Tours |
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); } 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 :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 { } Bien évidement, rien n'est testé, donc c'est à toi de bidouiller, mais ça me semble être un début de solution |
Revenir en haut | |
Aladar Chevalier Messages: 96 Localisation: Tours |
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 | |
Cland Cain Ecuyer Messages: 66 |
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 : 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 | |
Aladar Chevalier Messages: 96 Localisation: Tours |
Innutil de rendre le PJ immortel, il suffit de modifier le code du OnDying et du OnDeath
|
Revenir en haut | |
Cland Cain Ecuyer Messages: 66 |
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 ) 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")); } } 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); } } } 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); } } nwn_vote_oui NWScript :
void main() { object oCrieur = GetObjectByTag("NPC_CRIEUR"); SetLocalInt(oCrieur, "epargner", GetLocalInt(oCrieur, "epargner")+1); } nwn_vote_non NWScript :
void main() { object oCrieur = GetObjectByTag("NPC_CRIEUR"); SetLocalInt(oCrieur, "a_mort", GetLocalInt(oCrieur, "a_mort")+1); } 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 | |
Aladar Chevalier Messages: 96 Localisation: Tours |
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 | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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