Code:
//////////////////////
// Custom City Guards
//////////////////////
case 1: // Auction House
Plr->Gossip_SendPOI(9861.23, 2334.55, 6, 6, 0, "RTK Town Auction House");
break;
case 2: // The Bank
Plr->Gossip_SendPOI(9938.45, 2512.35, 6, 6, 0, "RTK Town Bank");
break;
case 3: // Hippogryph Master
Plr->Gossip_SendPOI(9945.65, 2618.94, 6, 6, 0, "RTK Town Village");
break;
case 4: // Guild Master
Plr->Gossip_SendPOI(10076.40, 2199.59, 6, 6, 0, "RTK Town Guild Master");
break;
case 5: // The Inn
Plr->Gossip_SendPOI(10133.29, 2222.52, 6, 6, 0, "RTK Town Inn");
break;
case 6: // Mailbox
Plr->Gossip_SendPOI(9942.17, 2495.48, 6, 6, 0, "RTK Town Mailbox");
break;
case 7: // Stable Master
Plr->Gossip_SendPOI(10167.20, 2522.66, 6, 6, 0, "RTK Town Stable Master");
break;
case 8: // Weapon Trainers
Plr->Gossip_SendPOI(9907.11, 2329.70, 6, 6, 0, "RTK Town Weapons Trainers");
break;
case 9: // Battlemaster
{
Plr->Gossip_SendPOI(9981.9, 2325.9, 6, 6, 0, "Battlemasters Darnassus");
}break;
case 10: // Class Trainer
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 4264, Plr);
Menu->AddItem( 0, "Druid", 8);
Menu->AddItem( 0, "Hunter", 9);
Menu->AddItem( 0, "Mage", 10);
Menu->AddItem( 0, "Paladin", 11);
Menu->AddItem( 0, "Priest", 12);
Menu->AddItem( 0, "Rogue", 13);
Menu->AddItem( 0, "Shaman", 14);
Menu->AddItem( 0, "Warlock", 15);
Menu->AddItem( 0, "Warrior", 16);
Menu->SendTo(Plr);
}break;
case 11: // Profession Trainer
{
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 4273, Plr);
Menu->AddItem( 0, "Alchemy" ,17);
Menu->AddItem( 0, "Blacksmithing" ,18);
Menu->AddItem( 0, "Cooking" ,19);
Menu->AddItem( 0, "Enchanting" ,20);
Menu->AddItem( 0, "Engineering" ,21);
Menu->AddItem( 0, "First Aid" ,22);
Menu->AddItem( 0, "Fishing" ,23);
Menu->AddItem( 0, "Herbalism" ,24);
Menu->AddItem( 0, "Leatherworking" ,25);
Menu->AddItem( 0, "Mining" ,26);
Menu->AddItem( 0, "Skinning" ,27);
Menu->AddItem( 0, "Tailoring" ,28);
Menu->SendTo(Plr);
}break;
case 12: // Druid
{
Plr->Gossip_SendPOI(10186, 2570.46, 6, 6, 0, "RTK Town Druid Trainer");
}break;
case 13: // Hunter
{
Plr->Gossip_SendPOI(10177.29, 2511.10, 6, 6, 0, "RTK Town Hunter Trainer");
}break;
case 14: // Priest
{
Plr->Gossip_SendPOI(9659.12, 2524.88, 6, 6, 0, "RTK Town Priest Trainer");
}break;
case 15: // Rogue
{
Plr->Gossip_SendPOI(10122, 2599.12, 6, 6, 0, "RTK Town Rogue Trainer");
}break;
case 16: // Warrior
{
Plr->Gossip_SendPOI(9951.91, 2280.38, 6, 6, 0, "RTK Town Terrace");
}break;
case 17: //Alchemy
{
Plr->Gossip_SendPOI(10075.90, 2356.76, 6, 6, 0, "RTK Town Alchemy Trainer");
}break;
case 18: //Cooking
{
Plr->Gossip_SendPOI(10088.59, 2419.21, 6, 6, 0, "RTK Town Cooking Trainer");
}break;
case 19: //Enchanting
{
Plr->Gossip_SendPOI(10146.09, 2313.42, 6, 6, 0, "RTK Town Enchanting Trainer");
}break;
case 20: //First Aid
{
Plr->Gossip_SendPOI(10150.09, 2390.43, 6, 6, 0, "RTK Town First Aid Trainer");
}break;
case 21: //Fishing
{
Plr->Gossip_SendPOI(9836.20, 2432.17, 6, 6, 0, "RTK Town Fishing Trainer");
}break;
case 22: //Herbalism
{
Plr->Gossip_SendPOI(9757.17, 2430.16, 6, 6, 0, "RTK Town Herbalism Trainer");
}break;
case 23: //Leatherworking
{
Plr->Gossip_SendPOI(10086.59, 2255.77, 6, 6, 0, "RTK Town Leatherworking Trainer");
}break;
case 24: //Skinning
{
Plr->Gossip_SendPOI(10081.40, 2257.18, 6, 6, 0, "RTK Town Skinning Trainer");
}break;
case 25: //Tailoring
{
Plr->Gossip_SendPOI(10079.70, 2268.19, 6, 6, 0, "RTK Town Tailor");
}break;
-People to help with the vendors that sell the seasons for tokens (Source Code): Rough sketch
Code:
#include "StdAfx.h"
#include "Setup.h"
#define MARKID 90909 //ID for the mark
#define TOKENID 91919 //ID for the token.
#define TRADERATE 5 //This much marks = 1 token
#define SUCMSG "Enjoy your prize smile.gif" //Message when user gets his prize
#define TOKMSG "You don't have enough tokens to buy this"
#define MRKMSG "You don't have enough marks to get a token"
#define NPCID 87001 //ID of the vendor NPC
class SCRIPT_DECL Coin : 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 Coin::GossipHello(Object * pObject, Player* Plr, bool AutoSend)
{
//-----------------------------
//Setup Main Categories/Items
//-----------------------------
GossipMenu *Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "Convert 5 Marks for 1 Token", 98);
Menu->AddItem(0, "Category 1", 1);
Menu->AddItem(0, "Category 2", 2);
if(AutoSend)
Menu->SendTo(Plr);
}
bool TradeForCoins(uint32 ItemId, uint8 reqAmt, Player* Plr)
{
if(Plr->GetItemInterface()->GetItemCount(TOKENID, false)>=reqAmt) {
//remove tokens
Plr->GetItemInterface()->RemoveItemAmt(TOKENID, reqAmt);
//add item
Item * pItem = objmgr.CreateItem(ItemId, Plr);
Plr->GetItemInterface()->AddItemToFreeSlot(pItem);
return true;
}else{
//not enough tokens
return false;
}
}
bool TradeMarks(Player* Plr)
{
if(Plr->GetItemInterface()->GetItemCount(MARKID,false)>=TRADERATE){
//remove marks
Plr->GetItemInterface()->RemoveItemAmt(MARKID, TRADERATE);
//add tokens
Item * pItem = objmgr.CreateItem(TOKENID,Plr);
Plr->GetItemInterface()->AddItemToFreeSlot(pItem);
return true;
}else{
//not enough marks to buy a token
return false;
}
}
bool TradeSet(uint32 ItemIdStart, uint32 ItemIdEnd, uint8 reqAmt, Player* Plr)
{
//Assuming ItemIdStart is lower than ItemIdEnd
//Double check your code or else infinite loop will occur
//And we certainly don't want that.
if(Plr->GetItemInterface()->GetItemCount(TOKENID, false) >= reqAmt){
//Remove coin
Plr->GetItemInterface()->RemoveItemAmt(TOKENID, reqAmt);
//Add set
for(int i=ItemIdStart; i<=ItemIdEnd; i++){
Item * pItem = objmgr.CreateItem(i, Plr);
Plr->GetItemInterface()->AddItemToFreeSlot(pItem);
}
return true;
}else{
//Not enough tokens
return false;
}
}
void Coin::GossipSelectOption(Object * pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
Creature * pCreature = (pObject->GetTypeId()==TYPEID_UNIT)?((Creature*)pObject):NULL;
if(pCreature==NULL)
return;
GossipMenu * Menu;
switch(IntId)
{
case 0: // Return to start
GossipHello(pCreature, Plr, true);
break;
case 1: //Category 1
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(5, "First item", 10);
Menu->AddItem(5, "Second item", 11);
Menu->AddItem(5, "Itemset", 12);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
break;
case 2: //Category 2
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(5, "First item", 20);
Menu->AddItem(5, "Item set", 21);
Menu->AddItem(0, "[Back]", 99);
Menu->SendTo(Plr);
break;
case 10: //Item 1
if (TradeForCoins(<itemid>, <itemprice>, Plr))
{Plr->BroadcastMessage(SUCMSG);}
else {Plr->BroadcastMessage(TOKMSG);}
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Back]", 1);
Menu->SendTo(Plr);
break;
case 11: //Item 2
if (TradeForCoins(<itemid>, <itemprice>, Plr))
{Plr->BroadcastMessage(SUCMSG);}
else {Plr->BroadcastMessage(TOKMSG);}
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Back]", 1);
Menu->SendTo(Plr);
break;
case 12: //Itemset
if (TradeSet(<itemid>, <itemid>, <itemprice>, Plr))
{Plr->BroadcastMessage(SUCMSG);}
else {Plr->BroadcastMessage(TOKMSG);}
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Back]", 1);
Menu->SendTo(Plr);
break;
case 98: //Convert Marks to Token
if (TradeMarks(Plr))
{Plr->BroadcastMessage("Have fun with your token!");}
else {Plr->BroadcastMessage(MRKMSG);}
objmgr.CreateGossipMenuForPlayer(&Menu, pCreature->GetGUID(), 1, Plr);
Menu->AddItem(0, "[Back]", 1);
Menu->SendTo(Plr);
break;
case 99: //main menu
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 1, Plr);
Menu->AddItem(0, "Convert 5 Marks for 1 Token", 98);
Menu->AddItem(0, "Category 1", 1);
Menu->AddItem(0, "Category 2", 2);
Menu->SendTo(Plr);
break;
} //end switch
} //end void
void Coin::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupCoin(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Coin();
mgr->register_gossip_script(NPCID, gs);
}
-People to just help me out :P