Nous sommes actuellement le 18 Déc 2018, 14:37

Le fuseau horaire est UTC+1 heure [Heure d’été]




Publier un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
 Sujet du message: [Code] Pnj.sma
MessagePublié: 23 Oct 2016, 14:13 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : 27 Août 2007, 00:39
Message(s) : 8316
Localisation : Le pays où je me situe pardi
Certaines personnes s'intéressent à la programmation de Pnj un peu plus poussé que les pnj d'ambiance (pnj.xml).

Je vais poster ici quelques codes de certains Pnj.
Ici cela sera Solanra qui se trouve à la Vallée d'Illumen.

Son code d'habillement et de mise en place :
Code :
// PNJ TELEPORTATION SALLE DES PORTAIS SERIDIA
   solanra = add_npc (SKIN_BROWN, HAIR_GRAY, SHIRT_RED, PANTS_BLACK, BOOTS_BLACK, HEAD_1, CAPE_NONE,BATON_DIAMANT_MAGE,SHIELD_NONE,HELMET_NONE,NO_BODY_ARMOR,NO_PANTS_ARMOR,NO_BOOTS_ARMOR, gnome_female, HUMAN, 55, 66, 10, "Solanra", 0, 0)
   if (solanra!= -1)
   {
      add_callback (solanra, ON_TOUCH)
      set_npc_portrait (solanra, 41)
   }

Son code en boite de dialogue :
Code :
/*
Solanra télépote un joueur dans la salle des portails en Séridia en échange d'un objet (orgham des portails) ou contre 600 lumens.
*/



#define SOLANRA_OUI 1
#define SOLANRA_TP_OGHAM_PORTAIL 2
#define SOLANRA_TP_LUMENS 3
#define SOLANRA_BYE 4



build_solanra_responses ()
{
   add_npc_response("Oui",SOLANRA_OUI,solanra);
   add_npc_response("Non",SOLANRA_BYE,solanra);
   add_npc_response("Au revoir",SOLANRA_BYE,solanra);
}



touch_solanra (player)
{
   new string[500];
   new name_string[20];

   get_player_name (player, name_string);
   if(is_male(player))
   {
         sprintf (string, "Bonjour, %s ! Je suis Solanra et je peux t'emmener à la salle des portails !\nCeci en échange d'un ogham de portail ou de 600 lumens, es-tu intéressé ?", name_string);
   }
   else
   {
         sprintf (string, "Bonjour, %s ! Je suis Solanra et je peux t'emmener à la salle des portails !\nCeci en échange d'un ogham de portail ou de 600 lumens, es-tu intéressée ?", name_string);
   }
   add_npc_text (string, c_green1, 0);
   build_solanra_responses();
   send_response_list ();
}



respond_solanra (player, response)
{
   new money_we_have;
   new string[500];
   switch(response)
   {
      case SOLANRA_OUI:
      {
      add_npc_text("Une téléportation en salle des portails de Séridia en échange d'un ogham de portail ou de 600 lumens ?",c_green1,0);
      add_npc_response("un ogham de portail",SOLANRA_TP_OGHAM_PORTAIL,solanra);
      add_npc_response("600 lumens",SOLANRA_TP_LUMENS,solanra);
      add_npc_response("Aucun des deux, au revoir.",SOLANRA_BYE,solanra);
      send_response_list();
      return;
      }

      case SOLANRA_TP_LUMENS:
      {
      money_we_have = get_item_quantity (player, ITEM_MONEY);
      if (money_we_have < 600)
         {
            sprintf (string, "Tu as %i lumens, or il t'en faut %i !", money_we_have, 600);
            add_npc_text (string, c_red1, 0);
            send_response_list ();
            return;
         }
      remove_item_player (player, ITEM_MONEY, 600);
      teleport_player(player, 12 , 57 , 42, 1, 100);
      return;
      }

      case SOLANRA_TP_OGHAM_PORTAIL:
      {
         money_we_have = get_item_quantity (player, ITEM_OGHAM_PORTAIL);
         if (money_we_have < 1)
         {
            add_npc_text ("Tu ne disposes pas d'ogham des portails, reviens me voir avec.", c_red1, 0);
            send_response_list ();
            return;
         }
         remove_item_player (player, ITEM_OGHAM_PORTAIL, 1);
         sprintf (string, "*Solanra incline légèrement la tête*");
         add_npc_text(string, c_grey1, 0);
         teleport_player(player, 12 , 57 , 42, 1, 100);
         return;
      }
         

      case SOLANRA_BYE:
      {
         add_npc_text("Bien, une autre fois peut-être.",c_green1,0);
         send_response_list();
         return;
      }
   }   
}

