Postado Março 4, 2021 4 anos Este é um post popular. 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: Spoiler 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: Spoiler 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 Editado Março 4, 2021 4 anos por Yan Liima (veja o histórico de edições) ╔══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ══════════════════════════╗ Te Ajudei? Rep + e ficamos Quits Precisando de ajuda? Discord: Yan Liima #3702 Programador Júnior de LUA, PHP e JavaScript Juntos somos lendas, separados somos Mitos! ╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝
Postado Março 4, 2021 4 anos @Yan Liima brabo demais Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas. discord.gg/phJZeHa2k4 Projeto ATS (Naruto) Informações Abaixo Facebook Youtube Discord Tutoriais / Conteúdos Clique Aqui
Postado Março 8, 2021 4 anos Esse é o cara, vai ajudar muita gente, parabéns!! [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
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.