Postado Maio 25, 2020 4 anos Boa noite pessoal, o placar do war system está com um pequeno problema no placar. O lado da guild que invitou para war cada morte esta sendo registrada como duas. Acredito que seja a função de registrar no banco de dados pois no banco de dados conforme mostra no print, esta realmente registrando com o valor que esta mostrando no placar do site, então não é problema do site. Se alguem puder ajudar agradeço exemplo de placar. O vermelho (da guild que invita) foi 6 mortes e está mostrando 12. O verde está correto, abaixo o registro do banco de dados, tabela guild_wars wars.lua function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.executeQuery("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.executeQuery("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.executeQuery(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end Editado Maio 25, 2020 4 anos por elitehox (veja o histórico de edições)
Postado Maio 25, 2020 4 anos Autor 1 hora atrás, Rutserzim disse: Qual distro você está usando? pensei que havia citado, mas nao, desculpe. é o TFS0.4 Editado Maio 25, 2020 4 anos por elitehox (veja o histórico de edições)
Postado Maio 25, 2020 4 anos 1 hora atrás, elitehox disse: pensei que havia citado, mas nao, desculpe. é o TFS0.4 Tem ideia de qual rev é? Lembro que na 3777 ainda tinha bugs no war system.
Postado Maio 25, 2020 4 anos Autor 1 hora atrás, Rutserzim disse: Tem ideia de qual rev é? Lembro que na 3777 ainda tinha bugs no war system. baixei e compilei do github do s3kk. https://github.com/s3kk/tfs04 Não aparece nenhum erro na distro. Simplismente ele conta 1 morte como duas pra a guild que invitou pra war. eu nao consigo achar o arquivo da função que registra na tabela guild_wars. acredito que o problema está no registro nessa tabela, na coluna guild_kills, o enemy_kills ta registrando direito. Se eu conseguisse achar o arquivo que registra as mortes na tabela eu conseguiria comparar a função de registro no guild_kills (que registrado errado) com a enemy_kills (que ta registrando corretamente) acredito que o problema esta na src da distro no arquivo ioguild.cpp. ioguild.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 "ioguild.h" #include "database.h" #include "player.h" #include "configmanager.h" #include "game.h" #include "chat.h" extern Chat g_chat; extern Game g_game; extern ConfigManager g_config; bool IOGuild::getGuildId(uint32_t& id, const std::string& name) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guilds` WHERE `name` " << db->getStringComparer() << db->escapeString(name) << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; id = result->getDataInt("id"); result->free(); return true; } bool IOGuild::getGuildById(std::string& name, uint32_t id) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `name` FROM `guilds` WHERE `id` = " << id << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; name = result->getDataString("name"); result->free(); return true; } bool IOGuild::swapGuildIdToOwner(uint32_t& value) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `ownerid` FROM `guilds` WHERE `id` = " << value << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; value = result->getDataInt("ownerid"); result->free(); return true; } bool IOGuild::guildExists(uint32_t guild) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guilds` WHERE `id` = " << guild << " AND `world_id` = " << g_config.getNumber(ConfigManager::WORLD_ID) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; result->free(); return true; } uint32_t IOGuild::getRankIdByName(uint32_t guild, const std::string& name) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << " AND `name` " << db->getStringComparer() << db->escapeString(name) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return 0; const uint32_t id = result->getDataInt("id"); result->free(); return id; } uint32_t IOGuild::getRankIdByLevel(uint32_t guild, GuildLevel_t level) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << " AND `level` = " << level << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return 0; const uint32_t id = result->getDataInt("id"); result->free(); return id; } bool IOGuild::getRankEx(uint32_t& id, std::string& name, uint32_t guild, GuildLevel_t level) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id`, `name` FROM `guild_ranks` WHERE `guild_id` = " << guild << " AND `level` = " << level; if(id) query << " AND `id` = " << id; query << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; name = result->getDataString("name"); if(!id) id = result->getDataInt("id"); result->free(); return true; } std::string IOGuild::getRank(uint32_t guid) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `guild_ranks`.`name` FROM `players`, `guild_ranks` WHERE `players`.`id` = " << guid << " AND `guild_ranks`.`id` = `players`.`rank_id` LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return ""; const std::string name = result->getDataString("name"); result->free(); return name; } bool IOGuild::changeRank(uint32_t guild, const std::string& oldName, const std::string& newName) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << " AND `name` " << db->getStringComparer() << db->escapeString(oldName) << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; const uint32_t id = result->getDataInt("id"); result->free(); query.str(""); query << "UPDATE `guild_ranks` SET `name` = " << db->escapeString(newName) << " WHERE `id` = " << id << db->getUpdateLimiter(); if(!db->query(query.str())) return false; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->getRankId() == id) it->second->setRankName(newName); } return true; } bool IOGuild::createGuild(Player* player) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "INSERT INTO `guilds` (`id`, `world_id`, `name`, `ownerid`, `creationdata`, `motd`) VALUES (NULL, " << g_config.getNumber(ConfigManager::WORLD_ID) << ", " << db->escapeString(player->getGuildName()) << ", " << player->getGUID() << ", " << time(NULL) << ", 'Your guild has been successfully created, to view all available commands type: !commands. If you would like to remove this message use !cleanmotd and to set new motd use !setmotd text.')"; if(!db->query(query.str())) return false; query.str(""); query << "SELECT `id` FROM `guilds` WHERE `ownerid` = " << player->getGUID() << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; const uint32_t guildId = result->getDataInt("id"); result->free(); return joinGuild(player, guildId, true); } bool IOGuild::joinGuild(Player* player, uint32_t guildId, bool creation/* = false*/) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guildId << " AND `level` = " << (creation ? "3" : "1") << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; const uint32_t rankId = result->getDataInt("id"); result->free(); std::string guildName; if(!creation) { query.str(""); query << "SELECT `name` FROM `guilds` WHERE `id` = " << guildId << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; guildName = result->getDataString("name"); result->free(); } query.str(""); query << "UPDATE `players` SET `rank_id` = " << rankId << " WHERE `id` = " << player->getGUID() << db->getUpdateLimiter(); if(!db->query(query.str())) return false; player->setGuildId(guildId); GuildLevel_t level = GUILDLEVEL_MEMBER; if(!creation) player->setGuildName(guildName); else level = GUILDLEVEL_LEADER; player->setGuildLevel(level, rankId); player->invitedToGuildsList.clear(); return true; } bool IOGuild::disbandGuild(uint32_t guildId) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `players` SET `rank_id` = '' AND `guildnick` = '' WHERE `rank_id` = " << getRankIdByLevel(guildId, GUILDLEVEL_LEADER) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_VICE) << " OR rank_id = " << getRankIdByLevel(guildId, GUILDLEVEL_MEMBER); if(!db->query(query.str())) return false; InvitedToGuildsList::iterator iit; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->getGuildId() == guildId) it->second->leaveGuild(); else { iit = std::find(it->second->invitedToGuildsList.begin(), it->second->invitedToGuildsList.end(), guildId); if(iit != it->second->invitedToGuildsList.end()) it->second->invitedToGuildsList.erase(iit); } } query.str(""); query << "DELETE FROM `guilds` WHERE `id` = " << guildId << db->getUpdateLimiter(); if(!db->query(query.str())) return false; query.str(""); query << "DELETE FROM `guild_invites` WHERE `guild_id` = " << guildId; if(!db->query(query.str())) return false; query.str(""); query << "DELETE FROM `guild_ranks` WHERE `guild_id` = " << guildId; return db->query(query.str()); } bool IOGuild::hasGuild(uint32_t guid) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `rank_id` FROM `players` WHERE `id` = " << guid << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; const bool ret = result->getDataInt("rank_id") != 0; result->free(); return ret; } bool IOGuild::isInvited(uint32_t guild, uint32_t guid) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `guild_id` FROM `guild_invites` WHERE `player_id` = " << guid << " AND `guild_id`= " << guild << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; result->free(); return true; } bool IOGuild::invitePlayer(uint32_t guild, uint32_t guid) { Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `guild_invites` (`player_id`, `guild_id`) VALUES ('" << guid << "', '" << guild << "')"; return db->query(query.str()); } bool IOGuild::revokeInvite(uint32_t guild, uint32_t guid) { Database* db = Database::getInstance(); DBQuery query; query << "DELETE FROM `guild_invites` WHERE `player_id` = " << guid << " AND `guild_id` = " << guild; return db->query(query.str()); } uint32_t IOGuild::getGuildId(uint32_t guid) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `guild_ranks`.`guild_id` FROM `players`, `guild_ranks` WHERE `players`.`id` = " << guid << " AND `guild_ranks`.`id` = `players`.`rank_id` LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return 0; const uint32_t guildId = result->getDataInt("guild_id"); result->free(); return guildId; } GuildLevel_t IOGuild::getGuildLevel(uint32_t guid) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `guild_ranks`.`level` FROM `players`, `guild_ranks` WHERE `players`.`id` = " << guid << " AND `guild_ranks`.`id` = `players`.`rank_id` LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return GUILDLEVEL_NONE; const GuildLevel_t level = (GuildLevel_t)result->getDataInt("level"); result->free(); return level; } bool IOGuild::setGuildLevel(uint32_t guid, GuildLevel_t level) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << getGuildId(guid) << " AND `level` = " << level << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return false; query.str(""); query << "UPDATE `players` SET `rank_id` = " << result->getDataInt("id") << " WHERE `id` = " << guid << db->getUpdateLimiter(); result->free(); return db->query(query.str()); } bool IOGuild::updateOwnerId(uint32_t guild, uint32_t guid) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `guilds` SET `ownerid` = " << guid << " WHERE `id` = " << guild << db->getUpdateLimiter(); return db->query(query.str()); } bool IOGuild::setGuildNick(uint32_t guid, const std::string& nick) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `players` SET `guildnick` = " << db->escapeString(nick) << " WHERE `id` = " << guid << db->getUpdateLimiter(); return db->query(query.str()); } bool IOGuild::setMotd(uint32_t guild, const std::string& newMessage) { Database* db = Database::getInstance(); DBQuery query; query << "UPDATE `guilds` SET `motd` = " << db->escapeString(newMessage) << " WHERE `id` = " << guild << db->getUpdateLimiter(); return db->query(query.str()); } std::string IOGuild::getMotd(uint32_t guild) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `motd` FROM `guilds` WHERE `id` = " << guild << " LIMIT 1"; if(!(result = db->storeQuery(query.str()))) return ""; const std::string motd = result->getDataString("motd"); result->free(); return motd; } bool IOGuild::war(War_t& enemy) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `g`.`name` AS `guild_name`, `e`.`name` AS `enemy_name`, `w`.* FROM `guild_wars` w INNER JOIN `guilds` g ON `w`.`guild_id` = `g`.`id` INNER JOIN `guilds` e ON `w`.`enemy_id` = `e`.`id` WHERE `w`.`id` = " << enemy.war; if(!(result = db->storeQuery(query.str()))) return false; enemy.ids[WAR_GUILD] = result->getDataInt("guild_id"); enemy.ids[WAR_ENEMY] = result->getDataInt("enemy_id"); enemy.names[WAR_GUILD] = result->getDataString("guild_name"); enemy.names[WAR_ENEMY] = result->getDataString("enemy_name"); enemy.frags[WAR_GUILD] = result->getDataInt("guild_kills"); enemy.frags[WAR_ENEMY] = result->getDataInt("enemy_kills"); enemy.frags[enemy.type]++; enemy.limit = result->getDataInt("frags"); enemy.end = result->getDataInt("end"); enemy.status = result->getDataInt("status"); enemy.payment = result->getDataInt("payment"); result->free(); if(enemy.frags[WAR_GUILD] < enemy.limit && enemy.frags[WAR_ENEMY] < enemy.limit && (enemy.status != 1 || !enemy.end || enemy.end > time(NULL))) { query.str(""); query << "UPDATE `guild_wars` SET `guild_kills` = " << enemy.frags[WAR_GUILD] << ", `enemy_kills` = " << enemy.frags[WAR_ENEMY] << " WHERE `id` = " << enemy.war; return db->query(query.str()); } query.str(""); query << "UPDATE `guilds` SET `balance` = `balance` + " << (enemy.payment * 2) << " WHERE `id` = " << enemy.ids[enemy.type]; if(!db->query(query.str())) return false; query.str(""); query << "UPDATE `guild_wars` SET `guild_kills` = " << enemy.frags[WAR_GUILD] << ", `enemy_kills` = " << enemy.frags[WAR_ENEMY] << ", `end` = " << time(NULL) << ", `status` = 5 WHERE `id` = " << enemy.war; if(!db->query(query.str())) return false; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { if(it->second->isRemoved()) continue; bool update = false; if(it->second->getGuildId() == enemy.ids[WAR_GUILD]) { it->second->removeEnemy(enemy.ids[WAR_ENEMY]); update = true; } else if(it->second->getGuildId() == enemy.ids[WAR_ENEMY]) { it->second->removeEnemy(enemy.ids[WAR_GUILD]); update = true; } if(update) g_game.updateCreatureEmblem(it->second); } std::stringstream s; s << enemy.names[enemy.type] << " has just won the war against " << enemy.names[enemy.type == WAR_GUILD] << "."; return g_game.broadcastMessage(s.str().c_str(), MSG_EVENT_ADVANCE); } void IOGuild::frag(Player* player, uint64_t deathId, const DeathList& list) { Database* db = Database::getInstance(); War_t war; std::stringstream s; for(DeathList::const_iterator it = list.begin(); it != list.end(); ) { if(it->isLast()) war = it->getWar(); Creature* creature = it->getKillerCreature(); if(it != list.begin()) { ++it; if(it == list.end()) s << " and "; else s << ", "; } else ++it; s << creature->getName(); } std::string killers = s.str(); s.str(""); ChatChannel* channel = NULL; if((channel = g_chat.getChannel(player, CHANNEL_GUILD))) { s << "Guild member " << player->getName() << " was killed by " << killers << ". The new score is " << war.frags[ war.type == WAR_GUILD] << ":" << war.frags[war.type] << " frags (limit " << war.limit << ")."; channel->talk("", SPEAK_CHANNEL_RA, s.str()); } s.str(""); if((channel = g_chat.getChannel(list[0].getKillerCreature()->getPlayer(), CHANNEL_GUILD))) { s << "Opponent " << player->getName() << " was killed by " << killers << ". The new score is " << war.frags[ war.type] << ":" << war.frags[war.type == WAR_GUILD] << " frags (limit " << war.limit << ")."; channel->talk("", SPEAK_CHANNEL_RA, s.str()); } DBQuery query; query << "INSERT INTO `guild_kills` (`guild_id`, `war_id`, `death_id`) VALUES (" << war.ids[war.type] << ", " << war.war << ", " << deathId << ");"; db->query(query.str()); } Editado Maio 25, 2020 4 anos por elitehox (veja o histórico de edições)
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.