_________________
http://fr.youtube.com/watch?v=gqxg5_XG_mY
http://www.youtube.com/watch?v=5YE5Z0-EKXg
http://www.youtube.com/watch?v=BoOevURC1m4
http://www.youtube.com/watch?v=gcQ5lI1E3g4


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message: Re: Code Pnj.sma
MessagePublié: 23 Oct 2016, 14:22 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : 27 Août 2007, 00:39
Message(s) : 8316
Localisation : Le pays où je me situe pardi
build_responses : ce sont tous les choix de réponse que peut donner le Pnj
touch_ : ce que vous lirez au moment du clic sur le pnj.
respond_ : ce que vous répondra le pnj aux différents choix de réponse (build_responses)

Edit : Les programmeurs apporteront plus de détails. Si vous avez des questions, n'hésitez pas.
Je n'aurai pas toutes les réponses, non plus perso :).

_________________
http://fr.youtube.com/watch?v=gqxg5_XG_mY
http://www.youtube.com/watch?v=5YE5Z0-EKXg
http://www.youtube.com/watch?v=BoOevURC1m4
http://www.youtube.com/watch?v=gcQ5lI1E3g4


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message: Re: Code Pnj.sma
MessagePublié: 23 Oct 2016, 15:05 
Hors-ligne

Inscrit(e) le : 14 Mars 2016, 10:52
Message(s) : 99
Localisation : Aix en provence
Merci Lianna.

Si je peux me permettre je mets ci-dessous la même chose avec des commentaires.
Si tu trouves que ce n'est pas bien, n'hésite pas à me le dire et je retire le message :wink:



/*
Solanra télépote un joueur dans la salle des portails en Séridia en échange d'un objet (orgham des portails) ou contre 600 lumens.
*/



/*met la valeur 1 dans "SOLANRA_OUI"*/
#define SOLANRA_OUI 1
/*met la valuer 2 dans "SOLANRA_TP_OGHAM_PORTAIL"*/
#define SOLANRA_TP_OGHAM_PORTAIL 2
/*met la valuer 3 dans "SOLANRA_TP_LUMENS"*/
#define SOLANRA_TP_LUMENS 3
/*met la valuer 4 dans "SOLANRA_BYE"*/
#define SOLANRA_BYE 4


/* création des choix de réponses : "oui", "non" ou "Au revoir"*/
build_solanra_responses ()
{

/*Choix "oui" on execute la case "SOLANRA_OUI" ligne 66*/
add_npc_response("Oui",SOLANRA_OUI,solanra);
/*Choix "Non" on execute la case "SOLANRA_BYE" ligne 122*/
add_npc_response("Non",SOLANRA_BYE,solanra);
/*Choix "Au revoir" on execute la case "SOLANRA_BYE" ligne 122*/
add_npc_response("Au revoir",SOLANRA_BYE,solanra);
}


