Code :
#include "ScriptPCH.h"
//VIP NPC, codé par minig, traduit par Subway's
#define TOKEN 12345
//rename config
#define rename_method 1
#define rename_numtok 1
#define rename_numcooper 1
//Factionchange config
#define faction_method 1
#define faction_numtok 1
#define faction_numcooper 1
//RaceChange Config
#define race_method 1
#define race_numtok 1
#define race_numcooper 1
//Customize Config
#define cust_method 1
#define cust_numtok 1
#define cust_numcooper 1
//Teleport Config
#define tele_method 1
#define tele_numtok 1
#define tele_numcooper 1
//changement possible
#define RENAME 1
#define FACTIONCHANGE 2
#define RACECHANGE 3
#define CUSTOMIZE 4
#define TELEPORT 6
static char moneyerr[18] = "Vous n'avez pas d'argent !";
static char tokenerr[19] = "vous n'avez pas de Token!";
bool paytok(int num, Player * player)
{
if(!player->HasItemCount(TOKEN, num, false ))
return false;
else
player->DestroyItemCount(TOKEN, num, true, false);
return true;
}
bool paymoney(int num, Player * player)
{
if(!player->GetMoney >= num)
return false;
else
player->ModifyMoney(-num);
return true;
}
bool pay(short type, Player * player)
{
switch(type)
{
case RENAME:
switch(rename_method)
{
case 0:
if(paymoney(rename_numcooper, player))
return true;
else
return false;
break;
case 1:
if(paytok(rename_numtok, player))
return true;
else
return false;
break
}
case FACTIONCHANGE:
switch(faction_method)
{
case 0:
if(paymoney(faction_numcooper, player))
return true;
break;
case 1:
if(paytok(faction_numtok, player))
return true;
break;
}
case RACECHANGE:
switch(race_method)
{
case 0:
if(paymoney(race_numcooper, player))
return true;
break;
case 1:
if(paytok(race_numtok, player))
return true;
break;
}
case CUSTOMIZE:
switch(cust_method)
{
case 0:
if(paymoney(cust_numcooper, player))
return true;
break;
case 1:
if(paytok(cust_numtok, player))
return true;
break;
}
case TELEPORT;
switch(tele_method)
{
case 0:
if(paymoney(tele_numcooper, player))
return true;
break;
case 1:
if(paytok(tele_numtok, player))
return true;
break;
}
}
return false;
}
void tele_error()
{
switch(tele_method)
{
case 0:
npc->MonsterWhisper(moneyerr, player->GetGUID());
break;
case 1:
npc->MonsterWhisper(tokenerr, player->GetGUID());
break;
}
}
class vip_npc : public CreatureScript
{
public:
vip_npc() : CreatureScript("vip_npc") {}
bool OnGossipHello(Player *player, Creature *npc);
bool OnGossipSelect(Player *player, Creature *npc, uint32 sender, uint32 uiAction);
};
bool vip_npc::OnGossipHello(Player *player, Creature *npc)
{
if (player->isInCombat())
{
player->CLOSE_GOSSIP_MENU();
npc->MonsterWhisper("Vous êtes en combat!", player->GetGUID());
return true;
}
else
{
player->ADD_GOSSIP_ITEM( 6, "Rename", GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM( 6, "Changement de Faction", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM( 6, Changement de Race", GOSSIP_SENDER_MAIN, 3);
player->ADD_GOSSIP_ITEM( 6, "Nouveau Look", GOSSIP_SENDER_MAIN, 4);
player->ADD_GOSSIP_ITEM( 2, "Teleportation", GOSSIP_SENDER_MAIN, 6);
}
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, npc->GetGUID());
return true;
}
bool vip_npc::OnGossipSelect(Player *player, Creature *npc, uint32 sender, uint32 uiAction)
{
switch(uiAction)
{
case 1: //Rename
if(pay(RENAME, player))
{
player->CLOSE_GOSSIP_MENU();
player->SetAtLoginFlag(AT_LOGIN_RENAME);
npc->MonsterWhisper("Vous devez maintenant vous reconnectez", player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
switch(rename_method)
{
case 0:
npc->MonsterWhisper(moneyerr, player->GetGUID());
break;
case 1:
npc->MonsterWhisper(tokenerr, player->GetGUID());
break;
}
}
break;
case 2: //Customize
if(pay(CUSTOMIZE, player))
{
player->CLOSE_GOSSIP_MENU();
player->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
npc->MonsterWhisper("Novy vzhled si nastavis pri relogu.", player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
switch(cust_method)
{
case 0:
npc->MonsterWhisper(moneyerr, player->GetGUID());
break;
case 1:
npc->MonsterWhisper(tokenerr, player->GetGUID());
break;
}
}
break;
case 3: //Race Change
if(pay(RACECHANGE, player))
{
player->CLOSE_GOSSIP_MENU();
player->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
npc->MonsterWhisper("Vous devez maintenant vous reconnectez.", player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
switch(race_method)
{
case 0:
npc->MonsterWhisper(moneyerr, player->GetGUID());
break;
case 1:
npc->MonsterWhisper(tokenerr, player->GetGUID());
break;
}
}
break;
case 4: //Faction Change
if(pay(FACTIONCHANGE, player))
{
player->CLOSE_GOSSIP_MENU();
player->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
npc->MonsterWhisper("Vous devez maintenant vous reconnectez", player->GetGUID());
}
else
{
player->CLOSE_GOSSIP_MENU();
switch(faction_method)
{
case 0:
npc->MonsterWhisper(moneyerr, player->GetGUID());
break;
case 1:
npc->MonsterWhisper(tokenerr, player->GetGUID());
break;
}
}
break;
case 6: //Teleport
if (player->GetTeam() == HORDE ) //destination Horde
{
player->ADD_GOSSIP_ITEM(2, "Orgrimmar", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM(2, "Thunder Bluff", GOSSIP_SENDER_MAIN, 8);
player->ADD_GOSSIP_ITEM(2, "Silvermoon ", GOSSIP_SENDER_MAIN, 9);
player->ADD_GOSSIP_ITEM(2, "Undercity", GOSSIP_SENDER_MAIN, 10);
}
else //destination Alliance
{
player->ADD_GOSSIP_ITEM(2, "Hurlevent", GOSSIP_SENDER_MAIN, 11);
player->ADD_GOSSIP_ITEM(2, "Forgefer", GOSSIP_SENDER_MAIN, 12);
player->ADD_GOSSIP_ITEM(2, "Exodar", GOSSIP_SENDER_MAIN, 13);
player->ADD_GOSSIP_ITEM(2, "Darnassus", GOSSIP_SENDER_MAIN, 14);
}
if(player->getLevel() >= 58) //Do Outlandu od levelu 58
player->ADD_GOSSIP_ITEM(2, "Shattrath ", GOSSIP_SENDER_MAIN, 15);
if(player->getLevel() >= 68) //Do Northrendu od levelu 68
player->ADD_GOSSIP_ITEM(2, "Dalaran", GOSSIP_SENDER_MAIN, 16);
player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, npc->GetGUID());
break;
case 7: //Orgrimmar
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(1, 1483.25f, -4416.525f, 25.003f, 0f);
else
tele_error();
break;
case 8: //Thunder Bluff
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(1, -1197.3f, 30f , 177f, 1.589f);
else
tele_error;
break;
case 9: //Silvermoon City
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(530f, 9530.775f, -7300.459f, 15.24f, 3.139f);
else
tele_error();
break;
case 10: //Undercity
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(0, 1560.7f, 240.45f, -43.1045f, 0.01f);
else
tele_error();
break;
case 11: //Stormwind City
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(0, -8800.41f, 622.355f, 96.8f, 2.255f);
else
tele_error();
break;
case 12: //Ironforge
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(0, -4918.880f, -940.406f, 501.57f, 5.42f);
else
tele_error();
break;
case 13: //The Exodar
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(530 , -4016.944f, -11675.455f, -134.932f , 0);
else
tele_error();
break;
case 14: //Darnassus
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(1, 9951.804f, 2280.401f, 1341.394f, 1.425f);
else
tele_error();
break;
case 15: //Shattrath City
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(530, -1837.538f, 5378.270f, -12.427f, 1.941f);
else
tele_error();
break;
case 16: //Dalaran
player->CLOSE_GOSSIP_MENU();
if(pay(TELEPORT, player))
player->TeleportTo(571, 5848.875f, 602.287f, 651.142f, 2.448f);
else
tele_error();
break;
}
}
void AddScVIP()
{
new vip_npc();
}
merci de pas oublié +1 pour merci