Code:
#include "StdAfx.h"
#include "Setup.h"
uint32 add_gold, new_gold, current_gold, hasGold, hasItems;
uint64 charID;
char query[225];
class SCRIPT_DECL WelcomeNPC : public GossipScript
{
public:
void GossipHello(Object * pObject, Player* Plr, bool Autosend);
void GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code);
void GossipEnd(Object * pObject, Player* Plr);
void Destroy()
{
delete this;
}
};
void WelcomeNPC::GossipHello(Object * pObject, Player* Plr, bool Autosend)
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Creature * pCreature = (pObject->GetTypeId() == TYPEID_UNIT) ? ((Creature*)pObject) : NULL;
Menu->AddItem(0, "May I have some gold? (Level 1)", 1);
Menu->AddItem(0, "I'd like some items please. (Level 5)", 2);
Menu->AddItem(0, "Nevermind..", 3);
if (Autosend)
Menu->SendTo(Plr);
}
void WelcomeNPC::GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Creature * pCreature = (pObject->GetTypeId() == TYPEID_UNIT) ? ((Creature*)pObject) : NULL;
charID = Plr->GetGUID(); // Get character ID.
if(pCreature==NULL)
return;
switch (IntId)
{
case 1: // Gold
{
current_gold = Plr->GetUInt32Value(PLAYER_FIELD_COINAGE); // Grab players current amount of gold.
// Insert the player data into the database if it doesnt exsist, will cause a crash if not.
sprintf(query, "SELECT * FROM welcomenpc WHERE guid=%i", charID);
QueryResult* result = CharacterDatabase.Query(query);
if(!result)
{
sprintf(query, "INSERT INTO welcomenpc VALUES (%i, '', '')", charID);
CharacterDatabase.Query(query);
}
CharacterDatabase.FreeQueryResult(result);
// Lets check if the player has already got their x amount of gold.
sprintf(query, "SELECT hasGold FROM welcomenpc WHERE guid=%i", charID);
QueryResult* result1 = CharacterDatabase.Query(query);
// Get the value from the database
Field* Fields = result1->Fetch();
hasGold = Fields[0].GetUInt32();
if(hasGold == 0)
{
add_gold = 50000000; // Amount NPC Should Add
new_gold = current_gold + add_gold; // Final Amount
Plr->SetUInt32Value(PLAYER_FIELD_COINAGE, new_gold); // Add the gold
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Very well, happy hunting.");
sWorld.SendWorldText("You recieved 5000 Gold.");
// Lets update the database to say the user has recieved their gold.
sprintf(query, "UPDATE welcomenpc SET hasGold = '1' WHERE guid=%i", charID);
CharacterDatabase.Query(query);
Plr->Gossip_Complete();
}
else
{
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "I have no more money to give you sorry.");
Plr->Gossip_Complete();
}
CharacterDatabase.FreeQueryResult(result1);
}break;
case 2: // Items
{
if(Plr->getLevel() >= 5) // Make sure the player is level 5.
{
// Insert the player data into the database if it doesnt exsist, will cause a crash if not.
sprintf(query, "SELECT * FROM welcomenpc WHERE guid=%i", charID);
QueryResult* result = CharacterDatabase.Query(query);
if(!result)
{
sprintf(query, "INSERT INTO welcomenpc VALUES (%i, '', '')", charID);
CharacterDatabase.Query(query);
}
CharacterDatabase.FreeQueryResult(result);
// Lets check if the player has had their free items.
sprintf(query, "SELECT hasItems FROM welcomenpc WHERE guid=%i", charID);
QueryResult* result1 = CharacterDatabase.Query(query);
Field* Fields = result1->Fetch();
hasItems = Fields[0].GetUInt32();
if(hasItems == 0)
{
if(Plr->_HasSkillLine(433)) // Sheild Wearers
{
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(1201, Plr));
sWorld.SendWorldText("You recieved a sheild.");
}
if(Plr->_HasSkillLine(413)) // Mail Wearers
{
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2392, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2393, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2394, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2395, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2396, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(2397, Plr));
sprintf(query, "UPDATE welcomenpc SET hasItems = '1' WHERE guid=%i", charID);
CharacterDatabase.Query(query);
sWorld.SendWorldText("You recieved a mail item set.");
Plr->Gossip_Complete();
}
else if(Plr->_HasSkillLine(414)) // Leather Wearers
{
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(85, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(209, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(714, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(1835, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(1836, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(3595, Plr));
sprintf(query, "UPDATE welcomenpc SET hasItems = '1' WHERE guid=%i", charID);
CharacterDatabase.Query(query);
sWorld.SendWorldText("You recieved a leather item set.");
Plr->Gossip_Complete();
}
else if(Plr->_HasSkillLine(415)) // Cloth Wearers
{
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(193, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(194, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(195, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(711, Plr));
Plr->GetItemInterface()->AddItemToFreeSlot(objmgr.CreateItem(3596, Plr));
sprintf(query, "UPDATE welcomenpc SET hasItems = '1' WHERE guid=%i", charID);
sWorld.SendWorldText("You recieved a cloth item set.");
CharacterDatabase.Query(query);
Plr->Gossip_Complete();
}
}
else
{
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "I have no more items for you sorry.");
Plr->Gossip_Complete();
}
CharacterDatabase.FreeQueryResult(result1);
}
else
{
pCreature->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Sorry your not strong enough to recieve these items yet, please train harder and become level 5.");
Plr->Gossip_Complete();
}
}break;
case 3: // Nevermind..
{
Plr->Gossip_Complete();
}break;
}
}
void WelcomeNPC::GossipEnd(Object *pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupWelcomeNPC(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new WelcomeNPC();
mgr->register_gossip_script(600001, gs);
}
#2