PNJ Métiers contre chapeluisant
Coucou tout le monde vu qu'on parlait du manque de partage je me suis dit qu'en tant que vieux crouton de wowdb j'allais tenter de montrer l'exemple Smile

Non je ne vous proposerait pas un script a deux franc six sous récupéré sur un site d'ému, non je ne vais pas non plus vous proposer un script permettant de débugger votre core en un cpp !

Je vais tout simplement partager mon script de Vendeur de métier.
Je sais que dorénavant beaucoup de serveur utilise le chapeluisant comme monnaie de vote et ce script est lié a cela car il permet l'échange de 4 chapeluisant (modifiable) contre 1 métier au choix.

En revanche attention. Si vous limitez les métier a 2 il apprendra au joueur un 3 eme métier je n'ai pas coder (car j'ai stopper la monnaie en chapeluisant) de systéme de vérification du nombre de métier mais ca devrait être relativement facile avec un pPlayer->

voici donc le code adapté pour trinity 3.3.3 compile sur une 335 mais pas testé enjoy

[code=cpp]/*
Npc métier contre chapeluisant
Par chdav
http://www.valhallasgates.fr
Merci de ne pas retirer le copyright
Merci de ne pas leecher
Merci de dire merci pour le partage
*/

//#include "precompiled.h"
#include "ScriptedPch.h"
#include "ScriptedEscortAI.h"
//#include "sc_creature.h"
//#include "sc_gossip.h"
//#include "Player.h"

#define GOSSIP_CHAP_TO_ALCHIMIE "Changer 4 chapeluisants et apprendre Alchimie a 450"
#define GOSSIP_CHAP_TO_CALLIGRAPHIE "Changer 4 chapeluisants et apprendre Calligraphie a 450"
#define GOSSIP_CHAP_TO_CUISINIER "Changer 4 chapeluisants et apprendre Cuisinier a 450"
#define GOSSIP_CHAP_TO_DEPECEUR "Changer 4 chapeluisants et apprendre Dépeceur a 450"
#define GOSSIP_CHAP_TO_ENCHANTEUR "Changer 4 chapeluisants et apprendre Enchanteur a 450"
#define GOSSIP_CHAP_TO_FORGERON "Changer 4 chapeluisants et apprendre Forgeron a 450"
#define GOSSIP_CHAP_TO_HERBORISTE "Changer 4 chapeluisants et apprendre Herboriste a 450"
#define GOSSIP_CHAP_TO_INGENIEUR "Changer 4 chapeluisants et apprendre Ingénieur a 450"
#define GOSSIP_CHAP_TO_JOAILLIER "Changer 4 chapeluisants et apprendre Joaillier a 450"
#define GOSSIP_CHAP_TO_MINEUR "Changer 4 chapeluisants et apprendre Mineur a 450"
#define GOSSIP_CHAP_TO_PECHEUR "Changer 4 chapeluisants et apprendre Pêcheur a 450"
#define GOSSIP_CHAP_TO_SECOURISTE "Changer 4 chapeluisant et apprendre Secouriste a 450"
#define GOSSIP_CHAP_TO_TAILLEUR "Changer 4 chapeluisant et apprendre Tailleur a 450"
#define GOSSIP_CHAP_TO_TDC "Changer 4 chapeluisant et apprendre Travailleur du cuir a 450"
#define NOT_ENOUGH_CHAP "Vous n'avez pas assez de chapeluisants !"
#define FINISH "Bravo $N ! Vous avez changé 4 Chapeluisants contre un métier 450"


bool GossipHello_npc_metier(Player *player, Creature *_Creature)
{
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_ALCHIMIE , GOSSIP_SENDER_MAIN, 1210); //alchimie
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_CALLIGRAPHIE , GOSSIP_SENDER_MAIN, 1211); //calligraphie
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_CUISINIER , GOSSIP_SENDER_MAIN, 1212); //cuisinier
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_DEPECEUR , GOSSIP_SENDER_MAIN, 1213); //depeceur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_ENCHANTEUR , GOSSIP_SENDER_MAIN, 1214); //enchanteur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_FORGERON , GOSSIP_SENDER_MAIN, 1215); //forgeron
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_HERBORISTE , GOSSIP_SENDER_MAIN, 1216); //herboriste
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_INGENIEUR , GOSSIP_SENDER_MAIN, 1217); //ingenieur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_JOAILLIER , GOSSIP_SENDER_MAIN, 1218); //joaillier
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_MINEUR , GOSSIP_SENDER_MAIN, 1219); //mineur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_PECHEUR , GOSSIP_SENDER_MAIN, 1220); //pecheur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_SECOURISTE , GOSSIP_SENDER_MAIN, 1221); //secouriste
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_TAILLEUR , GOSSIP_SENDER_MAIN, 1222); //tailleur
player->ADD_GOSSIP_ITEM(3, GOSSIP_CHAP_TO_TDC , GOSSIP_SENDER_MAIN, 1223); //travail du cuir
player->SEND_GOSSIP_MENU(3961,_Creature->GetGUID()); //action de fermeture
return true;
}

bool GossipSelect_npc_metier(Player *player, Creature *_Creature, uint32 sender, uint32 action)
{
// En combat
if(!player->getAttackers().empty())
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper("Vous êtes en combat $N, revenez plus tard !", player->GetGUID());

}

switch(action)
{
case 1210:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51304, 171, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1211:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(45363, 773, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1212:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51296, 185, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1213:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(50305, 393, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1214:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51313, 333, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1215:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51300, 164, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1216:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(50300, 182, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1217:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51306, 202, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1218:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51311, 755, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1219:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(50310, 186, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1220:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51294, 356, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1221:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(45542, 129, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1222:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51309, 197, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;

case 1223:
if (player->GetItemCount(24245,true) < 4)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper(NOT_ENOUGH_CHAP, player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
player->DestroyItemCount(24245, 4, true, true);
player->SetSkill(51302, 165, 450, 450);
_Creature->MonsterWhisper(FINISH, player->GetGUID());
}
break;
}
return true;
}

void AddSC_npc_metier()
{
Script *newscript;
newscript = new Script;
newscript->Name="npc_metier";
newscript->pGossipHello = &GossipHello_npc_metier;
newscript->pGossipSelect = &GossipSelect_npc_metier;
newscript->RegisterSelf();
}[/code]

Pour ceux qui aurait la mémoire courte
On le met de préférence dans le répertoire /src/server/scripts/Custom
On va dans cmakelist.txt src/server/scripts/cmakelist.txt

Code :
set(scripts_STAT_SRCS
y a déjà des truc présent sous ca, vous rajouter a la suite
Code :
Custom/npc_metier.cpp

Ensuite vous l'ajoutez a scriptloader.cpp : src/server/game/Scripting

Dans
[code=cpp]#ifdef DO_SCRIPTS
//custom[/code]
A la suite de ce qu'il peut déjà y avoir vous rajouté
[code=cpp]void AddSC_npc_metier();[/code]

enfin dans le millieu du même fichier vous avez :
[code=cpp]void AddScripts()
{
#ifdef DO_SCRIPTS

//custom[/code]
Vous rajoutez a la suite :
[code=cpp] AddSC_npc_metier();[/code]

Vous recompilez et le tour est jouer ensuite :

[code=sql]UPDATE `creature_template` set `scriptname` = "npc_metier" WHERE `entry` = iddelabebete[/code]

Voila voila Smile
merci

Retourner en haut Accueil