453 lines
10 KiB
JavaScript
453 lines
10 KiB
JavaScript
const express = require('express');
|
|
const ShipSystem = require('../systems/ShipSystem');
|
|
|
|
const router = express.Router();
|
|
|
|
// Initialize ship system
|
|
const shipSystem = new ShipSystem();
|
|
|
|
// Get all ship templates
|
|
router.get('/templates', async (req, res) => {
|
|
try {
|
|
const templates = shipSystem.getAllShipTemplates();
|
|
res.json({
|
|
success: true,
|
|
templates
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get ship templates by class
|
|
router.get('/templates/class/:shipClass', async (req, res) => {
|
|
try {
|
|
const { shipClass } = req.params;
|
|
const templates = shipSystem.getShipTemplatesByClass(shipClass);
|
|
|
|
res.json({
|
|
success: true,
|
|
templates
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get ship templates by rarity
|
|
router.get('/templates/rarity/:rarity', async (req, res) => {
|
|
try {
|
|
const { rarity } = req.params;
|
|
const templates = shipSystem.getShipTemplatesByRarity(rarity);
|
|
|
|
res.json({
|
|
success: true,
|
|
templates
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get available ships for player
|
|
router.get('/available/:userId', async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const { playerLevel = 1 } = req.query;
|
|
const ships = shipSystem.getAvailableShips(userId, parseInt(playerLevel));
|
|
|
|
res.json({
|
|
success: true,
|
|
ships
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get player ships
|
|
router.get('/player/:userId', async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const ships = shipSystem.getPlayerShips(userId);
|
|
|
|
res.json({
|
|
success: true,
|
|
ships: ships.map(ship => ({
|
|
id: ship.id,
|
|
name: ship.name,
|
|
class: ship.class,
|
|
rarity: ship.rarity,
|
|
level: ship.level,
|
|
experience: ship.experience,
|
|
requiredExp: ship.requiredExp,
|
|
stats: ship.stats,
|
|
maxStats: ship.maxStats,
|
|
slots: ship.slots,
|
|
equippedItems: ship.equippedItems,
|
|
texture: ship.texture,
|
|
status: ship.status,
|
|
createdAt: ship.createdAt,
|
|
lastUsed: ship.lastUsed
|
|
}))
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get specific ship
|
|
router.get('/player/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const ship = shipSystem.getShip(userId, shipId);
|
|
|
|
if (!ship) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: 'Ship not found'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
ship: {
|
|
id: ship.id,
|
|
name: ship.name,
|
|
class: ship.class,
|
|
rarity: ship.rarity,
|
|
level: ship.level,
|
|
experience: ship.experience,
|
|
requiredExp: ship.requiredExp,
|
|
stats: ship.stats,
|
|
maxStats: ship.maxStats,
|
|
slots: ship.slots,
|
|
equippedItems: ship.equippedItems,
|
|
texture: ship.texture,
|
|
status: ship.status,
|
|
createdAt: ship.createdAt,
|
|
lastUsed: ship.lastUsed
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get current ship
|
|
router.get('/current/:userId', async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const currentShip = shipSystem.getCurrentShip(userId);
|
|
|
|
if (!currentShip) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: 'No current ship found'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
ship: {
|
|
id: currentShip.id,
|
|
name: currentShip.name,
|
|
class: currentShip.class,
|
|
rarity: currentShip.rarity,
|
|
level: currentShip.level,
|
|
experience: currentShip.experience,
|
|
requiredExp: currentShip.requiredExp,
|
|
stats: currentShip.stats,
|
|
maxStats: currentShip.maxStats,
|
|
slots: currentShip.slots,
|
|
equippedItems: currentShip.equippedItems,
|
|
texture: currentShip.texture,
|
|
status: currentShip.status
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Create new ship
|
|
router.post('/create/:userId', async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const { templateId, name, level = 1 } = req.body;
|
|
|
|
if (!templateId) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Ship template ID required'
|
|
});
|
|
}
|
|
|
|
const ship = shipSystem.createShip(userId, templateId, { name, level });
|
|
const playerShips = shipSystem.getPlayerShips(userId);
|
|
playerShips.push(ship);
|
|
|
|
res.json({
|
|
success: true,
|
|
ship: {
|
|
id: ship.id,
|
|
name: ship.name,
|
|
class: ship.class,
|
|
rarity: ship.rarity,
|
|
level: ship.level,
|
|
experience: ship.experience,
|
|
requiredExp: ship.requiredExp,
|
|
stats: ship.stats,
|
|
maxStats: ship.maxStats,
|
|
slots: ship.slots,
|
|
equippedItems: ship.equippedItems,
|
|
texture: ship.texture,
|
|
status: ship.status,
|
|
createdAt: ship.createdAt
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Set current ship
|
|
router.post('/current/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const ship = shipSystem.setCurrentShip(userId, shipId);
|
|
|
|
res.json({
|
|
success: true,
|
|
ship: {
|
|
id: ship.id,
|
|
name: ship.name,
|
|
class: ship.class,
|
|
level: ship.level,
|
|
stats: ship.stats,
|
|
status: ship.status,
|
|
lastUsed: ship.lastUsed
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Add experience to ship
|
|
router.post('/experience/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const { amount } = req.body;
|
|
|
|
if (!amount || amount <= 0) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Valid experience amount required'
|
|
});
|
|
}
|
|
|
|
const result = shipSystem.addExperience(userId, shipId, amount);
|
|
|
|
res.json({
|
|
success: true,
|
|
result: {
|
|
experienceGained: result.experienceGained,
|
|
levelsGained: result.levelsGained,
|
|
newLevel: result.newLevel,
|
|
newStats: result.newStats
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Upgrade ship
|
|
router.post('/upgrade/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const { upgradeType } = req.body;
|
|
|
|
if (!upgradeType) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Upgrade type required'
|
|
});
|
|
}
|
|
|
|
const result = shipSystem.upgradeShip(userId, shipId, upgradeType);
|
|
|
|
res.json({
|
|
success: true,
|
|
result: {
|
|
upgradeType: result.upgradeType,
|
|
newStats: result.newStats
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Equip item to ship
|
|
router.post('/equip/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const { slot, itemId } = req.body;
|
|
|
|
if (!slot || !itemId) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Slot and item ID required'
|
|
});
|
|
}
|
|
|
|
const result = shipSystem.equipItem(userId, shipId, slot, itemId);
|
|
|
|
res.json({
|
|
success: true,
|
|
result: {
|
|
slot: result.slot,
|
|
itemId: result.itemId,
|
|
equippedItems: result.equippedItems
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Unequip item from ship
|
|
router.post('/unequip/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const { slot } = req.body;
|
|
|
|
if (!slot) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Slot required'
|
|
});
|
|
}
|
|
|
|
const result = shipSystem.unequipItem(userId, shipId, slot);
|
|
|
|
res.json({
|
|
success: true,
|
|
result: {
|
|
slot: result.slot,
|
|
itemId: result.itemId,
|
|
equippedItems: result.equippedItems
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Repair ship
|
|
router.post('/repair/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const { amount } = req.body;
|
|
|
|
const result = shipSystem.repairShip(userId, shipId, amount);
|
|
|
|
res.json({
|
|
success: true,
|
|
result: {
|
|
health: result.health,
|
|
maxHealth: result.maxHealth,
|
|
repaired: result.repaired
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Delete ship
|
|
router.delete('/:userId/:shipId', async (req, res) => {
|
|
try {
|
|
const { userId, shipId } = req.params;
|
|
const deletedShip = shipSystem.deleteShip(userId, shipId);
|
|
|
|
res.json({
|
|
success: true,
|
|
deletedShip: {
|
|
id: deletedShip.id,
|
|
name: deletedShip.name,
|
|
class: deletedShip.class
|
|
}
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
// Get ship statistics
|
|
router.get('/stats/:userId', async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
const stats = shipSystem.getPlayerShipStats(userId);
|
|
|
|
res.json({
|
|
success: true,
|
|
stats
|
|
});
|
|
} catch (error) {
|
|
res.status(500).json({
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|