AccueilFAQRechercherS'enregistrerConnexion

Partagez | 
 

 [Guide] Programmation de PNJs

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Mac
Admin


Messages : 1648
Date d'inscription : 20/07/2012
Localisation : Québec

MessageSujet: [Guide] Programmation de PNJs   Sam 23 Nov 2013 - 16:15

J'écrirai ici un tutoriel pour les gens qui voudraient apprendre à coder des NPCs, des quêtes, des events ou tout autre bordel du genre. Ce guide ne vous apprendra pas à maîtriser un langage de programmation précis (du genre C++ ou Java). Il vous apprendra seulement à scripter dans le langage de la plateforme eAthena : il s'agit d'une version très simplifiée du langage C qui fonctionne presque entièrement avec des commandes préconçues.

La documentation : la sainte Bible du programmeur
Je vais commencer par vous donner des liens qui sont nécéssaires à la programmation de RO.

LA DOCUMENTATION OFFICIELLE. Il s'agit du fichier distribué avec l'émulateur eAthena. Le début du fichier explique la syntaxe du langage ainsi que le fonctionnement des opérateurs. Ensuite, la syntaxe et le fonctionnement de chaque commande est expliqué en détail, le plus souvent avec des exemples.

LES COMMANDES DE SCRIPT. Il s'agit d'une version améliorée de la documentation officielle. Chaque commande est expliquée avec des exemples et des trucs sur le fonctionnement.

LE WIKI DE eATHENA. Le wiki contient plusieurs pages sur la programmation (en anglais, malheureusement). Il peut toujours être utile d'aller y jeter un coup d'œil!

LE WIKI DE rATHENA. Même chose que pour le wiki de eAthena; ce wiki contient de l'information assez détaillée qui peut être utile.

LA LISTE DES NPC. Cette liste contient le numéro d'identification de chaque sprite de NPC. Utile lorsqu'on veut coder un NPC!

