|
|
|
package engine.net.client.handlers;
|
|
|
|
|
|
|
|
import engine.Enum;
|
|
|
|
import engine.Enum.DispatchChannel;
|
|
|
|
import engine.Enum.GameObjectType;
|
|
|
|
import engine.exception.MsgSendException;
|
|
|
|
import engine.gameManager.BuildingManager;
|
|
|
|
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.OpenFriendsCondemnListMsg;
|
|
|
|
import engine.objects.*;
|
|
|
|
import org.pmw.tinylog.Logger;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* @Author:
|
|
|
|
* @Summary: Processes application protocol message which handles
|
|
|
|
* client requests for various lists
|
|
|
|
*/
|
|
|
|
|
|
|
|
public class OpenFriendsCondemnListMsgHandler extends AbstractClientMsgHandler {
|
|
|
|
|
|
|
|
public OpenFriendsCondemnListMsgHandler() {
|
|
|
|
super(OpenFriendsCondemnListMsg.class);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException {
|
|
|
|
|
|
|
|
PlayerCharacter player = SessionManager.getPlayerCharacter(origin);
|
|
|
|
Building sourceBuilding;
|
|
|
|
OpenFriendsCondemnListMsg msg;
|
|
|
|
OpenFriendsCondemnListMsg openFriendsCondemnListMsg;
|
|
|
|
Enum.FriendListType friendListType;
|
|
|
|
Dispatch dispatch;
|
|
|
|
|
|
|
|
if (player == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
msg = (OpenFriendsCondemnListMsg) baseMsg;
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(msg);
|
|
|
|
friendListType = Enum.FriendListType.getListTypeByID(msg.getMessageType());
|
|
|
|
|
|
|
|
if (friendListType == null) {
|
|
|
|
Logger.error("Invalid FriendListType for messageType " + msg.getMessageType());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (friendListType) {
|
|
|
|
case VIEWHERALDRY: // Heraldry
|
|
|
|
|
|
|
|
Heraldry.ValidateHeraldry(player.getObjectUUID());
|
|
|
|
OpenFriendsCondemnListMsg outMsg = new OpenFriendsCondemnListMsg(msg);
|
|
|
|
outMsg.setOrigin(origin);
|
|
|
|
outMsg.setMessageType(2);
|
|
|
|
dispatch = Dispatch.borrow(player, outMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ADDHERALDRY:
|
|
|
|
Heraldry.ValidateHeraldry(player.getObjectUUID());
|
|
|
|
if (msg.getPlayerID() <= 0) {
|
|
|
|
//ErrorPopupMsg.sendErrorMsg(player, "Invalid Heraldry Object.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
AbstractCharacter toAdd = null;
|
|
|
|
if (msg.getPlayerType() == GameObjectType.PlayerCharacter.ordinal())
|
|
|
|
toAdd = PlayerCharacter.getFromCache(msg.getPlayerID());
|
|
|
|
else if (msg.getPlayerType() == GameObjectType.NPC.ordinal())
|
|
|
|
toAdd = NPC.getFromCache(msg.getPlayerID());
|
|
|
|
else if (msg.getPlayerType() == GameObjectType.Mob.ordinal())
|
|
|
|
toAdd = Mob.getFromCache(msg.getPlayerID());
|
|
|
|
else {
|
|
|
|
ErrorPopupMsg.sendErrorMsg(player, "Invalid Heraldry Object.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (toAdd == null) {
|
|
|
|
ErrorPopupMsg.sendErrorMsg(player, "Invalid Heraldry Object.");
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
Heraldry.AddToHeraldy(player.getObjectUUID(), toAdd);
|
|
|
|
|
|
|
|
|
|
|
|
outMsg = new OpenFriendsCondemnListMsg(msg);
|
|
|
|
outMsg.setOrigin(origin);
|
|
|
|
outMsg.setMessageType(2);
|
|
|
|
dispatch = Dispatch.borrow(player, outMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
|
|
|
|
|
|
|
break;
|
|
|
|
case REMOVEHERALDRY:
|
|
|
|
Heraldry.ValidateHeraldry(player.getObjectUUID());
|
|
|
|
Heraldry.RemoveFromHeraldy(player.getObjectUUID(), msg.getPlayerID());
|
|
|
|
|
|
|
|
|
|
|
|
outMsg = new OpenFriendsCondemnListMsg(msg);
|
|
|
|
outMsg.setOrigin(origin);
|
|
|
|
outMsg.setMessageType(2);
|
|
|
|
dispatch = Dispatch.borrow(player, outMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.SECONDARY);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case DEALTHS: // Death List
|
|
|
|
openFriendsCondemnListMsg.updateMsg(8, new ArrayList<>(player.pvpDeaths));
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case KILLS: // Kill List
|
|
|
|
openFriendsCondemnListMsg.updateMsg(10, new ArrayList<>(player.pvpKills));
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case VIEWCONDEMN:
|
|
|
|
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(12, sourceBuilding.getCondemned(), sourceBuilding.reverseKOS);
|
|
|
|
openFriendsCondemnListMsg.configure();
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
|
|
|
|
//msg.updateMsg(12, DbManager.GuildQueries.)
|
|
|
|
break;
|
|
|
|
//REMOVE CONDEMN
|
|
|
|
case REMOVECONDEMN:
|
|
|
|
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
Condemned removeCondemn = sourceBuilding.getCondemned().get(msg.getRemoveFriendID());
|
|
|
|
|
|
|
|
if (removeCondemn == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.REMOVE_FROM_CONDEMNED_LIST(removeCondemn.getParent(), removeCondemn.getPlayerUID(), removeCondemn.getGuildUID(), removeCondemn.getFriendType()))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
sourceBuilding.getCondemned().remove(msg.getRemoveFriendID());
|
|
|
|
dispatch = Dispatch.borrow(player, msg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TOGGLEACTIVE:
|
|
|
|
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
Condemned condemn = sourceBuilding.getCondemned().get(msg.getRemoveFriendID());
|
|
|
|
|
|
|
|
if (condemn == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
condemn.setActive(msg.isReverseKOS());
|
|
|
|
openFriendsCondemnListMsg.setReverseKOS(condemn.isActive());
|
|
|
|
dispatch = Dispatch.borrow(player, msg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
case REVERSEKOS:
|
|
|
|
|
|
|
|
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!sourceBuilding.setReverseKOS(msg.isReverseKOS()))
|
|
|
|
return true;
|
|
|
|
break;
|
|
|
|
|
|
|
|
//ADD GUILD CONDEMN
|
|
|
|
case ADDCONDEMN:
|
|
|
|
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
switch (msg.getInviteType()) {
|
|
|
|
case 2:
|
|
|
|
|
|
|
|
if (msg.getPlayerID() == 0)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (msg.getPlayerType() != GameObjectType.PlayerCharacter.ordinal())
|
|
|
|
return true;
|
|
|
|
|
|
|
|
PlayerCharacter playerCharacter = PlayerCharacter.getFromCache(msg.getPlayerID());
|
|
|
|
|
|
|
|
if (playerCharacter == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (Guild.sameNationExcludeErrant(sourceBuilding.getGuild(), playerCharacter.getGuild()))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (sourceBuilding.getCondemned().containsKey(playerCharacter.getObjectUUID()))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.ADD_TO_CONDEMNLIST(sourceBuilding.getObjectUUID(), playerCharacter.getObjectUUID(), msg.getGuildID(), msg.getInviteType())) {
|
|
|
|
Logger.debug("Failed to add Condemned: " + playerCharacter.getFirstName() + " to Building With UID " + sourceBuilding.getObjectUUID());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
sourceBuilding.getCondemned().put(playerCharacter.getObjectUUID(), new Condemned(playerCharacter.getObjectUUID(), sourceBuilding.getObjectUUID(), msg.getGuildID(), msg.getInviteType()));
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
if (msg.getGuildID() == 0)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (sourceBuilding.getCondemned().containsKey(msg.getGuildID()))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
Guild condemnedGuild = Guild.getGuild(msg.getGuildID());
|
|
|
|
|
|
|
|
if (condemnedGuild == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.ADD_TO_CONDEMNLIST(sourceBuilding.getObjectUUID(), msg.getPlayerID(), condemnedGuild.getObjectUUID(), msg.getInviteType())) {
|
|
|
|
Logger.debug("Failed to add Condemned: " + condemnedGuild.getName() + " to Building With UID " + sourceBuilding.getObjectUUID());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
sourceBuilding.getCondemned().put(condemnedGuild.getObjectUUID(), new Condemned(msg.getPlayerID(), sourceBuilding.getObjectUUID(), condemnedGuild.getObjectUUID(), msg.getInviteType()));
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
if (msg.getNationID() == 0)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (sourceBuilding.getCondemned().containsKey(msg.getNationID()))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
Guild condemnedNation = Guild.getGuild(msg.getNationID());
|
|
|
|
|
|
|
|
if (condemnedNation == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.ADD_TO_CONDEMNLIST(sourceBuilding.getObjectUUID(), msg.getPlayerID(), condemnedNation.getObjectUUID(), msg.getInviteType())) {
|
|
|
|
Logger.debug("Failed to add Condemned: " + condemnedNation.getName() + " to Building With UID " + sourceBuilding.getObjectUUID());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
sourceBuilding.getCondemned().put(condemnedNation.getObjectUUID(), new Condemned(msg.getPlayerID(), sourceBuilding.getObjectUUID(), condemnedNation.getObjectUUID(), msg.getInviteType()));
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(12, sourceBuilding.getCondemned(), sourceBuilding.reverseKOS);
|
|
|
|
openFriendsCondemnListMsg.configure();
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
//ADD FRIEND BUILDING
|
|
|
|
case ADDFRIEND:
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (msg.getGuildID() == 0)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
PlayerCharacter playerCharacter = null;
|
|
|
|
|
|
|
|
|
|
|
|
Guild guildInvited = Guild.getGuild(msg.getGuildID());
|
|
|
|
|
|
|
|
if (guildInvited == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
//Check to see if the invited is already on the friends list.
|
|
|
|
switch (msg.getInviteType()) {
|
|
|
|
case 7:
|
|
|
|
playerCharacter = PlayerCharacter.getFromCache(msg.getPlayerID());
|
|
|
|
if (playerCharacter == null)
|
|
|
|
return true;
|
|
|
|
if (sourceBuilding.getFriends().containsKey(playerCharacter.getObjectUUID()))
|
|
|
|
return true;
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
case 9:
|
|
|
|
if (sourceBuilding.getFriends().containsKey(guildInvited.getObjectUUID()))
|
|
|
|
return true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.ADD_TO_FRIENDS_LIST(sourceBuilding.getObjectUUID(), msg.getPlayerID(), guildInvited.getObjectUUID(), msg.getInviteType())) {
|
|
|
|
Logger.debug("Failed to add Friend: " + playerCharacter.getFirstName() + " to Building With UID " + sourceBuilding.getObjectUUID());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (msg.getInviteType()) {
|
|
|
|
case 7:
|
|
|
|
sourceBuilding.getFriends().put(playerCharacter.getObjectUUID(), new BuildingFriends(playerCharacter.getObjectUUID(), sourceBuilding.getObjectUUID(), playerCharacter.getGuild().getObjectUUID(), 7));
|
|
|
|
break;
|
|
|
|
case 8:
|
|
|
|
sourceBuilding.getFriends().put(guildInvited.getObjectUUID(), new BuildingFriends(msg.getPlayerID(), sourceBuilding.getObjectUUID(), guildInvited.getObjectUUID(), 8));
|
|
|
|
break;
|
|
|
|
case 9:
|
|
|
|
sourceBuilding.getFriends().put(guildInvited.getObjectUUID(), new BuildingFriends(msg.getPlayerID(), sourceBuilding.getObjectUUID(), guildInvited.getObjectUUID(), 9));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(26, sourceBuilding.getFriends());
|
|
|
|
openFriendsCondemnListMsg.configure();
|
|
|
|
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
//REMOVE from friends list.
|
|
|
|
case REMOVEFRIEND:
|
|
|
|
sourceBuilding = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (sourceBuilding == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(sourceBuilding, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
BuildingFriends friend = sourceBuilding.getFriends().get(msg.getRemoveFriendID());
|
|
|
|
|
|
|
|
if (friend == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!DbManager.BuildingQueries.REMOVE_FROM_FRIENDS_LIST(sourceBuilding.getObjectUUID(), friend.getPlayerUID(), friend.getGuildUID(), friend.getFriendType())) {
|
|
|
|
Logger.debug("Failed to remove Friend: " + msg.getRemoveFriendID() + " from Building With UID " + sourceBuilding.getObjectUUID());
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
sourceBuilding.getFriends().remove(msg.getRemoveFriendID());
|
|
|
|
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(26, sourceBuilding.getFriends());
|
|
|
|
openFriendsCondemnListMsg.configure();
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
|
|
|
|
break;
|
|
|
|
//view Friends
|
|
|
|
case VIEWFRIENDS:
|
|
|
|
|
|
|
|
Building building = BuildingManager.getBuildingFromCache(msg.getBuildingID());
|
|
|
|
|
|
|
|
if (building == null)
|
|
|
|
return true;
|
|
|
|
|
|
|
|
if (!BuildingManager.PlayerCanControlNotOwner(building, player))
|
|
|
|
return true;
|
|
|
|
|
|
|
|
//this message is sent twice back?????
|
|
|
|
|
|
|
|
openFriendsCondemnListMsg = new OpenFriendsCondemnListMsg(26, building.getFriends());
|
|
|
|
openFriendsCondemnListMsg.configure();
|
|
|
|
|
|
|
|
|
|
|
|
dispatch = Dispatch.borrow(player, openFriendsCondemnListMsg);
|
|
|
|
DispatchMessage.dispatchMsgDispatch(dispatch, Enum.DispatchChannel.SECONDARY);
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|