Plusieur départ

Répondre
Partager Rechercher
J'ai trouver sa mais quand le je le met dans le module ( dans ses paramètre dans on client enter aussi )

Code PHP:

 
/*script a mettre dans l'evenement du module onclient enter*/
 
 
void main()
{
object oPlayer GetEnteringObject();
object oWP;
location lWP;
 
if (
GetIsPC(oPlayer)==TRUE)//Test si c'est un PC et donc pas un Md
 
//Si tu veux que ça ne se fasse que la première fois qu'il entre en jeu enlève les commantaires suivant
// if (GetXP(oPlayer)==0)
// 

 

    
int iMetier GetClassByPosition(1,oPlayer);
 
    if (
iMetier == CLASS_TYPE_FIGHTER ||iMetier == CLASS_TYPE_PALADIN ||iMetier == CLASS_TYPE_BARBARIAN ||iMetier == CLASS_TYPE_RANGER)
    
//S'il a une classe de combattant
    
{
     
oWP GetObjectByTag("WP_guerrierentre");
     
lWP GetLocation(oWP);
     
AssignCommand(oPlayerActionJumpToLocation(lWP));
    }
     else if (
iMetier == CLASS_TYPE_SORCERER ||iMetier == CLASS_TYPE_WARLOCK ||iMetier == CLASS_TYPE_WIZARD)
    { 
 
     
//S'il a une classe de mago
     
oWP GetObjectByTag("WP_magicienentre");
     
lWP GetLocation(oWP);
     
AssignCommand(oPlayerActionJumpToLocation(lWP));
    }
    else if (
iMetier == CLASS_TYPE_CLERIC ||iMetier == CLASS_TYPE_DRUID ||iMetier == CLASS_TYPE_MONK)
    { 
 
     
//S'il a une classe de pretre
     
oWP GetObjectByTag("WP_pretreentre");
     
lWP GetLocation(oWP);
     
AssignCommand(oPlayerActionJumpToLocation(lWP));
    }
    else if (
iMetier == CLASS_TYPE_BARD ||iMetier == CLASS_TYPE_ROGUE)
    { 
 
     
//S'il a une classe de filou
     
oWP GetObjectByTag("WP_filouentre");
     
lWP GetLocation(oWP);
     
AssignCommand(oPlayerActionJumpToLocation(lWP));
    }
}
// GiveXPToCreature(oPlayer,5); //Comme ça ça ne le fera que la première fois que le PJ entre
//
}
//pour fermer la boucle if si tu ne veux pas que ça se fasse à chaque fois !
 

Le problème c'est que sa me fait quand même paraître sur le point de départ de base et non sur les wp
Dans ton cas le script ne s'effectue pas à cause d'un temps de chargement assez long.

Le mieux serait que tu mettes ce script sur le onEnter d'une zone toute petite (intérieur, sans rien, que du vide, pour qu'elle ne prenne pas trop de place) contenant le point de départ du module, avec un DelayCommand ()

Dans ton cas il te faut 4 waypoints avec pour tag WP_guerrierentre, WP_magicienentre, WP_pretreentre et WP_filouentre

J'en ai rajouté un pour DM qui aura pour tag WP_DMentre

Le GetObjectByTag, je le remplace par GetWaypointByTag quand je sélectionne des WP.. je sais pas si cela fait quelque chose mais je préfère



Tiens je l'ai un peu optimisé aussi

Code PHP:

/*script a mettre dans le OnEnter d'une zone d'entrée*/
 