La syntaxe de base
Code:
prontera,50,70,4 script Vieil Homme 78,{
 mes "[Vieil Homme]";
 mes "Bonjour. Je suis un NPC!";
 end;
}
Chaque NPC commence par la déclaration suivante :
Code:
map_du_npc,X,Y,orientation [TAB] script [TAB] nom_du_npc [TAB] ID,{
map_du_npc : map sur laquelle le NPC est présent (dans l'exemple, il s'agit de prontera)

X : coordonnée en X du NPC sur la map (dans l'exemple, 50)

Y : coordonnée en Y du NPC sur la map (dans l'exemple, 70)

orientation : l'orientation est un chiffre de 1 à 8 qui définit de quel côté regarde le NPC;
[1][8][7]
[2][X][6]
[3][4][5]

script : on met script lorsqu'il s'agit d'un script, shop lorsqu'il s'agit d'un magasin et warp lorsqu'il s'agit d'un warp. Nous verrons les particularités des shops et des warps un peu plus loin.

nom_du_npc : le nom du NPC qui sera affiché dans le jeu

ID : le numéro d'identification du NPC. Il s'agit de l'apparence qu'aura le NPC dans le jeu. Pour une liste des numéros possibles, cliquez ici

Vous devez ensuite ouvrir un bloc avec un bracket "{". Le script ne compilera pas si le code est placé hors d'un bloc. Vous pouvez maintenant commencer à coder votre NPC. Chaque commande doit être terminée par un point-virgule ";". Dans l'exemple, la commande mes "Bonjour. Je suis un NPC!"; ouvrirait, dans le jeu, une boîte de dialogue où serait écrit "Bonjour, je suis un NPC!". Nous survolerons les commandes principales un peu plus tard.

Les opérateurs mathématiques
Les opérateurs mathématiques sont utilisés, eh oui, pour effectuer des calculs mathématiques. Les voici:
Opérateurs mathématiques:
 

Les opérateurs de comparaison
Les opérateurs de comparaison sont utilisés pour comparer les éléments d'une condition. Ils ne peuvent être utilisés qu'à l'intérieur d'une condition ou d'une boucle.
Opérateurs de comparaison:
 

Les opérateurs logiques
Les opérateurs logiques sont utilisés pour lier plusieurs conditions. Les voici:
Opérateurs logiques:
 

Les variables
Les variables sont, comme leur nom l'indique, des objets possèdant une valeur variable. Il existe quatre types de variables (variable joueur, variable de compte, variable globale et variable de NPC). Chaque type de variable possède une version pouvant stocker des chiffres entiers (integer) et une version pouvant stocker des chaînes de caractères (string). Pour les chaînes de caractères (string), il suffit d'ajouter le préfixe "$" à la variable (la variable exemple pourrait seulement stocker des chiffres alors que la variable exemple$ pourrait seulement stocker des chaînes de caractères). Il existe également une version "temporaire" et une version "permanente" pour chaque type (sauf pour les variables de compte, qui sont toujours permanentes). Il suffit d'ajouter le préfixe "@" pour les variables temporaires (la variable exemple serait permanente alors que la variable @exemple serait temporaire ; il en va de même pour les chaînes de caractères : la variable exemple$ serait permanente alors que la variable @exemple$ serait temporaire). Je vais essayer d'expliquer les différences entre chaque type de variable. Vous pouvez aussi CLIQUER ICI pour lire l'article du wiki de rAthena (en anglais) qui parle des variables et des tableaux (arrays).

La variable joueur (player variable)
set exemple, 10; — Numérique, permanente (permanent integer)
set exemple$, "texte"; — Chaîne de caractères, permanente (permanent string)
set @exemple, 10; — Numérique, temporaire (temporary integer)
set @exemple$, "texte"; — Chaîne de caractères, temporaire (temporary string)
Les variables joueur permanentes n'ont aucun préfixe et sont stockées dans la base de donnée pour chaque personnage. Chaque personnage peut donc avoir une valeur qui lui est propre. La race de votre personnage, la classe, le niveau ou encore le nombre de zeny sont toutes des variables joueur permanente. Une variable numérique (exemple) peut possèder une valeur allant de 0 à 2,147,483,648 (soit 32 bits). Une chaîne de caractères (exemple$) peut possèder jusqu'à 128 caractères. Petit exemple:
Code:
prontera,50,55,3 script NPC 811,{

if(!pomme) {   //On vérifie que la variable existe
  mes "[NPC]";
  mes "Aimez-vous les pommes?";
  next;
  menu "Oui, j'aime les pommes.", L_YES ,"Non, je n'aime pas les pommes.", L_NO;
}
else {     // Le joueur a déjà répondu à la question
  mes "[NPC]";
  if(pomme == 1)
       mes "Vous aimez les pommes!";
  else
       mes "Vous n'aimez pas les pommes!";
  close;
}
  
L_YES:
  set pomme, 1;
  mes "[NPC]";
  mes "D'accord! Je m'en souviendrai!";
  close;

L_NO:
  set pomme, 2;
  mes "[NPC]";
  mes "D'accord! Je m'en souviendrai!";
  close;
}
Ce NPC demande au joueur s'il aime les pommes, et sauvegarde sa réponse dans une variable joueur permanente nommée pomme. Quand le joueur retourne lui parler, le NPC récupère la valeur de la variable (1 si le joueur aime les pommes, 2 si le joueur n'aime pas les pommes) et dis au joueur s'il aime les pommes ou non. Vous pouvez aussi comprendre quelques commandes de base, comme mes "texte"; qui permet d'afficher un message à l'écran, menu "choix1", label1 , "choix2" , label2; qui permet d'afficher un menu et close; qui permet de mettre fin au NPC. Veuillez aussi prendre note qu'on aurait pu écrire if(pomme != 0) au lieu de if(!pomme) pour vérifier si la variable existe déjà.

Les commandes de base
mes "texte";
La commande mes permet d'afficher un message à l'écran. C'est la commande qui est utilisée lors des dialogues avec les PNJs.

close;
La commande close permet de terminer le code d'un PNJ. C'est la commande qui est utilisée pour terminer la plupart des PNJs.

close2;
La commande close2 permet de fermer une conversation avec un PNJs tout en continuant d'exécuter du code. Quand on utilise cette commande, il faut utiliser la commande end pour terminer le code.

end;
La commande end permet de terminer le code d'un PNJ. Il est préférable d'utiliser la commande close dans les cas où end n'est pas nécessaire.

set variable, <valeur>;
La commande set permet d'indexer une valeur à une variable. La variable peut prendre différents préfixes ou suffixes, dépendamment de sa nature. La valeur de la variable peut être numérique (un nombre de 0 à 2,147,483,647) ou bien une chaîne de caractère (jusqu'à 128 caractères).

warp "map",<x>,<y>;
La commande warp permet de téléporter le joueur invoqué. On doit spécifier le nom de la map ainsi que les coordonnées en x et en y.

getitem <id>,<nb>;
La commande getitem permet de donner un item au joueur invoqué. Il faut spécifier l'ID de l'item ainsi que le nombre à donner.

delitem <id>,<nb>;
La commande delitem permet d'enlever un item au joueur invoqué. Il faut spécifier l'ID de l'item ainsi que le nombre à enlever.

Je continuerai le guide un peu plus tard ... prochainement: les variables, les commandes principales, les conditions et les boucles.


Dernière édition par Mac le Mar 23 Sep 2014 - 0:29, édité 15 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://anarchy-ro.fr.cr
Katojin



Messages : 103
Date d'inscription : 17/10/2013
Age : 22
Localisation : Nice

MessageSujet: Re: [Guide] Programmation de PNJs   Dim 24 Nov 2013 - 14:04

Oooh trop cool, je m'y met dès Mai prochain obligé ! Merci bien, et sans mes études je pense que je me serai adonné aux plaisirs de la programmation toute la nuit déjà x)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Sparda



Messages : 63
Date d'inscription : 19/11/2013
Age : 22
Localisation : France

MessageSujet: Re: [Guide] Programmation de PNJs   Dim 24 Nov 2013 - 16:11

Oh mon dieu Mac c'est vraiment énorme que tu prenne du temps pour ça ! Je vais essayer de me lancer la dedans dès cette semaine Very Happy !
Merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lawofwit.com/
Fake



Messages : 252
Date d'inscription : 17/10/2013

MessageSujet: Re: [Guide] Programmation de PNJs   Dim 24 Nov 2013 - 17:42

Je suis dans le même cas que Katojin, je m'y mettrai pour t'aider après les études Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Mac
Admin


Messages : 1648
Date d'inscription : 20/07/2012
Localisation : Québec

MessageSujet: Re: [Guide] Programmation de PNJs   Dim 24 Nov 2013 - 18:41

Des études? Kessé ça?

J'ai commencé la section sur les variables. Content de voir que ça vous intéresse =).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://anarchy-ro.fr.cr
Tiplouf



Messages : 60
Date d'inscription : 24/02/2014

MessageSujet: Re: [Guide] Programmation de PNJs   Sam 8 Mar 2014 - 17:54

Ca m'a l'air fort intéressant tout ça, mais où est-ce qu'on peut mettre en pratique un script pour voir si il fonctionne?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Mac
Admin


Messages : 1648
Date d'inscription : 20/07/2012
Localisation : Québec

MessageSujet: Re: [Guide] Programmation de PNJs   Lun 10 Mar 2014 - 16:23

Il suffit de monter un serveur local, je posterai un autre tutoriel qui montre comment faire =).
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://anarchy-ro.fr.cr
Génoxyde



Messages : 256
Date d'inscription : 30/09/2014
Age : 24
Localisation : La Rochelle / Bordeaux

MessageSujet: Re: [Guide] Programmation de PNJs   Mer 2 Sep 2015 - 9:56

Je suis pas trop sûr de tout comprendre là, mais je crois que j'ai trouvé un truc util :
http://www.eathena.ws/board/index.php?showforum=124
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: [Guide] Programmation de PNJs   Aujourd'hui à 3:50

Revenir en haut Aller en bas
 
[Guide] Programmation de PNJs
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Anarchy-RO :: Côté jeu :: Tutoriels et guides-
Sauter vers: