Postado Março 20, 2017 8 anos Olá pessoal do Tibiaking!! estou com um problema de compilação de distro, estou tentando adicionar, (melhor dizendo), estou tentando colocar a nova regra do otserverlist sobre players xlogout https://otland.net/threads/how-to-not-count-x-logged-players.81370/ Porém está dando o erro a baixo, já tentei varias vezes, alguém poderia tentar solucionar o problema, minha distro é a TFS 4.0 ==================Erro que ocorre na hora da compilação=========== status.cpp: In member function ‘std::string Status::getStatusString(bool) const’: status.cpp:142:24: error: ‘connectionCount’ is not a member of ‘Connection’ sprintf(buffer, "%d", Connection::connectionCount()); ^ status.cpp: In member function ‘void Status::getInfo(uint32_t, OutputMessage_ptr, NetworkMessage&) const’: status.cpp:240:25: error: ‘connectionCount’ is not a member of ‘Connection’ output->put<uint32_t>(Connection::connectionCount()); ==================Status.cpp============================== //////////////////////////////////////////////////////////////////////// // OpenTibia - an opensource roleplaying game //////////////////////////////////////////////////////////////////////// // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. //////////////////////////////////////////////////////////////////////// #include "otpch.h" #include <libxml/xmlmemory.h> #include <libxml/parser.h> #include "status.h" #include "const.h" #include "tools.h" #include "connection.h" #include "networkmessage.h" #include "outputmessage.h" #include "configmanager.h" #include "game.h" #include "resources.h" extern ConfigManager g_config; extern Game g_game; #ifdef __ENABLE_SERVER_DIAGNOSTIC__ uint32_t ProtocolStatus::protocolStatusCount = 0; #endif IpConnectMap ProtocolStatus::ipConnectMap; void ProtocolStatus::onRecvFirstMessage(NetworkMessage& msg) { uint32_t ip = getIP(); if(ip != LOCALHOST) { IpConnectMap::const_iterator it = ipConnectMap.find(ip); if(it != ipConnectMap.end() && OTSYS_TIME() < it->second + g_config.getNumber(ConfigManager::STATUSQUERY_TIMEOUT)) { getConnection()->close(); return; } ipConnectMap[ip] = OTSYS_TIME(); } uint8_t type = msg.get<char>(); switch(type) { case 0xFF: { if(msg.getString(false, 4) == "info") { if(OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false)) { TRACK_MESSAGE(output); if(Status* status = Status::getInstance()) { bool sendPlayers = false; if(msg.size() > msg.position()) sendPlayers = msg.get<char>() == 0x01; output->putString(status->getStatusString(sendPlayers), false); } setRawMessages(true); // we dont want the size header, nor encryption OutputMessagePool::getInstance()->send(output); } } break; } case 0x01: { uint32_t requestedInfo = msg.get<uint16_t>(); // only a byte is necessary, though we could add new infos here if(OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false)) { TRACK_MESSAGE(output); if(Status* status = Status::getInstance()) status->getInfo(requestedInfo, output, msg); OutputMessagePool::getInstance()->send(output); } break; } default: break; } getConnection()->close(); } #ifdef __DEBUG_NET_DETAIL__ void ProtocolStatus::deleteProtocolTask() { std::clog << "Deleting ProtocolStatus" << std::endl; Protocol::deleteProtocolTask(); } #endif std::string Status::getStatusString(bool sendPlayers) const { xmlDocPtr doc = xmlNewDoc((const xmlChar*)"1.0"); doc->children = xmlNewDocNode(doc, NULL, (const xmlChar*)"tsqp", NULL); xmlNodePtr root = doc->children; char buffer[90]; xmlSetProp(root, (const xmlChar*)"version", (const xmlChar*)"1.0"); xmlNodePtr p = xmlNewNode(NULL,(const xmlChar*)"serverinfo"); sprintf(buffer, "%u", (uint32_t)getUptime()); xmlSetProp(p, (const xmlChar*)"uptime", (const xmlChar*)buffer); xmlSetProp(p, (const xmlChar*)"ip", (const xmlChar*)g_config.getString(ConfigManager::IP).c_str()); xmlSetProp(p, (const xmlChar*)"servername", (const xmlChar*)g_config.getString(ConfigManager::SERVER_NAME).c_str()); sprintf(buffer, "%d", (int32_t)g_config.getNumber(ConfigManager::LOGIN_PORT)); xmlSetProp(p, (const xmlChar*)"port", (const xmlChar*)buffer); xmlSetProp(p, (const xmlChar*)"location", (const xmlChar*)g_config.getString(ConfigManager::LOCATION).c_str()); xmlSetProp(p, (const xmlChar*)"url", (const xmlChar*)g_config.getString(ConfigManager::URL).c_str()); xmlSetProp(p, (const xmlChar*)"server", (const xmlChar*)SOFTWARE_NAME); xmlSetProp(p, (const xmlChar*)"version", (const xmlChar*)SOFTWARE_VERSION); xmlSetProp(p, (const xmlChar*)"client", (const xmlChar*)CLIENT_VERSION_STRING); xmlAddChild(root, p); p = xmlNewNode(NULL,(const xmlChar*)"owner"); xmlSetProp(p, (const xmlChar*)"name", (const xmlChar*)g_config.getString(ConfigManager::OWNER_NAME).c_str()); xmlSetProp(p, (const xmlChar*)"email", (const xmlChar*)g_config.getString(ConfigManager::OWNER_EMAIL).c_str()); xmlAddChild(root, p); p = xmlNewNode(NULL,(const xmlChar*)"players"); sprintf(buffer, "%d", g_game.getPlayersOnline()); xmlSetProp(p, (const xmlChar*)"online", (const xmlChar*)buffer); sprintf(buffer, "%d", (int32_t)g_config.getNumber(ConfigManager::MAX_PLAYERS)); xmlSetProp(p, (const xmlChar*)"max", (const xmlChar*)buffer); sprintf(buffer, "%d", g_game.getPlayersRecord()); xmlSetProp(p, (const xmlChar*)"peak", (const xmlChar*)buffer); if(sendPlayers) { std::stringstream ss; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->isRemoved() || it->second->isGhost()) continue; if(!ss.str().empty()) ss << ";"; ss << it->second->getName() << "," << it->second->getVocationId() << "," << it->second->getLevel(); } xmlNodeSetContent(p, (const xmlChar*)ss.str().c_str()); } xmlAddChild(root, p); p = xmlNewNode(NULL,(const xmlChar*)"monsters"); sprintf(buffer, "%d", g_game.getMonstersOnline()); xmlSetProp(p, (const xmlChar*)"total", (const xmlChar*)buffer); xmlAddChild(root, p); p = xmlNewNode(NULL,(const xmlChar*)"npcs"); sprintf(buffer, "%d", g_game.getNpcsOnline()); xmlSetProp(p, (const xmlChar*)"total", (const xmlChar*)buffer); xmlAddChild(root, p); p = xmlNewNode(NULL,(const xmlChar*)"map"); xmlSetProp(p, (const xmlChar*)"name", (const xmlChar*)g_config.getString(ConfigManager::MAP_NAME).c_str()); xmlSetProp(p, (const xmlChar*)"author", (const xmlChar*)g_config.getString(ConfigManager::MAP_AUTHOR).c_str()); uint32_t mapWidth, mapHeight; g_game.getMapDimensions(mapWidth, mapHeight); sprintf(buffer, "%u", mapWidth); xmlSetProp(p, (const xmlChar*)"width", (const xmlChar*)buffer); sprintf(buffer, "%u", mapHeight); xmlSetProp(p, (const xmlChar*)"height", (const xmlChar*)buffer); xmlAddChild(root, p); xmlNewTextChild(root, NULL, (const xmlChar*)"motd", (const xmlChar*)g_config.getString(ConfigManager::MOTD).c_str()); xmlChar* s = NULL; int32_t len = 0; xmlDocDumpMemory(doc, (xmlChar**)&s, &len); std::string xml; if(s) xml = std::string((char*)s, len); xmlFree(s); xmlFreeDoc(doc); return xml; } void Status::getInfo(uint32_t requestedInfo, OutputMessage_ptr output, NetworkMessage& msg) const { if(requestedInfo & REQUEST_BASIC_SERVER_INFO) { output->put<char>(0x10); output->putString(g_config.getString(ConfigManager::SERVER_NAME).c_str()); output->putString(g_config.getString(ConfigManager::IP).c_str()); char buffer[10]; sprintf(buffer, "%d", (int32_t)g_config.getNumber(ConfigManager::LOGIN_PORT)); output->putString(buffer); } if(requestedInfo & REQUEST_SERVER_OWNER_INFO) { output->put<char>(0x11); output->putString(g_config.getString(ConfigManager::OWNER_NAME).c_str()); output->putString(g_config.getString(ConfigManager::OWNER_EMAIL).c_str()); } if(requestedInfo & REQUEST_MISC_SERVER_INFO) { output->put<char>(0x12); output->putString(g_config.getString(ConfigManager::MOTD).c_str()); output->putString(g_config.getString(ConfigManager::LOCATION).c_str()); output->putString(g_config.getString(ConfigManager::URL).c_str()); uint64_t uptime = getUptime(); output->put<uint32_t>((uint32_t)(uptime >> 32)); output->put<uint32_t>((uint32_t)(uptime)); } if(requestedInfo & REQUEST_PLAYERS_INFO) { output->put<char>(0x20); output->put<uint32_t>(g_game.getPlayersOnline()); output->put<uint32_t>((uint32_t)g_config.getNumber(ConfigManager::MAX_PLAYERS)); output->put<uint32_t>(g_game.getPlayersRecord()); } if(requestedInfo & REQUEST_SERVER_MAP_INFO) { output->put<char>(0x30); output->putString(g_config.getString(ConfigManager::MAP_NAME).c_str()); output->putString(g_config.getString(ConfigManager::MAP_AUTHOR).c_str()); uint32_t mapWidth, mapHeight; g_game.getMapDimensions(mapWidth, mapHeight); output->put<uint16_t>(mapWidth); output->put<uint16_t>(mapHeight); } if(requestedInfo & REQUEST_EXT_PLAYERS_INFO) { output->put<char>(0x21); std::list<std::pair<std::string, uint32_t> > players; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(!it->second->isRemoved() && !it->second->isGhost()) players.push_back(std::make_pair(it->second->getName(), it->second->getLevel())); } output->put<uint32_t>(players.size()); for(std::list<std::pair<std::string, uint32_t> >::iterator it = players.begin(); it != players.end(); ++it) { output->putString(it->first); output->put<uint32_t>(it->second); } } if(requestedInfo & REQUEST_PLAYER_STATUS_INFO) { output->put<char>(0x22); const std::string name = msg.getString(); Player* p = NULL; if(g_game.getPlayerByNameWildcard(name, p) == RET_NOERROR && !p->isGhost()) output->put<char>(0x01); else output->put<char>(0x00); } if(requestedInfo & REQUEST_SERVER_SOFTWARE_INFO) { output->put<char>(0x23); output->putString(SOFTWARE_NAME); output->putString(SOFTWARE_VERSION); output->putString(CLIENT_VERSION_STRING); } }
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.