Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

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

barrayan01.png.1f6606db51c9286dbd5a72cd355e8d30.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.633d02f5b58022012ccb78561498430a.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

Editado por Yan Liima (veja o histórico de edições)

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Programador Júnior de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Postado

@Yan Liima
nice!!!

                                                                                                                  Have no idea!

                                                                                                  freelance? go to my discord:  sun#8860

 

Postado

Boa meu garoto, aprendeu com o pai ♥

 

 

 

 

 

                                                                                                                                                     tumblr_nwmv2z4VEM1ujiquxo1_100.gif.2db64bb36f0f565e68ff2a90cb98f439.gif.59f4c4cf234d2f6906621cac0553a862.gif

https://github.com/italoxxx1

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo