You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
6.1 KiB
155 lines
6.1 KiB
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . |
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· |
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ |
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ |
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ |
|
// Magicbane Emulator Project © 2013 - 2022 |
|
// www.magicbane.com |
|
|
|
|
|
package engine.net.client.handlers; |
|
|
|
|
|
import engine.exception.MsgSendException; |
|
import engine.gameManager.ChatManager; |
|
import engine.gameManager.ConfigManager; |
|
import engine.gameManager.GuildManager; |
|
import engine.gameManager.SessionManager; |
|
import engine.mbEnums; |
|
import engine.mbEnums.GameObjectType; |
|
import engine.net.Dispatch; |
|
import engine.net.DispatchMessage; |
|
import engine.net.client.ClientConnection; |
|
import engine.net.client.msg.ClientNetMsg; |
|
import engine.net.client.msg.ErrorPopupMsg; |
|
import engine.net.client.msg.guild.InviteToGuildMsg; |
|
import engine.objects.GuildStatusController; |
|
import engine.objects.PlayerCharacter; |
|
|
|
public class InviteToGuildHandler extends AbstractClientMsgHandler { |
|
|
|
public InviteToGuildHandler() { |
|
super(InviteToGuildMsg.class); |
|
} |
|
|
|
@Override |
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { |
|
InviteToGuildMsg msg; |
|
PlayerCharacter sourcePlayer; |
|
PlayerCharacter targetPlayer; |
|
Dispatch dispatch; |
|
|
|
msg = (InviteToGuildMsg) baseMsg; |
|
|
|
// First see if this is a refusal to another guild invite |
|
|
|
if (msg.getResponse() == 4) |
|
return true; // Player refused invite |
|
|
|
// get sourcePlayer player |
|
|
|
sourcePlayer = SessionManager.getPlayerCharacter(origin); |
|
|
|
if (sourcePlayer == null) |
|
return true; |
|
|
|
if (msg.getTargetUUID() == 0) { |
|
// get targetPlayer player by name |
|
targetPlayer = SessionManager.getPlayerCharacterByLowerCaseName(msg.getTargetName()); |
|
|
|
if (targetPlayer == null) { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
"No such player exists!"); |
|
return true; |
|
} |
|
} else if (msg.getTargetType() == GameObjectType.PlayerCharacter.ordinal()) { |
|
|
|
targetPlayer = SessionManager.getPlayerCharacterByID(msg.getTargetUUID()); |
|
|
|
if (targetPlayer == null) { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
"No such player exists!"); |
|
return true; |
|
} |
|
} else { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
"You cannot invite that character!"); |
|
return true; |
|
} |
|
|
|
// get sourcePlayer guild. Verify sourcePlayer player is in guild |
|
|
|
if (sourcePlayer.getGuild().getObjectUUID() == 0 || sourcePlayer.getGuild().isEmptyGuild()) { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
"You cannot invite someone for errant!"); |
|
return true; |
|
} |
|
|
|
mbEnums.GuildCharterType guildCharterType = mbEnums.GuildCharterType.values()[sourcePlayer.getGuild().getCharter()]; |
|
|
|
if (guildCharterType == null) { |
|
ErrorPopupMsg.sendErrorPopup(sourcePlayer, GuildManager.NO_CHARTER_FOUND); |
|
return true; |
|
} |
|
|
|
|
|
// verify sourcePlayer player is full member so they can invite |
|
|
|
if (GuildStatusController.isFullMember(sourcePlayer.getGuildStatus()) == false) { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
"You do not have authority to invite!"); |
|
return true; |
|
} |
|
|
|
//block invite is targetPlayer is ignoring sourcePlayer |
|
|
|
if (targetPlayer.isIgnoringPlayer(sourcePlayer)) |
|
return true; |
|
|
|
if ((targetPlayer.getGuild().isEmptyGuild() == false)) { |
|
ChatManager.chatGuildError(sourcePlayer, |
|
targetPlayer.getFirstName() + " already belongs to a guild!"); |
|
return true; |
|
} |
|
|
|
// verify targetPlayer player is not on banish list |
|
|
|
if (sourcePlayer.getGuild().getBanishList().contains(targetPlayer)) { |
|
ErrorPopupMsg.sendErrorPopup(sourcePlayer, 135);// Character is considered BANISHED by guild leadership |
|
return true; |
|
} |
|
|
|
//verify targetPlayer meets level requirements of guild |
|
|
|
if ((targetPlayer.getLevel() < sourcePlayer.getGuild().getRepledgeMin()) || targetPlayer.getLevel() > sourcePlayer.getGuild().getRepledgeMax()) { |
|
ErrorPopupMsg.sendErrorPopup(sourcePlayer, 135);// you do not meet the level required for this SWORN guild |
|
return true; |
|
} |
|
if (ConfigManager.MB_RULESET.getValue().equals("LORE")) { |
|
if (GuildManager.meetsLoreRequirements(sourcePlayer.guild, targetPlayer) == false) { |
|
ChatManager.chatGuildError(sourcePlayer, targetPlayer.getFirstName() + " does not meet charter requirements!"); |
|
return true; |
|
} |
|
} |
|
targetPlayer.setLastGuildToInvite(sourcePlayer.getGuild().getObjectUUID()); |
|
|
|
// setup guild invite message to send to targetPlayer |
|
|
|
msg.setSourceType(sourcePlayer.getObjectType().ordinal()); |
|
msg.setSourceUUID(sourcePlayer.getObjectUUID()); |
|
msg.setTargetType(targetPlayer.getObjectType().ordinal()); |
|
|
|
msg.setTargetUUID(targetPlayer.getObjectUUID()); |
|
msg.setGuildTag(sourcePlayer.getGuild().getGuildTag()); |
|
msg.setGuildName(sourcePlayer.getGuild().getName()); |
|
msg.setGuildType(sourcePlayer.getGuild().getObjectType().ordinal()); |
|
msg.setGuildUUID(sourcePlayer.getGuild().getObjectUUID()); |
|
msg.setTargetName(""); |
|
|
|
dispatch = Dispatch.borrow(targetPlayer, msg); |
|
DispatchMessage.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY); |
|
|
|
return true; |
|
} |
|
|
|
}
|
|
|