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







La date/heure actuelle est 02/05/2025 05:35:11
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 |
karenax Novice Messages: 10 |
bonjour
j'ai une zone sur un module que j'aimerai transformer en champ de battaille. pour cela je téléporte les joueurs a partir d'un dialogue dans deux camps différents. Chaque personne dans un camp possède un item unique pour l'identifier. J'aimerai que sur le onenter de la zone les personnes qui possèdent l'item A voient les personnes qui possèdent l'item B en ennemie et viss-versa. je ne sais pas si il éxiste une fonction pour cela ? merci en gros ca donnerai ca NWScript :
void main() { object oEnter = GetEnteringObject(); if { oEnter possede item A} alor mettre les pj qui ont item B ennemie if { oEnter possede item B} alor mettre les pj qui ont item A ennemie } si quelqu'un peut m'aider ![]() _________________ je jeu c'est fait pour jouer Dernière édition par karenax le 17/11/2005 19:26:38; édité 1 fois
|
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Si c'est à partir d'un dialogue, je te conseille d'utiliser une variable locale plutôt qu'un item, c'est moins long à chercher (pour trouver un item tu dois fouiller tout l'inventaire, et le script va se lancer à chaque fois qu'un joueur rentre dans la zone, donc beaucoup de travail).
Je te donne un script qui considère que tu as donné l'item ( avec tag "xxitemA" ou "xxitemB"), je place la variable dans ce script, si tu veux changer de méthode, place directement la variable depuis le dialogue. NWScript :
void main() { object oPC = GetEnteringObject(); object oItem = GetFirstItemInInventory(oPC); while (GetIsObjectValid(oItem)) { string sTag = GetStringLeft(GetTag(oItem),6); if (sTag == "xxitem") //attention a n'utiliser de tag commencant par "xxitem" que pour ces objets { string sFaction = GetStringRight(sTag,1); SetLocalString(oPC,"GROUPE","FACTION"+sFaction); break; } oItem = GetNextItemInInventory(oPC); } int iCount = 1; object oJoueur = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,oPC,iCount); string sPlayerFaction = GetLocalString(oPC,"GROUPE"); while (GetIsObjectValid(oJoueur)) { string sTestFaction = GetLocalString(oJoueur,"GROUPE"); if (sTestFaction != sPlayerFaction) { SetPCDislike(oPC,oJoueur); } else SetPCLike(oJoueur,oPC); iCount++; oJoueur = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,oPC,iCount); } } EDIT : Script corrigé. Au moins il compile maintenant, est-ce qu'il marche ? C'est une autre histoire ![]() Dernière édition par Sith Vicious le 16/11/2005 20:10:09; édité 2 fois
|
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
merci beaucoup je vais tester la chose
le script ne se comile pas ![]() _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
J'ai quelque chose de bien plus simple lol!!
Dans le OnAcquire de ton module tu met une variable : SetLocalInt(oPC, "Team", 1); => le Bien (exemple) SetLocalInt(oPC, "Team", 2): => Le Mal (exemple aussi) dans le onenter de ta zone tu met sa : NWScript : void main() { object oPC = GetEnteringObject(); object oPCFirst = GetFirstPC(); int iTeamPC = GetLocalInt(oPC, "Team"); if(iTeamPC != GetLocalInt(oPCFirst, "Team")) { while(GetIsObjectValid(oPCFirst)) { int iTeamEnemi = GetLocalInt(oPCFirst, "Team"); if(iTeamPC != iTeamEnemi) { SetPCDislike(oPC, oEnemi); } else if(iTeamPC == iTeamEnemi) { SetPCLike(oPC, oPCFirst); } oEnemi = GetNextPC(); } } } _________________ [http] |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
Seul problème de ton script : avec GetFirstPC() // GetNextPC(), tu vas prendre tous les joueurs du serveur, et il veut un script valable seulement dans la zone.
Sinon ouais c'est pas idiot le AcquireItem, j'avions pas pensé. Enfin, placer les variables directement dans le dialogue c'est encore plus simple. |
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
NWScript :
void main() { object oPC = GetEnteringObject(); object oPCFirst = GetFirstPC(); int iTeamPC = GetLocalInt(oPC, "Team"); if(iTeamPC != GetLocalInt(oPCFirst, "Team")) { while(GetIsObjectValid(oPCFirst)) { if(GetArea(oPCFirst) == GetObjectByTag("Map")) { int iTeamEnemi = GetLocalInt(oPCFirst, "Team"); if(iTeamPC != iTeamEnemi) { SetPCDislike(oPC, oEnemi); } else if(iTeamPC == iTeamEnemi) { SetPCLike(oPC, oPCFirst); } oPCFirst = GetNextPC(); } } } } Rectification du script : J'ai mi oEnemi alors que c'est oPCFirst ... et voila pour que dans la zone _________________ [http] |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
ou tu défini si un joueur rentre dans l'équipe 1 ou 2 la ?
noob powa ![]() _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Je et les dit, tu fait un script dans le OnAcquire tu met une local si le joueur obtient l'objet par exemple :
Si monsieur A obtient l'objet tagguer : "Camps1", tu addjuste la varriable a 1, donc SetLocalInt(GetAcquireItemBy(), "Team", 1); Hehe tu croyais tout de meme pas que j'allais tout te faire ? ![]() _________________ [http] |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
j'ai capté, c'est beaucoup plus simple que ce que j'avais bricoler en fait ^^
je vais le tester _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
quand un joueur entre dans la zone j'ai un beau message d'erreur.
erreur to many instruction, le message en jaune classique ![]() j'ai mit ce script pour définir les variables sur le dialogue qui sert a téléporter dans le champ de battaille : NWScript :
void main () { object oTarget = GetWaypointByTag ("entrel"); SetLocalInt(GetPCSpeaker(), "Team", 1); AssignCommand( GetPCSpeaker(), JumpToObject( oTarget)); } NWScript : }
//teleporte camp mauvais void main () { object oTarget = GetWaypointByTag ("entre0"); SetLocalInt(GetPCSpeaker(), "Team", 2); AssignCommand( GetPCSpeaker(), JumpToObject( oTarget)); } script sur le onenter de la zone NWScript :
void main() { object oPC = GetEnteringObject(); object oPCFirst = GetFirstPC(); int iTeamPC = GetLocalInt(oPC, "Team"); if(iTeamPC != GetLocalInt(oPCFirst, "Team")) { while(GetIsObjectValid(oPCFirst)) { if(GetArea(oPCFirst) == GetObjectByTag("ChampdeBataille")) { int iTeamEnemi = GetLocalInt(oPCFirst, "Team"); if(iTeamPC != iTeamEnemi) { SetPCDislike(oPC, oPCFirst); } else if(iTeamPC == iTeamEnemi) { SetPCLike(oPC, oPCFirst); } oPCFirst = GetNextPC(); } } } } ou est l'érreur ? je vous précise que dans les tests, je me suis apercut que quand on joueur est dans un camp sur le champ de battaille on ne peut plus accèder a l'autre camp ( la téléportation ne marche plus) _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
descends la ligne oPCFirst = GetNextPC(); de 2 accolades...
et j'ai pas compris sur le joueur qui peut pas acceder à l'autre camp, tu peux préciser ? |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
Citation : descends la ligne oPCFirst = GetNextPC(); de 2 accolades... je ne voit pas ce que tu veut dire.
Citation : et j'ai pas compris sur le joueur qui peut pas acceder à l'autre camp, tu peux préciser ?
j'ai fait un test avec deux joueurs online. quand le joueur A entre dans le camp Bon ca bloque l'accès au joueur B au camp Mauvais, Le joueur B ne peut plus accèder qu'au camp A (bizard non ? ![]() _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
Sith Vicious Grand Sage du Conseil ![]() Messages: 693 |
karenax a écrit : je ne voit pas ce que tu veut dire. Ben tant mieux j'avais mal compté, c'est qu'une seule.
le script qui doit marcher : NWScript :
void main() { object oPC = GetEnteringObject(); object oPCFirst = GetFirstPC(); int iTeamPC = GetLocalInt(oPC, "Team"); if(iTeamPC != GetLocalInt(oPCFirst, "Team")) { while(GetIsObjectValid(oPCFirst)) { if(GetArea(oPCFirst) == GetObjectByTag("ChampdeBataille")) { int iTeamEnemi = GetLocalInt(oPCFirst, "Team"); if(iTeamPC != iTeamEnemi) { SetPCDislike(oPC, oPCFirst); } else if(iTeamPC == iTeamEnemi) { SetPCLike(oPC, oPCFirst); } } oPCFirst = GetNextPC(); } } } karenax a écrit : j'ai fait un test avec deux joueurs online. quand le joueur A entre dans le camp Bon ca bloque l'accès au joueur B au camp Mauvais, Le joueur B ne peut plus accèder qu'au camp A (bizard non ? oui bizarre.. Ca doit venir de ton dialogue non ? Sinon je vois pas![]() |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
je relance un test, j'ai corrigé le probleme de la téléportation ( un autre script qui merdouillai ^^ )
merci pour ton aide ![]() _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |
Black Knight Grand Maître Chanteur du Conseil ![]() Messages: 1031 Localisation: Fin fond du trou du cul du monde |
Citation : quand un joueur entre dans la zone j'ai un beau message d'erreur.
Deja 1 quand on met des script on ne fait pas l'erreur de mettre une parenthese dans le vide (Rouge)
erreur to many instruction, le message en jaune classique j'ai mit ce script pour définir les variables sur le dialogue qui sert a téléporter dans le champ de battaille : NWScript :
void main () { object oTarget = GetWaypointByTag ("entrel"); SetLocalInt(GetPCSpeaker(), "Team", 1); AssignCommand( GetPCSpeaker(), JumpToObject( oTarget)); } NWScript :
//teleporte camp mauvais void main () { object oTarget = GetWaypointByTag ("entre0"); SetLocalInt(GetPCSpeaker(), "Team", 2); AssignCommand( GetPCSpeaker(), JumpToObject( oTarget)); } } 2 Regarde bien bien t'es script, regarde tu met sa : GetWAYPOINTByTag... et en teleportation tu met JumpToObject.. ca c'est bizar... Remplace JumpToObject() par ActionJumpToLocation(GetLocation(oTarget)); la tu teleportera. (et c de la que vien ton message d'erreur) Donc change pas mon script, il est bien c'est les tients qui bug... donc voila les script : Pour le bien : NWScript :
void main () { object oTarget = GetWaypointByTag ("entrel"); SetLocalInt(GetPCSpeaker(), "Team", 1); AssignCommand( GetPCSpeaker(), ActionJumpToLocation(GetLocation( oTarget))); } (pareil pour le mal) et oui je vien de voir dans mon script que j'ai zapper une { donc merci de t'en appercevoir ![]() _________________ [http] |
Revenir en haut | ![]() ![]() ![]() |
karenax Novice Messages: 10 |
tout marche bien maintenant.
pour les scripts de téléportations ils marchent trés bien comme ils sont ![]() merci pour ton aide ![]() _________________ je jeu c'est fait pour jouer |
Revenir en haut | ![]() ![]() ![]() |


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