Découpage de PNJ
Ici nous n'allons pas découper un PNJ avec un couteau ou autre n'allez pas croire que je sois devenu fou et que je veuille tuer du pixel Clin

Nous allons juste voir la structure d'un code de PNJ ce qui en soit est déjà plutôt marrant à faire (ou pas...)

Attention cependant je ne vous présente que le plus important certaines cases ne sont jamais remplies et pis d'abord on s'en fiche ! (d'ailleurs je ne connais pas l'utilité de toutes les cases, ce que je vous montre ici c'est vraiment les bases !)

Prenons un PNJ simple : le roi lic...Garrick Ladétrousse Heureux

INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`, `spell3`, `spell4`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `Health_mod`, `Mana_mod`, `Armor_mod`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `WDBVerified`) VALUES (103, 0, 0, 0, 0, 0, 2073, 0, 0, 0, 'Garrick Ladétrousse', '', '', 0, 5, 5, 0, 7, 7, 0, '0.93', '1.14286', 1, 0, 5, 7, 0, 32, 1, 2000, 0, 1, 0, 8, 0, 0, 0, 0, 0, 3, 4, 100, 7, 0, 103, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 9, 'EventAI', 0, 3, 1, 1, 1, 0, 182, 0, 0, 0, 0, 0, 100, 1, 1453, 0, 0, '', 12340);

entry = 103, comment ça ? Alors en fait c'est plutôt simple
Vous ne vous êtes jamais demandé d'où provenait l'ID du pnj ? Oui de votre cerveau accessoirement, mais ce qui dit au serveur "Pnjnoob a pour id XXXXXX" et bien c'est grâce à ça ! Votre PNJ ne pourra pas être ajouté s'il n'a aucun ID de défini, et, de toute manière, en jeu, il vous dira qu'il y a un problème !

Les modelid : Alors là vous l'aurez deviné, ceci correspond à la tête que votre PNJ arbore fièrement ! En gros notre cher Garrick ici utilise le modelid 2073, ce qui lui donne cette belle tête de vainqueur

Name et subname : My name is Ladétrousse, Garrick Ladétrousse, my subname, bah...Je n'en ai pas en fait, le subname est autre chose, par exemple un PNJ vendeur se verra afficher sous son nom >Vendeur de débilités en tout genre mais qui plaisent> (dans le cas de Steve Jobs Heureux !) ceci est son subname. ( Comme le nom de la guilde à laquelle se rapporte un joueur ).

Minlevel, Maxlevel : Alors ça c'est drôle, minlevel est le plus petit niveau qui sera attribué à votre PNJ, maxlevel le plus haut, si le joueur a de la chance Garrick sera level 5 sinon...il sera lvl 5 aussi, alala Blizzard n'ont décidément aucune originalité Heureux

Faction_A et Faction_H : A pour...Alliance ouiiii bravo ! et H pour ? Horde ! Vous êtes trop fort Heureux Oui j'arrête de vous prendre pour des débutants on peut rigoler non !? Alors ici la faction correspond au chiffre 7 ce qui donne => autre, ok merci Wowhead.

Npcflag : Alors ceci est, plus ou moins important tout dépend de ce que vous voulez faire de votre pnj mais si vous voulez le désigner comme garde, donneur de quête ou autre, c'est ici !

Speed_walk et Speed_Run : Ça parle de soi même, à quelle vitesse notre bon Garrick marche et à laquelle il pense battre le record du 2 x 1000 mètres en courant !

Scale : Alors notre Garrick est un gaillard, il mesure la même taille que tous les autres hommes, soit 1, 2 il sera 2x plus grand et ainsi de suite, par défaut il vaut mieux laisser un pnj en taille 1 !

Rank : 0 = mob normal donc je vous laisse imaginer si vous mettez 1 ou 2 ou 3 ou ect... ( Déconseillé d'aller trop loin ;] )

Mindmg, maxdmg, attackpower, dmg_multiplier, baseattacktime : alors mindmg et maxdmg j'ai pas trop à m'exprimer, il s'agit du dégât minimum et du dégât maximum que le mob inflige, attackpower définit sa puissance d'attaque, dmg_multiplier par combien les dégâts infligés sont multipliés et baseattacktime pour le temps d'intervalle (en millisecondes) entre chaque attaque de base soit le corps à corps.

Unit_class : c'est ce qui vous aidera a définir selon une échelle établie par Trinity le nombre d'HP et de mana que votre npc aura suivant son niveau, quand unit_class = 1 le npc n'a pas de points de mana il faut regarder dans les autres class si vous désirez lui en donner.

Unit_flags : Définit si votre PNJ est considéré comme en combat, inattaquable, assommé ect...

Lootid et Pickpocketloot : définit ce que l'on peut looter sur votre pnj lorsque celui meurt ou est volé (la suite se trouve dans la table creature_loot_template)

Mingold et Maxgold : Correspond à la valeur minimale et la valeur maximale d'argent lootable sur le mob (exprimé en pièces de cuivre) utile quand on crée un PNJ banquier destiné à mourir !

MovementType et InhabitType : MovementType = Mouvement, ceci définit si votre PNJ suit un mouvement aléatoire ou répondant à des waypoints ou alors ne bougeant pas du tout et InhabitType définit si votre PNJ est capable de nager , voler et marcher sur terre.

Health_mod, Mana_mod et Armor_mod : C'est la partie sadique de Trinity, comme vous le remarquez, la valeur de ces trois champs est 1 ce qui ne veux pas dire que Garrick a 1 HP ect... mais plutôt que par rapport à l'échelle créée par Trinity dans creature_classlevelstats la valeur attribuée à son unit_class et son level est multipliée par 1, donc si votre pnj est lvl 5 et qu'il a 87 HP vous devrez écrire dans Health_mod 2 pour que celui ci ai le double

Questitem1 (2,3,4...) : les questitems sont les objets que le mob loot lorsqu'un quête est reliée à cet objet, dans notre cas, l'id 182 correspond à la tête de Garrick

Equipment_id : alors ceci définit un id d'équipement (sans blague ?) du genre arme/bouclier, ici 1453 correspond à l'équipement 1900 dans une main et 2081 dans l'autre (creature_equip_template)

ScriptName : ScriptName est en général vide, celui ci permet la liaison entre le script inclus dans le core et le PNJ en jeu (Scriptname = guard_stormwind pour le garde de Stormwind)
Attention cependant, ne remplissez pas ces cases en vous disant "ouais cool ca scripte dès que y'a un truc dedans", si le core ne contient pas de script ça ne marchera jamais !

Et j'oubliais presque pourquoi j'ai mit le INSERT INTO en rouge, ceci est obligatoire, il signale que j'insère le code dans la base de donnée, bien sur pour une correction les logiciels tels que Quice ou Truice mettront REPLACE INTO, nWorldEditor est plus branché sur UPDATE et lorsqu'on désire supprimer quelque chose : DELETE FROM

Et voici enfin la fin de ce découpage qui fut long et fatiguant ! Je vous souhaite une bonne lecture et suit bien sur ouvert à toute demande dans la section aide.

Je vous rappelle néanmoins que ce tuto appartient à Zone Emu et à moi par la même occasion merci donc de le laisser ici !
Sa serait mieux de poster ça sur le WIKI ? Enfin je pense Heureux
Oui, sur un wiki vu la démarche du tuto ça correspond mieux.
Enlève la couleur blanche, remplace-là par une autre.

Retourner en haut Accueil