Bonjour, je vous présente mon d'aide pour crée des serveur privée et autres...
 
AccueilCalendrierFAQRechercherMembresGroupesS'enregistrerConnexion

Partagez | 
 

 [Tutoriel] Fabriquer son premier NPC

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




Date d'inscription : 01/01/1970

MessageSujet: [Tutoriel] Fabriquer son premier NPC    Lun 19 Juil - 21:28

Bonjour bande de gens et bienvenue dans un nouveau tutoriel qui va s'avérer très utile pour vos futurs serveurs, vous l'aurez deviné au titre du thread, nous allons faire notre premier NPC ensemble étape par étape
Ha je vous entends bien crier haut et fort que vous êtes super content et que je suis vraiment gentil mais attention, créer un NPC c'est pas toujours facile, je vais déjà vous apprendre les bases et vous apprendre a faire pour le moment un NPC tout simple qui dira seulement un texte, plus tard je vous apprendrai a faire des vendeurs, des monstres, des gateskeeper, des RAIDS BOSS et plein de super choses mais nous n'y sommes pas

Bon j'espère que cette petite intro vous aura mis un peu d'eau à la bouche et que vous vous sentez très motivé avec une soif de connaissance insatiable.

Etape 1 : l'étape la plus courte de l'histoire du tutoriel, ce dont on va avoir besoin.

- Un serveur Lineage II à (Voir mon premier tutoriel)
- Un éditeur MYSQL (easyphp ou navicat, voir premier tutoriel ou deuxième tutoriel)

Et c'est tout, on est paré les amis

Etape 2 : Préparer son NPC

Alors avant de créer notre NPC, de quoi avons nous besoin selon vous ? Dans un premier temps on voudra savoir a quoi il ressemble, on va donc s'inspirer d'un modèle déjà présent dans le jeu.
Pour cela vous lancez votre jeu, vous allez chercher un monstre ou un habitant du jeu auquel vous voulez que votre nouveau npc ressemble, ce peut être un rabbit comme antharas, choisissez le NPC de votre choix se sera juste pour l'apparence.
Moi pour mon tutoriel je vais décider de prendre un moine en habits sombres, se sera une sorte de prêcheur il souhaitera la bienvenue a mes nouveaux arrivants
Regardez comme il est beau :



On note que le nom n'est pas celui qu'on veut, et qu'il a une arme sympa mais pas forcement classe, de plus c'est un monstre et il ne parle pas
Pas de soucis nous allons remédier a tout ca.
Donc une fois que vous avez trouvé votre modèle fait un shift + click gauche dessus, une fenêtre s'ouvre avec différentes informations, nous noterons la ligne NPC ID :




Comme on peut le voir, ma NPC ID est 22 128.

Bien, on peut maintenant quitter le jeu et fermer le serveur. On a fini notre étape de préparation on passe maintenant a l'étape suivante.

Etape 3 : la création

Vous allez voir cette étape n'est pas compliquée, dans un premier temps on explore notre base Mysql, ici je vais le faire avec easyphp car je m'en sers depuis le début , pour ceux qui ne savent pas comment marche EasyPhp je vous encourage a lire le premier tutoriel , il se trouve dans cette section du forum épinglé vous ne pouvez pas le rater.
Sous easyphp :
Administration > Mysql Administration
On sélectionne l2jdb dans le menu déroulant sur la gauche
Puis dans la liste (en dessous de l2jdb) on clique sur NPC.

Vous aurez quelque chose de semblable a votre écran :




Cliquez sur Rechercher , j'ai indiqué la ligne ou il se trouve sur l'image précédente par une flèche rouge.
Deux tableaux s'affichent, le premier est précédé par la ligne Choisir les champs à afficher (au moins un) et le second par Ou Recherche par valeur (passepartout: "%") , on va donc s'intéresser au second tableau,
dans votre première colonne intitulé Champ, la première ligne est ID, on va donc rester sur cette première ligne.

Pour notre recherche on choisi donc l'opérateur = , et en valeur nous allons mettre notre id précédemment notée, pour moi c'est 22128.
Cela veut dire :
Je veux que tu cherches dans la table NPC, toutes les lignes qui ont pour valeur d'ID le nombre 22128.
Voici une petite image pour éviter de vous perdre :



