Hey Leute,
ich arbeite zurzeit an einer privaten Sammlung von Scripts für einen PvP Server. Dabei bin ich auch auf das “City Conquest” Script von lordpsyan gestoßen.
Den Patch habe ich manuell eingearbeitet und damit zunächst auch keine Probleme gehabt. Die Probleme gab es erst beim Kompilieren der Core.
Der “CityConquestMgr.cpp” und das “city_conquest_portal.cpp” geben sehr viele Fehler aus, von denen ich viele einfach nicht beheben kann. Daher frage ich hier nach, ob mir nicht jemand unter die Arme greifen kann.
CityConquestMgr.cpp:
[CODE]#include “ScriptPCH.h”
#include “Creature.h”
#include <stdio.h>
#include <time.h>
#include
#include “CityConquestMgr.h”
#include “World.h”
CityConquestMgr CityConquest;
CityConquestMgr::CityConquestMgr(){}
City::City(){}
Coords::Coords(){}
Spawn::Spawn(){}
void CityConquestMgr::StartSiege(int id, int faction);
if (CanStartSiege(id, faction));
{
City * city = GetCityFromId(id);
if (city->summonerSet)
SpawnBoss(id, faction);
else
{
int t = time (NULL) + 1800;
WorldDatabase.PExecute("UPDATE city_capture_bosses SET spawn_timer = %u WHERE city_id = %u", t, id);
}
city->active = true;
char * fname;
if (faction == 0)
fname = "Aliance";
else
fname = "Horde";
char * nm;
nm = new char[city->name.size()+1];
nm[city->name.size()] = 0;
memcpy(nm, city->name.c_str(), city->name.size());
char msg[500];
sprintf(msg, "City Conquest: %s declared war to %s. Opposite team has got 30 minutes to engage commander of %s!", fname, nm, nm);
sWorld->SendWorldText(LANG_SYSTEMMESSAGE, msg);
WorldDatabase.PExecute("REPLACE INTO city_capture_progress (city_id, time) VALUES (%u, %u)",
id, time (NULL));
//OpenPortal(id);
}
void CityConquestMgr::EndSiege(int id)
{
City *city = GetCityFromId(id);
if (!city->active)
return;
city->active = false;
WorldDatabase.PExecute("REPLACE INTO city_capture_progress (city_id, time) VALUES (%u, %u, %u)",
id, time (NULL));
WorldDatabase.PExecute("UPDATE city_capture_bosses SET spawn_timer = 1 WHERE city_id = %u", id);
char * fname;
if (city->controlled == 0)
fname = "Aliance";
else
fname = "Horde";
char * nm;
nm = new char[city->name.size()+1];
nm[city->name.size()] = 0;
memcpy(nm, city->name.c_str(), city->name.size());
char msg[255];
sprintf(msg, "City Conquest: Battle for %s is over! %s is controlled by %s", nm, nm, fname);
sWorld->SendWorldText(LANG_SYSTEMMESSAGE, msg);
}
void CityConquestMgr::SwitchFaction(int id)
{
City * city = GetCityFromId(id);
if (city->active)
{
Spawns::iterator l;
for (l = city->spawns.begin(); l != city->spawns.end(); ++l)
{
Spawn *spawn = *l;
if (city->controlled == 1)
{
spawn->creature->setFaction(spawn->faction_A);
if(CreatureInfo); const *cinfo = spawn->creature->GetCreatureInfo();
{
const_cast<CreatureInfo*>(cinfo)->faction_A = spawn->faction_A;
const_cast<CreatureInfo*>(cinfo)->faction_H = spawn->faction_A;
}
WorldDatabase.PExecute("UPDATE creature_template SET faction_A = '%u', faction_H = '%u' WHERE entry = '%u'", spawn->faction_A, spawn->faction_A, spawn->creature->GetEntry());
}
else if (city->controlled == 0)
{
spawn->creature->setFaction(spawn->faction_H);
if(CreatureInfo); const *cinfo = spawn->creature->GetCreatureInfo();
{
const_cast<CreatureInfo*>(cinfo)->faction_A = spawn->faction_H;
const_cast<CreatureInfo*>(cinfo)->faction_H = spawn->faction_H;
}
WorldDatabase.PExecute("UPDATE creature_template SET faction_A = '%u', faction_H = '%u' WHERE entry = '%u'", spawn->faction_H, spawn->faction_H, spawn->creature->GetEntry());
}
}
if (city->controlled == 0)
city->controlled = 1;
else
city->controlled = 0;
WorldDatabase.PExecute("UPDATE city_capture_cities SET controlled = %u WHERE id = %u", city->controlled, city->id);
EndSiege(id);
}
}
void CityConquestMgr::SpawnBoss(int id, int faction)
{
City * city = GetCityFromId(id);
if (faction == 0)
city->summoner->SummonCreature(city->boss_H, city->summoner->GetPositionX(), city->summoner->GetPositionY(), city->summoner->GetPositionZ(),
city->summoner->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1800000);
else if (faction == 1)
city->summoner->SummonCreature(city->boss_A, city->summoner->GetPositionX(), city->summoner->GetPositionY(), city->summoner->GetPositionZ(),
city->summoner->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1800000);
WorldDatabase.PExecute("UPDATE city_capture_bosses SET spawn_timer = 1 WHERE city_id = %u", id);
}
City * CityConquestMgr::GetCityFromId(int id)
{
Cities::iterator l;
for (l = cities.begin(); l != cities.end(); ++l)
{
City *ct = *l;
if (ct->id == id)
return ct;
}
return new City();
}
bool CityConquestMgr::CanStartSiege(int id, int faction)
{
City *city = GetCityFromId(id);
if (city->active == true)
return false;
if (city->controlled == faction)
return false;
QueryResult result = WorldDatabase.PQuery("SELECT time FROM city_capture_progress WHERE city_id = %u", id);
// 0
if (result)
{
Field *fields = result->Fetch();
// 60 = 1 min, will be increased in release
if (fields[0].GetInt32() + 3600 > time (NULL))
return false;
}
return true;
}
void CityConquestMgr::LoadCities()
{
QueryResult result = WorldDatabase.Query("SELECT id, minlevel, maxlevel, name, controlled, boss_entry_A, boss_entry_H FROM city_capture_cities LEFT JOIN city_capture_bosses ON id = city_id ORDER BY id ASC");
// 0 1 2 3 4 5 6
if (result)
{
do
{
City *city = new City();
Field *fields = result->Fetch();
city->id = fields[0].GetInt32();
city->minlevel = fields[1].GetInt32();
city->maxlevel = fields[2].GetInt32();
city->name = fields[3].GetString();
city->controlled = fields[4].GetInt32();
city->summonerSet = false;
city->active = false; // todo activecheck
city->boss_A = fields[5].GetInt32();
city->boss_H = fields[6].GetInt32();
// sLog->outString("CQM: City Loaded - %s", fields[3].GetString()); -- causes crash during startup (LordPsyan)
cities.push_back(city);
city->LoadPorts();
}
while (result->NextRow());
}
}
void CityConquestMgr::RegisterCreature(Creature * creature, int type)
{
QueryResult result;
if (type == 0)
{
sLog->outString("CQM: Creature Registered - %u", creature->GetEntry());
result
= WorldDatabase.PQuery("SELECT city_id, faction_A, faction_H FROM city_capture_creatures WHERE entry = %u",
// 0 1 2
creature->GetEntry());
if (result)
{
Field *fields = result->Fetch();
Cities::iterator l;
for (l = cities.begin(); l != cities.end(); ++l)
{
City *ct = *l;
if (ct->id == fields[0].GetInt32())
{
Spawn *spawn = new Spawn();
spawn->creature = creature;
spawn->faction_A = fields[1].GetInt32();
spawn->faction_H = fields[2].GetInt32();
spawn->creature->setFaction(spawn->faction_A);
if (ct->controlled == 1)
{
spawn->creature->setFaction(spawn->faction_H);
if(CreatureInfo); const *cinfo = spawn->creature->GetCreatureInfo();
{
const_cast<CreatureInfo*>(cinfo)->faction_A = spawn->faction_H;
const_cast<CreatureInfo*>(cinfo)->faction_H = spawn->faction_H;
}
WorldDatabase.PExecute("UPDATE creature_template SET faction_A = '%u', faction_H = '%u' WHERE entry = '%u'", spawn->faction_H, spawn->faction_H, spawn->creature->GetEntry());
}
else if (ct->controlled == 0)
{
spawn->creature->setFaction(spawn->faction_A);
if(CreatureInfo); const *cinfo = spawn->creature->GetCreatureInfo();
{
const_cast<CreatureInfo*>(cinfo)->faction_A = spawn->faction_A;
const_cast<CreatureInfo*>(cinfo)->faction_H = spawn->faction_A;
}
WorldDatabase.PExecute("UPDATE creature_template SET faction_A = '%u', faction_H = '%u' WHERE entry = '%u'", spawn->faction_A, spawn->faction_A, spawn->creature->GetEntry());
}
ct->spawns.push_back(spawn);
return;
}
}
}
}
else if (type == 2)
{
sLog->outString("CQM: City Spawner attmpts to register - %u", creature->GetEntry());
result
= WorldDatabase.PQuery("SELECT city_id, spawner_entry, spawn_timer FROM city_capture_bosses WHERE spawner_entry = %u", creature->GetEntry());
if (result)
{
sLog->outString("CQM: City Spawner passed first check - %u", creature->GetEntry());
Field *fields = result->Fetch();
Cities::iterator l;
for (l = cities.begin(); l != cities.end(); ++l)
{
City *ct = *l;
sLog->outString("CQM: City Spawner browses through cities - %u", creature->GetEntry());
if (ct->id == fields[0].GetInt32())
{
if (creature->GetEntry() == fields[1].GetInt32())
{
sLog->outString("CQM: City Spawner Registered - %u", creature->GetEntry());
if (!ct->summonerSet)
{
ct->summoner = creature;
ct->summonerSet = true;
if (fields[2].GetInt32() > time(NULL))
{
if (ct->controlled == 1)
SpawnBoss(ct->id, 0);
else
SpawnBoss(ct->id, 1);
}
else
EndSiege(ct->id);
}
}
return;
}
}
}
}
}
void City::LoadPorts()
{
QueryResult result = WorldDatabase.PQuery("SELECT x, y, z, o, map, side FROM city_capture_ports WHERE city_id = %u", id);
// 0 1 2 3 4 5
if (result)
{
do
{
Field *fields = result->Fetch();
Coords *coords = new Coords();
coords->x = fields[0].GetFloat();
coords->y = fields[1].GetFloat();
coords->z = fields[2].GetFloat();
coords->o = fields[3].GetFloat();
coords->map = fields[4].GetInt32();
if (fields[5].GetInt32() == 0)
port_defense = coords;
else if (fields[5].GetInt32() == 1)
port_attack = coords;
}
while (result->NextRow());
}
}
[/CODE]
Fehlermeldung dazu:
[SPOILER]
[CODE]
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(19): error C2761: ‘void CityConquestMgr::StartSiege(int,int)’: Die erneute Deklaration der Memberfunktion ist unzulässig
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(21): error C2059: Syntaxfehler: ‘if’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(22): error C2447: ‘{’: Funktionsheader fehlt - Parameterliste im alten Stil?
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(98): error C2065: ‘CreatureInfo’: nichtdeklarierter Bezeichner
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(98): warning C4390: ‘;’: Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(98): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: “default-int” wird von C++ nicht unterstützt.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(98): error C2440: ‘Initialisierung’: ‘const CreatureTemplate *’ kann nicht in ‘const int *’ konvertiert werden
3> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(100): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(101): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(109): error C2065: ‘CreatureInfo’: nichtdeklarierter Bezeichner
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(109): warning C4390: ‘;’: Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(109): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: “default-int” wird von C++ nicht unterstützt.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(109): error C2440: ‘Initialisierung’: ‘const CreatureTemplate *’ kann nicht in ‘const int *’ konvertiert werden
3> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(111): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(112): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(230): error C2065: ‘CreatureInfo’: nichtdeklarierter Bezeichner
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(230): warning C4390: ‘;’: Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(230): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: “default-int” wird von C++ nicht unterstützt.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(230): error C2440: ‘Initialisierung’: ‘const CreatureTemplate *’ kann nicht in ‘const int *’ konvertiert werden
3> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(232): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(233): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(241): error C2065: ‘CreatureInfo’: nichtdeklarierter Bezeichner
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(241): warning C4390: ‘;’: Leere kontrollierte Anweisung aufgetreten; ist dies beabsichtigt?
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(241): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: “default-int” wird von C++ nicht unterstützt.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(241): error C2440: ‘Initialisierung’: ‘const CreatureTemplate *’ kann nicht in ‘const int *’ konvertiert werden
3> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(243): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
3>D:\Trinity\DreamCore\src\server\game\CityConquest\CityConquestMgr.cpp(244): error C2061: Syntaxfehler: Bezeichner ‘CreatureInfo’
[/CODE][/SPOILER]
city_conquest_portal.cpp:
Hier sind zwar nur wenige (ein?) Fehler, aber behen kann ich diesen leider auch nicht… jetzt mag sich eventuell jeder, der sich mit C++ auskennt an den Kopf fassen, aber damit kann ich leben. Ich hoffe, dass ich durch alle Noobfragen, die ich hier stelle später genug dazulerne, dass ich selber weiterhelfen kann
/emoticons/default_biggrin.png
#include "ScriptPCH.h"
#include "../../game/CityConquest/CityConquestMgr.h"
#include <stdio.h>
#include <time.h>
#include <list>
#define START_OFFSET 2000
#define PORT_OFFSET 5000
#define GOSSIP_ACTION_MAIN 1000
#define GOSSIP_ACTION_SARTLIST 1003
#define GOSSIP_ACTION_PORTLIST 1001
#define GOSSIP_ACTION_CLOSE 1002
int GetActiveSieges(Player* pPlayer)
{
int side = 1;
if(pPlayer->TeamForRace(pPlayer->getRace())==ALLIANCE)
side = 0;
Cities::iterator l;
int i = 0;
for (l = CityConquest.cities.begin(); l != CityConquest.cities.end(); ++l)
{
City *ct = *l;
if (ct->controlled != side && ct->active == true)
{
i++;
}
}
return i;
}
int GetActiveSiegesAll(Player* pPlayer)
{
Cities::iterator l;
int i = 0;
for (l = CityConquest.cities.begin(); l != CityConquest.cities.end(); ++l)
{
City *ct = *l;
if (ct->active == true)
{
i++;
}
}
return i;
}
void StartSiegeList(int beginAt, Player* pPlayer, Creature* pCreature)
{
Cities::iterator l;
int side = 1;
if(pPlayer->TeamForRace(pPlayer->getRace())==ALLIANCE)
side = 0;
int i = 0;
int lastid = 0;
for (l = CityConquest.cities.begin(); l != CityConquest.cities.end(); ++l)
{
City *ct = *l;
if (ct->controlled != side && ct->active == false && ct->minlevel <= pPlayer->getLevel() && ct->maxlevel >= pPlayer->getLevel() && CityConquest.CanStartSiege(ct->id, side) && ct->id >= beginAt)
{
if (i < 8)
lastid = ct->id;
if (i < 9)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, ct->name, GOSSIP_SENDER_MAIN, START_OFFSET + ct->id);
i++;
}
else if (i == 9)
{
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Next >>", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_SARTLIST + lastid);
i++;
}
}
}
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "<< Back", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_MAIN);
pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID());
}
void TeleportList( Player* pPlayer, Creature* pCreature)
{
Cities::iterator l;
int side = 1;
if(pPlayer->TeamForRace(pPlayer->getRace())==ALLIANCE)
side = 0;
for (l = CityConquest.cities.begin(); l != CityConquest.cities.end(); ++l)
{
City *ct = *l;
if (ct->active == true)
{
char * nm;
nm = new char[ct->name.size()+1];
nm[ct->name.size()] = 0;
memcpy(nm, ct->name.c_str(), ct->name.size());
char msg[500];
if (ct->controlled == side)
{
sprintf(msg, "Defend: %s", nm);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, msg, GOSSIP_SENDER_MAIN, PORT_OFFSET + ct->id);
}
else
{
sprintf(msg, "Attack: %s", nm);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, msg, GOSSIP_SENDER_MAIN, PORT_OFFSET + ct->id);
}
}
}
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "<< Back", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_MAIN);
pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID());
}
void MainMenu(Player* pPlayer, Creature* pCreature)
{
if (GetActiveSieges(pPlayer) < 5)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "New Conquest", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_SARTLIST + 1);
if (GetActiveSiegesAll(pPlayer) > 0)
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Aid in Conquest", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_PORTLIST);
pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Bye", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_CLOSE);
pPlayer->SEND_GOSSIP_MENU(1, pCreature->GetGUID());
}
class city_conquest_portal : public CreatureScript
{
public:
city_conquest_portal() : CreatureScript("city_conquest_portal") {}
bool OnGossipHello(Player* pPlayer, Creature* pCreature)
{
MainMenu(pPlayer, pCreature);
return true;
}
bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 action)
{
pPlayer->PlayerTalkClass->ClearMenus();
int id = 0;
int side = 1;
if(pPlayer->TeamForRace(pPlayer->getRace())==ALLIANCE)
side = 0;
if (action >= PORT_OFFSET)
{
id = action - PORT_OFFSET;
Cities::iterator l;
for (l = CityConquest.cities.begin(); l != CityConquest.cities.end(); ++l)
{
City *ct = *l;
if (ct->id == id)
{
if (ct->controlled == side)
pPlayer->TeleportTo(ct->port_defense->map, ct->port_defense->x, ct->port_defense->y, ct->port_defense->z, ct->port_defense->o, 0);
else
pPlayer->TeleportTo(ct->port_attack->map, ct->port_attack->x, ct->port_attack->y, ct->port_attack->z, ct->port_attack->o, 0);
pPlayer->PlayerTalkClass->CloseGossip();
}
}
}
else if (action >= START_OFFSET)
{
int side = 1;
if(pPlayer->TeamForRace(pPlayer->getRace())==ALLIANCE)
side = 0;
id = action - START_OFFSET;
CityConquest.StartSiege(id, side);
MainMenu(pPlayer, pCreature);
}
else if (action >= GOSSIP_ACTION_SARTLIST)
{
id = action - GOSSIP_ACTION_SARTLIST;
StartSiegeList(id, pPlayer, pCreature);
}
else if (action == GOSSIP_ACTION_CLOSE)
{
pPlayer->PlayerTalkClass->CloseGossip();
}
else if (action == GOSSIP_ACTION_PORTLIST)
{
TeleportList(pPlayer, pCreature);
}
else if (action == GOSSIP_ACTION_MAIN)
{
MainMenu(pPlayer, pCreature);
}
return true;
}
};
void AddSC_city_conquest_portal()
{
new city_conquest_portal;
}
Fehlermeldung dazu:
[CODE]4> city_conquest_portal.cpp
4>D:\Trinity\DreamCore\src\server\scripts\Custom\city_conquest_portal.cpp(160): error C2039: ‘CloseGossip’: Ist kein Element von ‘PlayerMenu’
4> D:/Trinity/DreamCore/src/server/game/Entities/Creature\GossipDef.h(248): Siehe Deklaration von ‘PlayerMenu’
4>D:\Trinity\DreamCore\src\server\scripts\Custom\city_conquest_portal.cpp(180): error C2039: ‘CloseGossip’: Ist kein Element von ‘PlayerMenu’
4> D:/Trinity/DreamCore/src/server/game/Entities/Creature\GossipDef.h(248): Siehe Deklaration von ‘PlayerMenu’[/CODE]