void main()
{
object oPlayer GetEnteringObject();
location lWP;
 
if (
GetIsPC(oPlayer)==TRUE)//Test si c'est un PC et donc pas un Md

int iMetier GetClassByPosition(1,oPlayer);
     if (
iMetier == CLASS_TYPE_FIGHTER ||iMetier == CLASS_TYPE_PALADIN ||iMetier == CLASS_TYPE_BARBARIAN ||iMetier == CLASS_TYPE_RANGER)
    
//S'il a une classe de combattant
    
{
     
lWP GetLocation (GetWaypointByTag("WP_guerrierentre"));
    }
     else if (
iMetier == CLASS_TYPE_SORCERER ||iMetier == CLASS_TYPE_WARLOCK ||iMetier == CLASS_TYPE_WIZARD)
    { 
     
//S'il a une classe de mago
     
lWP GetLocation (GetWaypointByTag("WP_magicienentre"));
}
    else if (
iMetier == CLASS_TYPE_CLERIC ||iMetier == CLASS_TYPE_DRUID ||iMetier == CLASS_TYPE_MONK)
    { 
     
//S'il a une classe de pretre
     
lWP GetLocation (GetWaypointByTag("WP_pretreentre"));
    }
    else if (
iMetier == CLASS_TYPE_BARD ||iMetier == CLASS_TYPE_ROGUE)
    { 
     
//S'il a une classe de filou
     
lWP GetLocation (GetWaypointByTag("WP_filouentre"));
    }
}
else if (
GetIsDM (oPlayer)) lWP GetLocation (GetWaypointByTag ("WP_DMentre "));
 
DelayCommand (10.0AssignCommand(oPlayerActionJumpToLocation(lWP)));
// le Delaycommand peut être ralongé ou raccourci selon la connexion du serveur
}
 



je pense que cela ira comme ça
J'ai pensé à ça car la connexion à un module peut prendre du temps parfois
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
en réalité j'ai mis un noeud de sort sur une zone isolée comme je l'ai décrite et avec sur son OnHearthBreak et dans le script le oPlayer est défini comme tel

Code PHP:

object oPlayer GetNearestObject (OBJECT_TYPE_CREATUREOBJECT_SELF1); 

Etant donné que la créature n'utilise pas de ressource quand aucun joueur n'est sur la zone, cela permet de transférer tous les joueurs au fur et à mesure de leur arrivée, sans se soucier du DelayCommand comme ci dessus
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
pour savoir c'est quoi le DM ? et aussi le DelayCommand c'est comme un conte a rebours ?
Et si j'ai bien tous mis ben hélasse sa marche toujours pas je vais bien dans la nouvelle zone vide mais je ne me fais pas téléporter sur les wp ( qui se trouve dans d'autre zone si je l'avais pas dit^^ )(et j'ai bien mit le scripte avec la modif qui tu a apporter dans le onenter de la zone vide )
GetIsDM renvoie TRUE si la créature est un Maître de Donjon (Dungeon Master)
DelayCommand retarde l'action de f seconde (f étant un nombre décimal)


