Public Repository for the Magicbane Shadowbane Emulator
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.

165 lines
6.9 KiB

// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.net.client.handlers;
import engine.Enum;
import engine.Enum.GameObjectType;
import engine.exception.MsgSendException;
import engine.gameManager.ChatManager;
import engine.gameManager.DbManager;
import engine.gameManager.PlayerManager;
import engine.net.Dispatch;
import engine.net.DispatchMessage;
import engine.net.client.ClientConnection;
import engine.net.client.msg.ClientNetMsg;
import engine.net.client.msg.guild.ChangeRankMsg;
import engine.net.client.msg.guild.GuildInfoMsg;
import engine.net.client.msg.guild.GuildListMsg;
import engine.objects.GuildStatusController;
import engine.objects.PlayerCharacter;
public class ChangeRankHandler extends AbstractClientMsgHandler {
public ChangeRankHandler() {
super(ChangeRankMsg.class);
}
@Override
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
ChangeRankMsg msg;
PlayerCharacter sourcePlayer;
PlayerCharacter targetPlayer;
msg = (ChangeRankMsg) baseMsg;
sourcePlayer = origin.getPlayerCharacter();
targetPlayer = (PlayerCharacter) DbManager.getObject(GameObjectType.PlayerCharacter, msg.getPlayerUUID());
if (msg.getPlayerUUID() == 0)
targetPlayer = sourcePlayer;
//updateSource will generate a new promote/demote screen for sourcePlayer
//updateTarget will sync guild info for the target and all players in range
boolean updateSource = false, updateTarget = false;
if (sourcePlayer == null || GuildStatusController.isInnerCouncil(sourcePlayer.getGuildStatus()) == false)
return true;
if (targetPlayer != null && (targetPlayer.getGuild().equals(sourcePlayer.getGuild()) == false))
return true;
String targetName = null;
boolean isMale;
if (msg.getPreviousRank() != msg.getNewRank()) {
Enum.GuildType t = Enum.GuildType.getGuildTypeFromInt(sourcePlayer.getGuild().getCharter());
if (targetPlayer != null) {
PlayerManager.setGuildTitle(targetPlayer, msg.getNewRank());
targetName = targetPlayer.getFirstName();
isMale = targetPlayer.getRace().getRaceType().getCharacterSex().equals(Enum.CharacterSex.MALE);
} else {
DbManager.GuildQueries.UPDATE_GUILD_RANK_OFFLINE(msg.getPlayerUUID(), msg.getNewRank(), sourcePlayer.getGuild().getObjectUUID());
targetName = PlayerManager.getFirstName(msg.getPlayerUUID());
isMale = true;
}
ChatManager.chatGuildInfo(sourcePlayer.getGuild(),
targetName + " has been "
+ ((msg.getNewRank() > msg.getPreviousRank()) ? "pro" : "de") + "moted to "
+ t.getRankForGender(msg.getNewRank(), isMale) + '!');
updateSource = true;
}
//These values record a change, not the new value...
boolean icUpdate = false, recruitUpdate = false, taxUpdate = false;
//Handle the offline case..
if (targetPlayer == null) {
int updateMask = DbManager.GuildQueries.UPDATE_GUILD_STATUS_OFFLINE(msg.getPlayerUUID(),
msg.getIc() > 0,
msg.getRec() > 0,
msg.getTax() > 0,
sourcePlayer.getGuild().getObjectUUID());
//These values come from the updateIsStatusOffline function
icUpdate = (updateMask & 4) > 0;
recruitUpdate = (updateMask & 2) > 0;
taxUpdate = (updateMask & 1) > 0;
if (targetName == null && updateMask > 0)
targetName = PlayerManager.getFirstName(msg.getPlayerUUID());
} else {
icUpdate = (GuildStatusController.isInnerCouncil(targetPlayer.getGuildStatus()) != (msg.getIc() > 0)) && GuildStatusController.isGuildLeader(sourcePlayer.getGuildStatus());
recruitUpdate = (GuildStatusController.isRecruiter(targetPlayer.getGuildStatus()) != (msg.getRec() > 0)) && GuildStatusController.isGuildLeader(sourcePlayer.getGuildStatus());
taxUpdate = (GuildStatusController.isTaxCollector(targetPlayer.getGuildStatus()) != (msg.getTax() > 0)) && GuildStatusController.isGuildLeader(sourcePlayer.getGuildStatus());
//This logic branch only executes if targetPlayer has passed a null check...
if (icUpdate) {
PlayerManager.setInnerCouncil(targetPlayer, msg.getIc() > 0);
PlayerManager.setFullMember(targetPlayer, true);
targetPlayer.incVer();
}
if (recruitUpdate)
PlayerManager.setRecruiter(targetPlayer, msg.getRec() > 0);
if (taxUpdate)
PlayerManager.setTaxCollector(targetPlayer, msg.getTax() > 0);
if (targetName == null)
targetName = targetPlayer.getFirstName();
}
if (icUpdate) {
ChatManager.chatGuildInfo(sourcePlayer.getGuild(),
(msg.getIc() > 0)
? targetName + " has been appointed to the inner council."
: targetName + " is no longer a member of the inner council.");
updateSource = true;
updateTarget = true;
}
if (recruitUpdate) {
updateSource = true;
updateTarget = true;
}
if (taxUpdate) {
updateSource = true;
updateTarget = true;
}
if (targetPlayer != null) {
targetPlayer.incVer();
if (updateTarget)
DispatchMessage.sendToAllInRange(targetPlayer, new GuildInfoMsg(targetPlayer, targetPlayer.getGuild(), 2));
}
if (updateSource) {
Dispatch dispatch = Dispatch.borrow(sourcePlayer, new GuildInfoMsg(sourcePlayer, sourcePlayer.getGuild(), 2));
DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY);
dispatch = Dispatch.borrow(sourcePlayer, new GuildListMsg(sourcePlayer.getGuild()));
DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY);
}
return true;
}
}