SpawnPoint en fonction de la race ? (OnEnter Seulement)

Répondre
Partager Rechercher
Salut tout le monde,

Je prépare un module orienté action (Les Chroniques de Féerune) et je bloque sur quelque chose d'important.

J'ai crée une ville par Race de personnage et j'aurai aimé qu'ils rejoingnent directement la ville de naissance dés leur première connexion et JUSTE à leur premiere connexion, la persistance prendra le relais.

Si un petit génie du script passe par là, qu'il s'arrête un instant

(du moins si c'est possible de le créer).

Merci.
L'astuce, dans ce cas, c'est de creer une zone d'arrivée du module, et de re-orienter les pj a partir de cette zone d'arrivée
(par exemple, faire un trigger qui Jump les pj en fonction de leur race dans son OnEnter, juste sur le point d'arrivée)
Oui, moi j'ai fait pareil sur un de mes modules. Le trucs était d'aller parler à la prêtresse du monde qui envoie le PJ dans le monde proprement dit. Le PJ était envoyé dans un endroit bien spécifique à sa race... C'est pareil. Fais un trigger sur le start point et tu dois taper un script.
J'ai trouvé celui là qui m'a l'air d'un bon début mais même si c'est pour une zone il doit être adaptable pour le OnEnterClient du module mais il me manque 2 choses.

Code PHP:

void main()
{
     
object oJoueur GetEnteringObject ();
     
int iRaceDuJoueur GetRacialType (oJoueur);
     switch (
iRaceDuJoueur)
     {
          case 
RACIAL_TYPE_DWARF :
          
location ldepart_nain GetLocation (GetObjectByTag ("WP_depart_nain"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_nain));
          break;
     }


-Signaler cette fonction juste pour la 1ere connextion d'un joueur (si possible essayer de signaler qu'il faut 0xp pour accéder à la zone de départ et filer 1xp dés qu'il la franchie).

-Apparement, ce script est fait pour juste une race, pour le mien il faudrait gérer les 6 races du jeu avec un Wp bien précis pour chacune.
Citation :
Provient du message de The Grouch
J'ai trouvé celui là qui m'a l'air d'un bon début mais même si c'est pour une zone il doit être adaptable pour le OnEnterClient du module mais il me manque 2 choses.

Code PHP:

void main()
{
     
object oJoueur GetEnteringObject ();
     
int iRaceDuJoueur GetRacialType (oJoueur);
     switch (
iRaceDuJoueur)
     {
          case 
RACIAL_TYPE_DWARF :
          
location ldepart_nain GetLocation (GetObjectByTag ("WP_depart_nain"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_nain));
          break;
     }

-Signaler cette fonction juste pour la 1ere connextion d'un joueur (si possible essayer de signaler qu'il faut 0xp pour accéder à la zone de départ et filer 1xp dés qu'il la franchie).

-Apparement, ce script est fait pour juste une race, pour le mien il faudrait gérer les 6 races du jeu avec un Wp bien précis pour chacune.


Il te suffit de rajouter des Case montés comme celui dans la boucle :
exemple :
Code PHP:

void main()
{
     
object oJoueur GetEnteringObject ();
     
int iRaceDuJoueur GetRacialType (oJoueur);

if (
GetXP(oJoueur)==0)
{     switch (
iRaceDuJoueur)
     {
          case 
RACIAL_TYPE_DWARF :
          
location ldepart_nain GetLocation (GetObjectByTag ("WP_depart_nain"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_nain));
          break;

          case 
RACIAL_TYPE_HUMAN :
          
location ldepart_human GetLocation (GetObjectByTag ("WP_depart_human"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_human));
          break;
     }
SetXP(oJoueur,1);
}

etc, etc
Problème avec mon script:

Code PHP:

void main()
{
     
object oJoueur GetEnteringObject ();
     
int iRaceDuJoueur GetRacialType (oJoueur);

if (
GetXP(oJoueur)==0)
{     switch (
iRaceDuJoueur)
     {
          case 
RACIAL_TYPE_DWARF :
          
location ldepart_nain GetLocation (GetObjectByTag ("WP_depart_nain"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_nain));
          break;

          case 
RACIAL_TYPE_HUMAN :
          
location ldepart_humain GetLocation (GetObjectByTag ("WP_depart_humain"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_humain));
          break;

          case 
RACIAL_TYPE_HALFLING :
          
location ldepart_halfelin GetLocation (GetObjectByTag ("WP_depart_halfelin"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_halfelin));
          break;

          case 
RACIAL_TYPE_ELF :
          
location ldepart_elfe GetLocation (GetObjectByTag ("WP_depart_elfe"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_elfe));
          break;

          case 
RACIAL_TYPE_GNOME :
          
location ldepart_gnome GetLocation (GetObjectByTag ("WP_depart_gnome"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_gnome));
          break;

          case 
RACIAL_TYPE_HALFELF :
          
location ldepart_demielfe GetLocation (GetObjectByTag ("WP_depart_demielfe"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_demielfe));
          break;

          case 
RACIAL_TYPE_HALFORC :
          
location ldepart_demiorcque GetLocation (GetObjectByTag ("WP_depart_demiorque"));
          
AssignCommand (oJoueurActionJumpToLocation (ldepart_demiorque));
          break;
     }
SetXP(oJoueur,1);
}

Il me met une erreur de skipping declaration via "case" statement disallowed à la ligne 14 (case RACIAL_TYPE_HUMAN)

J'avoue que je ne vois pas ce qui cloche dans ce script

Il veut bien du premier choix alors pourquoi pas les autres ???
verifie si la constante RACIAL_TYPE pour les humain est bien RACIAL_TYPE_HUMAN (j'ai tape ca du boulot... ca avait l'air correct, mais bon, y'a peut-être une subtilite que j'aurais oublié ^^)
arg, g eu ce pb une fois ...
deux en fait
la premire, g tt éffacé et retapper, ca a marché
la deuxieme, je mis des { après les : et des } après les break; ... oui y a pas de raison mais ca a marché
g tjrs pas trouvé a quoi ca correspondait cette erreur ...
Il me semble qu'il y a toujours un problème avec les déclaration à l'intérieur des case : essaie de déclarer ta location à l'extérieur (ou ne la déclare pas du tout ).
Je suis pas Jedaï mais je vais essayer de te filer un coup de main.

le problème qu'il mentionne est dans ces trucs:
Code PHP:

case RACIAL_TYPE_DWARF :

   
// dans la ligne ci dessous tu déclares une location, 
  // alors que tu es à l'intérieur d'un case. 
 // En C , si je ne trompe c'est légitime, mais le compilateur
//de Bioware n'aime pas.
          
          
location ldepart_nain GetLocation (GetObjectByTag ("WP_depart_nain"));
.... 
3 solutions:
tu utilises le compilateur de Torlack qui a surement corrigé ça au moins en mode optimisation

Tu te passes complètement des variables en faisant directement:
Code PHP:

case RACIAL_TYPE_DWARF :
         
AssignCommand (oJoueurActionJumpToLocation (GetLocation (GetObjectByTag ("WP_depart_nain")))); 
C''est efficace, bien sur tu dois faire ça pour tous les "case".

Ou enfin, tu commences ton if comme ça:
Code PHP:

if (GetXP(oJoueur)==0)


        
location lDepart;
....

et tu remplaces tous les lDepart_nain, _humain, _elfe ... simplement par lDepart, en supprimant la déclaration:
Code PHP:

case RACIAL_TYPE_DWARF :

         
lDepart GetLocation (GetObjectByTag ("WP_depart_nain"));

          
AssignCommand (oJoueurActionJumpToLocation (lDepart));

          break;
//.... pareil dans les autres "case" 
Ou puis-je me procurer ce fameux compilateur ?

Apparement, en virant les variables, c'est passé...

EDIT://Ca marche du tonnerre, merci beaucoup Pom-Pom, ce forum est vraiment plein de gens biens !
Ben oui puisqu'il n'y a plus de déclaration de variable dans le "case", plus de problème...

Le site de Torlack

C'est peut être un peu extrême comme solution pour un problème comme celui là , mais ça vaut le coup d'aller voir de toute façon. Contrairement à ce que dit Torlack c'est utile un compilateur externe, surtout un compilateur aussi rapide (vraiment beaucoup plus rapide).

Lis bien le texte de description qui présente toutes les options, et les différence par rapport au compilateur de Bioware (notamment en mode optimisation où tu as accès à de véritables constantes par exemple). Pour ce qui est de la déclaration à l'intérieur des "case", finalement je ne suis pas sur qu'il l'accepte, je n'en ai pas vu de mention. Peut être est-ce normal...
Répondre

Connectés sur ce fil

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