rendered paste body#include "ScriptedPch.h"#include <stdio.h>#include <stdlib.h>extern DatabaseType CharacterDatabase;#define BROKEN_LEVEL 60#define BROKEN_DRAENEIONLY true#define BROKEN_PRICE 5000#define FELORC_LEVEL 60#define FELORC_ORCONLY true#define FELORC_PRICE 5000#define GOBLIN_LEVEL 1#define GOBLIN_PRICE 5000void ChooseRace(Player *player, Creature *_creature){ if (player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 21105 && player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) && 21267 && player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 20582 && player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) != 20583) { char broken[255]; sprintf(broken, "Switch race to Broken for %ug", BROKEN_PRICE); char felorc[255]; sprintf(felorc, "Switch race to Fel Orc for %ug", FELORC_PRICE); char goblin[255]; sprintf(goblin, "Switch race to Goblin for %ug", GOBLIN_PRICE); if (BROKEN_DRAENEIONLY) { if (player->getRace() == RACE_DRAENEI && player->getGender() == GENDER_MALE && player->getLevel() >= BROKEN_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, broken, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } } else { if (player->getGender() == GENDER_MALE && player->getLevel() >= BROKEN_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, broken, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } } if (FELORC_ORCONLY) { if (player->getRace() == RACE_ORC && player->getGender() == GENDER_MALE && player->getLevel() >= FELORC_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, felorc, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } } else { if (player->getGender() == GENDER_MALE && player->getLevel() >= FELORC_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, felorc, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } } if (player->getGender() == GENDER_MALE && player->getLevel() >= GOBLIN_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, goblin, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } else if (player->getGender() == GENDER_FEMALE && player->getLevel() >= GOBLIN_LEVEL) { player->PlayerTalkClass->GetGossipMenu().AddMenuItem(GOSSIP_ICON_MONEY_BAG, goblin, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4, "Type in 'SWITCH', without quotes. Race switch is PERMANENT.", 0, true); } player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Good bye.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); player->SEND_GOSSIP_MENU(14, _creature->GetGUID()); }}bool GossipHello_npc_race_switch(Player *player, Creature *_creature){ ChooseRace(player, _creature); return true;}bool GossipSelect_npc_race_switch(Player *player, Creature *_creature, uint32 sender, uint32 action ){ if (sender != GOSSIP_SENDER_MAIN) return false; switch (action) { case GOSSIP_ACTION_INFO_DEF + 5: player->PlayerTalkClass->CloseGossip(); break; default: break; } return true;}bool Pay(int money, Player *player, Creature *_creature){ if (player->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID) == player->GetUInt32Value(UNIT_FIELD_DISPLAYID)) { if (player->GetMoney() >= money * 10000) { player->ModifyMoney(-(money * 10000)); _creature->MonsterWhisper("Congratulation! Your race have been sucessfully changed!", player->GetGUID(), false); return true; } else { _creature->MonsterWhisper("You dont have enough money.", player->GetGUID(), false); return false; } } else { _creature->MonsterWhisper("You have to demorph first!", player->GetGUID(), false); return false; }}bool GossipSelectWithCode_npc_race_switch( Player *player, Creature *_creature, uint32 sender, uint32 action, const char* sCode ){ if(sender == GOSSIP_SENDER_MAIN) { int i = -1; try { if (strlen(sCode) + 1 == sizeof "SWITCH") i = strcmp("SWITCH", sCode); } catch(char *str) {error_db_log(str);} if (i == 0) { if(action == GOSSIP_ACTION_INFO_DEF + 1) //Draenei male { if (Pay(BROKEN_PRICE, player, _creature)) { CharacterDatabase.PExecute("REPLACE INTO character_overrides (guid, modelOverride) VALUES ('%u', '%u')", player->GetGUIDLow(), 21105); player->SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, 21105); player->DeMorph(); player->PlayerTalkClass->CloseGossip(); } else ChooseRace(player, _creature); } else if(action == GOSSIP_ACTION_INFO_DEF + 2) //Fel orc male { if (Pay(FELORC_PRICE, player, _creature)) { CharacterDatabase.PExecute("REPLACE INTO character_overrides (guid, modelOverride) VALUES ('%u', '%u')", player->GetGUIDLow(), 21267); player->SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, 21267); player->DeMorph(); player->PlayerTalkClass->CloseGossip(); } else ChooseRace(player, _creature); } else if(action == GOSSIP_ACTION_INFO_DEF + 3) //Goblin male { if (Pay(GOBLIN_PRICE, player, _creature)) { CharacterDatabase.PExecute("REPLACE INTO character_overrides (guid, modelOverride) VALUES ('%u', '%u')", player->GetGUIDLow(), 20582); player->SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, 20582); player->DeMorph(); player->PlayerTalkClass->CloseGossip(); } else ChooseRace(player, _creature); } else if(action == GOSSIP_ACTION_INFO_DEF + 4) //Goblin female { if (Pay(GOBLIN_PRICE, player, _creature)) { CharacterDatabase.PExecute("REPLACE INTO character_overrides (guid, modelOverride) VALUES ('%u', '%u')", player->GetGUIDLow(), 20583); player->SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, 20583); player->DeMorph(); player->PlayerTalkClass->CloseGossip(); } else ChooseRace(player, _creature); } } else { _creature->MonsterWhisper("Wrong code entered!", player->GetGUID(), false); ChooseRace(player, _creature); } } return true;}void AddSC_npc_race_switch(){ Script *newscript; newscript = new Script; newscript->Name = "npc_race_switch"; newscript->pGossipHello = &GossipHello_npc_race_switch; newscript->pGossipSelect = &GossipSelect_npc_race_switch; newscript->pGossipSelectWithCode = &GossipSelectWithCode_npc_race_switch; newscript->RegisterSelf();}