revert boxing enforcement
This commit is contained in:
@@ -1,68 +0,0 @@
|
|||||||
package engine.gameManager;
|
|
||||||
|
|
||||||
import engine.objects.PlayerCharacter;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
||||||
|
|
||||||
public class MultiboxManager {
|
|
||||||
public static HashMap<String, ArrayList<PlayerCharacter>> activeCharacters = new HashMap<>();
|
|
||||||
public static ReentrantReadWriteLock updateLock = new ReentrantReadWriteLock();
|
|
||||||
|
|
||||||
public static void addPlayer(PlayerCharacter player){
|
|
||||||
updateLock.writeLock().lock();
|
|
||||||
try {
|
|
||||||
|
|
||||||
//get the machine ID for the key of the map
|
|
||||||
String machineID = player.getClientConnection().machineID;
|
|
||||||
|
|
||||||
//cleanup and remove inactive players from the list
|
|
||||||
ArrayList<PlayerCharacter> purgeList = new ArrayList<>();
|
|
||||||
for(PlayerCharacter pc : activeCharacters.get(machineID))
|
|
||||||
if(!pc.isEnteredWorld() || !pc.isActive())
|
|
||||||
purgeList.add(pc);
|
|
||||||
|
|
||||||
activeCharacters.get(machineID).removeAll(purgeList);
|
|
||||||
|
|
||||||
//remove empty key
|
|
||||||
if(activeCharacters.get(machineID).size() < 1)
|
|
||||||
activeCharacters.remove(machineID);
|
|
||||||
|
|
||||||
|
|
||||||
if(activeCharacters.containsKey(machineID)){
|
|
||||||
//already has an entry for this machine ID
|
|
||||||
player.isBoxed = true;
|
|
||||||
activeCharacters.get(machineID).add(player);
|
|
||||||
}else{
|
|
||||||
//does not have an entry for this machine ID
|
|
||||||
player.isBoxed = false;
|
|
||||||
ArrayList<PlayerCharacter> newList = new ArrayList<>();
|
|
||||||
newList.add(player);
|
|
||||||
activeCharacters.put(machineID,newList);
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
updateLock.writeLock().unlock();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void removePlayer(PlayerCharacter player){
|
|
||||||
|
|
||||||
//get the machine ID for the key of the map
|
|
||||||
String machineID = player.getClientConnection().machineID;
|
|
||||||
|
|
||||||
if(activeCharacters.containsKey(machineID)){
|
|
||||||
//remove player from existing list
|
|
||||||
activeCharacters.get(machineID).remove(player);
|
|
||||||
|
|
||||||
//check if there are still players in the machine ID key list
|
|
||||||
if(activeCharacters.get(machineID).size() > 1){
|
|
||||||
//list still has characters, make one of them active
|
|
||||||
activeCharacters.get(machineID).get(0).isBoxed = false;
|
|
||||||
}else{
|
|
||||||
//list is now empty, remove it from the map
|
|
||||||
activeCharacters.remove(machineID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,7 +8,6 @@ import engine.db.archive.CharacterRecord;
|
|||||||
import engine.db.archive.DataWarehouse;
|
import engine.db.archive.DataWarehouse;
|
||||||
import engine.db.archive.PvpRecord;
|
import engine.db.archive.PvpRecord;
|
||||||
import engine.exception.MsgSendException;
|
import engine.exception.MsgSendException;
|
||||||
import engine.gameManager.MultiboxManager;
|
|
||||||
import engine.gameManager.SessionManager;
|
import engine.gameManager.SessionManager;
|
||||||
import engine.math.Vector3fImmutable;
|
import engine.math.Vector3fImmutable;
|
||||||
import engine.net.Dispatch;
|
import engine.net.Dispatch;
|
||||||
@@ -158,8 +157,6 @@ public class RequestEnterWorldHandler extends AbstractClientMsgHandler {
|
|||||||
dispatch = Dispatch.borrow(player, sopm);
|
dispatch = Dispatch.borrow(player, sopm);
|
||||||
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
|
DispatchMessage.dispatchMsgDispatch(dispatch, DispatchChannel.PRIMARY);
|
||||||
|
|
||||||
MultiboxManager.addPlayer(player);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -656,7 +656,6 @@ public class WorldServer {
|
|||||||
// TODO log this
|
// TODO log this
|
||||||
return;
|
return;
|
||||||
|
|
||||||
MultiboxManager.removePlayer(playerCharacter);
|
|
||||||
//cancel any trade
|
//cancel any trade
|
||||||
if (playerCharacter.getCharItemManager() != null)
|
if (playerCharacter.getCharItemManager() != null)
|
||||||
playerCharacter.getCharItemManager().endTrade(true);
|
playerCharacter.getCharItemManager().endTrade(true);
|
||||||
@@ -706,8 +705,6 @@ public class WorldServer {
|
|||||||
Logger.error("Unable to find PlayerCharacter to logout");
|
Logger.error("Unable to find PlayerCharacter to logout");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
MultiboxManager.removePlayer(player);
|
|
||||||
//remove player from loaded mobs agro maps
|
//remove player from loaded mobs agro maps
|
||||||
for(AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(player.getLoc(),MBServerStatics.CHARACTER_LOAD_RANGE,MBServerStatics.MASK_MOB)) {
|
for(AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(player.getLoc(),MBServerStatics.CHARACTER_LOAD_RANGE,MBServerStatics.MASK_MOB)) {
|
||||||
Mob loadedMob = (Mob) awo;
|
Mob loadedMob = (Mob) awo;
|
||||||
|
|||||||
Reference in New Issue
Block a user