Script c++ Acheter votre XP
Bonsoir amis de zone emu. Ninja

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. Ninja
Excellent Hihi Merci bien Smile
(24-11-2011 20:32)Tøxïc a écrit :  
Code :
#define DEFAUT_MAX_LEVEL 600

Tient, j'en connais un qui a utilisé un de mes patchs core Langue

Cordialement,
MacWarrior.
Ouep celui du level 600, tres bon patch.
Édition :
mac tu as vu mon poste pour l'arene plizz.

Retourner en haut Accueil