diff --git a/.gitignore b/.gitignore
index 983976e1..e855f22f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,3 +27,6 @@
#docs backup files
/docs/~$NetworkFlow.drawio.bkp
/docs/~$NetworkFlow.drawio.dtmp
+
+#saves
+/saves/arena
diff --git a/Scripts/auth/createAuthTables.sql b/Scripts/auth/createAuthTables.sql
new file mode 100644
index 00000000..d2178b1e
--- /dev/null
+++ b/Scripts/auth/createAuthTables.sql
@@ -0,0 +1,7 @@
+
+-- accounts definition
+CREATE TABLE accounts (
+ id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
+ username TEXT NOT NULL,
+ pwdhash TEXT NOT NULL
+);
diff --git a/Scripts/character/createCharacterTables.sql b/Scripts/character/createCharacterTables.sql
new file mode 100644
index 00000000..c775430e
--- /dev/null
+++ b/Scripts/character/createCharacterTables.sql
@@ -0,0 +1,10 @@
+
+--characters
+--positions
+CREATE TABLE charaWorldPositions (id INTEGER PRIMARY KEY, charID INTEGER, posX INTEGER, posY INTEGER);
+CREATE INDEX charaWorldPositionsIDIndex ON charaWorldPositions (charID);
+CREATE INDEX charaWorldPositionsPosIndex ON charaWorldPositions (posX, posY);
+
+--data
+CREATE TABLE charaData (id INTEGER PRIMARY KEY, charID INTEGER, dataVal VARCHAR);
+CREATE INDEX charaDataIDIndex ON charaData (charID);
diff --git a/Scripts/createTables.sql b/Scripts/createTables.sql
index 271e1788..584cb3cb 100644
--- a/Scripts/createTables.sql
+++ b/Scripts/createTables.sql
@@ -3,36 +3,7 @@
CREATE TABLE mainTable (propName VARCHAR PRIMARY KEY, propValue VARCHAR);
INSERT INTO mainTable (propName, propValue) VALUES ("ver","1");
---characters
---positions
-CREATE TABLE charaWorldPositions (id INTEGER PRIMARY KEY, charID INTEGER, posX INTEGER, posY INTEGER);
-CREATE INDEX charaWorldPositionsIDIndex ON charaWorldPositions (charID);
-CREATE INDEX charaWorldPositionsPosIndex ON charaWorldPositions (posX, posY);
-
---data
-CREATE TABLE charaData (id INTEGER PRIMARY KEY, charID INTEGER, dataVal VARCHAR);
-CREATE INDEX charaDataIDIndex ON charaData (charID);
---towns
---positions
-CREATE TABLE townWorldPositions (id INTEGER PRIMARY KEY, townID INTEGER, posX INTEGER, posY INTEGER);
-CREATE INDEX townWorldPositionsIDIndex ON townWorldPositions (townID);
-CREATE INDEX townWorldPositionsPosIndex ON townWorldPositions (posX, posY);
-
---data
-CREATE TABLE townData (id INTEGER PRIMARY KEY, townID INTEGER, dataVal VARCHAR);
-CREATE INDEX townDataIDIndex ON townData (townID);
-
-
---structures
---positions
-CREATE TABLE structWorldPositions (id INTEGER PRIMARY KEY, structID INTEGER, posX INTEGER, posY INTEGER);
-CREATE INDEX structWorldPositionsIDIndex ON structWorldPositions (structID);
-CREATE INDEX structWorldPositionsPosIndex ON structWorldPositions (posX, posY);
-
---data
-CREATE TABLE structData (id INTEGER PRIMARY KEY, structID INTEGER, dataVal VARCHAR);
-CREATE INDEX structDataIDIndex ON structData (structID);
diff --git a/Scripts/structs/createStructsTables.sql b/Scripts/structs/createStructsTables.sql
new file mode 100644
index 00000000..4e473cb2
--- /dev/null
+++ b/Scripts/structs/createStructsTables.sql
@@ -0,0 +1,10 @@
+
+--structures
+--positions
+CREATE TABLE structWorldPositions (id INTEGER PRIMARY KEY, structID INTEGER, posX INTEGER, posY INTEGER);
+CREATE INDEX structWorldPositionsIDIndex ON structWorldPositions (structID);
+CREATE INDEX structWorldPositionsPosIndex ON structWorldPositions (posX, posY);
+
+--data
+CREATE TABLE structData (id INTEGER PRIMARY KEY, structID INTEGER, dataVal VARCHAR);
+CREATE INDEX structDataIDIndex ON structData (structID);
diff --git a/Scripts/towns/createTownsTables.sql b/Scripts/towns/createTownsTables.sql
new file mode 100644
index 00000000..5f03b3e7
--- /dev/null
+++ b/Scripts/towns/createTownsTables.sql
@@ -0,0 +1,10 @@
+
+--towns
+--positions
+CREATE TABLE townWorldPositions (id INTEGER PRIMARY KEY, townID INTEGER, posX INTEGER, posY INTEGER);
+CREATE INDEX townWorldPositionsIDIndex ON townWorldPositions (townID);
+CREATE INDEX townWorldPositionsPosIndex ON townWorldPositions (posX, posY);
+
+--data
+CREATE TABLE townData (id INTEGER PRIMARY KEY, townID INTEGER, dataVal VARCHAR);
+CREATE INDEX townDataIDIndex ON townData (townID);
diff --git a/pom.xml b/pom.xml
index c6be2534..b17e811d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,12 +13,6 @@
1.9.19
-
-
- org.lwjgl
- lwjgl
- ${lwjgl.version}
-
org.lwjgl
lwjgl-assimp
@@ -55,55 +49,9 @@
lwjgl
${lwjgl.version}
${lwjgl.natives}
- runtime
-
-
-
- org.lwjgl
- lwjgl-assimp
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
-
-
-
- org.lwjgl
- lwjgl-glfw
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
-
-
-
- org.lwjgl
- lwjgl-opengl
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
-
-
-
- org.lwjgl
- lwjgl-opengles
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
-
-
-
- org.lwjgl
- lwjgl-openal
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
-
-
- org.lwjgl
- lwjgl-stb
- ${lwjgl.version}
- ${lwjgl.natives}
- runtime
+ import
+
org.joml
joml
diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java
index eaad8044..897e7f77 100644
--- a/src/main/java/electrosphere/engine/LoadingThread.java
+++ b/src/main/java/electrosphere/engine/LoadingThread.java
@@ -36,6 +36,7 @@ import electrosphere.game.server.terrain.models.TerrainModification;
import electrosphere.game.server.town.Town;
import electrosphere.game.server.world.MacroData;
import electrosphere.game.server.datacell.DataCellManager;
+import electrosphere.game.server.db.DatabaseUtils;
import electrosphere.game.simulation.MicroSimulation;
import electrosphere.logger.LoggerInterface;
import electrosphere.main.Globals;
@@ -65,6 +66,7 @@ import electrosphere.game.server.unit.UnitUtils;
import electrosphere.renderer.ui.DrawableElement;
import electrosphere.renderer.ui.WidgetUtils;
import electrosphere.renderer.ui.Window;
+import electrosphere.util.FileUtils;
import electrosphere.util.Utilities;
import java.util.LinkedList;
@@ -183,6 +185,10 @@ public class LoadingThread extends Thread {
initServerArenaWorldData();
//init data cell manager
initDataCellManager();
+ //init database connection
+ // SaveUtils.initSave("arena");
+ //connect to database
+ // Globals.dbController.connect("./saves/arena/central.db");
//init authentication
initAuthenticationManager();
//initialize the server thread (server only)
diff --git a/src/main/java/electrosphere/game/server/db/DatabaseController.java b/src/main/java/electrosphere/game/server/db/DatabaseController.java
index bb9fde28..1e240704 100644
--- a/src/main/java/electrosphere/game/server/db/DatabaseController.java
+++ b/src/main/java/electrosphere/game/server/db/DatabaseController.java
@@ -57,6 +57,7 @@ public class DatabaseController {
rVal.succeeded = false;
rVal.hasResultSet = false;
LoggerInterface.loggerFileIO.ERROR("SQL statement execution error", ex);
+ ex.printStackTrace();
}
return rVal;
}
diff --git a/src/main/java/electrosphere/game/server/db/DatabaseResult.java b/src/main/java/electrosphere/game/server/db/DatabaseResult.java
index 4c7c5626..a64c282b 100644
--- a/src/main/java/electrosphere/game/server/db/DatabaseResult.java
+++ b/src/main/java/electrosphere/game/server/db/DatabaseResult.java
@@ -39,7 +39,7 @@ public class DatabaseResult {
return rVal;
}
- public void addResultSet(ResultSet rs){
+ protected void addResultSet(ResultSet rs){
this.rs = rs;
}
diff --git a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java
index 5ab2f009..e5b051e2 100644
--- a/src/main/java/electrosphere/game/server/db/DatabaseUtils.java
+++ b/src/main/java/electrosphere/game/server/db/DatabaseUtils.java
@@ -11,29 +11,54 @@ import java.util.logging.Logger;
* @author satellite
*/
public class DatabaseUtils {
+
+
public static boolean initCentralDBFile(String path){
- String sanitizedPath = "." + FileUtils.sanitizeFilePath(path);
+ String sanitizedPath = FileUtils.sanitizeFilePath(path);
if(!FileUtils.checkFileExists(sanitizedPath)){
return false;
}
String dbFilePath = sanitizedPath + "/central.db";
DatabaseController controller = new DatabaseController();
controller.connect(dbFilePath);
+ runScript(controller,"createTables.sql");
+ //both of these are used for arena mode as well as main game
+ runScript(controller,"/auth/createAuthTables.sql");
+ runScript(controller,"/character/createCharacterTables.sql");
+ //create adventure-only files
+ if(!dbFilePath.equals("./saves/arena/central.db")){
+ //we only want to create these if we're not in arena mode
+ runScript(controller,"/towns/createTownsTables.sql");
+ runScript(controller,"/structs/createStructsTables.sql");
+ }
+ controller.disconnect();
+ return true;
+ }
+
+ public static boolean runScript(DatabaseController controller, String scriptPath){
String rawScript = "";
try {
- rawScript = FileUtils.getSQLScriptFileAsString("createTables.sql");
+ rawScript = FileUtils.getSQLScriptFileAsString(scriptPath);
} catch (IOException ex) {
LoggerInterface.loggerEngine.ERROR("Failure reading create db script", ex);
return false;
}
String[] scriptLines = rawScript.split("\n");
+ String accumulatorString = "";
for(String line : scriptLines){
if(line.length() > 1 && !line.startsWith("--")){
- System.out.println("EXECUTE: " + line);
- controller.executeStatement(line);
+ if(line.contains(";")){
+ accumulatorString = accumulatorString + line;
+ System.out.println("EXECUTE: " + accumulatorString);
+ controller.executeStatement(accumulatorString);
+ accumulatorString = "";
+ } else {
+ accumulatorString = accumulatorString + line;
+ }
}
}
- controller.disconnect();
return true;
}
+
+
}
diff --git a/src/main/java/electrosphere/net/client/ClientNetworking.java b/src/main/java/electrosphere/net/client/ClientNetworking.java
index 798d5f2f..b48e6b8e 100644
--- a/src/main/java/electrosphere/net/client/ClientNetworking.java
+++ b/src/main/java/electrosphere/net/client/ClientNetworking.java
@@ -94,7 +94,7 @@ public class ClientNetworking implements Runnable{
}
if(connectionAttempts > MAX_CONNECTION_ATTEMPTS){
LoggerInterface.loggerNetworking.ERROR("Max client connection attempts!", new Exception());
- System.exit(1);
+ // System.exit(1);
}
}
diff --git a/src/main/java/electrosphere/net/server/Server.java b/src/main/java/electrosphere/net/server/Server.java
index 95deb960..4b5b76cd 100644
--- a/src/main/java/electrosphere/net/server/Server.java
+++ b/src/main/java/electrosphere/net/server/Server.java
@@ -1,5 +1,6 @@
package electrosphere.net.server;
+import electrosphere.game.server.saves.SaveUtils;
import electrosphere.main.Globals;
import electrosphere.main.Main;
import electrosphere.net.NetUtils;
diff --git a/src/main/java/electrosphere/util/FileUtils.java b/src/main/java/electrosphere/util/FileUtils.java
index 24652262..643ffd85 100644
--- a/src/main/java/electrosphere/util/FileUtils.java
+++ b/src/main/java/electrosphere/util/FileUtils.java
@@ -222,7 +222,7 @@ public class FileUtils {
* @return true if directory was created, false if it was not
*/
public static boolean createDirectory(String directoryName){
- String sanitizedPath = "." + sanitizeFilePath(directoryName);
+ String sanitizedPath = sanitizeFilePath(directoryName);
File targetDir = new File(sanitizedPath);
if(targetDir.exists()){
return false;