forked from MagicBane/Server
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.
130 lines
5.1 KiB
130 lines
5.1 KiB
3 years ago
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||
|
// Magicbane Emulator Project © 2013 - 2022
|
||
|
// www.magicbane.com
|
||
|
|
||
|
|
||
|
package engine.net.client.handlers;
|
||
|
|
||
|
import engine.Enum;
|
||
|
import engine.Enum.GuildHistoryType;
|
||
|
import engine.exception.MsgSendException;
|
||
|
import engine.gameManager.ChatManager;
|
||
|
import engine.gameManager.DbManager;
|
||
|
import engine.gameManager.SessionManager;
|
||
|
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.BanishUnbanishMsg;
|
||
|
import engine.net.client.msg.guild.GuildListMsg;
|
||
|
import engine.objects.Guild;
|
||
|
import engine.objects.GuildHistory;
|
||
|
import engine.objects.GuildStatusController;
|
||
|
import engine.objects.PlayerCharacter;
|
||
|
import org.joda.time.DateTime;
|
||
|
|
||
|
public class BanishUnbanishHandler extends AbstractClientMsgHandler {
|
||
|
|
||
|
public BanishUnbanishHandler() {
|
||
|
super(BanishUnbanishMsg.class);
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
||
|
BanishUnbanishMsg msg = (BanishUnbanishMsg) baseMsg;
|
||
|
Dispatch dispatch;
|
||
|
|
||
|
int target = msg.getTarget();
|
||
|
PlayerCharacter source = origin.getPlayerCharacter();
|
||
|
|
||
|
if(source == null || source.getGuild().isErrant() || source.getGuild().getObjectUUID() == 0)
|
||
|
return true;
|
||
|
|
||
|
if (GuildStatusController.isGuildLeader(source.getGuildStatus()) == false && GuildStatusController.isInnerCouncil(source.getGuildStatus()) == false)
|
||
|
return true;
|
||
|
|
||
|
if (source.getObjectUUID() == target) {
|
||
|
ErrorPopupMsg.sendErrorPopup(source, 103); // You may not banish this char
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
boolean success = false;
|
||
|
Guild guild = source.getGuild();
|
||
|
PlayerCharacter realizedTarget = PlayerCharacter.getFromCache(target);
|
||
|
|
||
|
if(realizedTarget != null) {
|
||
|
// Guild leader can't leave guild. must pass GL or disband
|
||
|
if ( GuildStatusController.isGuildLeader(realizedTarget.getGuildStatus()) == false) {
|
||
|
//ICs cannot banish other ICs
|
||
|
if (!(GuildStatusController.isInnerCouncil(realizedTarget.getGuildStatus()) && GuildStatusController.isGuildLeader(source.getGuildStatus()) == false)) {
|
||
|
success = true;
|
||
|
if (msg.getMsgType() == 1){
|
||
|
if (!DbManager.GuildQueries.ADD_TO_BANISHED_FROM_GUILDLIST(guild.getObjectUUID(), realizedTarget.getObjectUUID())){
|
||
|
ChatManager.chatGuildError(source, "Failed To unbanish " + realizedTarget.getName());
|
||
|
return true;
|
||
|
}
|
||
|
guild.getBanishList().remove(realizedTarget);
|
||
|
}
|
||
|
|
||
|
|
||
|
else{
|
||
|
|
||
|
if (!DbManager.GuildQueries.ADD_TO_BANISHED_FROM_GUILDLIST(guild.getObjectUUID(), realizedTarget.getObjectUUID())){
|
||
|
ChatManager.chatGuildError(source, "Failed To Banish " + realizedTarget.getName());
|
||
|
return true;
|
||
|
}
|
||
|
guild.removePlayer(realizedTarget, GuildHistoryType.BANISHED);
|
||
|
guild.getBanishList().add(realizedTarget); //TODO we might encapsulate this a bit better; also not sure that a list of PC objects is really ideal
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
if (guild.getGuildLeaderUUID() != target) {
|
||
|
PlayerCharacter toBanish = PlayerCharacter.getPlayerCharacter(target);
|
||
|
if (toBanish == null)
|
||
|
return true;
|
||
|
//already added previously.
|
||
|
if (SessionManager.getPlayerCharacterByID(toBanish.getObjectUUID()) != null)
|
||
|
return true;
|
||
|
|
||
|
if(DbManager.GuildQueries.BANISH_FROM_GUILD_OFFLINE(target, GuildStatusController.isGuildLeader(source.getGuildStatus())) != 0) {
|
||
|
|
||
|
success = true;
|
||
|
|
||
|
//Set guild history
|
||
|
|
||
|
if (DbManager.GuildQueries.ADD_TO_GUILDHISTORY(guild.getObjectUUID(), toBanish, DateTime.now(), GuildHistoryType.BANISHED)){
|
||
|
GuildHistory guildHistory = new GuildHistory(toBanish.getGuildUUID(),toBanish.getGuild().getName(),DateTime.now(), GuildHistoryType.BANISHED) ;
|
||
|
toBanish.getGuildHistory().add(guildHistory);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if(success) {
|
||
|
//TODO re enable this once we get unbanish working!!!!
|
||
|
//DbManager.GuildQueries.ADD_TO_BANISHED_FROM_GUILDLIST(guild.getobjectUUID(), target);
|
||
|
|
||
|
// Send left guild message to rest of guild
|
||
|
String targetName = PlayerCharacter.getFirstName(target);
|
||
|
ChatManager.chatGuildInfo(guild,
|
||
|
targetName + " has been banished from " + guild.getName() + '.');
|
||
|
GuildListMsg guildListMsg = new GuildListMsg(guild);
|
||
|
dispatch = Dispatch.borrow(source, guildListMsg);
|
||
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
||
|
} else {
|
||
|
ErrorPopupMsg.sendErrorPopup(source, 103); // You may not banish this char
|
||
|
}
|
||
|
return true;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|