This item will change your class if you use it you can choose wich class you would like to be. Enjoy!
Code:
/*
Class Change Item Script
Made by Azolex
Copyrights (C) Azolex
www.sunplusplus.info
www.aspiredev.org
www.bluascripting.net
www.mmowned.com
*/
#include "StdAfx.h"
#include "Setup.h"
#define CLASS_CHANGE_ITEM 90005
#ifdef WIN32
#pragma warning(disable:4305) // warning C4305: 'argument' : truncation from 'double' to 'float'
#endif
class SCRIPT_DECL Classer : 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 Classer::GossipHello(Object* pObject, Player * Plr, bool AutoSend)
{
GossipMenu * Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 0, Plr);
Menu->AddItem(0, "I want to be Warrior!", 1);
Menu->AddItem(0, "I want to be Paladin!", 2);
Menu->AddItem(0, "I want to be Hunter!", 3);
Menu->AddItem(0, "I want to be Rouge!", 4);
Menu->AddItem(0, "I want to be Priest!", 5);
Menu->AddItem(0, "I want to be Death Knight!", 6);
Menu->AddItem(0, "I want to be Shaman!", 7);
Menu->AddItem(0, "I want to be Mage!", 8);
Menu->AddItem(0, "I want to be Warlock!", 9);
Menu->AddItem(0, "I want to be Druid!", 11);
Menu->AddItem(0, "I Don't want to chage class!", 50);
if(AutoSend)
Menu->SendTo(Plr);
};
void Classer::GossipSelectOption(Object* pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
switch(IntId)
{
case 0:
{
GossipHello(pObject, Plr, true);
}break;
case 50:
{
Plr->Gossip_Complete();
}break;
default:
{
if (Plr->getClass() != IntId)
{
Plr->setClass((uint8)IntId);
Plr->GetItemInterface()->RemoveItemAmt(CLASS_CHANGE_ITEM, 1);
Plr->BroadcastMessage("Class change complete. Relog to see the effect.");
Plr->Gossip_Complete();
}
else if (Plr->getClass() == IntId)
{
Plr->BroadcastMessage("ERROR: You are already that class, please choose other class!");
Plr->Gossip_Complete();
}
}break;
}
};
void Classer::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupSurgeon(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Classer();
mgr->register_item_gossip_script(CLASS_CHANGE_ITEM, gs);
}
NOTE: There is risk of bugging character after changing classes, spell that he used before changed class will stay there. (I suggest this only for first level's like giving a tauren rouge option or something like that xD
Code:
/*
Class Change Item Script
Made by Azolex
Copyrights (C) Azolex
www.sunplusplus.info
www.aspiredev.org
www.bluascripting.net
www.mmowned.com
*/
#include "StdAfx.h"
#include "Setup.h"
#define CLASS_CHANGE_ITEM 90005
#ifdef WIN32
#pragma warning(disable:4305) // warning C4305: 'argument' : truncation from 'double' to 'float'
#endif
class SCRIPT_DECL Classer : 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 Classer::GossipHello(Object* pObject, Player * Plr, bool AutoSend)
{
GossipMenu * Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 0, Plr);
Menu->AddItem(0, "I want to be Warrior!", 1);
Menu->AddItem(0, "I want to be Paladin!", 2);
Menu->AddItem(0, "I want to be Hunter!", 3);
Menu->AddItem(0, "I want to be Rouge!", 4);
Menu->AddItem(0, "I want to be Priest!", 5);
Menu->AddItem(0, "I want to be Death Knight!", 6);
Menu->AddItem(0, "I want to be Shaman!", 7);
Menu->AddItem(0, "I want to be Mage!", 8);
Menu->AddItem(0, "I want to be Warlock!", 9);
Menu->AddItem(0, "I want to be Druid!", 11);
Menu->AddItem(0, "I Don't want to chage class!", 50);
if(AutoSend)
Menu->SendTo(Plr);
};
void Classer::GossipSelectOption(Object* pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
{
switch(IntId)
{
case 0:
{
GossipHello(pObject, Plr, true);
}break;
case 50:
{
Plr->Gossip_Complete();
}break;
default:
{
if (Plr->getClass() != IntId)
{
Plr->setClass((uint8)IntId);
Plr->Reset_Spells();
Plr->GetItemInterface()->RemoveItemAmt(CLASS_CHANGE_ITEM, 1);
Plr->BroadcastMessage("Class change complete. Relog to see the effect.");
Plr->Gossip_Complete();
}
else if (Plr->getClass() == IntId)
{
Plr->BroadcastMessage("ERROR: You are already that class, please choose other class!");
Plr->Gossip_Complete();
}
}break;
}
};
void Classer::GossipEnd(Object * pObject, Player* Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupClasser(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Classer();
mgr->register_item_gossip_script(CLASS_CHANGE_ITEM, gs);
}
EDIT: Added script that will wipe almost every player spell, that is not tested in this case, but it should work.
Hearthstone/Ascent Shared Pointer version:
Code:
/*
Class Change Item Script
Made by Azolex
Copyrights (C) Azolex
www.sunplusplus.info
www.aspiredev.org
www.bluascripting.net
www.mmowned.com
*/
#include "StdAfx.h"
#include "Setup.h"
#define CLASS_CHANGE_ITEM 90005
#ifdef WIN32
#pragma warning(disable:4305) // warning C4305: 'argument' : truncation from 'double' to 'float'
#endif
class SCRIPT_DECL Classer : public GossipScript
{
public:
void GossipHello(shared_ptr<Object> pObject, shared_ptr<Player> Plr, bool AutoSend);
void GossipSelectOption(shared_ptr<Object> pObject, shared_ptr<Player> Plr, uint32 Id, uint32 IntId, const char * Code);
void GossipEnd(shared_ptr<Object> pObject, shared_ptr<Player> Plr);
void Destroy()
{
delete this;
}
};
void Classer::GossipHello(shared_ptr<Object> pObject, shared_ptr<Player> Plr, bool AutoSend)
{
GossipMenu * Menu;
objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 0, Plr);
Menu->AddItem(0, "I want to be Warrior!", 1);
Menu->AddItem(0, "I want to be Paladin!", 2);
Menu->AddItem(0, "I want to be Hunter!", 3);
Menu->AddItem(0, "I want to be Rouge!", 4);
Menu->AddItem(0, "I want to be Priest!", 5);
Menu->AddItem(0, "I want to be Death Knight!", 6);
Menu->AddItem(0, "I want to be Shaman!", 7);
Menu->AddItem(0, "I want to be Mage!", 8);
Menu->AddItem(0, "I want to be Warlock!", 9);
Menu->AddItem(0, "I want to be Druid!", 11);
Menu->AddItem(0, "I Don't want to chage class!", 50);
if(AutoSend)
Menu->SendTo(Plr);
};
void Classer::GossipSelectOption(shared_ptr<Object> pObject, shared_ptr<Player> Plr, uint32 Id, uint32 IntId, const char * Code)
{
switch(IntId)
{
case 0:
{
GossipHello(pObject, Plr, true);
}break;
case 50:
{
Plr->Gossip_Complete();
}break;
default:
{
if (Plr->getClass() != IntId)
{
Plr->setClass((uint8)IntId);
Plr->Reset_Spells();
Plr->GetItemInterface()->RemoveItemAmt(CLASS_CHANGE_ITEM, 1);
Plr->BroadcastMessage("Class change complete. Relog to see the effect.");
Plr->Gossip_Complete();
}
else if (Plr->getClass() == IntId)
{
Plr->BroadcastMessage("ERROR: You are already that class, please choose other class!");
Plr->Gossip_Complete();
}
}break;
}
};
void Classer::GossipEnd(shared_ptr<Object> pObject, shared_ptr<Player> Plr)
{
GossipScript::GossipEnd(pObject, Plr);
}
void SetupClasser(ScriptMgr * mgr)
{
GossipScript * gs = (GossipScript*) new Classer();
mgr->register_item_gossip_script(CLASS_CHANGE_ITEM, gs);
}