/***********************************************************************************
* Copyright (c) 2015 /// Project SWG /// www.projectswg.com *
* *
* ProjectSWG is the first NGE emulator for Star Wars Galaxies founded on *
* July 7th, 2011 after SOE announced the official shutdown of Star Wars Galaxies. *
* Our goal is to create an emulator which will provide a server for players to *
* continue playing a game similar to the one they used to play. We are basing *
* it on the final publish of the game prior to end-game events. *
* *
* This file is part of Holocore. *
* *
* -------------------------------------------------------------------------------- *
* *
* Holocore is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* Holocore is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with Holocore. If not, see . *
* *
***********************************************************************************/
package resources.player;
import java.io.Serializable;
import network.packets.Packet;
import resources.control.Service;
import resources.objects.SWGObject;
import resources.objects.creature.CreatureObject;
import resources.objects.player.PlayerObject;
import services.CoreManager;
import services.player.PlayerManager;
public class Player implements Serializable, Comparable {
private static final long serialVersionUID = 1L;
private transient Service playerManager;
private long networkId;
private PlayerState state = PlayerState.DISCONNECTED;
private String username = "";
private int userId = 0;
private byte [] sessionToken = new byte[0];
private int connectionId = 0;
private AccessLevel accessLevel = AccessLevel.PLAYER;
private int galaxyId = CoreManager.getGalaxyId();
private String galaxyName = "";
private CreatureObject creatureObject= null;
private long lastInboundMessage = 0;
public Player() {
this.playerManager = null;
}
public Player(Service playerManager, long networkId) {
this.playerManager = playerManager;
setNetworkId(networkId);
}
public PlayerManager getPlayerManager() {
return (PlayerManager) playerManager;
}
public void setPlayerManager(Service playerManager) {
this.playerManager = playerManager;
}
public void setNetworkId(long networkId) {
this.networkId = networkId;
}
public void setPlayerState(PlayerState state) {
this.state = state;
}
public void setUsername(String username) {
this.username = username;
}
public void setUserId(int userId) {
this.userId = userId;
}
public void setConnectionId(int connId) {
this.connectionId = connId;
}
public void setSessionToken(byte [] sessionToken) {
this.sessionToken = sessionToken;
}
public void setAccessLevel(AccessLevel accessLevel) {
this.accessLevel = accessLevel;
}
public void setGalaxyId(int galaxyId) {
this.galaxyId = galaxyId;
}
public void setGalaxyName(String galaxyName) {
this.galaxyName = galaxyName;
}
public void setCreatureObject(CreatureObject obj) {
this.creatureObject = obj;
}
public void updateLastPacketTimestamp() {
lastInboundMessage = System.nanoTime();
}
public long getNetworkId() {
return networkId;
}
public PlayerState getPlayerState() {
return state;
}
public String getUsername() {
return username;
}
public String getCharacterName() {
if (creatureObject != null)
return creatureObject.getName();
return "";
}
public int getUserId() {
return userId;
}
public int getConnectionId() {
return connectionId;
}
public byte [] getSessionToken() {
return sessionToken;
}
public AccessLevel getAccessLevel() {
return accessLevel;
}
public int getGalaxyId() {
return galaxyId;
}
public String getGalaxyName() {
return galaxyName;
}
public CreatureObject getCreatureObject() {
return creatureObject;
}
public PlayerObject getPlayerObject() {
if(creatureObject != null){
SWGObject player = creatureObject.getSlottedObject("ghost");
if (player instanceof PlayerObject)
return (PlayerObject) player;
}
return null;
}
public double getTimeSinceLastPacket() {
return (System.nanoTime()-lastInboundMessage)/1E6;
}
public void sendPacket(Packet ... packets) {
if (playerManager != null)
playerManager.sendPacket(this, packets);
else System.err.println("Couldn't send packet due to playerManager being null.");
}
@Override
public String toString() {
String str = "Player[";
str += "ID=" + userId + " / " + getCreatureObject().getObjectId();
str += " NAME=" + username + " / " + getCreatureObject().getName();
str += " LEVEL=" + accessLevel;
str += " STATE=" + state;
return str + "]";
}
@Override
public int compareTo(Player p) {
return creatureObject.compareTo(p.getCreatureObject());
}
@Override
public boolean equals(Object o) {
if (o == null)
return false;
if (!(o instanceof Player))
return false;
if (this == o)
return true;
if (creatureObject == null)
return false;
CreatureObject oCreature = ((Player) o).getCreatureObject();
if (oCreature == null)
return false;
return creatureObject.equals(oCreature);
}
@Override
public int hashCode() {
if (creatureObject == null)
return getUserId();
return Long.valueOf(creatureObject.getObjectId()).hashCode() ^ getUserId();
}
}