/*Fonction permettant d'afficher le texte*/
touch_solanra (player)
{

/*déclaration de 2 variables*/
new string[500];
new name_string[20];

/*On récupère le nom de l'avatar et on le stock dans la variable "name_string"*/
get_player_name (player, name_string);
/*On regarde si c'est un homme*/
if(is_male(player))
{

/*On affiche le dialogue de SOLANRA pour un homme avec le nom de l'avatar qui est devant SOLANRA à la fin*/
sprintf (string, "Bonjour, %s ! Je suis Solanra et je peux t'emmener à la salle des portails !\nCeci en échange d'un ogham de portail ou de 600 lumens, es-tu intéressé ?", name_string);
}
else
{

/*On affiche le dialogue de SOLANRA pour une femme avec le nom de l'avatar qui est devant SOLANRA à la fin*/
sprintf (string, "Bonjour, %s ! Je suis Solanra et je peux t'emmener à la salle des portails !\nCeci en échange d'un ogham de portail ou de 600 lumens, es-tu intéressée ?", name_string);
}

/*On met en forme et on attend la réponse du joueur*/
add_npc_text (string, c_green1, 0);
build_solanra_responses();
send_response_list ();
}



/*Traitement de la réponse*/
respond_solanra (player, response)
{

/*On déclare 2 variables*/
new money_we_have;
new string[500];

/*Choix des réponses*/
switch(response)
{

/*Réponse "OUI"*/
case SOLANRA_OUI:
{

/*On affiche un nouveau texte*/
add_npc_text("Une téléportation en salle des portails de Séridia en échange d'un ogham de portail ou de 600 lumens ?",c_green1,0);
/*On affiche les nouveaux choix : "un ogham de portail", "600 lumens" et "Aucun des deux, au revoir."*/
add_npc_response("un ogham de portail",SOLANRA_TP_OGHAM_PORTAIL,solanra);
add_npc_response("600 lumens",SOLANRA_TP_LUMENS,solanra);
add_npc_response("Aucun des deux, au revoir.",SOLANRA_BYE,solanra);

/*On attend la réponse*/
send_response_list();
return;
}

/*Réponse "600 lumens"*/
case SOLANRA_TP_LUMENS:
{

/*On regarde si le joueur possède plus de 600 lumens sur lui*/
money_we_have = get_item_quantity (player, ITEM_MONEY);
/*Le joueur n'a pas 600 lumens*/
if (money_we_have < 600)
{
sprintf (string, "Tu as %i lumens, or il t'en faut %i !", money_we_have, 600);
add_npc_text (string, c_red1, 0);
send_response_list ();
return;
}

/*Le joueur a plus de 600 lumens, on lui retire les 600 lumens*/
remove_item_player (player, ITEM_MONEY, 600);
/* On le téléporte*/
teleport_player(player, 12 , 57 , 42, 1, 100);
return;
}

/*Réponse "un ogham de portail"*/
case SOLANRA_TP_OGHAM_PORTAIL:
{

/*On vérifie que le joueur possède bien un ogham sur lui*/
money_we_have = get_item_quantity (player, ITEM_OGHAM_PORTAIL);
/*Le joueur n'a pas d'ogham*/
if (money_we_have < 1)
{
add_npc_text ("Tu ne disposes pas d'ogham des portails, reviens me voir avec.", c_red1, 0);
send_response_list ();
return;
}

/*Le joueur a un ogham et on le lui retire*/
remove_item_player (player, ITEM_OGHAM_PORTAIL, 1);
/*On affiche un nouveau texte*/
sprintf (string, "*Solanra incline légèrement la tête*");
add_npc_text(string, c_grey1, 0);

/*On téléporte le joueur*/
teleport_player(player, 12 , 57 , 42, 1, 100);
return;
}

/*Réponse "non" ou "au revoir"*/
case SOLANRA_BYE:
{

/*On affiche un nouveau texte*/
add_npc_text("Bien, une autre fois peut-être.",c_green1,0);
send_response_list();
return;
}
}
}


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message: Re: Code Pnj.sma
MessagePublié: 23 Oct 2016, 21:08 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : 23 Oct 2016, 14:20
Message(s) : 2
C'est super de voir le code, merci Lianna, chouette initiative !
C'est quel langage de programmation ?


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message: Re: Code Pnj.sma
MessagePublié: 24 Oct 2016, 10:16 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : 15 Avr 2006, 10:23
Message(s) : 2723
Localisation : Charente - France
C'est du small qui dans la syntaxe se rapproche beaucoup du langage C.

