Présentation Toxic Buy Xp
Explication:
Un pnj qui vend de 1000 à 100000 xp a different prix.
Important:
Regler le niveau minimum et maximum.
Ouvreez le fichiez c++ à l'aide de notepadd ou autres, cherchez ces deux lignes, ligne 14 pour moi:
Code :
#define DEFAUT_MAX_LEVEL 600
#define DEFAUT_MIN_LEVEL 10
Remplacer 600 par le level max de votre serveur et 10 par le level minimum que vous souhaitez.
Le script c++ :
Code :
#include "precompiled.h"
#include "../../../../shared/Config/Config.h"
#include "../../config.h"
#include "precompiled.h"
#include "Config/Config.h"
#include "Database/DatabaseEnv.h"
#include "DBCStores.h"
#include "ObjectMgr.h"
#include "ProgressBar.h"
#include "../system/ScriptLoader.h"
#include "../system/system.h"
#include "../../../game/ScriptMgr.h"
#define DEFAUT_MAX_LEVEL 600
#define DEFAUT_MIN_LEVEL 10
enum
{
XP1 = 5000000,
XPA = 10000,
XP2 = 10000000,
XPB = 20000,
XP3 = 15000000,
XPC = 30000,
XP4 = 20000000,
XPD = 40000,
XP5 = 25000000,
XPE = 50000,
XP6 = 30000000,
XPF = 60000,
XP7 = 40000000,
XPG = 70000,
XP8 = 45000000,
XPH = 80000,
XP9 = 50000000,
XPI = 90000,
XP10 = 55000000,
XPJ = 100000,
};
bool levelMax(Player *player, Creature *_Creature)
{
int level = player->getLevel();
if (level == DEFAUT_MAX_LEVEL)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper("Vous avez deja atteint le niveau maximum !",player);
return true;
}
else if (level <= DEFAUT_MIN_LEVEL)
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterWhisper("Vous n'avez pas le niveau suffisant, level 10 requis !",player);
return true;
}
return false;
}
bool ShowBuyXp(Player *player, Creature *_Creature)
{
if(!levelMax(player, _Creature))
{
player->ADD_GOSSIP_ITEM( 8, "10000[XP] [500g]", GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM( 8, "20000[XP] [1000g]", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM( 8, "30000[XP] [1500g]", GOSSIP_SENDER_MAIN, 3);
player->ADD_GOSSIP_ITEM( 8, "40000[XP] [2000g]", GOSSIP_SENDER_MAIN, 4);
player->ADD_GOSSIP_ITEM( 8, "50000[XP] [2500g]", GOSSIP_SENDER_MAIN, 5);
player->ADD_GOSSIP_ITEM( 8, "60000[XP] [3000g]", GOSSIP_SENDER_MAIN, 6);
player->ADD_GOSSIP_ITEM( 8, "70000[XP] [4000g]", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM( 8, "80000[XP] [4500g]", GOSSIP_SENDER_MAIN, 8);
player->ADD_GOSSIP_ITEM( 8, "90000[XP] [5000g]", GOSSIP_SENDER_MAIN, 9);
player->ADD_GOSSIP_ITEM( 8, "100000[XP] [5500g]", GOSSIP_SENDER_MAIN, 10);
player->ADD_GOSSIP_ITEM( 0, "Au revoir", GOSSIP_SENDER_MAIN, 99);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,_Creature->GetObjectGuid());
}
return false;
}
bool GossipHello_Toxic_buy_Xp(Player *player, Creature *_Creature)
{
ShowBuyXp(player, _Creature);
return true;
}
void SendDefaultMenu_Toxic_buy_Xp(Player *player, Creature *_Creature, uint32 action )
{
if (player->isInCombat())
{
player->CLOSE_GOSSIP_MENU();
_Creature->MonsterSay("Vous êtes en combat!", LANG_UNIVERSAL, NULL);
return;
}
if(levelMax(player, _Creature))
{
return;
}
int32 GetGold = player->GetUInt32Value(PLAYER_FIELD_COINAGE);
int32 Rob = GetGold - XP1;
int32 Rob1 = GetGold - XP2;
int32 Rob2 = GetGold - XP3;
int32 Rob3 = GetGold - XP4;
int32 Rob4 = GetGold - XP5;
int32 Rob5 = GetGold - XP6;
int32 Rob6 = GetGold - XP7;
int32 Rob7 = GetGold - XP8;
int32 Rob8 = GetGold - XP9;
int32 Rob9 = GetGold - XP10;
switch(action)
{
case 1: // Je souhaiterais suivre mon entraînement de cavalier !
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP1)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob);
player->GiveXP(XPA, player);
_Creature->MonsterWhisper("Vous avez recue 10 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 2:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP2)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob1);
player->GiveXP(XPB, player);
_Creature->MonsterWhisper("Vous avez recue 20 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 3:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP3)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob2);
_Creature->MonsterWhisper("Vous avez recue 30 000 XP.",player);
player->GiveXP(XPC, player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 4:
if( player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP4)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob3);
player->GiveXP(XPD, player);
_Creature->MonsterWhisper("Vous avez recue 40 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 5:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP5)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob4);
player->GiveXP(XPE, player);
_Creature->MonsterWhisper("Vous avez recue 50 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 6:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP6)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob5);
player->GiveXP(XPF, player);
_Creature->MonsterWhisper("Vous avez recue 60 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 7:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP7)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob6);
player->GiveXP(XPG, player);
_Creature->MonsterWhisper("Vous avez recue 70 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 8:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP8)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob7);
player->GiveXP(XPH, player);
_Creature->MonsterWhisper("Vous avez recue 80 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 9:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP9)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob8);
player->GiveXP(XPI, player);
_Creature->MonsterWhisper("Vous avez recue 90 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
case 10:
if(player->GetUInt32Value(PLAYER_FIELD_COINAGE) < XP10)
{
_Creature->MonsterWhisper("Vous n'avez pas assez d'argent !",player);
player->CLOSE_GOSSIP_MENU();
return;
}else{
player->SetUInt32Value(PLAYER_FIELD_COINAGE, Rob9);
player->GiveXP(XPJ, player);
_Creature->MonsterWhisper("Vous avez recue 100 000 XP.",player);
player->CLOSE_GOSSIP_MENU();
}
break;
}
}
bool GossipSelect_Toxic_buy_Xp(Player *player, Creature *_Creature, uint32 sender, uint32 action )
{
// Main menu
if (sender == GOSSIP_SENDER_MAIN)
SendDefaultMenu_Toxic_buy_Xp(player, _Creature, action);
return true;
}
void AddSC_Toxic_buy_Xp()
{
Script *newscript;
newscript = new Script;
newscript->Name = "Toxic_buy_Xp";
newscript->pGossipHello = &GossipHello_Toxic_buy_Xp;
newscript->pGossipSelect = &GossipSelect_Toxic_buy_Xp;
newscript->RegisterSelf();
}
Le SQL :
Code :
DELETE FROM `creature_template` WHERE `entry` = 200003;
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_1`, `modelid_2`, `modelid_3`, `modelid_4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`, `maxmana`, `armor`, `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`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `vehicle_id`, `equipment_id`, `trainer_id`, `vendor_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`) VALUES (200003, 0, 0, 0, 0, 0, 150075, 150075, 150075, 150075, 'Toxic', 'Buy Xp', '', 0, 80, 80, 100000, 100000, 0, 0, 3750, 35, 35, 1, 1, 1.14286, 1, 5, 16000, 24000, 0, 6000, 1, 250000, 250000, 0, 0, 2, 0, 0, 0, 0, 0, 12800, 19200, 4800, 7, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 'Toxic_buy_Xp');
Voila.
Moindre erruere n'hésitez pas.
Cordialement Toxic.