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
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