Attention aux commentaires :D cela peu rendre la lecture du code difficile :D

_________________
Trinita,

Administrateur,
Contact: trinita@landes-eternelles.com

Suivez et partagez les Landes Eternelles sur Twitter !
La page Facebook des Landes Eternelles !


" Le bon sens est la qualité la moins partagée de ce monde " Jean-Pierre TROLL


Rapporter ce message
Haut
 Profil  
Répondre en citant  
 Sujet du message: Re: Code Pnj.sma
MessagePublié: 24 Oct 2016, 19:03 
Hors-ligne
Avatar de l’utilisateur

Inscrit(e) le : 27 Août 2007, 00:39
Message(s) : 8316
Localisation : Le pays où je me situe pardi
2 pnj qui sont liés.
Je vous laisse découvrir

naileater
Code :
#define BONJOUR 50
#define QUI ES TU 20
#define CLICORQUE 1


build_naileater_responses(player)
{
   if(!check_player_flag(player,ordreelfe))
   add_npc_response("Bonjour",50,naileater);
   
   if(!check_player_flag(player,ordreelfe))
   add_npc_response("Qui es tu ?",20,naileater);
   
   if(check_player_flag(player,ordreelfe))
   add_npc_response("",cellmax,naileater);
}

touch_naileater(player)
{
   if(check_player_flag(player,ordreelfe))
   add_npc_text("*L'orque armé te regarde t'incliner face à lui*",c_green1,0);
   if(!check_player_flag(player,ordreelfe))
   add_npc_text("*Le robuste orque armé t'ignore.*",c_green1,0);
   build_naileater_responses(player);
   send_response_list();
}

respond_naileater(player, response)
{
   switch(response)
   {
    case 20:
       {
       add_npc_text("*9h00 L'orque armé fronce les sourcils et d'une voix rauque te réponds :* Apprends la politesse, nous ne sommes pas chez les animaux ici.",c_green1,0);
       add_npc_response("",cellmax,naileater);
       send_response_list();
       return;
      }
    case 50:
       {
       add_npc_text("*L'orque armé sourit puis te fais un signe en montrant l'elfe aux cheveux d'or.*",c_green1,0);
       set_player_flag(player, clicorque);
       add_npc_response("",cellmax,naileater);
       send_response_list();
       return;
      }
    case cellmax:
       {
       return;
      }
   }
}


kairith
Code :
//Le but est de faire réagir l'elfe après que le joueur ai touché l'orque.

#define CLICORQUE 1

touch_kairith (player)
{
   new string[500];
   if (!check_player_flag(player, clicorque))
      {
       sprintf(string,"*L'elfe aux cheveux d'or ne te prête pas attention.*");
       add_npc_text(string,c_green1,0);
       add_npc_response("",cellmax,kairith);
       send_response_list();
      }
      else
      {
       sprintf(string,"Agenouille toi devant ton maitre Naileater.");
       set_player_flag(player, ordreelfe);
       add_npc_text(string,c_green1,0);
       add_npc_response("",cellmax,kairith);
       send_response_list();
      }
}

_________________
http://fr.youtube.com/watch?v=gqxg5_XG_mY
http://www.youtube.com/watch?v=5YE5Z0-EKXg
http://www.youtube.com/watch?v=BoOevURC1m4
http://www.youtube.com/watch?v=gcQ5lI1E3g4


Rapporter ce message
Haut
 Profil  
Répondre en citant  
Afficher les messages publiés depuis :  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 6 messages ] 

Le fuseau horaire est UTC+1 heure [Heure d’été]


Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 0 invité(s)


Vous pouvez publier de nouveaux sujets dans ce forum
Vous pouvez 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

Recherche de:
Aller vers :  
cron
Powered by phpBB® Forum Software © phpBB Group
Traduit par Maël Soucaze et Elglobo © phpBB.fr