Hello guys, i didn't see any promotion NPC like the one i made, so i decided to release it here.
Basically, it will level up you to 80, give you some gold, and depending on your class give you some items you define on the script.
The good thing of the script is that it will only give you promotion if you are level one, and if you only have one character on the account.
Hope someone finds it useful
Basically, it will level up you to 80, give you some gold, and depending on your class give you some items you define on the script.
The good thing of the script is that it will only give you promotion if you are level one, and if you only have one character on the account.
Code:
/*
-Creado por: Darthye
*/
#include "ScriptPCH.h"
class npc_promo : public CreatureScript
{
public:
npc_promo() : CreatureScript("npc_promo") { }
bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
{
player->ADD_GOSSIP_ITEM(7, "Escoge tu promocion: ", GOSSIP_SENDER_MAIN, 99);
switch (player->getClass())
{
case CLASS_DRUID: player->ADD_GOSSIP_ITEM(10, "Promocion de Druida Equilibrio", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+30); player->ADD_GOSSIP_ITEM(10, "Promocion de Druida Feral", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+44); player->ADD_GOSSIP_ITEM(10, "Promocion de Druida Restauracion", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+45); break;
case CLASS_SHAMAN: player->ADD_GOSSIP_ITEM(10, "Promocion de Chaman Elemental", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+31); player->ADD_GOSSIP_ITEM(10, "Promocion de Chaman Mejora", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+46); player->ADD_GOSSIP_ITEM(10, "Promocion de Chaman Restauracion", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+47); break;
case CLASS_PALADIN: player->ADD_GOSSIP_ITEM(10, "Promocion de Paladin Represion", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+32); player->ADD_GOSSIP_ITEM(10, "Promocion de Paladin Sagrado", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+40); player->ADD_GOSSIP_ITEM(10, "Promocion de Paladin Proteccion", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+41); break;
case CLASS_WARRIOR: player->ADD_GOSSIP_ITEM(10, "Promocion de Guerrero Furia", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+33); player->ADD_GOSSIP_ITEM(10, "Promocion de Guerrero Proteccion", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+48); break;
case CLASS_PRIEST: player->ADD_GOSSIP_ITEM(10, "Promocion de Sacerdote Sombras", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+34); player->ADD_GOSSIP_ITEM(10, "Promocion de Sacerdote Sagrado", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+42); break;
case CLASS_DEATH_KNIGHT: player->ADD_GOSSIP_ITEM(10, "Promocion de DK DPS", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+35); player->ADD_GOSSIP_ITEM(10, "Promocion de DK Tank", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+43); break;
case CLASS_ROGUE: player->ADD_GOSSIP_ITEM(10, "Promocion de Picaro", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+36); break;
case CLASS_HUNTER: player->ADD_GOSSIP_ITEM(10, "Promocion de Cazador", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+37); break;
case CLASS_MAGE: player->ADD_GOSSIP_ITEM(10, "Promocion de Mago", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+38); break;
case CLASS_WARLOCK: player->ADD_GOSSIP_ITEM(10, "Promocion de Brujo", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+39); break;
}
player->SEND_GOSSIP_MENU(1, creature->GetGUID());
return true;
}
bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 actions) OVERRIDE
{
if (player->getLevel() == 80)
{
player->GetSession()->SendAreaTriggerMessage("No puedes recibir la promocion mas de una vez.");
player->CLOSE_GOSSIP_MENU();
return true;
}
if (player->getLevel() == 1)
{
uint32 accountID = player->GetSession()->GetAccountId();
QueryResult result = CharacterDatabase.PQuery("SELECT COUNT(`guid`) FROM `characters` WHERE `account`=%u", accountID);
Field *fields = result->Fetch();
uint32 personajes = fields[0].GetUInt32();
if (personajes == 1)
{
if (actions == 99)
{
player->CLOSE_GOSSIP_MENU();
return false;
}
player->GetSession()->SendAreaTriggerMessage("Has recibido tu promocion satisfactoriamente.");
player->GiveLevel(80);
player->SetMoney(100000);
switch(actions)
{
case GOSSIP_ACTION_INFO_DEF+30: // Druida Equilibrio
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+44: // Druida Feral
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+45: // Druida Restauracion
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+31: // Chaman Elemental
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+46: // Chaman Mejora
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+47: // Chaman Restauracion
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+32: // Paladin Represion
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+40: // Paladin Tank Sagrado
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+41: // Paladin Healer Proteccion
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+33: // Guerrero Furia
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+48: // Guerrero Proteccion
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+34: // Sacerdote Sombras
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+42: // Sacerdote Sagrado
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+35: // DK DPS
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+43: // DK Tank
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+36: // Picaro
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+37: // Cazador
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+38: // Mago
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
case GOSSIP_ACTION_INFO_DEF+39: // Brujo
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->AddItem(200000, 1);
player->CLOSE_GOSSIP_MENU();
break;
}
}
if (personajes > 1)
{
player->GetSession()->SendAreaTriggerMessage("No puedes recibir la promocion teniendo mas de un personaje.");
player->CLOSE_GOSSIP_MENU();
return true;
}
player->CLOSE_GOSSIP_MENU();
}
return true;
}
};
void AddSC_npc_promo()
{
new npc_promo();
}
Hope someone finds it useful
Last edited: