Limite máximo de players em guild in-game ?
Bom galera estou postando esse conteúdo como complemento do limite em WEBSITE
Ao utilizar !joinguild esse code verifica se a guilda já atingiu o limite máximo de membros(configurado)
Eu estarei disponibilizando de duas maneiras:
1º Será um valor configurado no proprio config.lua, onde determinará o limite máximo de todas as guild.(já incluido na 0.4 rev3996)
2º A verificação será feita por DB, onde terá um valor padrão para cada guilda criada, podendo ser alterado o valor de membros maximo.
Ou seja, a guilda número UM pode ter máximo de 50 players, e a guilda número DOIS pode ter o máximo de 100.
Vocês pode ser criativos e vender items que aumenta o limite ou fazer eventos/sorteios para aumentar...
Enfim, vamos lá...
Primeira maneira:
Em configmanager.cpp procure por:
m_confNumber[FIST_BASE_ATTACK] = getGlobalNumber("fistBaseAttack", 7);
De baixo adicione:
m_confNumber[GUILD_MAXPLAYER] = getGlobalNumber("maxPlayerGuild", 50);
Em configmanager.h procure por:
FIST_BASE_ATTACK,
Logo em baixo adicione:
GUILD_MAXPLAYER,
Depois em ioguild.cpp procure:
uint32_t IOGuild::getRankIdByLevel(uint32_t guild, GuildLevel_t level)
Adicione isto logo em cima:
uint32_t IOGuild::getGuildMaxMembersCount(uint32_t guild) { Database* db = Database::getInstance(); DBResult* result; uint32_t count = 0; DBQuery query; query << "SELECT `id` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << ")"; if(!(result = db->storeQuery(query.str()))) return count; do { ++count; } while(result->next()); result->free(); return count; }
Em ioguild.h procure:
uint32_t getRankIdByLevel(uint32_t guild, GuildLevel_t level);
Em baixo adicione:
uint32_t getGuildMaxMembersCount(uint32_t guild);
Vai em talkactions.cpp e procure por:
bool TalkAction::guildJoin(Creature* creature, const std::string&, const std::string& param)
Você irá trocar toda essa função por essa:
bool TalkAction::guildJoin(Creature* creature, const std::string&, const std::string& param) { Player* player = creature->getPlayer(); if(!player || !g_config.getBool(ConfigManager::INGAME_GUILD_MANAGEMENT)) return false; std::string param_ = param; trimString(param_); if(!player->getGuildId()) { uint32_t guildId; if(IOGuild::getInstance()->getGuildId(guildId, param_)) { if(player->isGuildInvited(guildId)) { char buffer[80]; uint32_t count = g_config.getNumber(ConfigManager::GUILD_MAXPLAYER); //included by Yan Liima if(IOGuild::getInstance()->getGuildMaxMembersCount(guildId) < count) { IOGuild::getInstance()->joinGuild(player, guildId); player->sendTextMessage(MSG_INFO_DESCR, "You have joined the guild."); char buffer[80]; sprintf(buffer, "%s has joined the guild.", player->getName().c_str()); if(ChatChannel* guildChannel = g_chat.getChannel(player, 0x00)) guildChannel->talk(player, SPEAK_CHANNEL_RA, buffer); } else sprintf(buffer, "The maximum number of guild members has been reached.(%d members)", g_config.getNumber(ConfigManager::GUILD_MAXPLAYER)); player->sendCancel(buffer); } else player->sendCancel("You are not invited to that guild."); } else player->sendCancel("There's no guild with that name."); } else player->sendCancel("You are already in a guild."); return true; }
E por fim em qualquer lugar do config.lua do seu servidor add:
maxPlayerGuild = 50
E altere o limite ai xD
Segunda maneira:
Execute essa Query na sua db
Observação: Altere o número '50' para o valor padrão do limite máximo das guilds criadas:
ALTER TABLE `guilds` ADD `max_members` VARCHAR( 255 ) NOT NULL DEFAULT '50';
Depois em ioguild.cpp procure:
uint32_t IOGuild::getRankIdByLevel(uint32_t guild, GuildLevel_t level)
Adicione isto logo em cima:
uint32_t IOGuild::getGuildMaxMembersCount(uint32_t guild) { Database* db = Database::getInstance(); DBResult* result; uint32_t count = 0; DBQuery query; query << "SELECT `id` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " << guild << ")"; if(!(result = db->storeQuery(query.str()))) return count; do { ++count; } while(result->next()); result->free(); return count; } uint32_t IOGuild::getGuildLimit(uint32_t guild) { Database* db = Database::getInstance(); DBResult* result; DBQuery query; query << "SELECT `max_members` FROM `guilds` WHERE `id` = " << guild; if(!(result = db->storeQuery(query.str()))) return 0; const uint32_t limit = result->getDataInt("max_members"); result->free(); return limit; }
Em ioguild.h procure:
uint32_t getRankIdByLevel(uint32_t guild, GuildLevel_t level);
Em baixo adicione:
uint32_t getGuildMaxMembersCount(uint32_t guild); uint32_t getGuildLimit(uint32_t guild);
Vai em talkactions.cpp e procure por:
bool TalkAction::guildJoin(Creature* creature, const std::string&, const std::string& param)
Você irá trocar toda essa função por essa:
bool TalkAction::guildJoin(Creature* creature, const std::string&, const std::string& param) { Player* player = creature->getPlayer(); if(!player || !g_config.getBool(ConfigManager::INGAME_GUILD_MANAGEMENT)) return false; std::string param_ = param; trimString(param_); if(!player->getGuildId()) { uint32_t guildId; if(IOGuild::getInstance()->getGuildId(guildId, param_)) { if(player->isGuildInvited(guildId)) { char buffer[80]; uint32_t limit = IOGuild::getInstance()->getGuildLimit(guildId); //included by Yan Liima if(IOGuild::getInstance()->getGuildMaxMembersCount(guildId) < limit) { IOGuild::getInstance()->joinGuild(player, guildId); player->sendTextMessage(MSG_INFO_DESCR, "You have joined the guild."); char buffer[80]; sprintf(buffer, "%s has joined the guild.", player->getName().c_str()); if(ChatChannel* guildChannel = g_chat.getChannel(player, 0x00)) guildChannel->talk(player, SPEAK_CHANNEL_RA, buffer); } else sprintf(buffer, "The maximum number of guild members has been reached.(%d members)", IOGuild::getInstance()->getGuildLimit(guildId)); player->sendCancel(buffer); } else player->sendCancel("You are not invited to that guild."); } else player->sendCancel("There's no guild with that name."); } else player->sendCancel("You are already in a guild."); return true; }
Prontinho, só alterar o valor máximo de cada guild na tabela 'guild' ou montar um script que faça um item dar + capacidade...
Prontinho galera, espero que ajude algumas pessoas xD