Zdravim,
protoze uz me nudil ten teleporter s SQL, pokusil jsem se skutit "elegantnejsi" reseni v C++ (zatim se c++ ucim, takze me neukamenujte za nejaky syntaxovy nespravnosti, funguje ale paradne)
A jeste predem rikam, protoze se s C++ teprve ucim, "obslehnul" jsem ulduar_teleporter a upravil ho...takze tim nechci rikat, ze je to cela moje prace, nekomu se to ale muze hodit
Soubor server_teleporter.cpp umistnete do src/scripts/northrend/ulduar/ulduar/
#include "ScriptedPch.h"
#include "../shared/Config/Config.h"
/*
* Copyright (C) 2010 Deadly
* Vyrobeno pro WoW server Alkazan
* TrinityCore, testovano s rev.7601 a 7737 (WoW 3.3.2)
* Pripominky, stiznosti, vylepseni prosim piste do prislusneho tematu na WoWResource.eu (http://www.wowresource.eu/index.php?showtopic=17856)
* ------------
* Copyright (C) 2010 Deadly
* Made for WoW private server Alkazan
* TrinityCore, tested with rev. 7601 and 7737 (WoW 3.3.2)
*/
#define SHATTRATH 20000
#define DALARAN 20001
#define GADGETZAN 20002
#define BOOTYBAY 20003
#define STORMWIND 20004
#define ORGRIMMAR 20005
#define GURUBASHI 20006
#define MAINC 20007
#define NEUC 20008
#define PVP 20009
#define THUNDER 20010
#define UNDERCITY 20011
#define SILVERMOON 20012
#define IRONFORGE 20013
#define DARNASSUS 20014
#define EXODAR 20015
bool GoHello_server_teleporter( Player *pPlayer, GameObject *pGO )
{
pPlayer->ADD_GOSSIP_ITEM(0, "--- Hlavni mesta ---", GOSSIP_SENDER_MAIN, MAINC);
if ( pPlayer->GetTeam() == ALLIANCE ){
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Stormwindu", GOSSIP_SENDER_MAIN, STORMWIND);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Ironforge", GOSSIP_SENDER_MAIN, IRONFORGE);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Darnassusu", GOSSIP_SENDER_MAIN, DARNASSUS);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Exodaru", GOSSIP_SENDER_MAIN, EXODAR);
}
if ( pPlayer->GetTeam() == HORDE ){
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Orgrimmaru", GOSSIP_SENDER_MAIN, ORGRIMMAR);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Thunder Bluffu", GOSSIP_SENDER_MAIN, THUNDER);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Undercity", GOSSIP_SENDER_MAIN, UNDERCITY);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Silvermoonu", GOSSIP_SENDER_MAIN, SILVERMOON);
}
pPlayer->ADD_GOSSIP_ITEM(0, "--- Neutralni mesta ---", GOSSIP_SENDER_MAIN, NEUC);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Shattrathu", GOSSIP_SENDER_MAIN, SHATTRATH);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Dalaranu", GOSSIP_SENDER_MAIN, DALARAN);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Booty Bay", GOSSIP_SENDER_MAIN, BOOTYBAY);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Gadgetzanu", GOSSIP_SENDER_MAIN, GADGETZAN);
pPlayer->ADD_GOSSIP_ITEM(0, "--- PVP ---", GOSSIP_SENDER_MAIN, PVP);
pPlayer->ADD_GOSSIP_ITEM(5, "Teleport do Gurubashi areny", GOSSIP_SENDER_MAIN, GURUBASHI);
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, pGO->GetGUID());
return true;
}
bool GOSelect_server_teleporter( Player *pPlayer, GameObject *pGO, uint32 sender, uint32 action )
{
switch(action)
{
case SHATTRATH:
pPlayer->TeleportTo(530, -1857.94, 5417.365, -10.57, 0);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case DALARAN:
pPlayer->TeleportTo(571, 5804.15, 624.77, 647.8, 1.64);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case BOOTYBAY:
pPlayer->TeleportTo(0, -14297.2, 531, 8.8, 4);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case GADGETZAN:
pPlayer->TeleportTo(1, -7177.15, -3785.34, 8.4, 6.1);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case STORMWIND:
pPlayer->TeleportTo(0, -8829.2, 624.75, 93.91, 3.83);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case ORGRIMMAR:
pPlayer->TeleportTo(1, 1629.36, -4373.39, 31.5, 3.55);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case GURUBASHI:
pPlayer->TeleportTo(0, -13248.88, 188, 31.36, 1.08);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case MAINC:
break;
case NEUC:
break;
case PVP:
break;
case THUNDER:
pPlayer->TeleportTo(1, -1277.37, 124.8, 131.3, 5.22);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case UNDERCITY:
pPlayer->TeleportTo(0, 1584, 242, -52.16, 0.05);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case SILVERMOON:
pPlayer->TeleportTo(530, 9487.69, -7279.2, 14.3, 6.16);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case IRONFORGE:
pPlayer->TeleportTo(0, -4918.88, -940, 501.57, 5.42);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case DARNASSUS:
pPlayer->TeleportTo(1, 9949.56, 2284.2, 1341.4, 1.6);
pPlayer->CLOSE_GOSSIP_MENU(); break;
case EXODAR:
pPlayer->TeleportTo(530, -3965.7, -11653.6, -138.85, 0.85);
pPlayer->CLOSE_GOSSIP_MENU(); break;
}
return true;
}
void AddSC_server_teleporter()
{
Script *newscript;
newscript = new Script;
newscript->Name = "server_teleporter";
newscript->pGOHello = &GoHello_server_teleporter;
newscript->pGOSelect = &GOSelect_server_teleporter;
newscript->RegisterSelf();
}
pak, musite do souboru ScriptLoader.cpp v /src/game/ pridat par radku...
Musite v nem najit radek "//custom ", mel by byt kousek od zacatku. Pod nej pridejte:
void AddSC_server_teleporter();
.
Dale najdete radek "AddSC_zangarmarsh();". Pod nej pridejte
AddSC_server_teleporter();
.
Posledni krok, ten se deli na dve casti - windowsovska kompilace a linuxova kompilace...
V windowsovske kompilaci musite do projektu VC90 pridat hned pod ulduar_teleporter.cpp (game/scripts/northrend/ulduar/ulduar/) pridat server_teleporter.cpp...kdyby nekdo nevedel, jak na to, tak sem napiste, ale je to hrozne jednoduchy (kliknou pravym na slozku - pridat novy soubor).
V linuxovske je to jeste jednodussi - najedte si do /src/scripts. Tam otevrete v jakemkoliv textovem editoru soubor CMakeLists.txt, a pod radek "northrend/ulduar/ulduar/ulduar_teleporter.cpp" pridejte:
northrend/ulduar/ulduar/server_teleporter.cpp
.
To by melo byt vse ted uz jen zkompilovat, udelat novy objekt / npc s scriptname server_teleporter, a uzivejte si teleportovani
Jestli by nekdo mel nejake pripominky, zlepseni, atd.. tak je rad uvitam