All pastes #1879190 Raw Edit

Hkarta

public cpp v1 · immutable
#1879190 ·published 2010-06-08 17:53 UTC
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();}