Ir para conteúdo
  • Cadastre-se

(Resolvido)como limito o comando !joinguild?


Ir para solução Resolvido por KotZletY,

Posts Recomendados

Diga em poucas palavras a base utilizada (Nome do servidor ou nome do website).

TFS 0.4

Então, eu queria limitar o numero de players dentro de uma guild,só que meu server é SQLITE.
dai eu pensei em colocar pro comando !joinguild NOMEDAGUILD parasse de funcionar se a guild tivesse 10 players

Eu achei isso daqui nas sources, mas nao tenho ideia de como editar isso sem bugar =S

Spoiler

 

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))
            {
                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
                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;
}

 


algum filho de Deus pode me ajudar pf?
(aceito outras formas de ajuda que limite)

Link para o post
Compartilhar em outros sites
  • Solução

@poko360 leia as regras, caso volte a comentar up novamente ou qualquer frase para subi seu tópico você será advertido, o fórum tem um botão que você pode utilizar para subi seu tópico:

 

Vá na sua source no arquivo ioguild.h, abaixo de:

uint32_t getRankIdByLevel(uint32_t guild, GuildLevel_t level);

coloque:

uint32_t getGuildMembersCount(uint32_t guild);

em ioguild.cpp, acima de:

bool IOGuild::getRankEx(uint32_t& id, std::string& name, uint32_t guild, GuildLevel_t level)

coloque:

uint32_t IOGuild::getGuildMembersCount(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 talkactions.cpp, troque sua função por essa:

Spoiler

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))
            {
				if(IOGuild::getInstance()->getGuildMembersCount(guildId) < 10) { // 10, limite de membros na guild.
					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
					player->sendCancel("The amount of members of this guild has been reached!");
            }
            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;
}

 

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo