
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.







La date/heure actuelle est 11/04/2025 12:51:56
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 |
Eldorane Héros Messages: 298 Localisation: Moselle |
![]() Salut,
Je cherche un script qui rendrait la faction "Défenseur" hostile si un PJ tente de défoncer une porte. j'ai trouvé ceci sur le forum : NWScript :
void main () { object oPC = GetPCSpeaker(); object oFact = GetObjectByTag(""); int iValeur = -100; // La valeur qui faut en fonction des factions AdjustReputation(oPC, oFact, -iValeur ); } mais ça ne marche pas. (Je l'ai placé dans le ONPhysicalAttacked de la porte) _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ Dernière édition par Eldorane le 16/04/2005 02:44:42; édité 1 fois
|
Revenir en haut | ![]() ![]() ![]() |
Yeziliclick Seigneur ![]() Messages: 235 |
Je dis peut être une connerie, mais si tu mets la porte en faction défenseur, le fait de l'attaquer, c'est come attaquer un défenseur et donc ceux-ci attaqueront l'aggresseur.
|
Revenir en haut | ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
Tu utilises GetPCSpeaker() qui donne le joueur qui est en train de parler, ça marche pour un dialogue avec PNJ mais pas pour une attaque de porte.
Utilises plutôt GetLastAttacker() Le soucis c'est dans ce que tu dis, si on défonse la porte avec de la magie, rien ne se déclenchera car le OnPhysicalAttacked ne sert que pour les dégats physiques. Le mieux à faire c'est GetLastDamager() mais de mettre le script dans le OnDammaged. |
Revenir en haut | ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Citation : Je dis peut être une connerie, mais si tu mets la porte en faction défenseur, le fait de l'attaquer, c'est come attaquer un défenseur et donc ceux-ci attaqueront l'aggresseur. l'idée est excellente ! j'y avais pas pensé ! Mais ça ne marche pas...
Citation : Le mieux à faire c'est GetLastDamager() mais de mettre le script dans le OnDammaged. ok, j'ai testé ceci :
NWScript :
void main () { object oPC = GetLastDamager(); object oFact = GetObjectByTag("Defender"); int iValeur = -100; // La valeur qui faut en fonction des factions AdjustReputation(oPC, oFact, -100); } mais ça non plus ça marche pas !! Alros j'ai trouvé cette instruction : 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 ça ça marche ! Quelle est la différence avec la fonction "AdjustReputation" ? Sinon, pour optimiser un peu le script, on pourrait pas faire en sorte de rendre uniquement hostile le PNJ le plus proche ? En effet rendre une faction hostile n'est pas très réaliste, surtout s'il n'y a personne qui voit que le PJ a défoncé la porte. Il existe la fonction NWScript : , mais je ne sais pas comment l'utiliser !GetNearestCreature _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
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. C'est cette ligne qui ne fonctionne pas car elle cherche quelque chose avec le tag Defender qui appartient à la faction que tu désires changer. Ensuite pour la fonction SetStandardFactionReputation le nombre donné doit être compris entre 0 et 100. Et ce qu'elle fait, elle prend la faction entière du PJ pour la mettre en hostile (si tu met 0) avec la faction défenseur, donc tous les PJ de la faction de ton PJ vont se faire attaquer. |
Revenir en haut | ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
je vois...
Bon j'ai tenté autre chose qui ne marche d'ailleurs pas non plus... NWScript :
void main() { object oPC = GetLastDamager(); object oPNJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC); AdjustReputation(oPC, oPNJ, 50-GetFactionAverageReputation(oPNJ, oPC)); } HELP !!!! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
finipe Grand Sage du Conseil ![]() Messages: 519 Localisation: Nantes |
Sur le onDamaged de ta porte, mets le script suivant :
NWScript :
void main() { object oPC = GetLastDamager(); SetStandardFactionReputation(STANDARD_FACTION_DEFENDER, 10, oPC); } J'ai pas testé, mais ça devrait fonctionner. _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | ![]() ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
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. Tu met le include et ensuite tu remplaces ta modif de faction par cette ligne là qui met directement le PNJ hostile à ton PJ et ensuite l'attaque. Normalement ça marche (Sauf si tu préfères mettre toute la faction hostile avec le truc de Finipe) |
Revenir en haut | ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Voici le résultat :
NWScript :
#include "nw_i0_plot" void main() { object oPC = GetLastDamager(); object oPNJ = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC); AssignCommand(oPNJ,SetIsEnemy(oPC)); } le problème est que même si je défonce une porte sur une zone où il n'y a personne, certains PNJ d'autres zones deviennent hostiles.... ![]() L'idée de Finipe est celle que je cherchais au départ, mais entre temps j'ai eu de nouveaux souhaits ![]() _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Un SetIsTemporaryEnemy avec les pnj proche de la faction defender devrait suffir.
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Rendre le PNJ hostile provisoirement ? pourquoi pas...
je vais tester en jeu pour voir ce que ça donne merci !!! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Non c'est infini sauf si tu met le troisième argument a TRUE (enfin je crois ^^), Mais il me semble que cette fonction vise un seul PNJ (il me semblait aussi pour SetIsEnemy mais bon), ensuite il te reste plus qu'a faire un SHAPE_SPHERE autour de la porte quand tu tape, tu test les tags des pnjs, et si c'est les bons tu rend hostile...
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
SetIsEnemy vise un seul PNJ mais vu le code écrit comme ça, il va prendre le premier PNJ qui lui passe sous la main
![]() Faut quand même rajouter un test de faction et de map (voir de distance ce serait plus réaliste) |
Revenir en haut | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Stan a écrit : Faut quand même rajouter un test de faction et de map (voir de distance ce serait plus réaliste) C'est ce que je disait, un shape_sphere..._________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
finipe Grand Sage du Conseil ![]() Messages: 519 Localisation: Nantes |
Toujours sur le onDamaged de la porte :
NWScript :
void main() { int nDistance = 30.0; object oPC = GetLastDamager(); object oEnnemi = GetFirstObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); while(GetIsObjectValid(oEnnemi)) { SetIsTemporaryEnemy(oPC, oEnnemi); AssignCommand(oEnnemi, ActionAttack(oPC)); oEnnemi = GetNextObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); } } J'ai pas testé ![]() _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | ![]() ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
ahhh !
![]() heu... ya juste un bug sur la ligne : 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. il me dit : (je cite) : ERREUR : MISMATCHED TYPES Citation : Faut quand même rajouter un test de faction et de map pourrais-t'on justement faire ce test : est il possible d'exclure la faction "TOTAL_NEUTRE" qui comprend les animaux dans mon module. (je sais, chuis chiante....)_________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
Oui l'erreur est dans la déclaration ce n'est pas un int mais un float qu'il faut déclarer.
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 main() { float nDistance = 30.0; object oPC = GetLastDamager(); object oEnnemi = GetFirstObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); while(oEnnemi!= OBJECT_INVALID) { if (GetTag(oEnnemi)=="tag_des_gardes"){//mettre le tag de tes gardes SetIsTemporaryEnemy(oPC, oEnnemi); AssignCommand(oEnnemi,SpeakString("Un individu force la porte !!")); AssignCommand(oEnnemi, ActionAttack(oPC)); }; oEnnemi = GetNextObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); } } Là il n'y a que les gardes qui devraient réagir. Edit : corrigé suite au conseil d'ivellios Dernière édition par Stan le 13/04/2005 15:28:31; édité 1 fois
|
Revenir en haut | ![]() ![]() ![]() |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
GetIsObjectValid c'est bien mais sa fait appel a une fonction, sur de longue boucle style retourner tout les placeable d'une map ou autre un != OBJECT_INVALID serait preferable (bon c'est vrai moi aussi je le met pas partout ^^)
_________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | ![]() ![]() ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Citation : GetIsObjectValid c'est bien mais sa fait appel a une fonction, sur de longue boucle style retourner tout les placeable d'une map ou autre un != OBJECT_INVALID serait preferable (bon c'est vrai moi aussi je le met pas partout ^^) entièrement d'accord !! ! même si j'y comprends rien du tout ![]() Par contre, Stan, non seulement mes gardes ont tous un tag différent (obligé pour les WP, et en plus j'utilise les NPC_Activities) mais j'aimerai aussi que ce script me serve par la suite pour d'autres villages où les gardes seront d'une autre faction. Ne peut-on pas juste éliminer une seule faction, genre If faction <> "TOTAL_NEUTRE" _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
Stan Grand Chevalier Messages: 126 |
ça aucune idée, personnellement je ne sais pas comment récuperer la faction d'une créature, j'dois être trop bête pour trouver la fonction.
Si personne ne te propose quoi que ce soit, il reste la solution de tester le début du tag.Je suppose que tes gardes peuvent bien avoir un début de tag identiques (garde_ville_01, garde_ville_02, garde_desert_01 ...) |
Revenir en haut | ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Oui, effectivement j'avais prévue dela. Mais le problème est que si le PNJ force une porte en présence par exemple d'un membre de la populace, il ne se passera rien.
De même, si le PNJ force une porte en présence d'une vache, elle va l'attaquer ! _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
kiky.le.magnifique Homme très gay ![]() Messages: 907 Localisation: Camping de la nation martienne... |
Et ben si les gardes ont des factions standards,
(STANDARD_FACTION_COMMONER, STANDARD_FACTION_DEFENDER, STANDARD_FACTION_HOSTILE et STANDARD_FACTION_MERCHANT) alors la fonction : int GetStandardFactionReputation(int nStandardFaction, object oCreature=OBJECT_SELF) devrait vous servir... Si c'est des factions persos, ben faut voir comment elles sont mises en place! La plupart du temps, c'est par une variable assignée au garde, si c'est la cas, alors : string GetLocalString(object oObject, string sVarName) est tout indiqué... Bonne chance! ![]() _________________ http://perso.wanadoo.fr/kikitor | Deviant Art | www.VistaEntraide.com | CCLLSELFV! | D-lire_K | Viendez rêver au Pays des fées... | Ne taquinez pas l'admin! |
Revenir en haut | ![]() ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Quelqu'un pourrait me traduire tout ça en script
![]() _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |
finipe Grand Sage du Conseil ![]() Messages: 519 Localisation: Nantes |
Il n'y a pas à ma connaissance de moyen d'obtenir la faction standard d'un PNJ. La fonction GetStandardFactionReputation renvoie un nombre entier entre 0 et 100, pas la faction de la créature. A mon avis, le plus simple sera de travailler à partir des tags des PNJ, quitte à manipuler un peu la chaîne de caractère du tag pour en extraire un morceau représentatif (à coup de GetSubString par exemple).
D'où l'intérêt d'adopter des conventions précises de tag et de resref pour ses pnj lorsque l'on crée un module ![]() _________________ » Le Tref & l'Aucube : Histoire, misanthropie & zoologie léonine » 1626, le Gant & l'Epée : intrigues & duels sous le règne de Louis XIII |
Revenir en haut | ![]() ![]() ![]() ![]() |
Eldorane Héros Messages: 298 Localisation: Moselle |
Citation : D'où l'intérêt d'adopter des conventions précises de tag et de resref pour ses pnj lorsque l'on crée un module c'est bien ce que j'ai fais depuis le début ! Mais je crois que je vais m'en tenir à la version qui active l'hostilité sur un rayon de 30m :
![]() NWScript :
void main() { int nDistance = 30.0; object oPC = GetLastDamager(); object oEnnemi = GetFirstObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); while(GetIsObjectValid(oEnnemi)) { SetIsTemporaryEnemy(oPC, oEnnemi); AssignCommand(oEnnemi, ActionAttack(oPC)); oEnnemi = GetNextObjectInShape(SHAPE_SPHERE, nDistance, GetLocation(oPC)); } } Mais je regrette toujours le fait que les animaux seront également affectés ! Les joueurs vont m'en vouloir s'ils se font attaquer par un ecureuil ou une poule ! Si je rajoutais aux tags de mes animaux un "NEUTRE_xxxx", pourais t'on les exclure de cette manière ? _________________ Notre little site : Les Héros de la Nuit qui contient le lien vers la page de présentation de notre module, en cours de fabrication ! _________________ |
Revenir en haut | ![]() ![]() ![]() |


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