Ir para conteúdo

Limite máximo de players em guild (in-game)


Posts Recomendados

  • Diretor


Limite máximo de players em guild in-game ?

barrayan01.png

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:

Será um valor configurado no proprio config.lua, onde determinará o limite máximo de todas as guild.(já incluido na 0.4 rev3996)

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...

barrayan02.png

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

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...