diff --git a/scripts/server/gate.js b/scripts/server/gate.js index 7080c613..c84114bb 100644 --- a/scripts/server/gate.js +++ b/scripts/server/gate.js @@ -117,4 +117,75 @@ function triggerGateCommand(command, params, client) { triggerGate(getGateData(closestGate).scriptName); } +// =========================================================================== + +function saveAllGatesToDatabase() { + if(getServerConfig().devServer) { + return false; + } + + for(let i in getServerData().gates) { + saveGateToDatabase(i); + } +} + +// =========================================================================== + +function saveGateToDatabase(gateId) { + if(getGateData(gateId) == null) { + // Invalid gate data + return false; + } + + let tempGateData = getGateData(gateId); + + if(tempGateData.databaseId == -1) { + // Temp gate, no need to save + return false; + } + + if(!tempGateData.needsSaved) { + // Gate hasn't changed. No need to save. + return false; + } + + logToConsole(LOG_VERBOSE, `[VRR.Gate]: Saving gate ${tempGateData.databaseId} to database ...`); + let dbConnection = connectToDatabase(); + if(dbConnection) { + let safeGateName = escapeDatabaseString(tempGateData.name); + let safeGateScriptName = escapeDatabaseString(tempGateData.scriptName); + + let data = [ + ["gate_server", getServerId()], + ["gate_name", safeGateName], + ["gate_script_name", safeGateScriptName], + ["gate_owner_type", toInteger(tempGateData.ownerType)], + ["gate_owner_id", toInteger(tempGateData.ownerId)], + ["gate_pos_x", toFloat(tempGateData.position.x)], + ["gate_pos_y", toFloat(tempGateData.position.y)], + ["gate_pos_z", toFloat(tempGateData.position.z)], + ["gate_radius", toFloat(tempGateData.radius)], + ]; + + let dbQuery = null; + if(tempGateData.databaseId == 0) { + let queryString = createDatabaseInsertQuery("gate_main", data); + dbQuery = queryDatabase(dbConnection, queryString); + tempGateData.databaseId = getDatabaseInsertId(dbConnection); + tempGateData.needsSaved = false; + } else { + let queryString = createDatabaseUpdateQuery("gate_main", data, `gate_id=${tempGateData.databaseId}`); + dbQuery = queryDatabase(dbConnection, queryString); + tempGateData.needsSaved = false; + } + + freeDatabaseQuery(dbQuery); + disconnectFromDatabase(dbConnection); + return true; + } + logToConsole(LOG_VERBOSE, `[VRR.Gate]: Saved gate ${gateDataId} to database!`); + + return false; +} + // =========================================================================== \ No newline at end of file