Descendez en bas de page et cliquez sur Exécuter.
Normalement une seule ligne apparait avec votre NPC que vous aviez repéré comme sur mon image :



Si tel est le cas , cochez la case en début de ligne puis cliquez sur la petite icône exporter juste en dessous de la ligne :




Vous arrivez a une page avec quelques options a cocher;
cochez Ajouter IF NOT EXISTS en dessous de la ligne structure et en bas de page cliquez sur la case Transmettre :




Puis sur exécuter, enregistrez le fichier ou vous voulez, puis ouvrez le au bloc notes (enfin plutot wordpad car sur bloc note il n y a pas de saut de ligne), vous devriez avoir une requête sql assez similaire a la mienne :


Citation :
-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Samedi 18 Octobre 2008 à 01:44
-- Version du serveur: 5.0.27
-- Version de PHP: 5.2.0
--
-- Base de données: `l2jdb`
--

-- --------------------------------------------------------

--
-- Structure de la table `npc`
--

CREATE TABLE IF NOT EXISTS `npc` (
`id` decimal(11,0) NOT NULL default '0',
`idTemplate` int(11) NOT NULL default '0',
`name` varchar(200) default NULL,
`serverSideName` int(1) default '0',
`title` varchar(45) default '',
`serverSideTitle` int(1) default '0',
`class` varchar(200) default NULL,
`collision_radius` decimal(5,2) default NULL,
`collision_height` decimal(5,2) default NULL,
`level` decimal(2,0) default NULL,
`sex` varchar(6) default NULL,
`type` varchar(20) default NULL,
`attackrange` int(11) default NULL,
`hp` decimal(8,0) default NULL,
`mp` decimal(8,0) default NULL,
`hpreg` decimal(8,2) default NULL,
`mpreg` decimal(5,2) default NULL,
`str` decimal(7,0) default NULL,
`con` decimal(7,0) default NULL,
`dex` decimal(7,0) default NULL,
`int` decimal(7,0) default NULL,
`wit` decimal(7,0) default NULL,
`men` decimal(7,0) default NULL,
`exp` decimal(9,0) default NULL,
`sp` decimal(8,0) default NULL,
`patk` decimal(5,0) default NULL,
`pdef` decimal(5,0) default NULL,
`matk` decimal(5,0) default NULL,
`mdef` decimal(5,0) default NULL,
`atkspd` decimal(3,0) default NULL,
`aggro` decimal(6,0) default NULL,
`matkspd` decimal(4,0) default NULL,
`rhand` decimal(8,0) default NULL,
`lhand` decimal(8,0) default NULL,
`armor` decimal(1,0) default NULL,
`walkspd` decimal(3,0) default NULL,
`runspd` decimal(3,0) default NULL,
`faction_id` varchar(40) default NULL,
`faction_range` decimal(4,0) default NULL,
`isUndead` int(11) default '0',
`absorb_level` decimal(2,0) default '0',
`absorb_type` enum('FULL_PARTY','LAST_HIT','PARTY_ONE_RANDOM') NOT NULL default 'LAST_HIT',
`ss` int(4) default '0',
`bss` int(4) default '0',
`ss_rate` int(3) default '0',
`AI` varchar(Cool default 'fighter',
`drop_herbs` enum('true','false') NOT NULL default 'false',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table `npc`
--

INSERT INTO `npc` (`id`, `idTemplate`, `name`, `serverSideName`, `title`, `serverSideTitle`, `class`, `collision_radius`, `collision_height`, `level`, `sex`, `type`, `attackrange`, `hp`, `mp`, `hpreg`, `mpreg`, `str`, `con`, `dex`, `int`, `wit`, `men`, `exp`, `sp`, `patk`, `pdef`, `matk`, `mdef`, `atkspd`, `aggro`, `matkspd`, `rhand`, `lhand`, `armor`, `walkspd`, `runspd`, `faction_id`, `faction_range`, `isUndead`, `absorb_level`, `absorb_type`, `ss`, `bss`, `ss_rate`, `AI`, `drop_herbs`) VALUES
(22128, 22128, 'Monastery Guardian', 0, '', 0, 'Monster3.grail_protection', 20.00, 15.00, 78, 'male', 'L2Monster', 80, 4717, 2168, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 9821, 1141, 2695, 571, 1258, 494, 278, 500, 333, 0, 0, 0, 88, 132, 'NULL', 0, 0, 0, 'LAST_HIT', 0, 0, 0, 'fighter', 'false');

Pour le moment nous allons changer une seule chose dans ce texte, le chiffre de notre id, c'est le tout premier chiffre après l'ouverture de parenthèse, celui que vous aviez noté précédemment. Nous allons mettre une valeur assez élevée comme 90 000 par exemple, pour mon exemple ceci nous donnera :


Citation :
-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Samedi 18 Octobre 2008 à 01:44
-- Version du serveur: 5.0.27
-- Version de PHP: 5.2.0
--
-- Base de données: `l2jdb`
--

-- --------------------------------------------------------

--
-- Structure de la table `npc`
--

CREATE TABLE IF NOT EXISTS `npc` (
`id` decimal(11,0) NOT NULL default '0',
`idTemplate` int(11) NOT NULL default '0',
`name` varchar(200) default NULL,
`serverSideName` int(1) default '0',
`title` varchar(45) default '',
`serverSideTitle` int(1) default '0',
`class` varchar(200) default NULL,
`collision_radius` decimal(5,2) default NULL,
`collision_height` decimal(5,2) default NULL,
`level` decimal(2,0) default NULL,
`sex` varchar(6) default NULL,
`type` varchar(20) default NULL,
`attackrange` int(11) default NULL,
`hp` decimal(8,0) default NULL,
`mp` decimal(8,0) default NULL,
`hpreg` decimal(8,2) default NULL,
`mpreg` decimal(5,2) default NULL,
`str` decimal(7,0) default NULL,
`con` decimal(7,0) default NULL,
`dex` decimal(7,0) default NULL,
`int` decimal(7,0) default NULL,
`wit` decimal(7,0) default NULL,
`men` decimal(7,0) default NULL,
`exp` decimal(9,0) default NULL,
`sp` decimal(8,0) default NULL,
`patk` decimal(5,0) default NULL,
`pdef` decimal(5,0) default NULL,
`matk` decimal(5,0) default NULL,
`mdef` decimal(5,0) default NULL,
`atkspd` decimal(3,0) default NULL,
`aggro` decimal(6,0) default NULL,
`matkspd` decimal(4,0) default NULL,
`rhand` decimal(8,0) default NULL,
`lhand` decimal(8,0) default NULL,
`armor` decimal(1,0) default NULL,
`walkspd` decimal(3,0) default NULL,
`runspd` decimal(3,0) default NULL,
`faction_id` varchar(40) default NULL,
`faction_range` decimal(4,0) default NULL,
`isUndead` int(11) default '0',
`absorb_level` decimal(2,0) default '0',
`absorb_type` enum('FULL_PARTY','LAST_HIT','PARTY_ONE_RANDOM') NOT NULL default 'LAST_HIT',
`ss` int(4) default '0',
`bss` int(4) default '0',
`ss_rate` int(3) default '0',
`AI` varchar(Cool default 'fighter',
`drop_herbs` enum('true','false') NOT NULL default 'false',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table `npc`
--

INSERT INTO `npc` (`id`, `idTemplate`, `name`, `serverSideName`, `title`, `serverSideTitle`, `class`, `collision_radius`, `collision_height`, `level`, `sex`, `type`, `attackrange`, `hp`, `mp`, `hpreg`, `mpreg`, `str`, `con`, `dex`, `int`, `wit`, `men`, `exp`, `sp`, `patk`, `pdef`, `matk`, `mdef`, `atkspd`, `aggro`, `matkspd`, `rhand`, `lhand`, `armor`, `walkspd`, `runspd`, `faction_id`, `faction_range`, `isUndead`, `absorb_level`, `absorb_type`, `ss`, `bss`, `ss_rate`, `AI`, `drop_herbs`) VALUES
(90000, 22128, 'Monastery Guardian', 0, '', 0, 'Monster3.grail_protection', 20.00, 15.00, 78, 'male', 'L2Monster', 80, 4717, 2168, 13.43, 3.09, 40, 43, 30, 21, 20, 10, 9821, 1141, 2695, 571, 1258, 494, 278, 500, 333, 0, 0, 0, 88, 132, 'NULL', 0, 0, 0, 'LAST_HIT', 0, 0, 0, 'fighter', 'false');

J'ai mis en rouge le changement pour qu'il soit visible, vous remarquerez que le numéro juste a côté est le même que votre id, ceci est normal ne le changez pas.
Sauvegardez votre texte et fermez votre fichier.

Retournons a notre table NPC :
Easyphp > Administration > Mysql administration > Base l2jdb > table NPC
(sélectionnez toujours comme la première fois a partir du menu sur la gauche)

Sur la même ligne que afficher nous allons maintenant cliquer sur Importer.
On nous demande le fichier a importer, importer donc votre fichier .sql et normalement vous avez un message de succès. Ha vous sentez que la gloire est proche n'est ce pas !

Bien maintenant vous re allez dans la table NPC pour effectuer une recherche (pour rappel c'est la même manip que tout a l'heure : easy php > Administration > Mysql administration > base l2jdb > table npc > Rechercher)
Cette fois en id recherchée on mettra 90000, on clique sur le bouton exécuter en fin de page et on tombe sur notre début de NPC perso
Cliquez sur le petit crayon en début de ligne :




Une nouvelle page s'ouvre avec toutes les informations que l'on souhaite modifier !

Je vais vous détailler les lignes a changer et les effets qu'elles apportent :

ID > 90000 (alors cette ligne on ne la touchera pas, l'id de notre futur NPC sera donc 90 000)

idtemple > X (X = l'ancienne id , pareil on ne touche pas cela indiquera l'apparence de votre futur NPC)

Name > Orlyne (Pour mon exemple j'ai appelé mon NPC Orlyne mais vous donnez lui le nom que vous voulez , cette ligne sert a choisir le nom du NPC)

serverSidename > 1 (ici c'est très important il ne faut pas laisser 0 mais 1)

Title > Precheur Sombre (Pour mon exemple j'ai mis en titre Precheur Sombre, mais vous pouvez mettre ce que vous voulez, cette ligne sert a choisir si notre NPC aura oui ou non un titre au dessus de la tête, si vous n'en voulez pas cochez la case Null)

serverSidetitle > 1 (Remplacez 0 par 1 même si vous n'avez pas donné de titre a votre NPC)

maintenant je saute quelques lignes , elles ne sont pas a changer il faut laisser comme elles sont, on arrive a la ligne :

type > L2Npc (Je vous apprends a faire un npc simpliste remplacez donc toujours par L2Npc)

Cliquez sur exécuter (celui juste en dessous du premier tableau).
Votre ligne réapparait modifiée , recliquez sur le crayon.
On va juste modifier une dernière vers le bas :

aggro > 0 (Et oui on change l'aggro sinon on va se retrouver avec un npc qui attaque nos joueurs )

On clique sur exécuter (celui juste en dessous du tableau qui contenait la ligne aggro) et une fois fini on peut quitter notre fenêtre internet pour maintenant s'intéresser au texte que va dire notre NPC.

Ouvrez un document bloc note et entrez y le texte suivant :


Citation :
<html><body>
</body></html>

Nous avons créer le plus petit document Html qui existe, on va maintenant le compléter avec le texte que veut dire notre NPC, on va donc juste écrire ce qu'il y aura dans la fenêtre de discussion, la seule différence notable est que pour sauter une ligne il faudra rajouter l'ensemble <br>. Je vous donne un exemple, imaginons je veux écrire :


Citation :
Bonjour,
Voici un test.

Au revoir

Cela donnera :


Citation :
Bonjour,
<br>
Voici un test.
<br>
<br>
Au revoir

Le <br> n'est pas automatique, a vous de le rajouter !

Continuons donc mon moine , voici le texte que je lui ferais dire :


Citation :
<html><body>
Orlyne :
<br>
La petite bourgade de ces ruines n'est plus qu'un village fantôme isolé de tout. La mort rode dans les parages et prend de multiples formes horribles. Si seulement cet épais brouillard pouvait disparaitre on serrait au moins ou l'on met les pieds.
<br>
</body></html>

Avec un tel texte on aurait un résultat de cette forme :




Comme on peut le voir c'est pas super joli et sympa pour l'œil et les accents ne sont pas pris en compte, on va donc personnaliser le texte pour lui donner un peu plus de gaité et d'interaction ; on va aussi enlever les accents tant pis pour le bon français !

Dans un premier temps on va colorer le nom en or , pour cela il suffit de placer le nom a travers :


Citation :
<font color="LEVEL">Orlyne</font>

On va aussi ajouter une action de la part du joueur , du style lui poser une question. Pour cela on va ajouter a la fin un lien vers un autre texte a l'aide des lignes :


Citation :
<a action="bypass -h npc_%objectId%_Chat 1"> La question</a>

le chiffre après chat est important , il indique le numéro de que nous allons ouvrir lorsque le joueur cliquera sur la question, ma page principale est la page 0 donc il ouvrira la page 1.
Pour mon moine on va le questionner sur sa présence ici , on obtiendra donc :


Citation :
<a action="bypass -h npc_%objectId%_Chat 1">Le questionner sur sa presence en ces lieux </a>

Mon texte finale pour la page principale sera donc :


Citation :
<html><body>
<font color="LEVEL">Orlyne :</font>
<br>
La petite bourgade de ces ruines n'est plus qu'un village fantome isole de tout. La mort rode dans les parages et prend de multiples formes horribles. Si seulement cet epais brouillard pouvait disparaitre on serrait au moins ou l'on met les pieds.
<br>
<br>
<a action="bypass -h npc_%objectId%_Chat 1">Le questionner sur sa presence en ces lieux </a>
</body></html>

Sauvegardez votre document ou vous le souhaitez sous le nom : 90000.txt
renommer le 90000.htm

Nous allons réouvrir un fichier bloc note et maintenant créer la réponse a la question, pour mon moine je ferais quelque chose du style :


Citation :
<html><body>
<font color="LEVEL">Orlyne :</font>
<br>
Ce n'est pas vos oignons ! Laissez moi tranquille maintenant ou ma guilde Britania vous cassera la figure !
</body></html>

On sauvegardera ce document sous 90000-1.txt et on le renomera 90000-1.htm

Nous avons donc maintenant nos deux fichiers :
90000.htm
90000-1.htm

Nous allons les placer pour ceux qui ont fait le premier tutoriel dans serveurl2/game/data/html/default/ pour les autres dans votre dossier de serveur puis suivez le même chemin.

Et voila ! Notre NPC est crée

Etape 4 : Le résultat !

Alors inutile de parler je vais vous montrer mes images :









Pour le spawner j'ai juste eu donc a taper :


Citation :
//spawn 90000

Alors il est pas joli notre NPC ?

ETAPE 5 : ASTUCES

Si vous refaites un NPC penser a changer 90000 par 90001 et chaque fois y ajouté 1 car l'émulateur n'accepte pas 2 npcs avec la même ID !
Il vous suffit de refaire le tutoriel en remplaçant 90000 par 90001

Ne mettez jamais d'accent !
En effet en jeu les accents sont illisibles, donc pas d'accent aussi bien dans le nom et le titre que dans le texte

Le chiffre derrière chat lors de la commande pour interagir avec le NPC indique la page que vous ouvrirez , si vous mettez 1 , le npc lira le texte 90000-1.htm , si vous mettez 5 se sera 90000-5.htm , pour revenir au texte 90000.htm il faut mettre 0.


------------------------

Et voila c'est enfin la fin de ce tutoriel , j'ai mis un bon moment a l'écrire j'espère qu'il vous plaira a tous, je le complèterai ensuite avec les vendeurs puis ect ect.
Bon jeu a tous petit membre de la communauté d'aide
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 
[Tutoriel] Fabriquer son premier NPC
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Photoshop] tuto carte
» [TUTO]Fabriquer une maison sylvestre(elfes sylvains)
» [ForumEN][Tuto] - Fabriquer sa pyroscie (5euro max)
» [Neutre] Le Premier Cercle
» Fabriquer des rivets pro!

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Aide et tutoriaux pour les serveur privée :: Aide et Tutoriaux serveur privée :: Lineage II-
Sauter vers: