mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-09-11 21:45:26 -04:00
Added galaxy concept to the managers/services
This commit is contained in:
@@ -1,26 +1,39 @@
|
||||
package services;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import network.packets.soe.DataChannelA;
|
||||
import network.packets.swg.SWGPacket;
|
||||
import network.packets.swg.zone.baselines.Baseline;
|
||||
import intents.InboundPacketIntent;
|
||||
import intents.OutboundPacketIntent;
|
||||
import resources.Galaxy;
|
||||
import resources.config.ConfigFile;
|
||||
import resources.control.Intent;
|
||||
import resources.control.Manager;
|
||||
import resources.services.Config;
|
||||
import services.galaxy.GalacticManager;
|
||||
|
||||
public class CoreManager extends Manager {
|
||||
|
||||
private static final int galaxyId = 2;
|
||||
|
||||
private EngineManager engineManager;
|
||||
private GalacticManager galacticManager;
|
||||
private Galaxy galaxy;
|
||||
private long startTime;
|
||||
|
||||
public CoreManager() {
|
||||
engineManager = new EngineManager();
|
||||
galacticManager = new GalacticManager();
|
||||
|
||||
addChildService(engineManager);
|
||||
addChildService(galacticManager);
|
||||
galaxy = getGalaxy();
|
||||
if (galaxy != null) {
|
||||
engineManager = new EngineManager(galaxy);
|
||||
galacticManager = new GalacticManager(galaxy);
|
||||
|
||||
addChildService(engineManager);
|
||||
addChildService(galacticManager);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -36,7 +49,7 @@ public class CoreManager extends Manager {
|
||||
startTime = System.nanoTime();
|
||||
registerForIntent(InboundPacketIntent.TYPE);
|
||||
registerForIntent(OutboundPacketIntent.TYPE);
|
||||
return super.initialize();
|
||||
return galaxy != null && super.initialize();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -71,4 +84,34 @@ public class CoreManager extends Manager {
|
||||
return (System.nanoTime()-startTime)/1E6;
|
||||
}
|
||||
|
||||
private Galaxy getGalaxy() {
|
||||
PreparedStatement getGalaxy = getLocalDatabase().prepareStatement("SELECT * FROM galaxies WHERE id = ?");
|
||||
Config c = getConfig(ConfigFile.PRIMARY);
|
||||
try {
|
||||
getGalaxy.setInt(1, galaxyId);
|
||||
ResultSet set = getGalaxy.executeQuery();
|
||||
if (!set.next()) {
|
||||
System.err.println("CoreManager: No such galaxy exists with ID " + galaxyId + "!");
|
||||
return null;
|
||||
}
|
||||
Galaxy g = new Galaxy();
|
||||
g.setId(set.getInt("id"));
|
||||
g.setName(set.getString("name"));
|
||||
g.setAddress(set.getString("address"));
|
||||
g.setPopulation(set.getInt("population"));
|
||||
g.setTimeZone(set.getInt("timezone"));
|
||||
g.setZonePort(set.getInt("zone_port"));
|
||||
g.setPingPort(set.getInt("ping_port"));
|
||||
g.setStatus(set.getInt("status"));
|
||||
g.setMaxCharacters(c.getInt("GALAXY-MAX-CHARACTERS", 2));
|
||||
g.setOnlinePlayerLimit(c.getInt("GALAXY-MAX-ONLINE", 3000));
|
||||
g.setOnlineFreeTrialLimit(c.getInt("GALAXY-MAX-ONLINE", 3000));
|
||||
g.setRecommended(true);
|
||||
return g;
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package services.galaxy;
|
||||
import intents.GalacticIntent;
|
||||
import intents.GalacticPacketIntent;
|
||||
import intents.InboundPacketIntent;
|
||||
import resources.Galaxy;
|
||||
import resources.control.Intent;
|
||||
import resources.control.Manager;
|
||||
import services.objects.ObjectManager;
|
||||
@@ -16,8 +17,10 @@ public class GalacticManager extends Manager {
|
||||
private PlayerManager playerManager;
|
||||
private GameManager gameManager;
|
||||
private Intent prevPacketIntent;
|
||||
private Galaxy galaxy;
|
||||
|
||||
public GalacticManager() {
|
||||
public GalacticManager(Galaxy g) {
|
||||
this.galaxy = g;
|
||||
objectManager = new ObjectManager();
|
||||
playerManager = new PlayerManager();
|
||||
gameManager = new GameManager();
|
||||
@@ -69,6 +72,7 @@ public class GalacticManager extends Manager {
|
||||
private void prepareGalacticIntent(GalacticIntent i) {
|
||||
i.setObjectManager(objectManager);
|
||||
i.setPlayerManager(playerManager);
|
||||
i.setGalaxy(galaxy);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package services.player;
|
||||
import intents.GalacticIntent;
|
||||
import intents.PlayerEventIntent;
|
||||
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Map;
|
||||
|
||||
import main.ProjectSWG;
|
||||
@@ -17,12 +19,15 @@ import network.packets.swg.login.creation.ClientVerifyAndLockNameRequest;
|
||||
import network.packets.swg.login.creation.ClientVerifyAndLockNameResponse;
|
||||
import network.packets.swg.login.creation.ClientCreateCharacter;
|
||||
import network.packets.swg.login.creation.ClientVerifyAndLockNameResponse.ErrorMessage;
|
||||
import network.packets.swg.login.creation.CreateCharacterFailure;
|
||||
import network.packets.swg.login.creation.CreateCharacterFailure.NameFailureReason;
|
||||
import network.packets.swg.login.creation.CreateCharacterSuccess;
|
||||
import network.packets.swg.login.creation.RandomNameRequest;
|
||||
import network.packets.swg.login.creation.RandomNameResponse;
|
||||
import network.packets.swg.zone.GalaxyLoopTimesRequest;
|
||||
import network.packets.swg.zone.GalaxyLoopTimesResponse;
|
||||
import network.packets.swg.zone.HeartBeatMessage;
|
||||
import resources.Galaxy;
|
||||
import resources.Location;
|
||||
import resources.Race;
|
||||
import resources.Terrain;
|
||||
@@ -42,9 +47,11 @@ import utilities.namegen.SWGNameGenerator;
|
||||
public class ZoneService extends Service {
|
||||
|
||||
private SWGNameGenerator nameGenerator;
|
||||
private Map<String, ProfTemplateData> profTemplates;
|
||||
private Map <String, ProfTemplateData> profTemplates;
|
||||
private ClientFactory clientFac;
|
||||
|
||||
private PreparedStatement createCharacter;
|
||||
|
||||
public ZoneService() {
|
||||
nameGenerator = new SWGNameGenerator();
|
||||
clientFac = new ClientFactory();
|
||||
@@ -53,6 +60,8 @@ public class ZoneService extends Service {
|
||||
|
||||
@Override
|
||||
public boolean initialize() {
|
||||
String createCharacterSql = "INSERT INTO characters (id, name, race, userId, galaxyId) VALUES (?, ?, ?, ?, ?)";
|
||||
createCharacter = getLocalDatabase().prepareStatement(createCharacterSql);
|
||||
nameGenerator.loadAllRules();
|
||||
//loadProfTemplates(); TODO: Uncomment when object creation is implemented
|
||||
return super.initialize();
|
||||
@@ -60,7 +69,7 @@ public class ZoneService extends Service {
|
||||
|
||||
public void handlePacket(GalacticIntent intent, Player player, long networkId, Packet p) {
|
||||
if (p instanceof SessionRequest)
|
||||
sendServerInfo(networkId);
|
||||
sendServerInfo(intent.getGalaxy(), networkId);
|
||||
if (p instanceof ClientIdMsg)
|
||||
handleClientIdMsg(player, (ClientIdMsg) p);
|
||||
if (p instanceof RandomNameRequest)
|
||||
@@ -73,17 +82,16 @@ public class ZoneService extends Service {
|
||||
handleGalaxyLoopTimesRequest(player, (GalaxyLoopTimesRequest) p);
|
||||
}
|
||||
|
||||
private void sendServerInfo(long networkId) {
|
||||
private void sendServerInfo(Galaxy galaxy, long networkId) {
|
||||
Config c = getConfig(ConfigFile.PRIMARY);
|
||||
String name = c.getString("ZONE-SERVER-NAME", "ZoneServer");
|
||||
int id = c.getInt("ZONE-SERVER-ID", 1);
|
||||
String name = c.getString("ZONE-SERVER-NAME", galaxy.getName());
|
||||
int id = c.getInt("ZONE-SERVER-ID", galaxy.getId());
|
||||
sendPacket(networkId, new ServerString(name + ":" + id));
|
||||
sendPacket(networkId, new ServerId(id));
|
||||
}
|
||||
|
||||
private void handleClientIdMsg(Player player, ClientIdMsg clientId) {
|
||||
System.out.println(player.getUsername() + " has connected to the zone server.");
|
||||
player.setGalaxyId(getConfig(ConfigFile.PRIMARY).getInt("ZONE-SERVER-ID", 1));
|
||||
sendPacket(player.getNetworkId(), new HeartBeatMessage());
|
||||
sendPacket(player.getNetworkId(), new AccountFeatureBits());
|
||||
sendPacket(player.getNetworkId(), new ClientPermissionsMessage());
|
||||
@@ -103,39 +111,55 @@ public class ZoneService extends Service {
|
||||
|
||||
private void handleCharCreation(ObjectManager objManager, Player player, ClientCreateCharacter create) {
|
||||
System.out.println("Create Character: " + create.getName());
|
||||
long characterId = createCharacter(objManager, player, create);
|
||||
synchronized (createCharacter) {
|
||||
try {
|
||||
createCharacter.setLong(1, characterId);
|
||||
createCharacter.setString(2, create.getName());
|
||||
createCharacter.setString(3, create.getRace());
|
||||
createCharacter.setInt(4, player.getUserId());
|
||||
createCharacter.setInt(5, player.getGalaxyId());
|
||||
System.out.println("Galaxy ID: " + player.getGalaxyId());
|
||||
if (createCharacter.executeUpdate() != 1) {
|
||||
System.err.println("ZoneService: Unable to create character and put into database!");
|
||||
sendPacket(player, new CreateCharacterFailure(NameFailureReason.NAME_RETRY));
|
||||
return;
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
System.err.println("ZoneService: Unable to create character and put into database!");
|
||||
e.printStackTrace();
|
||||
sendPacket(player, new CreateCharacterFailure(NameFailureReason.NAME_RETRY));
|
||||
return;
|
||||
}
|
||||
}
|
||||
sendPacket(player, new CreateCharacterSuccess(characterId));
|
||||
new PlayerEventIntent(player, PlayerEvent.PE_CREATE_CHARACTER).broadcast();
|
||||
}
|
||||
|
||||
private long createCharacter(ObjectManager objManager, Player player, ClientCreateCharacter create) {
|
||||
Location start = getStartLocation(create.getStart());
|
||||
Race race = Race.getRace(create.getRace());
|
||||
CreatureObject creatureObj = (CreatureObject) objManager.createObject(race.getFilename());
|
||||
PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff");
|
||||
PlayerObject playerObj = (PlayerObject) objManager.createObject("object/player/shared_player.iff");
|
||||
TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair());
|
||||
setCreatureObjectValues(creatureObj, create);
|
||||
playerObj.setProfession(create.getProfession());
|
||||
hairObj.setAppearanceData(create.getHairCustomization());
|
||||
creatureObj.addChild(playerObj);
|
||||
creatureObj.addChild(hairObj);
|
||||
creatureObj.setLocation(start);
|
||||
playerObj.setLocation(start);
|
||||
player.setCreatureObject(creatureObj);
|
||||
player.setPlayerObject(playerObj);
|
||||
return creatureObj.getObjectId();
|
||||
}
|
||||
|
||||
private void setCreatureObjectValues(CreatureObject creatureObj, ClientCreateCharacter create) {
|
||||
creatureObj.setRace(Race.getRace(create.getRace()));
|
||||
creatureObj.setAppearanceData(create.getCharCustomization());
|
||||
creatureObj.setHeight(create.getHeight());
|
||||
creatureObj.setName(create.getName());
|
||||
playerObj.setProfession(create.getProfession());
|
||||
TangibleObject hairObj = (TangibleObject) objManager.createObject(create.getHair());
|
||||
hairObj.setAppearanceData(create.getHairCustomization());
|
||||
creatureObj.addChild(playerObj);
|
||||
creatureObj.addChild(hairObj);
|
||||
Location start = new Location();
|
||||
start.setTerrain(Terrain.TATOOINE);
|
||||
start.setX(3525 + (Math.random()-.5) * 5);
|
||||
start.setY(4);
|
||||
start.setZ(-4807 + (Math.random()-.5) * 5);
|
||||
start.setOrientationX(0);
|
||||
start.setOrientationY(0);
|
||||
start.setOrientationZ(0);
|
||||
start.setOrientationW(1);
|
||||
creatureObj.setLocation(start);
|
||||
creatureObj.setPvpType(20);
|
||||
playerObj.setLocation(start);
|
||||
player.setCreatureObject(creatureObj);
|
||||
player.setPlayerObject(playerObj);
|
||||
sendPacket(player, new CreateCharacterSuccess(creatureObj.getObjectId()));
|
||||
|
||||
new PlayerEventIntent(player, PlayerEvent.PE_CREATE_CHARACTER).broadcast();
|
||||
|
||||
/*for (String item : profTemplates.get(create.getClothes()).getItems(create.getRace())) {
|
||||
// TODO: Create and add item to character, item variable will be the template of the item to create
|
||||
}*/
|
||||
}
|
||||
|
||||
private void handleGalaxyLoopTimesRequest(Player player, GalaxyLoopTimesRequest req) {
|
||||
@@ -151,4 +175,17 @@ public class ZoneService extends Service {
|
||||
profTemplates.put("outdoors_scout", (ProfTemplateData) clientFac.getInfoFromFile("creation/profession_defaults_outdoors_scout.iff"));
|
||||
profTemplates.put("jedi", (ProfTemplateData) clientFac.getInfoFromFile("creation/profession_defaults_jedi.iff"));
|
||||
}
|
||||
|
||||
private Location getStartLocation(String start) {
|
||||
Location location = new Location();
|
||||
location.setTerrain(Terrain.TATOOINE);
|
||||
location.setX(3525 + (Math.random()-.5) * 5);
|
||||
location.setY(4);
|
||||
location.setZ(-4807 + (Math.random()-.5) * 5);
|
||||
location.setOrientationX(0);
|
||||
location.setOrientationY(0);
|
||||
location.setOrientationZ(0);
|
||||
location.setOrientationW(1);
|
||||
return location;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user