Planetengenerierung
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import pool from '../db.js';
|
||||
import { getSectorSettings } from './config.service.js';
|
||||
import { findNextAvailableStarterCoordinates } from './planet.service.js';
|
||||
import { generateStarterPlanetStats } from '../utils/planet.util.js';
|
||||
|
||||
/**
|
||||
* Erstellt einen neuen Sektor-Account samt Heimatplanet in einer sicheren Datenbank-Transaktion.
|
||||
*
|
||||
* @param {string} lobby_uuid - Die UUID des Nutzers aus der Lobby.
|
||||
* @param {string} username - Der Anzeigename.
|
||||
* @param {string} gender - Das Geschlecht des Commanders.
|
||||
*
|
||||
* @returns {Promise<{local_uuid: string, triggerSectorClose: boolean}>}
|
||||
*/
|
||||
export const createLocalAccount = async (lobby_uuid, username, gender) => {
|
||||
const client = await pool.connect();
|
||||
|
||||
try {
|
||||
await client.query('BEGIN');
|
||||
|
||||
const { galaxy, system, position, triggerSectorClose } = await findNextAvailableStarterCoordinates();
|
||||
const planetStats = generateStarterPlanetStats(position);
|
||||
|
||||
const settings = getSectorSettings();
|
||||
const initialPremium = settings.account_registration_bonus.initial_res_premium;
|
||||
|
||||
const accountInsertQuery = `
|
||||
INSERT INTO local_accounts (lobby_uuid, username, gender, res_premium)
|
||||
VALUES ($1, $2, $3, $4)
|
||||
RETURNING local_uuid
|
||||
`;
|
||||
const accountResult = await client.query(accountInsertQuery, [
|
||||
lobby_uuid,
|
||||
username,
|
||||
gender,
|
||||
initialPremium
|
||||
]);
|
||||
|
||||
const local_uuid = accountResult.rows[0].local_uuid;
|
||||
|
||||
const planetName = "Unbekannter Planet";
|
||||
const planetInsertQuery = `
|
||||
INSERT INTO planets (
|
||||
local_uuid, planet_name, galaxy, system, position,
|
||||
temp_min, temp_max, diameter, fields_built, fields_explored, fields_max,
|
||||
pop_idle, pop_injured, res_food_base
|
||||
) VALUES (
|
||||
$1, $2, $3, $4, $5,
|
||||
$6, $7, $8, 0, 10, $9,
|
||||
$10, $11, $12
|
||||
)
|
||||
`;
|
||||
await client.query(planetInsertQuery, [
|
||||
local_uuid,
|
||||
planetName,
|
||||
galaxy,
|
||||
system,
|
||||
position,
|
||||
planetStats.temp_min,
|
||||
planetStats.temp_max,
|
||||
planetStats.diameter,
|
||||
planetStats.fields_max,
|
||||
planetStats.pop_idle,
|
||||
planetStats.pop_injured,
|
||||
planetStats.res_food_base
|
||||
]);
|
||||
|
||||
await client.query('COMMIT');
|
||||
|
||||
return { local_uuid, triggerSectorClose };
|
||||
|
||||
} catch (error) {
|
||||
await client.query('ROLLBACK');
|
||||
console.error('[AccountService] Fehler bei der Account-Erstellung. Transaktion abgebrochen:', error);
|
||||
throw error;
|
||||
} finally {
|
||||
client.release();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user