Si tu peux attendre ce soir je regarderai exactement le comportement de ce script (je l'ai fait selon la race moi )
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Veille à bien mettre le script dans l'évènement "OnEnter" de la zone où se trouve le point de départ, pas dans le "OnClientEnter" du module. Si tu le mets dans le "OnClientEnter" du module, le joueur sera irrémédiablement téléporté vers la zone de départ...

En gros on n'y peut rien mais c'est comme ça. Dès qu'un joueur se connecte, il n'est pas encore "dans" la zone de départ, mais peut être affecté par tous les scripts des propriétés du module. Ensuite, il se fait téléporter automatiquement par le module dans la zone de départ. Donc pour téléporter correctement le joueur, il faut attendre que ce premier processus de "téléportation automatique" soit achevé, puis en engager un autre. D'ou le "DelayCommand" pour retarder légèrement son départ vers la nouvelle zone.

Personnellement, j'utilise le "label" de la classe (le chiffre indiqué dans le 2dA), puis je crée un waypoint dont le tag sera "START_#". # correspond au label de la classe. Ca m'oblige à faire un petit listing, mais une fois fait, ça réduit considérablement la taille des scripts.
Code PHP:

/*script a mettre dans le OnEnter d'une zone d'entrée*/

void main()
{
    
object oPlayer GetEnteringObject();
    
string sWayPoint "START_";

    
// C'est personnel, mais je préfère cette vérification
    // avec NWN1 GetIsPC rendait TRUE même si le joueur était un MD.
    // (en gros tout ce qui est contrôlé par un humain est un "joueur")
    
if(!GetIsDM(oPlayer))
    {
        
// Dans le cas de la classe du joueur :
        
int iCheck GetClassByPosition(1,oPlayer);

        
// Sinon, on peut aussi utiliser la race :
        
int iCheck GetRacialType(oPlayer);

        
// Ou encore s'il a le don "attaque en puissance" :
        
int iCheck GetHasFeat(FEAT_POWER_ATTACK);

        
sWayPoint += IntToString(iCheck);

        
// Tu peux définir également s'il a déjà gagné des points
        // d'expérience, auquel cas tu peux l'envoyer dans une
        // zone sauvegardée et couper le reste du script...
        
if(GetXP 0)
        {
            
lLocation /* un endroit sauvegardé quelconque */;
            
DelayCommand(10.0 AssignCommand(oPlayer,ActionJumpToLocation(lLocation)));
            return;
        }
    }

    else
        
sWayPoint += "DM";

    
object oWaypoint GetObjectByTag(sWayPoint);
    
// La valeur 10.0 de DelayCommand représente 10 secondes
    
DelayCommand(10.0,AssignCommand(oPlayer,ActionJumpToObject(oWaypoint)));

Perso je n utilise pas le oncliententer pour les raisons evoquées si dessus, mais il y a une autre propriété qui, je crois, n existait pas NWN I :

Le (en français) "script declenché par la fin de chargement du PJ", le script est executé quand le joueur est chargé à 100% dans le module ( contrairement au clientonenter), et la ca marche nickel !
@ Ariok
oui tu as raison il y a de nouveaux events qu'il ne faut pas négliger
pour faire un petit apparté, le script nSpawn a été aussi retravaillé et il existe deux autres events avant et après le spawn du PNJ ce qiu est franchement très sympathique


Revenons à nos moutons

j'ai testé le script il fonctionne bien sur le OnEnter de la zone comprenant le point de départ avec ce qui est ci dessous

j'ai rajouté des parenthèses dans le doute sur les conditions et j'ai remplacé ActionJumpToLocation par JumpToObject
J'ai rajouté un point de départ par défaut (dont le tag est WP_DEFAULT) au cas où aussi..


Code PHP:

void main()
{
object oPlayer GetEnteringObject();
object oWP;
 
if (
GetIsPC(oPlayer)==TRUE)
    { 
    
int iMetier GetClassByPosition(1,oPlayer);
    if ((
iMetier == CLASS_TYPE_FIGHTER) ||(iMetier == CLASS_TYPE_PALADIN) ||(iMetier == CLASS_TYPE_BARBARIAN) ||(iMetier == CLASS_TYPE_RANGER))
        {
oWP GetWaypointByTag("WP_guerrierentre");}
    else if ((
iMetier == CLASS_TYPE_SORCERER) ||(iMetier == CLASS_TYPE_WARLOCK) ||(iMetier == CLASS_TYPE_WIZARD))
        {
oWP GetWaypointByTag("WP_magicienentre");}
    else if ((
iMetier == CLASS_TYPE_CLERIC) ||(iMetier == CLASS_TYPE_DRUID) ||(iMetier == CLASS_TYPE_MONK))
        {
oWP GetWaypointByTag("WP_pretreentre");}
    else if ((
iMetier == CLASS_TYPE_BARD) ||(iMetier == CLASS_TYPE_ROGUE))
        {
oWP GetWaypointByTag("WP_filouentre");}
    }
else if (
GetIsDM (oPlayer)) oWP GetWaypointByTag ("WP_DMentre ");

if (
GetAreaFromLocation (GetLocation (oWP)) == OBJECT_INVALID)oWP GetWaypointByTag ("WP_DEFAULT ");
DelayCommand (5.0fAssignCommand(oPlayerJumpToObject(oWP)));

voili voilou
Personnellement je ne comprends pas trop pourquoi cela ne foncitonne as avec le tiens et je n'ai as trop recherché, mais celui ci fonctionne chez moi
N'oublie pas de compiler et de calculer avant de lancer.

ATTENTION : dans ton cas,
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés