La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 02/05/2025 05:28:11


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 16/11/2005 17:18:59 Sujet du message : [résolu]passer deux groupes de joueurs ennemis

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

}
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.


si quelqu'un peut m'aider Very Happy
_________________
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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 16/11/2005 18:08:49 Sujet du message :

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);
}

}

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.




EDIT : Script corrigé. Au moins il compile maintenant, est-ce qu'il marche ? C'est une autre histoire Smile
Dernière édition par Sith Vicious le 16/11/2005 20:10:09; édité 2 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 16/11/2005 18:44:31 Sujet du message :

merci beaucoup je vais tester la chose

le script ne se comile pas Sad
_________________
je jeu c'est fait pour jouer
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 16/11/2005 19:35:54 Sujet du message :

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();
}
}
}
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.

_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 16/11/2005 20:16:27 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 16/11/2005 20:21:52 Sujet du message :

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();
}
}
}
}
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.


Rectification du script : J'ai mi oEnemi alors que c'est oPCFirst ... et voila pour que dans la zone
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 16/11/2005 20:26:34 Sujet du message :

ou tu défini si un joueur rentre dans l'équipe 1 ou 2 la ?

noob powa Smile
_________________
je jeu c'est fait pour jouer
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 16/11/2005 20:59:14 Sujet du message :

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 ? Embarassed
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 16/11/2005 21:31:08 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 17/11/2005 17:00:04 Sujet du message :

quand un joueur entre dans la zone j'ai un beau message d'erreur.
erreur to many instruction, le message en jaune classique Sad

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));
}
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 :

//teleporte camp mauvais
void main ()
{

object oTarget = GetWaypointByTag ("entre0");
SetLocalInt(GetPCSpeaker(), "Team", 2);
AssignCommand( GetPCSpeaker(), JumpToObject( oTarget));
}

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.
}

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();
}
}
}
}
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.


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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 17/11/2005 17:20:22 Sujet du message :

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 Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 17/11/2005 17:31:56 Sujet du message :


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 ? Razz )
_________________
je jeu c'est fait pour jouer
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 17/11/2005 17:40:49 Sujet du message :


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();
    }
  }
}
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.




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 ? Razz )
oui bizarre.. Ca doit venir de ton dialogue non ? Sinon je vois pas
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 17/11/2005 17:53:54 Sujet du message :

je relance un test, j'ai corrigé le probleme de la téléportation ( un autre script qui merdouillai ^^ )

merci pour ton aide Wink
_________________
je jeu c'est fait pour jouer
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 17/11/2005 17:58:05 Sujet du message :


Citation :
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));
}
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 :
//teleporte camp mauvais
void main ()
{

object oTarget = GetWaypointByTag ("entre0");
SetLocalInt(GetPCSpeaker(), "Team", 2);
AssignCommand( GetPCSpeaker(), JumpToObject( oTarget));
}
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.


}
Deja 1 quand on met des script on ne fait pas l'erreur de mettre une parenthese dans le vide (Rouge)
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 :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.


(pareil pour le mal) et oui je vien de voir dans mon script que j'ai zapper une { donc merci de t'en appercevoir Very Happy
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
karenax
Novice
Inscrit le: 16 Nov 2005
Messages: 10
Répondre en citant
Posté le : 17/11/2005 19:18:50 Sujet du message :

tout marche bien maintenant.

pour les scripts de téléportations ils marchent trés bien comme ils sont Razz

merci pour ton aide Very Happy
_________________
je jeu c'est fait pour jouer
 
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 63.706ms