Hello,
i found this script (http://www.ownedcore.com/forums/worl...2-rev7438.html ([Guide]Guild Housing System for the latest TrinityCore2 (rev7438))) and i implement this in my source, but the compiler tell me:
Script:Code:3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(5) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'WorldDatabase' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(5) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(5) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(5) : error C2371: 'WorldDatabase': Neudefinition; unterschiedliche Basistypen 3> C:\Program Files (x86)\NicosBloederKram\TrinityCore\src\server\shared\Database\DatabaseEnv.h(41): Siehe Deklaration von 'WorldDatabase' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(59) : error C2065: 'QueryResult_AutoPtr': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(59) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'result' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(59) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(60) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(61) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(63) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(63) : error C2227: Links von "->Fetch" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(106) : error C2065: 'QueryResult_AutoPtr': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(106) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'result' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(106) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(107) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(110) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(117) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(117) : error C2227: Links von "->Fetch" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(127) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(127) : error C2227: Links von "->NextRow" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(129) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(129) : error C2227: Links von "->GetRowCount" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(162) : error C2065: 'QueryResult_AutoPtr': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(162) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'result' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(162) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(164) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(167) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(172) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(172) : error C2227: Links von "->Fetch" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(201) : error C2065: 'QueryResult_AutoPtr': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(201) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'result' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(201) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(204) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(207) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(214) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(217) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(228) : error C2065: 'QueryResult_AutoPtr': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(228) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'result' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(228) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(230) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(233) : error C2065: 'result': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(257) : error C2664: 'void GossipMenu::AddMenuItem(int32,uint8,const std::string &,uint32,uint32,const std::string &,uint32,bool)': Konvertierung des Parameters 2 von 'const char [27]' in 'uint8' nicht möglich 3> Es gibt keinen Kontext, in dem diese Konvertierung möglich ist 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(313) : error C3861: "error_db_log": Bezeichner wurde nicht gefunden. 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(330) : error C2065: 'Script': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(330) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(331) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(331) : error C2061: Syntaxfehler: Bezeichner 'Script' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(332) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(332) : error C2227: Links von "->Name" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(333) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(333) : error C2227: Links von "->pGossipHello" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(334) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(334) : error C2227: Links von "->pGossipSelect" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(335) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(335) : error C2227: Links von "->pGossipSelectWithCode" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. 3> Typ ist ''unknown-type'' 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(336) : error C2065: 'newscript': nichtdeklarierter Bezeichner 3>..\..\..\..\TrinityCore\src\server\scripts\Custom\guildmaster.cpp(336) : error C2227: Links von "->RegisterSelf" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
I think the script ist not compatible with the newest version of Trinity Core. Can you help me to fix the script? My c++ skills are not so good and the trinity environment is difficult.Code:#include "ScriptPCH.h" //extern DatabaseMysql SD2Database; extern DatabaseType WorldDatabase; #define MSG_GOSSIP_TELE "Teleport to our GuildHouse" #define MSG_GOSSIP_BUY "Buy GuildHouse (1000 gold)" #define MSG_GOSSIP_SELL "Sell GuildHouse (500 gold)" #define MSG_GOSSIP_NEXTPAGE "Next Page -->" #define MSG_INCOMBAT "You are in combat!" #define MSG_NOGUILDHOUSE "Your guild dont have any GuildHouse!" #define MSG_NOFREEGH "Unfortunately, all GuildHouses are in use." #define MSG_ALREADYHAVEGH "Sorry, but you already have GuildHouse (%s)." #define MSG_NOTENOUGHMONEY "Not enough money. You must have %u gold to buy a GuildHouses." #define MSG_GHOCCUPIED "Unfortunately, this GuildHouses already in use." #define MSG_CONGRATULATIONS "Congratulations! You bought this Guild House!" #define MSG_SOLD "You sold your GuildHouse. Here is %u in gold." #define MSG_NOTINGUILD "You are not in a guild. Join or create one." #define CODE_SELL "SELL" #define MSG_CODEBOX_SELL "Enter \"" CODE_SELL "\" If you really want to sell your GuildHouse." #define OFFSET_GH_ID_TO_ACTION 1500 #define OFFSET_SHOWBUY_FROM 10000 #define ACTION_TELE 1001 #define ACTION_SHOW_BUYLIST 1002 //deprecated. Use (OFFSET_SHOWBUY_FROM + 0) instead #define ACTION_SELL_GUILDHOUSE 1003 #define ICON_GOSSIP_BALOON 0 #define ICON_GOSSIP_WING 2 #define ICON_GOSSIP_BOOK 3 #define ICON_GOSSIP_WHEEL1 4 #define ICON_GOSSIP_WHEEL2 5 #define ICON_GOSSIP_GOLD 6 #define ICON_GOSSIP_BALOONDOTS 7 #define ICON_GOSSIP_TABARD 8 #define ICON_GOSSIP_XSWORDS 9 #define COST_GH_BUY 10000000 //1000 g. #define COST_GH_SELL 5000000 //500 g. #define GOSSIP_COUNT_MAX 10 bool isPlayerGuildLeader(Player *player) { return (player->GetRank() == 0) && (player->GetGuildId() != 0); } bool getGuildHouseCoords(uint32 guildId, float &x, float &y, float &z, uint32 &map) { if (guildId == 0) { //if player has no guild return false; } QueryResult_AutoPtr result; result = WorldDatabase.PQuery("SELECT `x`, `y`, `z`, `map` FROM `guildhouses` WHERE `guildId` = %u", guildId); if(result) { Field *fields = result->Fetch(); x = fields[0].GetFloat(); y = fields[1].GetFloat(); z = fields[2].GetFloat(); map = fields[3].GetUInt32(); return true; } return false; } void teleportPlayerToGuildHouse(Player *player, Creature *_creature) { if (player->GetGuildId() == 0) { //if player has no guild _creature->MonsterWhisper(MSG_NOTINGUILD, player->GetGUID()); return; } if (!player->getAttackers().empty()) { //if player in combat _creature->MonsterSay(MSG_INCOMBAT, LANG_UNIVERSAL, player->GetGUID()); return; } float x, y, z; uint32 map; if (getGuildHouseCoords(player->GetGuildId(), x, y, z, map)) { //teleport player to the specified location player->TeleportTo(map, x, y, z, 0.0f); } else _creature->MonsterWhisper(MSG_NOGUILDHOUSE, player->GetGUID()); } bool showBuyList(Player *player, Creature *_creature, uint32 showFromId = 0) { //show not occupied guildhouses QueryResult_AutoPtr result; result = WorldDatabase.PQuery("SELECT `id`, `comment` FROM `guildhouses` WHERE `guildId` = 0 AND `id` > %u ORDER BY `id` ASC LIMIT %u", showFromId, GOSSIP_COUNT_MAX); if (result) { uint32 guildhouseId = 0; std::string comment = ""; do { Field *fields = result->Fetch(); guildhouseId = fields[0].GetInt32(); comment = fields[1].GetString(); //send comment as a gossip item //transmit guildhouseId in Action variable player->ADD_GOSSIP_ITEM(ICON_GOSSIP_TABARD, comment, GOSSIP_SENDER_MAIN, guildhouseId + OFFSET_GH_ID_TO_ACTION); } while (result->NextRow()); if (result->GetRowCount() == GOSSIP_COUNT_MAX) { //assume that we have additional page //add link to next GOSSIP_COUNT_MAX items player->ADD_GOSSIP_ITEM(ICON_GOSSIP_BALOONDOTS, MSG_GOSSIP_NEXTPAGE, GOSSIP_SENDER_MAIN, guildhouseId + OFFSET_SHOWBUY_FROM); } player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID()); return true; } else { if (showFromId = 0) { //all guildhouses are occupied _creature->MonsterWhisper(MSG_NOFREEGH, player->GetGUID()); player->CLOSE_GOSSIP_MENU(); } else { //this condition occurs when COUNT(guildhouses) % GOSSIP_COUNT_MAX == 0 //just show GHs from beginning showBuyList(player, _creature, 0); } } return false; } bool isPlayerHasGuildhouse(Player *player, Creature *_creature, bool whisper = false) { QueryResult_AutoPtr result; result = WorldDatabase.PQuery("SELECT `comment` FROM `guildhouses` WHERE `guildId` = %u", player->GetGuildId()); if (result) { if (whisper) { //whisper to player "already have etc..." Field *fields = result->Fetch(); char msg[100]; sprintf(msg, MSG_ALREADYHAVEGH, fields[0].GetString()); _creature->MonsterWhisper(msg, player->GetGUID()); } return true; } return false; } void buyGuildhouse(Player *player, Creature *_creature, uint32 guildhouseId) { if (player->GetMoney() < COST_GH_BUY) { //show how much money player need to buy GH (in gold) char msg[100]; sprintf(msg, MSG_NOTENOUGHMONEY, COST_GH_BUY / 10000); _creature->MonsterWhisper(msg, player->GetGUID()); return; } if (isPlayerHasGuildhouse(player, _creature, true)) { //player already have GH return; } QueryResult_AutoPtr result; //check if somebody already occupied this GH result = WorldDatabase.PQuery("SELECT `id` FROM `guildhouses` WHERE `id` = %u AND `guildId` <> 0", guildhouseId); if (result) { _creature->MonsterWhisper(MSG_GHOCCUPIED, player->GetGUID()); return; } //update DB result = WorldDatabase.PQuery("UPDATE `guildhouses` SET `guildId` = %u WHERE `id` = %u", player->GetGuildId(), guildhouseId); if (result) player->ModifyMoney(-COST_GH_BUY); _creature->MonsterSay(MSG_CONGRATULATIONS, LANG_UNIVERSAL, player->GetGUID()); } void sellGuildhouse(Player *player, Creature *_creature) { if (isPlayerHasGuildhouse(player, _creature)) { QueryResult_AutoPtr result; result = WorldDatabase.PQuery("UPDATE `guildhouses` SET `guildId` = 0 WHERE `guildId` = %u", player->GetGuildId()); if (result) player->ModifyMoney(COST_GH_SELL); //display message e.g. "here your money etc." char msg[100]; sprintf(msg, MSG_SOLD, COST_GH_SELL / 10000); _creature->MonsterWhisper(msg, player->GetGUID()); } } bool GossipHello_guildmaster(Player *player, Creature *_creature) { player->ADD_GOSSIP_ITEM(ICON_GOSSIP_BALOON, MSG_GOSSIP_TELE, GOSSIP_SENDER_MAIN, ACTION_TELE); if (isPlayerGuildLeader(player)) { //show additional menu for guild leader player->ADD_GOSSIP_ITEM(ICON_GOSSIP_GOLD, MSG_GOSSIP_BUY, GOSSIP_SENDER_MAIN, ACTION_SHOW_BUYLIST); if (isPlayerHasGuildhouse(player, _creature)) { //and additional for guildhouse owner player->PlayerTalkClass->GetGossipMenu().AddMenuItem(ICON_GOSSIP_GOLD, MSG_GOSSIP_SELL, GOSSIP_SENDER_MAIN, ACTION_SELL_GUILDHOUSE, MSG_CODEBOX_SELL, 0, true); } } player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, _creature->GetGUID()); return true; } bool GossipSelect_guildmaster(Player *player, Creature *_creature, uint32 sender, uint32 action ) { if (sender != GOSSIP_SENDER_MAIN) return false; switch (action) { case ACTION_TELE: //teleport player to GH player->CLOSE_GOSSIP_MENU(); teleportPlayerToGuildHouse(player, _creature); break; case ACTION_SHOW_BUYLIST: //show list of GHs which currently not occupied showBuyList(player, _creature); break; default: if (action > OFFSET_SHOWBUY_FROM) { showBuyList(player, _creature, action - OFFSET_SHOWBUY_FROM); } else if (action > OFFSET_GH_ID_TO_ACTION) { //player clicked on buy list player->CLOSE_GOSSIP_MENU(); //get guildhouseId from action //guildhouseId = action - OFFSET_GH_ID_TO_ACTION buyGuildhouse(player, _creature, action - OFFSET_GH_ID_TO_ACTION); } break; } return true; } bool GossipSelectWithCode_guildmaster( Player *player, Creature *_creature, uint32 sender, uint32 action, const char* sCode ) { if(sender == GOSSIP_SENDER_MAIN) { if(action == ACTION_SELL_GUILDHOUSE) { int i = -1; try { //compare code if (strlen(sCode) + 1 == sizeof CODE_SELL) i = strcmp(CODE_SELL, sCode); } catch(char *str) {error_db_log(str);} if (i == 0) { //right code sellGuildhouse(player, _creature); } player->CLOSE_GOSSIP_MENU(); return true; } } return false; } void AddSC_guildmaster() { Script *newscript; newscript = new Script; newscript->Name = "guildmaster"; newscript->pGossipHello = &GossipHello_guildmaster; newscript->pGossipSelect = &GossipSelect_guildmaster; newscript->pGossipSelectWithCode = &GossipSelectWithCode_guildmaster; newscript->RegisterSelf(); }