• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Configurable level to form a guild

elf

Sing, sing blue silver
Senator
Joined
Dec 11, 2007
Messages
3,666
Solutions
1
Reaction score
125
Location
Warsaw, Poland
GitHub
tayandenga
Twitch
tayandenga
I was playing with current SVN, and found a 'TODO' in chat.cpp.
Decided to do it by myself :p

1. Open configmanager.cpp, and find (line 132):
Code:
	m_confString[GENERATE_ACCOUNT_NUMBER] = getGlobalString(L, "generateAccountNumber", "yes");
Add after:
Code:
	m_confInteger[LEADER_LEVEL] = getGlobalNumber(L, "levelToCreateGuild", 8); //Added manually
Save and close the file.

2. Open configmanager.h, and find (line 127):
Code:
			STATUSQUERY_TIMEOUT,
Add after:
Code:
			LEADER_LEVEL, //Added manually
Save and close the file.

3. Open commands.cpp, and find (line 1216):
Code:
bool Commands::createGuild(Creature* creature, const std::string& cmd, const std::string& param)
{
	Player* player = creature->getPlayer();
	if(player)
	{
		if(player->guildId == 0)
		{
			trimString((std::string&)param);
			if(param.length() > 3)
			{
				if(param.length() < 21)
				{
					uint32_t guildId;
					if(!IOGuild.getGuildIdByName(guildId, param))
					{
						if(player->level > 7)
						{
							if(player->isPremium())
							{
								char buffer[55];
								sprintf(buffer, "You have formed the guild: %s!", param.c_str());
								player->sendTextMessage(MSG_INFO_DESCR, buffer);
								player->setGuildName(param);
								IOGuild.createGuild(player);
								return true;
							}
							else
								player->sendCancelMessage(RET_YOUNEEDPREMIUMACCOUNT);
						}
						else
							player->sendCancel("You have to be atleast Level 8 to form a guild.");
					}
					else
						player->sendCancel("There is already a guild with that name.");
				}
				else
					player->sendCancel("That guild name is too long, please select a shorter one.");
			}
			else
				player->sendCancel("That guild name is too short, please select a longer one.");
		}
		else
			player->sendCancel("You are already in a guild.");
	}
	return false;
}
Replace it with:
Code:
bool Commands::createGuild(Creature* creature, const std::string& cmd, const std::string& param)
{
	char buffer[125]; //Moved and increased size manually
	Player* player = creature->getPlayer();
	uint32_t leaderLevel = g_config.getNumber(ConfigManager::LEADER_LEVEL); //Added manually
	if(player)
	{
		if(player->guildId == 0)
		{
			trimString((std::string&)param);
			if(param.length() > 3)
			{
				if(param.length() < 21)
				{
					uint32_t guildId;
					if(!IOGuild.getGuildIdByName(guildId, param))
					{
						if(player->level >= leaderLevel) //Changed manually
						{
							if(player->isPremium())
							{
								sprintf(buffer, "You have formed the guild: %s!", param.c_str());
								player->sendTextMessage(MSG_INFO_DESCR, buffer);
								player->setGuildName(param);
								IOGuild.createGuild(player);
								return true;
							}
							else
								player->sendCancelMessage(RET_YOUNEEDPREMIUMACCOUNT);
						}
						else
						{
							sprintf(buffer, "You have to be at least Level %i to form a guild.", leaderLevel); //Added manually
							player->sendCancel(buffer); //Changed manually
						}
					}
					else
						player->sendCancel("There is already a guild with that name.");
				}
				else
					player->sendCancel("That guild name is too long, please select a shorter one.");
			}
			else
				player->sendCancel("That guild name is too short, please select a longer one.");
		}
		else
			player->sendCancel("You are already in a guild.");
	}
	return false;
}
Save and close the file.

4. Open chat.cpp and find (line 22):
Code:
#include "chat.h"
Add after:
Code:
#include "configmanager.h" //Added manually
Find (line 28):
Code:
extern Game g_game;
Add after:
Code:
extern ConfigManager g_config; //Added manually
Find (line 360):
Code:
					ChatChannel* guildChannel = getChannel(player, 0x00);
Add after:
Code:
					uint32_t leaderLevel = g_config.getNumber(ConfigManager::LEADER_LEVEL); //Added manually
Find (line 564):
Code:
												{
													if(paramPlayer->getLevel() > 7) //TODO: make this configurable
													{
														paramPlayer->setGuildLevel(GUILDLEVEL_LEADER);
														player->setGuildLevel(GUILDLEVEL_VICE);
														IOGuild.updateOwnerId(paramPlayer->getGuildId(), paramPlayer->getGUID());
														sprintf(buffer, "%s has passed the guild leadership to %s.", player->getName().c_str(), paramPlayer->getName().c_str());
														guildChannel->talk(player, SPEAK_CHANNEL_R2, buffer);
													}
													else
														player->sendCancel("The new guild leader has to be at least Level 8.");
												}
Replace with:
Code:
												{
													if(paramPlayer->getLevel() >= leaderLevel) //Changed manually
													{
														paramPlayer->setGuildLevel(GUILDLEVEL_LEADER);
														player->setGuildLevel(GUILDLEVEL_VICE);
														IOGuild.updateOwnerId(paramPlayer->getGuildId(), paramPlayer->getGUID());
														sprintf(buffer, "%s has passed the guild leadership to %s.", player->getName().c_str(), paramPlayer->getName().c_str());
														guildChannel->talk(player, SPEAK_CHANNEL_R2, buffer);
													}
													else
													{
														sprintf(buffer, "The new guild leader has to be at least Level %i.", leaderLevel); //Added manually
														player->sendCancel(buffer); //Changed manually
													}
												}
Find (line 641):
Code:
											{
												if(IOLoginData.getLevel(guid) >= 8) //TODO: make this configurable
												{
													IOGuild.setGuildLevel(guid, GUILDLEVEL_LEADER);
													player->setGuildLevel(GUILDLEVEL_VICE);
													sprintf(buffer, "%s has passed the guild leadership to %s.", player->getName().c_str(), param.c_str());
													guildChannel->talk(player, SPEAK_CHANNEL_R2, buffer);
												}
												else
													player->sendCancel("The new guild leader has to be at least Level 8.");
											}
Replace with:
Code:
											{
												if(IOLoginData.getLevel(guid) >= leaderLevel) //Changed manually
												{
													IOGuild.setGuildLevel(guid, GUILDLEVEL_LEADER);
													player->setGuildLevel(GUILDLEVEL_VICE);
													sprintf(buffer, "%s has passed the guild leadership to %s.", player->getName().c_str(), param.c_str());
													guildChannel->talk(player, SPEAK_CHANNEL_R2, buffer);
												}
												else
												{
													sprintf(buffer, "The new guild leader has to be at least Level %i.", leaderLevel); //Added manually
													player->sendCancel(buffer); //Changed manually
												}
											}

5. Open config.lua and find (line 30):
Code:
	displayGamemastersWithOnlineCommand = "no"
Add after:
Code:
	levelToCreateGuild = 8
And set the level for Your own use ;)


Now You may compile the server :)
 
Great job :thumbup:

Show it Tata~ so that he will add it to respository - no need to do things that are already done!
 
I guess you can set the minimum Level to create a Guild/be Guild Leader with it..

I had a similiar idea but not only just Guild Leader Level limitation but also Guild Member Limitation. Was an idea for a PvP Server with Guild Protection to prevent Guilds from being too strong.
Though I never (could) code it ^_^
 
Back
Top