Psal jsem to na TC asi před půl rokem, takže to bude chtít teď trochu úprav.
Chat VIP
#include "ScriptMgr.h"
#include "Chat.h"
using std::string;
#define COMMAND_SCRIPT "chat_vip"
#define ERROR_MESSAGE "Prikaz nemuzete pouzit, protoze nemate aktivni VIP"
#define MESSAGE_COMBAT "Prikaz nemuzete pouzit, jste pod utokem"
#define MESSAGE_SAVE "Vase postava byl uspesne ulozena"
#define MESSAGE_COOLDOWN "Vasi postave byly resetovany cooldowny"
#define MESSAGE_PVP "Prikaz nemuzete pouzivat v PVP oblastech"
#define SPELL_EFFECT 61456
class chat_vip : public CommandScript
{
public:
chat_vip();
~chat_vip();
static string getNameLink(Player *player);
static bool HandleWorldChatCommand(ChatHandler* handler, const char* args);
static bool VipSave(ChatHandler* handler, const char* args);
static bool VipCd(ChatHandler* handler, const char* args);
static bool VipTime(ChatHandler* handler, const char* args);
static bool isVip(uint32 accountId);
ChatCommand * GetCommands() const;
};
chat_vip::chat_vip() : CommandScript(COMMAND_SCRIPT){}
chat_vip::~chat_vip(){}
string chat_vip::getNameLink(Player *player)
{
string name = player->GetName();
string color = "|cffFAEB00";
return "|Hplayer:"+name+"|h|cffFAEB00["+color+name+"]|cffFFFFFF|h|r";
}
bool chat_vip::HandleWorldChatCommand(ChatHandler* handler, const char* args)
{
string message = "";
string tempArgs = args;
Player *player = handler->GetSession()->GetPlayer();
if(isVip(player->GetSession()->GetAccountId()))
{
message += "|cffFF0000[VIP]";
message += getNameLink(player);
message += "|cffFFFFFF";
}
else
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE);
return false;
}
if(!handler->GetSession()->GetPlayer()->CanSpeak())
return false;
if(!args || args == NULL || tempArgs == "" || tempArgs == " " || !tempArgs.length())
{
ChatHandler(player->GetSession()).PSendSysMessage("|cffFF0000.vsay|r |cffFAEB00 Prikaz napise zpravu celemu serveru|r", player->GetName());
ChatHandler(player->GetSession()).PSendSysMessage("|cffFF0000.vsave|r |cffFAEB00 Prikaz ulozi vasi postavu|r", player->GetName());
ChatHandler(player->GetSession()).PSendSysMessage("|cffFF0000.vcd|r |cffFAEB00 Prikaz resetuje cooldowny|r", player->GetName());
ChatHandler(player->GetSession()).PSendSysMessage("|cffFF0000.vtime|r |cffFAEB00 Prikaz ukaze datum expirace VIP uctu (rok-mesic-den)|r", player->GetName());
return false;
}
if(player->InArena() || player->InBattleground())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_PVP);
return false;
}
message += tempArgs;
sWorld->SendServerMessage(SERVER_MSG_STRING, message.c_str(), 0);
return true;
}
ChatCommand * chat_vip::GetCommands() const
{
static ChatCommand WorldChatCommandTable[] =
{
{"vsay", SEC_PLAYER, true, &HandleWorldChatCommand, "", NULL},
{"vsave", SEC_PLAYER, true, &VipSave, "", NULL},
{"vcd", SEC_PLAYER, true, &VipCd, "", NULL},
{"vtime", SEC_PLAYER, true, &VipTime, "", NULL},
{NULL, 0, false, NULL, "", NULL}
};
return WorldChatCommandTable;
}
bool chat_vip::VipSave(ChatHandler* handler, const char* args)
{
Player *player = handler->GetSession()->GetPlayer();
if(player == NULL)
return false;
if(!isVip(player->GetSession()->GetAccountId()))
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE);
return false;
}
if(player->isInCombat())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_COMBAT);
return false;
}
if(player->InArena() || player->InBattleground())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_PVP);
return false;
}
player->SaveToDB();
player->GetSession()->SendAreaTriggerMessage(MESSAGE_SAVE);
return true;
}
bool chat_vip::VipCd(ChatHandler* handler, const char* args)
{
Player *player = handler->GetSession()->GetPlayer();
if(player == NULL)
return false;
if(!isVip(player->GetSession()->GetAccountId()))
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE);
return false;
}
if(player->isInCombat())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_COMBAT);
return false;
}
if(player->InArena() || player->InBattleground())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_PVP);
return false;
}
player->RemoveAllSpellCooldown();
player->CastSpell(player, SPELL_EFFECT, false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_COOLDOWN);
return true;
}
bool chat_vip::VipTime(ChatHandler* handler, const char* args)
{
Player *player = handler->GetSession()->GetPlayer();
if(player == NULL)
return false;
if(!isVip(player->GetSession()->GetAccountId()))
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE);
return false;
}
if(player->isInCombat())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_COMBAT);
return false;
}
if(player->InArena() || player->InBattleground())
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_PVP);
return false;
}
QueryResult getDate = LoginDatabase.PQuery("SELECT expirace FROM vip WHERE account_id='%i'", player->GetSession()->GetAccountId());
if(!getDate)
return false;
Field *field = getDate->Fetch();
const char * date = field[0].GetCString();
string msg = date;
string temp = "Vip ucet expiruje: "+msg;
player->GetSession()->SendAreaTriggerMessage(temp.c_str());
return true;
}
bool chat_vip::isVip(uint32 accountId)
{
int bufferSize = 20;
char * timeField = new char[bufferSize];
time_t now = time(NULL);
strftime(timeField, bufferSize, "%Y-%m-%d", localtime(&now));
QueryResult getDate = LoginDatabase.PQuery("SELECT expirace FROM vip WHERE account_id='%i'", accountId);
if(!getDate)
{
delete timeField;
return false;
}
Field *field = getDate->Fetch();
const char * date = field[0].GetCString();
std::string stringLocal = timeField;
std::string stringDb = date;
stringLocal.erase(4,1);
stringLocal.erase(6,1);
stringDb.erase(4,1);
stringDb.erase(6,1);
uint32 localTime = atoi(stringLocal.c_str());
uint32 dbTime = atoi(stringDb.c_str());
if(localTime < dbTime)
{
delete timeField;
return true;
}
else
{
delete timeField;
return false;
}
}
void AddSC_chat_vip()
{
new chat_vip();
}
NPC VIP
#include "ScriptMgr.h"
#define NPC_SCRIPTNAME "npc_vip"
#define SPELL_EFFECT 61456
#define ERROR_MESSAGE_COMBAT "Jste pod utokem"
#define ERROR_MESSAGE "Bohuzel nemate aktivovane VIP"
#define ERROR_MESSAGE_GOLD "Bohuzel nemate dostatek goldu"
#define MESSAGE_EXPERIENCE "Vase postava obdrzela %i zkusenosti"
#define MESSAGE_ITEMS "Vase postava obdrzela startovaci itemy"
#define MESSAGE_REP "Vase postava obdrzela vybranou reputaci"
#define ERROR_MESSAGE_KNIHA "Muzete vlastnit pouze jeden predmet"
#define MESSAGE_COOLDOWN "Vasi postave byly resetovany cooldowny"
#define EXALTED 90999
#define ITEM_COUNT 1
#define ITEM_KNIHA 1002
enum items
{
ITEM_1_SHOULDER = 42949,
ITEM_1_CHEST = 48685,
ITEM_1_FINGER = 50255,
ITEM_1_TRINKET1_HORDE = 44097,
ITEM_1_TRINKET1_ALLIANCE = 44098,
ITEM_1_TRINKET2 = 42991,
ITEM_1_TWOHAND = 44092,
ITEM_1_RANGED = 42946,
ITEM_2_SHOULDER = 42985,
ITEM_2_CHEST = 48691,
ITEM_2_FINGER = 50255,
ITEM_2_TRINKET1_HORDE = 44097,
ITEM_2_TRINKET1_ALLIANCE = 44098,
ITEM_2_TRINKET2 = 42992,
ITEM_2_TWOHAND = 42947,
ITEM_3_SHOULDER = 42952,
ITEM_3_CHEST = 48689,
ITEM_3_FINGER = 50255,
ITEM_3_TRINKET1_HORDE = 44097,
ITEM_3_TRINKET1_ALLIANCE = 44098,
ITEM_3_TRINKET2 = 42991,
ITEM_3_TWOHAND = 48718,
ITEM_3_ONEHAND1 = 42944,
ITEM_3_ONEHAND2 = 44096,
ITEM_3_RANGED = 42946,
ITEM_4_SHOULDER = 42985,
ITEM_4_CHEST = 48691,
ITEM_4_FINGER = 50255,
ITEM_4_TRINKET1_HORDE = 44097,
ITEM_4_TRINKET1_ALLIANCE = 44098,
ITEM_4_TRINKET2 = 42991,
ITEM_4_TWOHAND = 48718,
ITEM_4_ONEHAND1 = 48716,
ITEM_4_ONEHAND2 = 48716,
ITEM_4_RANGED = 42946
};
enum golds_exp
{
GOLD_15 = 150000,
GOLD_100 = 1000000,
GOLD_250 = 2500000,
GOLD_400 = 4000000,
GOLD_1000 = 10000000,
GOLD_1500 = 15000000,
GOLD_10000 = 100000000
};
enum golds_rep
{
GOLD_REP_1000 = 10000000,
GOLD_REP_2000 = 20000000,
GOLD_REP_3000 = 30000000
};
enum experience
{
EXPERIENCE_1000 = 1000,
EXPERIENCE_10000 = 10000,
EXPERIENCE_50000 = 50000,
EXPERIENCE_100000 = 100000,
EXPERIENCE_500000 = 500000,
EXPERIENCE_1000000 = 1000000,
EXPERIENCE_10000000 = 10000000
};
const uint32 allianceMainCities[] = {47, 54, 69, 72, -1};
const uint32 allianceOtherFactions[] = {509, 589, 730, 890, 946, 978, 1037, 1050, 1068, 1094, 1126, -1};
const uint32 hordeMainCities[] = {68, 76, 530, 911, -1};
const uint32 hordeOtherFactions[] = {81, 510, 729, 889, 922, 941, 947, 1052, 1064, 1067, 1085, 1124, -1};
const uint32 neutralFactions[] = {21, 59, 70, 87, 92, 93, 270, 349, 369, 470, 529, 576, 577, 609, 749, 809, 909, 910, 932, 933, 934, 935, 942,
967, 970, 989, 990, 1011, 1012, 1015, 1031, 1038, 1073, 1077, 1090, 1091, 1098, 1104, 1105, 1106, 1119, -1};
class npc_vip : public CreatureScript
{
public:
npc_vip();
~npc_vip();
bool OnGossipHello(Player *player, Creature *creature);
bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 action);
bool isVip(uint32 accountId);
};
npc_vip::npc_vip() : CreatureScript(NPC_SCRIPTNAME){}
npc_vip::~npc_vip(){}
bool npc_vip::OnGossipHello(Player *player, Creature *creature)
{
if(player == NULL)
return false;
if(!isVip(player->GetSession()->GetAccountId()))
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE);
return false;
}
if(player->isInCombat())
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_COMBAT);
return false;
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Startovaci itemy", GOSSIP_SENDER_MAIN, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportovaci kniha", GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Koupit zkusenosti za goldy", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Naucit reputace za goldy", GOSSIP_SENDER_MAIN, 12);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Resetovat cooldowny", GOSSIP_SENDER_MAIN, 18);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zavrit", GOSSIP_SENDER_MAIN, 10);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
return true;
}
bool npc_vip::OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 action)
{
if(player == NULL)
return false;
if(sender != GOSSIP_SENDER_MAIN)
return false;
player->PlayerTalkClass->ClearMenus();
switch(action)
{
case 0:
if(player->getClass() == CLASS_WARRIOR || player->getClass() == CLASS_PALADIN || player->getClass() == CLASS_DEATH_KNIGHT)
{
player->AddItem(ITEM_1_SHOULDER, ITEM_COUNT);
player->AddItem(ITEM_1_CHEST, ITEM_COUNT);
player->AddItem(ITEM_1_FINGER, ITEM_COUNT);
if(player->GetTeam() == HORDE)
player->AddItem(ITEM_1_TRINKET1_HORDE, ITEM_COUNT);
else
player->AddItem(ITEM_1_TRINKET1_ALLIANCE, ITEM_COUNT);
player->AddItem(ITEM_1_TRINKET2, ITEM_COUNT);
player->AddItem(ITEM_1_TWOHAND, ITEM_COUNT);
player->AddItem(ITEM_1_RANGED, ITEM_COUNT);
}
else if(player->getClass() == CLASS_PRIEST || player->getClass() == CLASS_MAGE || player->getClass() == CLASS_WARLOCK)
{
player->AddItem(ITEM_2_SHOULDER, ITEM_COUNT);
player->AddItem(ITEM_2_CHEST, ITEM_COUNT);
player->AddItem(ITEM_2_FINGER, ITEM_COUNT);
if(player->GetTeam() == HORDE)
player->AddItem(ITEM_1_TRINKET1_HORDE, ITEM_COUNT);
else
player->AddItem(ITEM_1_TRINKET1_ALLIANCE, ITEM_COUNT);
player->AddItem(ITEM_2_TRINKET2, ITEM_COUNT);
player->AddItem(ITEM_2_TWOHAND, ITEM_COUNT);
}
else if(player->getClass() == CLASS_ROGUE || player->getClass() == CLASS_DRUID)
{
player->AddItem(ITEM_3_SHOULDER, ITEM_COUNT);
player->AddItem(ITEM_3_CHEST, ITEM_COUNT);
player->AddItem(ITEM_3_FINGER, ITEM_COUNT);
if(player->GetTeam() == HORDE)
player->AddItem(ITEM_1_TRINKET1_HORDE, ITEM_COUNT);
else
player->AddItem(ITEM_1_TRINKET1_ALLIANCE, ITEM_COUNT);
player->AddItem(ITEM_3_TRINKET2, ITEM_COUNT);
player->AddItem(ITEM_3_TWOHAND, ITEM_COUNT);
player->AddItem(ITEM_3_ONEHAND1, ITEM_COUNT);
player->AddItem(ITEM_3_ONEHAND2, ITEM_COUNT);
player->AddItem(ITEM_3_RANGED, ITEM_COUNT);
}
else if(player->getClass() == CLASS_SHAMAN || player->getClass() == CLASS_HUNTER)
{
player->AddItem(ITEM_4_SHOULDER, ITEM_COUNT);
player->AddItem(ITEM_4_CHEST, ITEM_COUNT);
player->AddItem(ITEM_4_FINGER, ITEM_COUNT);
if(player->GetTeam() == HORDE)
player->AddItem(ITEM_1_TRINKET1_HORDE, ITEM_COUNT);
else
player->AddItem(ITEM_1_TRINKET1_ALLIANCE, ITEM_COUNT);
player->AddItem(ITEM_4_TRINKET2, ITEM_COUNT);
player->AddItem(ITEM_4_TWOHAND, ITEM_COUNT);
player->AddItem(ITEM_4_ONEHAND1, ITEM_COUNT);
player->AddItem(ITEM_4_ONEHAND2, ITEM_COUNT);
player->AddItem(ITEM_4_RANGED, ITEM_COUNT);
}
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_ITEMS);
player->CLOSE_GOSSIP_MENU();
break;
case 1:
if(player->HasItemCount(ITEM_KNIHA, ITEM_COUNT, true))
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_KNIHA);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->AddItem(ITEM_KNIHA, ITEM_COUNT);
player->CLOSE_GOSSIP_MENU();
}
break;
case 2:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"1000 zkusenosti - 15 goldu", GOSSIP_SENDER_MAIN, 3);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"10000 zkusenosti - 100 goldu", GOSSIP_SENDER_MAIN, 4);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"50000 zkusenosti - 250 goldu", GOSSIP_SENDER_MAIN, 5);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"100000 zkusenosti - 400 goldu", GOSSIP_SENDER_MAIN, 6);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"500000 zkusenosti - 1000 goldu", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"1000000 zkusenosti - 1500 goldu", GOSSIP_SENDER_MAIN, 8);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"10000000 zkusenosti - 10000 goldu", GOSSIP_SENDER_MAIN, 9);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zpet", GOSSIP_SENDER_MAIN, 11);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
break;
case 3:
if(player->GetMoney() < GOLD_15)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_15);
player->GiveXP(EXPERIENCE_1000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_1000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 4:
if(player->GetMoney() < GOLD_100)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_100);
player->GiveXP(EXPERIENCE_10000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_10000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 5:
if(player->GetMoney() < GOLD_250)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_250);
player->GiveXP(EXPERIENCE_50000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_50000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 6:
if(player->GetMoney() < GOLD_400)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_400);
player->GiveXP(EXPERIENCE_100000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_100000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 7:
if(player->GetMoney() < GOLD_1000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_1000);
player->GiveXP(EXPERIENCE_500000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_500000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 8:
if(player->GetMoney() < GOLD_1500)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_1500);
player->GiveXP(EXPERIENCE_1000000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_1000000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 9:
if(player->GetMoney() < GOLD_10000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->ModifyMoney(-GOLD_10000);
player->GiveXP(EXPERIENCE_10000000, player);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_EXPERIENCE, EXPERIENCE_10000000);
player->CLOSE_GOSSIP_MENU();
}
break;
case 10:
player->CLOSE_GOSSIP_MENU();
break;
case 11:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Startovaci itemy", GOSSIP_SENDER_MAIN, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportovaci kniha", GOSSIP_SENDER_MAIN, 1);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Koupit zkusenosti za goldy", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Naucit reputace za goldy", GOSSIP_SENDER_MAIN, 12);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Resetovat cooldowny", GOSSIP_SENDER_MAIN, 18);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zavrit", GOSSIP_SENDER_MAIN, 10);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
break;
case 12:
if(player->GetTeam() == HORDE)
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Hlavni mesta - 1000g", GOSSIP_SENDER_MAIN, 13);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Ostatni frakce Hordy - 2000g", GOSSIP_SENDER_MAIN, 14);
}
else if(player->GetTeam() == ALLIANCE)
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Hlavni mesta - 1000g", GOSSIP_SENDER_MAIN, 15);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Ostatni frakce Alliance - 2000g", GOSSIP_SENDER_MAIN, 16);
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Neutralni frakce - 3000g", GOSSIP_SENDER_MAIN, 17);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zpet", GOSSIP_SENDER_MAIN, 11);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
break;
case 13:
if(player->GetMoney() < GOLD_REP_1000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
for(int i = 0; hordeMainCities[i] != -1; i++)
{
player->SetReputation(hordeMainCities[i], EXALTED);
}
player->ModifyMoney(-GOLD_REP_1000);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_REP);
player->CLOSE_GOSSIP_MENU();
}
break;
case 14:
if(player->GetMoney() < GOLD_REP_2000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
for(int i = 0; hordeOtherFactions[i] != -1; i++)
{
player->SetReputation(hordeOtherFactions[i], EXALTED);
}
player->ModifyMoney(-GOLD_REP_2000);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_REP);
player->CLOSE_GOSSIP_MENU();
}
break;
case 15:
if(player->GetMoney() < GOLD_REP_1000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
for(int i = 0; allianceMainCities[i] != -1; i++)
{
player->SetReputation(allianceMainCities[i], EXALTED);
}
player->ModifyMoney(-GOLD_REP_1000);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_REP);
player->CLOSE_GOSSIP_MENU();
}
break;
case 16:
if(player->GetMoney() < GOLD_REP_2000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
for(int i = 0; allianceOtherFactions[i] != -1; i++)
{
player->SetReputation(allianceOtherFactions[i], EXALTED);
}
player->ModifyMoney(-GOLD_REP_2000);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_REP);
player->CLOSE_GOSSIP_MENU();
}
break;
case 17:
if(player->GetMoney() < GOLD_REP_3000)
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_GOLD);
player->CLOSE_GOSSIP_MENU();
}
else
{
for(int i = 0; neutralFactions[i] != -1; i++)
{
player->SetReputation(neutralFactions[i], EXALTED);
}
player->ModifyMoney(-GOLD_REP_3000);
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_REP);
player->CLOSE_GOSSIP_MENU();
}
break;
case 18:
player->RemoveAllSpellCooldown();
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MESSAGE_COOLDOWN);
player->CLOSE_GOSSIP_MENU();
break;
default:
break;
}
return true;
}
bool npc_vip::isVip(uint32 accountId)
{
int bufferSize = 20;
char * timeField = new char[bufferSize];
time_t now = time(NULL);
strftime(timeField, bufferSize, "%Y-%m-%d", localtime(&now));
QueryResult getDate = LoginDatabase.PQuery("SELECT expirace FROM vip WHERE account_id='%i'", accountId);
if(!getDate)
{
delete timeField;
return false;
}
Field *field = getDate->Fetch();
const char * date = field[0].GetCString();
std::string stringLocal = timeField;
std::string stringDb = date;
stringLocal.erase(4,1);
stringLocal.erase(6,1);
stringDb.erase(4,1);
stringDb.erase(6,1);
uint32 localTime = atoi(stringLocal.c_str());
uint32 dbTime = atoi(stringDb.c_str());
if(localTime < dbTime)
{
delete timeField;
return true;
}
else
{
delete timeField;
return false;
}
}
void AddSC_npc_vip()
{
new npc_vip;
}
Teleporter NPC
#include "ScriptMgr.h"
#define CREATURE_SCRIPT_NAME "npc_teleporter"
#define ERROR_MESSAGE_1 "Tvoje postava musi mit alespon level 58!"
#define ERROR_MESSAGE_2 "Tvoje postava musi mit alespon level 68!"
#define BUFF_MESSAGE "Tvoje postava obdrzela buffy"
#define MAXSKILL_MESSAGE "Tvoje postava ziskala maximalni skill"
#define WEAPON_MESSAGE "Tvoje postava se naucila vsechny zbrane"
#define RESTORE_MESSAGE "Tve postave bylo obnoveno zdravi a mana"
#define SPELL_EFFECT 61456
#define ORGRIMMAR_MAPID 1
#define ORGRIMMAR_X 1629.36
#define ORGRIMMAR_Y -4373.39
#define ORGRIMMAR_Z 31.2564
#define ORGRIMMAR_ORIENTATION 3.54839
#define ORGRIMMAR_OPTIONS 0
#define ORGRIMMAR_MESSAGE "Byl jsi teleportovan do Orgrimmaru"
#define SILVERMOONCITY_MAPID 530
#define SILVERMOONCITY_X 9487.69
#define SILVERMOONCITY_Y -7279.2
#define SILVERMOONCITY_Z 14.2866
#define SILVERMOONCITY_ORIENTATION 6.16478
#define SILVERMOONCITY_OPTIONS 0
#define SILVERMOONCITY_MESSAGE "Byl jsi teleportovan do Silvermoon City"
#define UNDERCITY_MAPID 0
#define UNDERCITY_X 1584.07
#define UNDERCITY_Y 241.987
#define UNDERCITY_Z -52.1534
#define UNDERCITY_ORIENTATION 0.049647
#define UNDERCITY_OPTIONS 0
#define UNDERCITY_MESSAGE "Byl jsi teleportovan do Undercity"
#define THUNDERBLUFF_MAPID 1
#define THUNDERBLUFF_X -1277.34
#define THUNDERBLUFF_Y 124.804
#define THUNDERBLUFF_Z 131.287
#define THUNDERBLUFF_ORIENTATION 5.22274
#define THUNDERBLUFF_OPTIONS 0
#define THUNDERBLUFF_MESSAGE "Byl jsi teleportovan do Thunder Bluffu"
#define STORMWINDCITY_MAPID 0
#define STORMWINDCITY_X -8833.38
#define STORMWINDCITY_Y 628.628
#define STORMWINDCITY_Z 94.0066
#define STORMWINDCITY_ORIENTATION 1.06535
#define STORMWINDCITY_OPTIONS 0
#define STORMWINDCITY_MESSAGE "Byl jsi teleportovan do Stormwind City"
#define DARNASSUS_MAPID 1
#define DARNASSUS_X 9949.56
#define DARNASSUS_Y 2284.21
#define DARNASSUS_Z 1341.4
#define DARNASSUS_ORIENTATION 1.59587
#define DARNASSUS_OPTIONS 0
#define DARNASSUS_MESSAGE "Byl jsi teleportovan do Darnassusu"
#define EXODAR_MAPID 530
#define EXODAR_X -3965.7
#define EXODAR_Y -11653.6
#define EXODAR_Z -138.844
#define EXODAR_ORIENTATION 0.852154
#define EXODAR_OPTIONS 0
#define EXODAR_MESSAGE "Byl jsi teleportovan do Exodaru"
#define IRONFORGE_MAPID 0
#define IRONFORGE_X -4918.88
#define IRONFORGE_Y -940.406
#define IRONFORGE_Z 501.564
#define IRONFORGE_ORIENTATION 5.42347
#define IRONFORGE_OPTIONS 0
#define IRONFORGE_MESSAGE "Byl jsi teleportovan do Ironforge"
#define DARKPORTAL_MAPID 0
#define DARKPORTAL_X -11840.1
#define DARKPORTAL_Y -3196.63
#define DARKPORTAL_Z -29.6059
#define DARKPORTAL_ORIENTATION 3.3391
#define DARKPORTAL_OPTIONS 0
#define DARKPORTAL_MESSAGE "Byl jsi teleportovan k Dark Portalu"
#define SHATTRATH_MAPID 530
#define SHATTRATH_X -1838.16
#define SHATTRATH_Y 5301.79
#define SHATTRATH_Z -12.428
#define SHATTRATH_ORIENTATION 5.9517
#define SHATTRATH_OPTIONS 0
#define SHATTRATH_MESSAGE "Byl jsi teleportovan do Shattrathu"
#define DALARAN_MAPID 571
#define DALARAN_X 5804.15
#define DALARAN_Y 624.771
#define DALARAN_Z 647.767
#define DALARAN_ORIENTATION 1.64
#define DALARAN_OPTIONS 0
#define DALARAN_MESSAGE "Byl jsi teleportovan do Dalaranu"
#define GURUBASHI_MAPID 0
#define GURUBASHI_X -13277.4
#define GURUBASHI_Y 127.372
#define GURUBASHI_Z 26.1418
#define GURUBASHI_ORIENTATION 1.11878
#define GURUBASHI_OPTIONS 0
#define GURUBASHI_MESSAGE "Byl jsi teleportovan do Gurubashi Areny"
#define RINGOFTRIALS_MAPID 530
#define RINGOFTRIALS_X -1999.94
#define RINGOFTRIALS_Y 6581.71
#define RINGOFTRIALS_Z 11.32
#define RINGOFTRIALS_ORIENTATION 2.36528
#define RINGOFTRIALS_OPTIONS 0
#define RINGOFTRIALS_MESSAGE "Byl jsi teleportovan do Ring of Trials Areny"
#define CIRCLEOFBLOOD_MAPID 530
#define CIRCLEOFBLOOD_X 2839.44
#define CIRCLEOFBLOOD_Y 5930.17
#define CIRCLEOFBLOOD_Z 11.1002
#define CIRCLEOFBLOOD_ORIENTATION 3.16284
#define CIRCLEOFBLOOD_OPTIONS 0
#define CIRCLEOFBLOOD_MESSAGE "Byl jsi teleportovan do Circle of Blood Areny"
enum buffEnum
{
MARKOFTHEWILD = 48469,
BATTLESHOUT = 47436,
BLESSINGOFKINGS = 58054,
ARCANEBRILLIANCE = 43002,
POWERWORDFORTITUDE = 48161
};
enum weaponsEnum
{
SPELL_BLOCK = 107,
SPELL_BOWS = 264,
SPELL_CROSSBOWS = 5011,
SPELL_DAGGERS = 1180,
SPELL_DUAL_WIELD = 674,
SPELL_FIST_WEAPONS = 15590,
SPELL_GUNS = 266,
SPELL_MAIL = 8737,
SPELL_PLATE = 750,
SPELL_ONE_HANDED_AXES = 196,
SPELL_ONE_HANDED_MACES = 198,
SPELL_ONE_HANDED_SWORDS = 201,
SPELL_TWO_HANDED_AXES = 197,
SPELL_TWO_HANDED_MACES = 199,
SPELL_TWO_HANDED_SWORDS = 202,
SPELL_STAVES = 227,
SPELL_THROW = 2764,
SPELL_THROWN = 2567,
SPELL_POLEARMS = 200,
SPELL_RELIC = 52665,
SPELL_RELIC_2 = 27764,
SPELL_RELIC_3 = 27762,
SPELL_RELIC_4 = 27763,
SPELL_SHIELD = 9116,
SPELL_SHOOT = 3018,
SPELL_SHOOT_WANDS = 5019,
SPELL_WANDS = 5009
};
class npc_teleporter : public CreatureScript
{
public:
npc_teleporter();
~npc_teleporter();
bool OnGossipHello(Player *player, Creature *creature);
bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 action);
};
npc_teleporter::npc_teleporter() : CreatureScript(CREATURE_SCRIPT_NAME){}
npc_teleporter::~npc_teleporter(){}
bool npc_teleporter::OnGossipHello(Player *player, Creature *creature)
{
if(player->isInCombat())
{
player->GetSession()->SendAreaTriggerMessage("Jste pod utokem");
return false;
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportace - mesta", GOSSIP_SENDER_MAIN, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportace - pvp", GOSSIP_SENDER_MAIN, 13);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Buffy", GOSSIP_SENDER_MAIN, 18);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Naucit zbrane", GOSSIP_SENDER_MAIN, 19);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Max skill", GOSSIP_SENDER_MAIN, 20);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Reset many a zivotu", GOSSIP_SENDER_MAIN, 21);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zavrit", GOSSIP_SENDER_MAIN, 1);
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
return true;
}
bool npc_teleporter::OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 action)
{
if(player == NULL)
return false;
if(sender != GOSSIP_SENDER_MAIN)
return false;
player->PlayerTalkClass->ClearMenus();
switch(action)
{
case 0:
if(player->GetTeam() == HORDE && !player->isGameMaster())
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Orgrimmaru|r", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Silvermoon City|r", GOSSIP_SENDER_MAIN, 3);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Undercity|r", GOSSIP_SENDER_MAIN, 4);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Thunder Bluffu|r", GOSSIP_SENDER_MAIN, 5);
}
else if(player->GetTeam() == ALLIANCE && !player->isGameMaster())
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Stormwind City|r", GOSSIP_SENDER_MAIN, 6);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Darnassusu|r", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Exodaru|r", GOSSIP_SENDER_MAIN, 8);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Ironforge|r", GOSSIP_SENDER_MAIN, 9);
}
else if(player->isGameMaster())
{
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Orgrimmaru|r", GOSSIP_SENDER_MAIN, 2);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Silvermoon City|r", GOSSIP_SENDER_MAIN, 3);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Undercity|r", GOSSIP_SENDER_MAIN, 4);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Thunder Bluffu|r", GOSSIP_SENDER_MAIN, 5);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Stormwind City|r", GOSSIP_SENDER_MAIN, 6);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Darnassusu|r", GOSSIP_SENDER_MAIN, 7);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Exodaru|r", GOSSIP_SENDER_MAIN, 8);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff0000FFTeleportovat do Ironforge|r", GOSSIP_SENDER_MAIN, 9);
}
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff00FFFFTeleportovat k Dark Portalu|r", GOSSIP_SENDER_MAIN, 10);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff00FFFFTeleportovat do Shattrathu|r", GOSSIP_SENDER_MAIN, 11);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff00FFFFTeleportovat do Dalaranu|r", GOSSIP_SENDER_MAIN, 12);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zpet", GOSSIP_SENDER_MAIN, 17);
player->SEND_GOSSIP_MENU(2, creature->GetGUID());
break;
case 1:
player->CLOSE_GOSSIP_MENU();
break;
case 2:
player->TeleportTo(ORGRIMMAR_MAPID, ORGRIMMAR_X, ORGRIMMAR_Y, ORGRIMMAR_Z, ORGRIMMAR_ORIENTATION, ORGRIMMAR_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(ORGRIMMAR_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 3:
player->TeleportTo(SILVERMOONCITY_MAPID, SILVERMOONCITY_X, SILVERMOONCITY_Y, SILVERMOONCITY_Z, SILVERMOONCITY_ORIENTATION, SILVERMOONCITY_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(SILVERMOONCITY_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 4:
player->TeleportTo(UNDERCITY_MAPID, UNDERCITY_X, UNDERCITY_Y, UNDERCITY_Z, UNDERCITY_ORIENTATION, UNDERCITY_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(UNDERCITY_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 5:
player->TeleportTo(THUNDERBLUFF_MAPID, THUNDERBLUFF_X, THUNDERBLUFF_Y, THUNDERBLUFF_Z, THUNDERBLUFF_ORIENTATION, THUNDERBLUFF_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(THUNDERBLUFF_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 6:
player->TeleportTo(STORMWINDCITY_MAPID, STORMWINDCITY_X, STORMWINDCITY_Y, STORMWINDCITY_Z, STORMWINDCITY_ORIENTATION, STORMWINDCITY_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(STORMWINDCITY_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 7:
player->TeleportTo(DARNASSUS_MAPID, DARNASSUS_X, DARNASSUS_Y, DARNASSUS_Z, DARNASSUS_ORIENTATION, DARNASSUS_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(DARNASSUS_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 8:
player->TeleportTo(EXODAR_MAPID, EXODAR_X, EXODAR_Y, EXODAR_Z, EXODAR_ORIENTATION, EXODAR_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(EXODAR_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 9:
player->TeleportTo(IRONFORGE_MAPID, IRONFORGE_X, IRONFORGE_Y, IRONFORGE_Z, IRONFORGE_ORIENTATION, IRONFORGE_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(IRONFORGE_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 10:
if(player->getLevel() >= 58)
{
player->TeleportTo(DARKPORTAL_MAPID, DARKPORTAL_X, DARKPORTAL_Y, DARKPORTAL_Z, DARKPORTAL_ORIENTATION, DARKPORTAL_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(DARKPORTAL_MESSAGE);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_1);
player->CLOSE_GOSSIP_MENU();
}
break;
case 11:
if(player->getLevel() >= 58)
{
player->TeleportTo(SHATTRATH_MAPID, SHATTRATH_X, SHATTRATH_Y, SHATTRATH_Z, SHATTRATH_ORIENTATION, SHATTRATH_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(SHATTRATH_MESSAGE);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_2);
player->CLOSE_GOSSIP_MENU();
}
break;
case 12:
if(player->getLevel() >= 68)
{
player->TeleportTo(DALARAN_MAPID, DALARAN_X, DALARAN_Y, DALARAN_Z, DALARAN_ORIENTATION, DALARAN_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(DALARAN_MESSAGE);
player->CLOSE_GOSSIP_MENU();
}
else
{
player->GetSession()->SendAreaTriggerMessage(ERROR_MESSAGE_2);
player->CLOSE_GOSSIP_MENU();
}
break;
case 13:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Gurubashi Areny|r", GOSSIP_SENDER_MAIN, 14);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Ring of Trials Areny|r", GOSSIP_SENDER_MAIN, 15);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"|cff8B0000Teleportovat do Circle of Blood Areny|r", GOSSIP_SENDER_MAIN, 16);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zpet", GOSSIP_SENDER_MAIN, 17);
player->SEND_GOSSIP_MENU(3, creature->GetGUID());
break;
case 14:
player->TeleportTo(GURUBASHI_MAPID, GURUBASHI_X, GURUBASHI_Y, GURUBASHI_Z, GURUBASHI_ORIENTATION, GURUBASHI_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(GURUBASHI_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 15:
player->TeleportTo(RINGOFTRIALS_MAPID, RINGOFTRIALS_X, RINGOFTRIALS_Y, RINGOFTRIALS_Z, RINGOFTRIALS_ORIENTATION, RINGOFTRIALS_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(RINGOFTRIALS_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 16:
player->TeleportTo(CIRCLEOFBLOOD_MAPID, CIRCLEOFBLOOD_X, CIRCLEOFBLOOD_Y, CIRCLEOFBLOOD_Z, CIRCLEOFBLOOD_ORIENTATION, CIRCLEOFBLOOD_OPTIONS);
player->GetSession()->SendAreaTriggerMessage(CIRCLEOFBLOOD_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 17:
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportace - mesta", GOSSIP_SENDER_MAIN, 0);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Teleportace - pvp", GOSSIP_SENDER_MAIN, 13);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Buffy", GOSSIP_SENDER_MAIN, 18);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Naucit zbrane", GOSSIP_SENDER_MAIN, 19);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Max skill", GOSSIP_SENDER_MAIN, 20);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Reset many a zivotu", GOSSIP_SENDER_MAIN, 21);
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT,"Zavrit", GOSSIP_SENDER_MAIN, 1);
player->SEND_GOSSIP_MENU(4, creature->GetGUID());
break;
case 18:
player->CastSpell(player, MARKOFTHEWILD, true);
player->CastSpell(player, BATTLESHOUT, true);
player->CastSpell(player, BLESSINGOFKINGS, true);
player->CastSpell(player, ARCANEBRILLIANCE, true);
player->CastSpell(player, POWERWORDFORTITUDE, true);
player->GetSession()->SendAreaTriggerMessage(BUFF_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 19:
switch(player->getClass())
{
case CLASS_WARRIOR:
player->learnSpell(SPELL_BLOCK, true);
player->learnSpell(SPELL_BOWS, true);
player->learnSpell(SPELL_CROSSBOWS, true);
player->learnSpell(SPELL_DUAL_WIELD, true);
player->learnSpell(SPELL_FIST_WEAPONS, true);
player->learnSpell(SPELL_GUNS, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_PLATE, true);
player->learnSpell(SPELL_POLEARMS, true);
player->learnSpell(SPELL_SHIELD, true);
player->learnSpell(SPELL_SHOOT, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_THROW, true);
player->learnSpell(SPELL_THROWN, true);
player->learnSpell(SPELL_TWO_HANDED_AXES, true);
player->learnSpell(SPELL_TWO_HANDED_MACES, true);
player->learnSpell(SPELL_TWO_HANDED_SWORDS, true);
break;
case CLASS_PALADIN:
player->learnSpell(SPELL_BLOCK, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_PLATE, true);
player->learnSpell(SPELL_POLEARMS, true);
player->learnSpell(SPELL_RELIC_3, true);
player->learnSpell(SPELL_SHIELD, true);
player->learnSpell(SPELL_TWO_HANDED_AXES, true);
player->learnSpell(SPELL_TWO_HANDED_MACES, true);
player->learnSpell(SPELL_TWO_HANDED_SWORDS, true);
break;
case CLASS_HUNTER:
player->learnSpell(SPELL_BOWS, true);
player->learnSpell(SPELL_CROSSBOWS, true);
player->learnSpell(SPELL_DUAL_WIELD, true);
player->learnSpell(SPELL_FIST_WEAPONS, true);
player->learnSpell(SPELL_GUNS, true);
player->learnSpell(SPELL_MAIL, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_POLEARMS, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_TWO_HANDED_AXES, true);
player->learnSpell(SPELL_TWO_HANDED_SWORDS, true);
break;
case CLASS_ROGUE:
player->learnSpell(SPELL_BOWS, true);
player->learnSpell(SPELL_CROSSBOWS, true);
player->learnSpell(SPELL_DUAL_WIELD, true);
player->learnSpell(SPELL_FIST_WEAPONS, true);
player->learnSpell(SPELL_GUNS, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_SHOOT, true);
player->learnSpell(SPELL_THROW, true);
player->learnSpell(SPELL_THROWN, true);
break;
case CLASS_PRIEST:
player->learnSpell(SPELL_DAGGERS, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_SHOOT_WANDS, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_WANDS, true);
break;
case CLASS_DEATH_KNIGHT:
player->learnSpell(SPELL_DUAL_WIELD, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_PLATE, true);
player->learnSpell(SPELL_POLEARMS, true);
player->learnSpell(SPELL_RELIC, true);
player->learnSpell(SPELL_TWO_HANDED_AXES, true);
player->learnSpell(SPELL_TWO_HANDED_MACES, true);
player->learnSpell(SPELL_TWO_HANDED_SWORDS, true);
break;
case CLASS_SHAMAN:
player->learnSpell(SPELL_BLOCK, true);
player->learnSpell(SPELL_FIST_WEAPONS, true);
player->learnSpell(SPELL_MAIL, true);
player->learnSpell(SPELL_ONE_HANDED_AXES, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_RELIC_4, true);
player->learnSpell(SPELL_SHIELD, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_TWO_HANDED_AXES, true);
player->learnSpell(SPELL_TWO_HANDED_MACES, true);
break;
case CLASS_MAGE:
player->learnSpell(SPELL_DAGGERS, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_SHOOT_WANDS, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_WANDS, true);
break;
case CLASS_WARLOCK:
player->learnSpell(SPELL_DAGGERS, true);
player->learnSpell(SPELL_ONE_HANDED_SWORDS, true);
player->learnSpell(SPELL_SHOOT_WANDS, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_WANDS, true);
break;
case CLASS_DRUID:
player->learnSpell(SPELL_DAGGERS, true);
player->learnSpell(SPELL_FIST_WEAPONS, true);
player->learnSpell(SPELL_ONE_HANDED_MACES, true);
player->learnSpell(SPELL_POLEARMS, true);
player->learnSpell(SPELL_RELIC_2, true);
player->learnSpell(SPELL_STAVES, true);
player->learnSpell(SPELL_TWO_HANDED_MACES, true);
break;
default:
break;
}
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(WEAPON_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 20:
player->UpdateSkillsToMaxSkillsForLevel();
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(MAXSKILL_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
case 21:
player->SetHealth(player->GetMaxHealth());
player->SetPower(POWER_MANA, player->GetMaxPower(POWER_MANA));
player->CastSpell(player,SPELL_EFFECT,false);
player->GetSession()->SendAreaTriggerMessage(RESTORE_MESSAGE);
player->CLOSE_GOSSIP_MENU();
break;
default:
break;
}
return true;
}
void AddSC_npc_teleporter()
{
new npc_teleporter;
}
Item Teleporter
#include "ScriptMgr.h"
#define ITEM_SCRIPT_NAME "item_teleporter"
#define NPC_ID 60000
#define SPELL_EFFECT 61456
#define MESSAGE_VIP "Predmet bohuzel nemuzete pouzit, nemate aktivni VIP ucet"
#define MESSAGE_ERROR "Item nemuzete v tuto chvili pouzit"
class item_teleporter : public ItemScript
{
public:
item_teleporter();
~item_teleporter();
bool OnUse(Player *player, Item *item, SpellCastTargets const &targets);
bool isVip(uint32 accountId);
};
item_teleporter::item_teleporter() : ItemScript(ITEM_SCRIPT_NAME){}
item_teleporter::~item_teleporter(){}
bool item_teleporter::OnUse(Player *player, Item *item, SpellCastTargets const &targets)
{
if(!isVip(player->GetSession()->GetAccountId()))
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_VIP);
return true;
}
if(player->isInCombat() || player->isMoving() || player->IsMounted() || player == NULL)
{
player->GetSession()->SendAreaTriggerMessage(MESSAGE_ERROR);
return true;
}
player->CastSpell(player,SPELL_EFFECT,false);
player->SummonCreature(NPC_ID,player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), player->GetOrientation(),TEMPSUMMON_TIMED_DESPAWN,60000);
return false;
}
bool item_teleporter::isVip(uint32 accountId)
{
int bufferSize = 20;
char * timeField = new char[bufferSize];
time_t now = time(NULL);
strftime(timeField, bufferSize, "%Y-%m-%d", localtime(&now));
QueryResult getDate = LoginDatabase.PQuery("SELECT expirace FROM vip WHERE account_id='%i'", accountId);
if(!getDate)
{
delete timeField;
return false;
}
Field *field = getDate->Fetch();
const char * date = field[0].GetCString();
std::string stringLocal = timeField;
std::string stringDb = date;
stringLocal.erase(4,1);
stringLocal.erase(6,1);
stringDb.erase(4,1);
stringDb.erase(6,1);
uint32 localTime = atoi(stringLocal.c_str());
uint32 dbTime = atoi(stringDb.c_str());
if(localTime < dbTime)
{
delete timeField;
return true;
}
else
{
delete timeField;
return false;
}
}
void AddSC_item_teleporter()
{
new item_teleporter;
}
VIP SQL
CREATE TABLE vip (
id INT(10) AUTO_INCREMENT PRIMARY KEY,
account_id INT(10),
email VARCHAR(255),
porizeni date,
expirace date
)
Item Teleporter SQL
UPDATE `world`.`item_template` SET `entry`='1002', `class`='15', `subclass`='0', `SoundOverrideSubclass`='-1', `name`='Kniha pomoci', `displayid`='1002', `Quality`='5', `Flags`='64', `FlagsExtra`='0', `BuyCount`='1', `BuyPrice`='0', `SellPrice`='0', `InventoryType`='0', `AllowableClass`='-1', `AllowableRace`='-1', `ItemLevel`='1', `RequiredLevel`='0', `RequiredSkill`='0', `RequiredSkillRank`='0', `requiredspell`='0', `requiredhonorrank`='0', `RequiredCityRank`='0', `RequiredReputationFaction`='0', `RequiredReputationRank`='0', `maxcount`='0', `stackable`='1', `ContainerSlots`='0', `stat_type1`='0', `stat_value1`='0', `stat_type2`='0', `stat_value2`='0', `stat_type3`='0', `stat_value3`='0', `stat_type4`='0', `stat_value4`='0', `stat_type5`='0', `stat_value5`='0', `stat_type6`='0', `stat_value6`='0', `stat_type7`='0', `stat_value7`='0', `stat_type8`='0', `stat_value8`='0', `stat_type9`='0', `stat_value9`='0', `stat_type10`='0', `stat_value10`='0', `ScalingStatDistribution`='0', `dmg_min1`='0', `dmg_max1`='0', `dmg_type1`='0', `dmg_min2`='0', `dmg_max2`='0', `dmg_type2`='0', `armor`='0', `holy_res`='0', `fire_res`='0', `nature_res`='0', `frost_res`='0', `shadow_res`='0', `arcane_res`='0', `delay`='0', `ammo_type`='0', `RangedModRange`='0', `spellid_1`='40662', `spelltrigger_1`='0', `spellcharges_1`='0', `spellppmRate_1`='0', `spellcooldown_1`='-1', `spellcategory_1`='0', `spellcategorycooldown_1`='-1', `spellid_2`='0', `spelltrigger_2`='0', `spellcharges_2`='0', `spellppmRate_2`='0', `spellcooldown_2`='-1', `spellcategory_2`='0', `spellcategorycooldown_2`='-1', `spellid_3`='0', `spelltrigger_3`='0', `spellcharges_3`='0', `spellppmRate_3`='0', `spellcooldown_3`='-1', `spellcategory_3`='0', `spellcategorycooldown_3`='-1', `spellid_4`='0', `spelltrigger_4`='0', `spellcharges_4`='0', `spellppmRate_4`='0', `spellcooldown_4`='-1', `spellcategory_4`='0', `spellcategorycooldown_4`='-1', `spellid_5`='0', `spelltrigger_5`='0', `spellcharges_5`='0', `spellppmRate_5`='0', `spellcooldown_5`='-1', `spellcategory_5`='0', `spellcategorycooldown_5`='-1', `bonding`='1', `description`='Pouzijte knihu pro privolani Teleportera', `PageText`='0', `LanguageID`='0', `PageMaterial`='0', `startquest`='0', `lockid`='0', `Material`='-1', `sheath`='0', `RandomProperty`='0', `RandomSuffix`='0', `block`='0', `itemset`='0', `MaxDurability`='0', `area`='0', `Map`='0', `BagFamily`='0', `TotemCategory`='0', `socketColor_1`='0', `socketContent_1`='0', `socketColor_2`='0', `socketContent_2`='0', `socketColor_3`='0', `socketContent_3`='0', `socketBonus`='0', `GemProperties`='0', `RequiredDisenchantSkill`='-1', `ArmorDamageModifier`='0', `duration`='0', `ItemLimitCategory`='0', `HolidayId`='0', `ScriptName`='item_teleporter', `DisenchantID`='0', `FoodType`='0', `minMoneyLoot`='0', `maxMoneyLoot`='0', `flagsCustom`='0', `WDBVerified`='12340' WHERE (`entry`='1002');
REPLACE INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `unit_flags2`, `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`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `Health_mod`, `Mana_mod`, `Armor_mod`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `WDBVerified`) VALUES (60000, 0, 0, 0, 0, 0, 18, 0, 0, 0, 'Server helper', '', '', 0, 80, 80, 1, 35, 35, 1, 1, 1.14286, 1, 1, 1, 1, 0, 1, 1, 1400, 1600, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 1, 1, 5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 'npc_teleporter', 12340);
REPLACE INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid1`, `modelid2`, `modelid3`, `modelid4`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`, `attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `unit_flags2`, `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`, `spell5`, `spell6`, `spell7`, `spell8`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `HoverHeight`, `Health_mod`, `Mana_mod`, `Armor_mod`, `RacialLeader`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`, `WDBVerified`) VALUES (60001, 0, 0, 0, 0, 0, 790, 0, 0, 0, 'Server VIP', '', '', 0, 80, 80, 1, 35, 35, 1, 1, 1.14286, 1, 1, 1, 1, 0, 1, 1, 1400, 1600, 1, 2, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 1, 1, 5, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 'npc_vip', 12340);