massive overhaul that will be the last before react
228
.github/workflows/build-client.yml
vendored
@ -1,228 +0,0 @@
|
|||||||
name: Build Client for All Platforms
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ main, develop ]
|
|
||||||
paths:
|
|
||||||
- 'Client/**'
|
|
||||||
pull_request:
|
|
||||||
branches: [ main ]
|
|
||||||
paths:
|
|
||||||
- 'Client/**'
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: '18'
|
|
||||||
cache: 'npm'
|
|
||||||
cache-dependency-path: Client/package-lock.json
|
|
||||||
|
|
||||||
- name: Install system dependencies (Ubuntu)
|
|
||||||
if: matrix.os == 'ubuntu-latest'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libnss3-dev libatk-bridge2.0-dev libdrm2 libxkbcommon-dev libxcomposite-dev libxdamage-dev libxrandr-dev libgbm-dev libxss1 libasound2-dev
|
|
||||||
|
|
||||||
- name: Install system dependencies (macOS)
|
|
||||||
if: matrix.os == 'macos-latest'
|
|
||||||
run: |
|
|
||||||
# Install Xcode command line tools if not present
|
|
||||||
xcode-select --install 2>/dev/null || true
|
|
||||||
|
|
||||||
- name: Install system dependencies (Windows)
|
|
||||||
if: matrix.os == 'windows-latest'
|
|
||||||
run: |
|
|
||||||
# Windows builds typically have required dependencies pre-installed
|
|
||||||
# Ensure chocolatey is available for any additional packages
|
|
||||||
choco --version || echo "Chocolatey not available"
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
working-directory: ./Client
|
|
||||||
run: |
|
|
||||||
if [ "${{ matrix.os }}" = "windows-latest" ]; then
|
|
||||||
npm ci --include=dev
|
|
||||||
else
|
|
||||||
npm ci
|
|
||||||
fi
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Clean previous builds (Windows)
|
|
||||||
if: matrix.os == 'windows-latest'
|
|
||||||
working-directory: ./Client
|
|
||||||
run: if exist dist rmdir /s /q dist
|
|
||||||
shell: cmd
|
|
||||||
|
|
||||||
- name: Clean previous builds (Unix)
|
|
||||||
if: matrix.os != 'windows-latest'
|
|
||||||
working-directory: ./Client
|
|
||||||
run: rm -rf dist
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
- name: Build for Linux
|
|
||||||
if: matrix.os == 'ubuntu-latest'
|
|
||||||
working-directory: ./Client
|
|
||||||
run: npm run build-linux
|
|
||||||
|
|
||||||
- name: Build for Windows
|
|
||||||
if: matrix.os == 'windows-latest'
|
|
||||||
working-directory: ./Client
|
|
||||||
run: npm run build-win
|
|
||||||
|
|
||||||
- name: Build for macOS
|
|
||||||
if: matrix.os == 'macos-latest'
|
|
||||||
working-directory: ./Client
|
|
||||||
run: npm run build-mac
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: client-${{ matrix.os }}
|
|
||||||
path: |
|
|
||||||
Client/dist/*.exe
|
|
||||||
Client/dist/*.msi
|
|
||||||
Client/dist/*.dmg
|
|
||||||
Client/dist/*.zip
|
|
||||||
Client/dist/*.AppImage
|
|
||||||
Client/dist/*.deb
|
|
||||||
Client/dist/*.rpm
|
|
||||||
Client/dist/*.app
|
|
||||||
retention-days: 30
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
package:
|
|
||||||
needs: build
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout code
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Download all artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
path: artifacts
|
|
||||||
|
|
||||||
- name: Create release directory
|
|
||||||
run: mkdir -p release
|
|
||||||
|
|
||||||
- name: Organize executables by platform
|
|
||||||
run: |
|
|
||||||
# Create platform directories
|
|
||||||
mkdir -p release/Windows
|
|
||||||
mkdir -p release/macOS
|
|
||||||
mkdir -p release/Linux
|
|
||||||
|
|
||||||
# Windows executables - copy directly from dist
|
|
||||||
if [ -d "artifacts/client-windows-latest" ]; then
|
|
||||||
cp artifacts/client-windows-latest/*.exe release/Windows/ 2>/dev/null || true
|
|
||||||
cp artifacts/client-windows-latest/*.msi release/Windows/ 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# macOS executables - copy directly from dist
|
|
||||||
if [ -d "artifacts/client-macos-latest" ]; then
|
|
||||||
cp artifacts/client-macos-latest/*.dmg release/macOS/ 2>/dev/null || true
|
|
||||||
cp artifacts/client-macos-latest/*.zip release/macOS/ 2>/dev/null || true
|
|
||||||
# Handle .app bundles (directories)
|
|
||||||
if [ -d "artifacts/client-macos-latest" ]; then
|
|
||||||
find artifacts/client-macos-latest -maxdepth 1 -name "*.app" -type d -exec cp -r {} release/macOS/ \; 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Linux executables - copy directly from dist
|
|
||||||
if [ -d "artifacts/client-ubuntu-latest" ]; then
|
|
||||||
cp artifacts/client-ubuntu-latest/*.AppImage release/Linux/ 2>/dev/null || true
|
|
||||||
cp artifacts/client-ubuntu-latest/*.deb release/Linux/ 2>/dev/null || true
|
|
||||||
cp artifacts/client-ubuntu-latest/*.rpm release/Linux/ 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# List what we actually got
|
|
||||||
echo "=== Executables Found ==="
|
|
||||||
find release -type f -name "*" -o -name "*.app" | head -20 || true
|
|
||||||
|
|
||||||
# Create platform info file
|
|
||||||
cat > release/README.txt << EOF
|
|
||||||
Galaxy Strike Online - Multi-Platform Client
|
|
||||||
==========================================
|
|
||||||
|
|
||||||
Windows:
|
|
||||||
- Run the .exe installer or portable executable
|
|
||||||
|
|
||||||
macOS:
|
|
||||||
- Open the .dmg file and drag to Applications
|
|
||||||
- Or extract the .zip and run the .app
|
|
||||||
|
|
||||||
Linux:
|
|
||||||
- Make the .AppImage executable: chmod +x *.AppImage
|
|
||||||
- Or install the .deb package: sudo dpkg -i *.deb
|
|
||||||
|
|
||||||
Build Date: $(date -u +"%Y-%m-%d %H:%M:%S UTC")
|
|
||||||
Commit: ${{ github.sha }}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
- name: Create all-in-one zip
|
|
||||||
run: |
|
|
||||||
cd release
|
|
||||||
zip -r ../Galaxy-Strike-Online-Client-${{ github.sha }}.zip .
|
|
||||||
|
|
||||||
- name: Upload all-in-one zip
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: galaxy-strike-online-client-all-platforms
|
|
||||||
path: Galaxy-Strike-Online-Client-${{ github.sha }}.zip
|
|
||||||
retention-days: 90
|
|
||||||
|
|
||||||
- name: Create Release (Main Branch)
|
|
||||||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
files: Galaxy-Strike-Online-Client-${{ github.sha }}.zip
|
|
||||||
name: Galaxy Strike Online Client - Latest
|
|
||||||
body: |
|
|
||||||
Latest multi-platform client release for Galaxy Strike Online.
|
|
||||||
|
|
||||||
Includes:
|
|
||||||
- Windows (NSIS installer + Portable)
|
|
||||||
- macOS (DMG + ZIP)
|
|
||||||
- Linux (AppImage + Debian package)
|
|
||||||
|
|
||||||
Commit: ${{ github.sha }}
|
|
||||||
Build Date: ${{ github.event.head_commit.timestamp }}
|
|
||||||
|
|
||||||
**Download the all-in-one zip file below for all platforms.**
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
tag_name: latest
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Create Release (Tags)
|
|
||||||
if: startsWith(github.ref, 'refs/tags/')
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
files: Galaxy-Strike-Online-Client-${{ github.sha }}.zip
|
|
||||||
name: Galaxy Strike Online Client - ${{ github.ref_name }}
|
|
||||||
body: |
|
|
||||||
Multi-platform client release for Galaxy Strike Online.
|
|
||||||
|
|
||||||
Includes:
|
|
||||||
- Windows (NSIS installer + Portable)
|
|
||||||
- macOS (DMG + ZIP)
|
|
||||||
- Linux (AppImage + Debian package)
|
|
||||||
|
|
||||||
Commit: ${{ github.sha }}
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
31
API/models/PlayerData.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/**
|
||||||
|
* API/models/PlayerData.js
|
||||||
|
*
|
||||||
|
* Minimal PlayerData model for the API server — only what the payment webhook
|
||||||
|
* needs to read and credit gems. Shares the 'playerdatas' collection with
|
||||||
|
* the GameServer's full PlayerData model (same MongoDB, same schema name).
|
||||||
|
*
|
||||||
|
* Do NOT add complex game logic here — that belongs in GameServer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
// Minimal schema — Mixed types let us read/write without strict field validation
|
||||||
|
const playerDataSchema = new mongoose.Schema({
|
||||||
|
userId: { type: String, required: true, unique: true },
|
||||||
|
username: { type: String },
|
||||||
|
stats: { type: mongoose.Schema.Types.Mixed, default: {} },
|
||||||
|
}, {
|
||||||
|
strict: false, // allow all fields to be stored (don't strip unknown fields)
|
||||||
|
timestamps: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prevent model re-registration error on hot-reload
|
||||||
|
let PlayerData;
|
||||||
|
try {
|
||||||
|
PlayerData = mongoose.model('PlayerData');
|
||||||
|
} catch (e) {
|
||||||
|
PlayerData = mongoose.model('PlayerData', playerDataSchema);
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = PlayerData;
|
||||||
173
API/routes/payments.js
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
/**
|
||||||
|
* routes/payments.js — GSO Premium Gem Store (GDD Phase 3 Monetisation)
|
||||||
|
*
|
||||||
|
* Endpoints:
|
||||||
|
* POST /api/payments/create-checkout — create Stripe Checkout session
|
||||||
|
* POST /api/payments/webhook — Stripe webhook (payment confirmation)
|
||||||
|
* GET /api/payments/products — list purchasable gem packages
|
||||||
|
*
|
||||||
|
* Requires ENV vars:
|
||||||
|
* STRIPE_SECRET_KEY — sk_live_... (or sk_test_... for development)
|
||||||
|
* STRIPE_WEBHOOK_SECRET — whsec_... (from Stripe Dashboard → Webhooks)
|
||||||
|
* CLIENT_URL — https://galaxystrike.online (for redirect URLs)
|
||||||
|
*
|
||||||
|
* Stripe is loaded lazily so the server starts even if the package isn't installed yet.
|
||||||
|
* Run: npm install stripe in the API directory before going live.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const express = require('express');
|
||||||
|
const router = express.Router();
|
||||||
|
|
||||||
|
// ── Gem packages available for purchase ────────────────────────────────────────
|
||||||
|
const GEM_PACKAGES = [
|
||||||
|
{ id: 'gems_80', gems: 80, priceUSD: 0.99, label: 'Starter Pack', bonus: 0, popular: false },
|
||||||
|
{ id: 'gems_200', gems: 200, priceUSD: 1.99, label: 'Pilot Pack', bonus: 0, popular: false },
|
||||||
|
{ id: 'gems_500', gems: 500, priceUSD: 4.99, label: 'Commander Pack', bonus: 50, popular: true },
|
||||||
|
{ id: 'gems_1200', gems: 1200, priceUSD: 9.99, label: 'Admiral Pack', bonus: 200,popular: false },
|
||||||
|
{ id: 'gems_2500', gems: 2500, priceUSD: 19.99, label: 'Fleet Admiral', bonus: 500,popular: false },
|
||||||
|
{ id: 'gems_6500', gems: 6500, priceUSD: 49.99, label: 'Grand Admiral', bonus: 1500,popular: false},
|
||||||
|
];
|
||||||
|
|
||||||
|
// ── Helper: load Stripe lazily ────────────────────────────────────────────────
|
||||||
|
function getStripe() {
|
||||||
|
if (!process.env.STRIPE_SECRET_KEY) throw new Error('STRIPE_SECRET_KEY not configured');
|
||||||
|
// eslint-disable-next-line global-require
|
||||||
|
return require('stripe')(process.env.STRIPE_SECRET_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── GET /api/payments/products ────────────────────────────────────────────────
|
||||||
|
router.get('/products', (req, res) => {
|
||||||
|
res.json({ packages: GEM_PACKAGES });
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── POST /api/payments/create-checkout ────────────────────────────────────────
|
||||||
|
// Body: { packageId, userId, username }
|
||||||
|
router.post('/create-checkout', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { packageId, userId, username } = req.body;
|
||||||
|
if (!packageId || !userId) return res.status(400).json({ error: 'packageId and userId required' });
|
||||||
|
|
||||||
|
const pkg = GEM_PACKAGES.find(p => p.id === packageId);
|
||||||
|
if (!pkg) return res.status(404).json({ error: 'Unknown package' });
|
||||||
|
|
||||||
|
const stripe = getStripe();
|
||||||
|
const totalGems = pkg.gems + pkg.bonus;
|
||||||
|
const clientUrl = process.env.CLIENT_URL || 'http://localhost:3000';
|
||||||
|
|
||||||
|
const session = await stripe.checkout.sessions.create({
|
||||||
|
mode: 'payment',
|
||||||
|
payment_method_types: ['card'],
|
||||||
|
line_items: [{
|
||||||
|
price_data: {
|
||||||
|
currency: 'usd',
|
||||||
|
unit_amount: Math.round(pkg.priceUSD * 100), // cents
|
||||||
|
product_data: {
|
||||||
|
name: `${pkg.label} — ${totalGems} 💎 Gems`,
|
||||||
|
description: pkg.bonus > 0
|
||||||
|
? `${pkg.gems} gems + ${pkg.bonus} bonus gems (${totalGems} total)`
|
||||||
|
: `${pkg.gems} Galaxy Strike Online gems`,
|
||||||
|
metadata: { packageId: pkg.id },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
quantity: 1,
|
||||||
|
}],
|
||||||
|
client_reference_id: userId,
|
||||||
|
customer_email: req.body.email || undefined,
|
||||||
|
metadata: {
|
||||||
|
userId,
|
||||||
|
username: username || 'unknown',
|
||||||
|
packageId: pkg.id,
|
||||||
|
gems: String(totalGems),
|
||||||
|
},
|
||||||
|
success_url: `${clientUrl}/payment-success?session={CHECKOUT_SESSION_ID}`,
|
||||||
|
cancel_url: `${clientUrl}/payment-cancel`,
|
||||||
|
});
|
||||||
|
|
||||||
|
res.json({ sessionId: session.id, url: session.url });
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[PAYMENTS] create-checkout error:', err.message);
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// ── POST /api/payments/webhook ────────────────────────────────────────────────
|
||||||
|
// Stripe sends raw body — must use express.raw() middleware for this route.
|
||||||
|
router.post('/webhook', express.raw({ type: 'application/json' }), async (req, res) => {
|
||||||
|
const sig = req.headers['stripe-signature'];
|
||||||
|
const secret = process.env.STRIPE_WEBHOOK_SECRET;
|
||||||
|
|
||||||
|
if (!secret) {
|
||||||
|
console.error('[PAYMENTS] STRIPE_WEBHOOK_SECRET not set — webhook rejected');
|
||||||
|
return res.status(400).send('Webhook secret not configured');
|
||||||
|
}
|
||||||
|
|
||||||
|
let event;
|
||||||
|
try {
|
||||||
|
const stripe = getStripe();
|
||||||
|
event = stripe.webhooks.constructEvent(req.body, sig, secret);
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[PAYMENTS] Webhook signature verification failed:', err.message);
|
||||||
|
return res.status(400).send(`Webhook Error: ${err.message}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.type === 'checkout.session.completed') {
|
||||||
|
const session = event.data.object;
|
||||||
|
const { userId, username, packageId, gems } = session.metadata || {};
|
||||||
|
|
||||||
|
if (!userId || !gems) {
|
||||||
|
console.error('[PAYMENTS] Webhook missing metadata', session.metadata);
|
||||||
|
return res.json({ received: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
const gemCount = parseInt(gems, 10);
|
||||||
|
const amountCents = session.amount_total || 0;
|
||||||
|
|
||||||
|
console.log(`[PAYMENTS] ✅ Payment confirmed: ${username} (${userId}) — ${gemCount} gems — $${(amountCents/100).toFixed(2)}`);
|
||||||
|
|
||||||
|
// Credit gems in the database directly
|
||||||
|
try {
|
||||||
|
const PlayerData = require('../models/PlayerData');
|
||||||
|
const player = await PlayerData.findOne({ userId });
|
||||||
|
if (player) {
|
||||||
|
player.stats.gems = (player.stats.gems || 0) + gemCount;
|
||||||
|
player.markModified('stats');
|
||||||
|
await player.save();
|
||||||
|
console.log(`[PAYMENTS] Credited ${gemCount} gems to ${username}. New balance: ${player.stats.gems}`);
|
||||||
|
} else {
|
||||||
|
console.warn(`[PAYMENTS] Player not found for userId: ${userId}`);
|
||||||
|
}
|
||||||
|
} catch (dbErr) {
|
||||||
|
console.error('[PAYMENTS] DB credit error:', dbErr.message);
|
||||||
|
// Return 200 to Stripe regardless — Stripe will retry on 5xx
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attempt to push live notification to game server via internal HTTP
|
||||||
|
// (Game server will push 'gems_credited' to the player's socket if online)
|
||||||
|
const gameServerUrl = process.env.GAME_SERVER_URL || 'http://localhost:3002';
|
||||||
|
try {
|
||||||
|
const http = require('http');
|
||||||
|
const body = JSON.stringify({ userId, gems: gemCount, packageId, amountCents });
|
||||||
|
const options = {
|
||||||
|
hostname: new URL(gameServerUrl).hostname,
|
||||||
|
port: new URL(gameServerUrl).port || 3002,
|
||||||
|
path: '/internal/credit-gems',
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Content-Length': Buffer.byteLength(body),
|
||||||
|
'X-Internal-Key': process.env.INTERNAL_API_KEY || 'gso-internal',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const req2 = http.request(options);
|
||||||
|
req2.write(body);
|
||||||
|
req2.end();
|
||||||
|
} catch (notifyErr) {
|
||||||
|
// Non-fatal — player will see updated gems on next login
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ received: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
|
module.exports.GEM_PACKAGES = GEM_PACKAGES;
|
||||||
@ -9,8 +9,9 @@ require('dotenv').config();
|
|||||||
|
|
||||||
const logger = require('./utils/logger');
|
const logger = require('./utils/logger');
|
||||||
const connectDB = require('./config/database');
|
const connectDB = require('./config/database');
|
||||||
const authRoutes = require('./routes/auth');
|
const authRoutes = require('./routes/auth');
|
||||||
const serverRoutes = require('./routes/servers');
|
const serverRoutes = require('./routes/servers');
|
||||||
|
const paymentRoutes = require('./routes/payments');
|
||||||
const { errorHandler, notFound } = require('./middleware/errorHandler');
|
const { errorHandler, notFound } = require('./middleware/errorHandler');
|
||||||
const GameServer = require('./models/GameServer');
|
const GameServer = require('./models/GameServer');
|
||||||
|
|
||||||
@ -96,6 +97,7 @@ app.use('/api/', async (req, res, next) => {
|
|||||||
// Routes - API Server Only (Auth + Server Browser)
|
// Routes - API Server Only (Auth + Server Browser)
|
||||||
app.use('/api/auth', authRoutes);
|
app.use('/api/auth', authRoutes);
|
||||||
app.use('/api/servers', serverRoutes);
|
app.use('/api/servers', serverRoutes);
|
||||||
|
app.use('/api/payments', paymentRoutes);
|
||||||
|
|
||||||
// Manual cleanup endpoint (for testing)
|
// Manual cleanup endpoint (for testing)
|
||||||
app.post('/api/admin/cleanup-dead-servers', async (req, res) => {
|
app.post('/api/admin/cleanup-dead-servers', async (req, res) => {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
const { app, BrowserWindow, Menu, shell, ipcMain } = require('electron');
|
const { app, BrowserWindow, Menu, shell, ipcMain, Notification } = require('electron');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const logger = require('./js/core/Logger');
|
const logger = require('./js/core/Logger');
|
||||||
@ -312,6 +312,35 @@ ipcMain.handle('delete-save-file', async (event, slot) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// IPC handlers for window controls
|
// IPC handlers for window controls
|
||||||
|
|
||||||
|
// ── Push Notifications (Electron desktop) ────────────────────────────────────
|
||||||
|
ipcMain.on('show-notification', (event, { title, body, icon, tag }) => {
|
||||||
|
try {
|
||||||
|
if (!Notification.isSupported()) return;
|
||||||
|
const n = new Notification({
|
||||||
|
title: title || 'Galaxy Strike Online',
|
||||||
|
body: body || '',
|
||||||
|
icon: icon || path.join(__dirname, 'assets/icon.png'),
|
||||||
|
silent: false,
|
||||||
|
urgency: 'normal', // 'low' | 'normal' | 'critical'
|
||||||
|
});
|
||||||
|
n.on('click', () => {
|
||||||
|
if (mainWindow) {
|
||||||
|
if (mainWindow.isMinimized()) mainWindow.restore();
|
||||||
|
mainWindow.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
n.show();
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[MAIN PROCESS] Notification error:', err.message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Allow renderer to check if window is focused (suppress notifications when in focus)
|
||||||
|
ipcMain.handle('is-window-focused', () => {
|
||||||
|
return mainWindow ? mainWindow.isFocused() : true;
|
||||||
|
});
|
||||||
|
|
||||||
// Handle logging from renderer process
|
// Handle logging from renderer process
|
||||||
ipcMain.on('log-message', async (event, { level, message, data }) => {
|
ipcMain.on('log-message', async (event, { level, message, data }) => {
|
||||||
try {
|
try {
|
||||||
|
|||||||
2881
Client/index.html
@ -264,6 +264,40 @@ class GameInitializer {
|
|||||||
if (typeof showNotification === 'function') showNotification(data.error || 'Craft failed', 'error');
|
if (typeof showNotification === 'function') showNotification(data.error || 'Craft failed', 'error');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
// Craft queue events (v3.3)
|
||||||
|
this.socket.on('craft_queue_update', (data) => {
|
||||||
|
if (typeof GSO_Crafting !== 'undefined') GSO_Crafting.onQueueUpdate(data);
|
||||||
|
});
|
||||||
|
this.socket.on('collect_craft_result', (data) => {
|
||||||
|
if (typeof GSO_Crafting !== 'undefined') GSO_Crafting.onCollectResult(data);
|
||||||
|
});
|
||||||
|
// Gem speed-up result
|
||||||
|
this.socket.on('speedup_craft_result', (data) => {
|
||||||
|
if (data.success) {
|
||||||
|
if (typeof showNotification === 'function') showNotification('⚡ Craft instant-finished!', 'success');
|
||||||
|
this.socket.emit('get_craft_queue');
|
||||||
|
if (this.serverPlayerData) this.serverPlayerData.stats.gems = data.gems;
|
||||||
|
this._updateEconomyDisplay({ gems: data.gems });
|
||||||
|
} else {
|
||||||
|
if (typeof showNotification === 'function') showNotification(data.error || 'Speed-up failed', 'error');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// Gem store purchase result (v3.3)
|
||||||
|
this.socket.on('gem_purchase_result', (data) => {
|
||||||
|
if (typeof GSO_GemStore !== 'undefined') GSO_GemStore.onPurchaseResult(data);
|
||||||
|
if (data.success) {
|
||||||
|
if (this.serverPlayerData) {
|
||||||
|
this.serverPlayerData.stats.gems = data.gems;
|
||||||
|
// If purchase added an inventory item, sync it
|
||||||
|
if (data.newItem) {
|
||||||
|
this.serverPlayerData.inventory = this.serverPlayerData.inventory || { items: [] };
|
||||||
|
this.serverPlayerData.inventory.items = this.serverPlayerData.inventory.items || [];
|
||||||
|
this.serverPlayerData.inventory.items.push(data.newItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._updateEconomyDisplay({ gems: data.gems });
|
||||||
|
}
|
||||||
|
});
|
||||||
this.socket.on('inventory_update', (data) => {
|
this.socket.on('inventory_update', (data) => {
|
||||||
if (this.serverPlayerData) {
|
if (this.serverPlayerData) {
|
||||||
this.serverPlayerData.inventory = data;
|
this.serverPlayerData.inventory = data;
|
||||||
@ -319,6 +353,13 @@ class GameInitializer {
|
|||||||
GSO_Leaderboard.onSeasonData(data);
|
GSO_Leaderboard.onSeasonData(data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ── Phase 3: Raids, PvP Rankings, Alliance Wars, Push Notifications, Gem Purchase ──
|
||||||
|
if (typeof GSO_Raids !== 'undefined') GSO_Raids.init(this.socket);
|
||||||
|
if (typeof GSO_PvpRankings !== 'undefined') GSO_PvpRankings.init(this.socket);
|
||||||
|
if (typeof GSO_AllianceWars !== 'undefined') GSO_AllianceWars.init(this.socket);
|
||||||
|
if (typeof GSO_PushNotifications !== 'undefined') GSO_PushNotifications.init(this.socket);
|
||||||
|
if (typeof GSO_GemPurchase !== 'undefined') GSO_GemPurchase.init(this.socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
onSocketConnected() {
|
onSocketConnected() {
|
||||||
|
|||||||
@ -612,19 +612,77 @@ class StarbaseWorld {
|
|||||||
const bob = Math.sin(now*2+obj.col)*3;
|
const bob = Math.sin(now*2+obj.col)*3;
|
||||||
const cy2 = cy - 28 - bob;
|
const cy2 = cy - 28 - bob;
|
||||||
|
|
||||||
|
// ── Construction animation overlay ────────────────────────────────
|
||||||
|
const bldState = this._buildingStates?.[obj.id];
|
||||||
|
const isConstructing = bldState?.constructing;
|
||||||
|
const isUpgrading = bldState?.upgrading;
|
||||||
|
const justCompleted = bldState?.completedAt && (Date.now() - bldState.completedAt) < 3000;
|
||||||
|
|
||||||
const grad = ctx.createRadialGradient(cx, cy+this.TH/2, 0, cx, cy+this.TH/2, 30);
|
const grad = ctx.createRadialGradient(cx, cy+this.TH/2, 0, cx, cy+this.TH/2, 30);
|
||||||
grad.addColorStop(0, obj.glowColor.replace('.6','.35'));
|
grad.addColorStop(0, obj.glowColor.replace('.6','.35'));
|
||||||
grad.addColorStop(1,'transparent');
|
grad.addColorStop(1,'transparent');
|
||||||
ctx.fillStyle=grad;
|
ctx.fillStyle=grad;
|
||||||
ctx.beginPath(); ctx.ellipse(cx, cy+this.TH/2, 28, 14, 0, 0, Math.PI*2); ctx.fill();
|
ctx.beginPath(); ctx.ellipse(cx, cy+this.TH/2, 28, 14, 0, 0, Math.PI*2); ctx.fill();
|
||||||
|
|
||||||
|
// Dim box if under construction
|
||||||
|
if (isConstructing || isUpgrading) ctx.globalAlpha = 0.5;
|
||||||
this._drawIsoBox(cx, cy, 36, 36, 20, obj.color);
|
this._drawIsoBox(cx, cy, 36, 36, 20, obj.color);
|
||||||
|
ctx.globalAlpha = 1;
|
||||||
|
|
||||||
ctx.font='22px serif'; ctx.textAlign='center'; ctx.textBaseline='middle';
|
ctx.font='22px serif'; ctx.textAlign='center'; ctx.textBaseline='middle';
|
||||||
ctx.fillText(obj.icon, cx, cy2);
|
ctx.fillText(obj.icon, cx, cy2);
|
||||||
ctx.font='600 9px "Orbitron",monospace'; ctx.textAlign='center'; ctx.textBaseline='top';
|
ctx.font='600 9px "Orbitron",monospace'; ctx.textAlign='center'; ctx.textBaseline='top';
|
||||||
ctx.fillStyle='rgba(0,0,0,.8)'; ctx.fillText(obj.label, cx+1, cy2+20);
|
ctx.fillStyle='rgba(0,0,0,.8)'; ctx.fillText(obj.label, cx+1, cy2+20);
|
||||||
ctx.fillStyle=obj.color; ctx.fillText(obj.label, cx, cy2+19);
|
ctx.fillStyle=obj.color; ctx.fillText(obj.label, cx, cy2+19);
|
||||||
|
|
||||||
|
// ── Spinning construction ring ─────────────────────────────────────
|
||||||
|
if (isConstructing || isUpgrading) {
|
||||||
|
const angle = (now * 2) % (Math.PI * 2);
|
||||||
|
const ringR = 22;
|
||||||
|
ctx.save();
|
||||||
|
ctx.strokeStyle = isUpgrading ? '#ffd700' : '#00ff88';
|
||||||
|
ctx.lineWidth = 2.5;
|
||||||
|
ctx.setLineDash([10, 6]);
|
||||||
|
ctx.lineDashOffset = -now * 20;
|
||||||
|
ctx.globalAlpha = 0.85;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(cx, cy - 10, ringR, angle, angle + Math.PI * 1.4);
|
||||||
|
ctx.stroke();
|
||||||
|
// Small progress arc
|
||||||
|
const progress = bldState.progress || 0;
|
||||||
|
ctx.setLineDash([]);
|
||||||
|
ctx.strokeStyle = isUpgrading ? 'rgba(255,215,0,.2)' : 'rgba(0,255,136,.2)';
|
||||||
|
ctx.lineWidth = 4;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(cx, cy - 10, ringR, -Math.PI/2, -Math.PI/2 + Math.PI*2*progress);
|
||||||
|
ctx.stroke();
|
||||||
|
// Label
|
||||||
|
ctx.font = '700 8px "Orbitron",monospace';
|
||||||
|
ctx.fillStyle = isUpgrading ? '#ffd700' : '#00ff88';
|
||||||
|
ctx.textAlign = 'center';
|
||||||
|
ctx.textBaseline = 'middle';
|
||||||
|
ctx.fillText(isUpgrading ? '↑ UPG' : '⚙ BLD', cx, cy - 10);
|
||||||
|
ctx.restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── Completion pulse flash ─────────────────────────────────────────
|
||||||
|
if (justCompleted) {
|
||||||
|
const age = (Date.now() - bldState.completedAt) / 3000;
|
||||||
|
const pulseAlpha = Math.max(0, 0.7 - age);
|
||||||
|
ctx.save();
|
||||||
|
ctx.globalAlpha = pulseAlpha;
|
||||||
|
ctx.strokeStyle = '#ffffff';
|
||||||
|
ctx.lineWidth = 3;
|
||||||
|
ctx.beginPath();
|
||||||
|
ctx.arc(cx, cy - 10, 22 + age * 20, 0, Math.PI * 2);
|
||||||
|
ctx.stroke();
|
||||||
|
ctx.restore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Call this from the game update loop to set building states for animation */
|
||||||
|
setBuildingStates(states) {
|
||||||
|
this._buildingStates = states || {};
|
||||||
}
|
}
|
||||||
|
|
||||||
_drawIsoBox(cx, cy, w, d, h, color) {
|
_drawIsoBox(cx, cy, w, d, h, color) {
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"name": "Deutsch",
|
"name": "Deutsch",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "Dashboard",
|
"dashboard": "Dashboard",
|
||||||
@ -20,7 +20,8 @@
|
|||||||
"missions": "Missionen",
|
"missions": "Missionen",
|
||||||
"alliance": "Allianz",
|
"alliance": "Allianz",
|
||||||
"market": "Markt",
|
"market": "Markt",
|
||||||
"social": "Sozial"
|
"social": "Sozial",
|
||||||
|
"settings": "Einstellungen"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 Gebäude",
|
"buildings": "🏗 Gebäude",
|
||||||
@ -49,14 +50,126 @@
|
|||||||
"deposit": "Einzahlen",
|
"deposit": "Einzahlen",
|
||||||
"withdraw": "Abheben",
|
"withdraw": "Abheben",
|
||||||
"buy": "Kaufen",
|
"buy": "Kaufen",
|
||||||
"sell": "Verkaufen"
|
"sell": "Verkaufen",
|
||||||
|
"craft": "Herstellen",
|
||||||
|
"research": "Forschen",
|
||||||
|
"repair": "Reparieren",
|
||||||
|
"equip": "Ausrüsten",
|
||||||
|
"save": "Speichern",
|
||||||
|
"send": "Senden",
|
||||||
|
"speedUp": "Beschleunigen",
|
||||||
|
"collectAll": "Alle einsammeln",
|
||||||
|
"unequip": "Ablegen"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
"offline": "Offline",
|
"offline": "Offline",
|
||||||
"inProgress": "In Arbeit",
|
"inProgress": "Läuft",
|
||||||
"completed": "Abgeschlossen",
|
"completed": "Abgeschlossen",
|
||||||
"locked": "Gesperrt",
|
"locked": "Gesperrt",
|
||||||
"maxLevel": "Max. Level"
|
"maxLevel": "Max. Stufe",
|
||||||
|
"ready": "Fertig!",
|
||||||
|
"queued": "Eingereiht",
|
||||||
|
"failed": "Fehlgeschlagen"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "Dungeons",
|
||||||
|
"selectPrompt": "Wähle einen Dungeon",
|
||||||
|
"difficulty": "Schwierigkeit",
|
||||||
|
"minLevel": "Min. Stufe",
|
||||||
|
"energyCost": "Energiekosten",
|
||||||
|
"enter": "Dungeon betreten",
|
||||||
|
"easy": "Einfach",
|
||||||
|
"medium": "Mittel",
|
||||||
|
"hard": "Schwer",
|
||||||
|
"extreme": "Extrem",
|
||||||
|
"legendary": "Legendär",
|
||||||
|
"boss": "Boss",
|
||||||
|
"room": "Raum",
|
||||||
|
"rooms": "Räume",
|
||||||
|
"loot": "Beute",
|
||||||
|
"rewardMultiplier": "Belohnungsmultiplikator",
|
||||||
|
"maxPlayers": "Max. Spieler",
|
||||||
|
"clearBonus": "Abschlussbonus"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "Aufgaben",
|
||||||
|
"main": "Hauptgeschichte",
|
||||||
|
"daily": "Täglich",
|
||||||
|
"weekly": "Wöchentlich",
|
||||||
|
"monthly": "Monatlich",
|
||||||
|
"completed": "Abgeschlossen",
|
||||||
|
"failed": "Fehlgeschlagen",
|
||||||
|
"resetsIn": "Zurückgesetzt in",
|
||||||
|
"claim": "Belohnung einfordern",
|
||||||
|
"objective": "Ziel",
|
||||||
|
"reward": "Belohnung"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "Herstellung",
|
||||||
|
"queue": "Warteschlange",
|
||||||
|
"queueEmpty": "Keine Gegenstände in der Warteschlange",
|
||||||
|
"speedUpCost": "Beschleunigen ({n} Edelsteine)",
|
||||||
|
"collectAll": "Alle fertigen einsammeln",
|
||||||
|
"completes": "Fertig",
|
||||||
|
"progress": "Fortschritt"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "Allianz",
|
||||||
|
"create": "Allianz gründen",
|
||||||
|
"find": "Allianz suchen",
|
||||||
|
"chat": "Allianz-Chat",
|
||||||
|
"research": "Allianzforschung",
|
||||||
|
"warehouse": "Allianzlager",
|
||||||
|
"members": "Mitglieder",
|
||||||
|
"deposit": "Einzahlen",
|
||||||
|
"withdraw": "Abheben"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "Spielermarkt",
|
||||||
|
"browse": "Durchsuchen",
|
||||||
|
"sell": "Verkaufen",
|
||||||
|
"myListings": "Meine Angebote",
|
||||||
|
"priceHistory": "Preisverlauf",
|
||||||
|
"fee": "2% Listungsgebühr"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "Inventar",
|
||||||
|
"empty": "Inventar ist leer",
|
||||||
|
"equip": "Ausrüsten",
|
||||||
|
"use": "Verwenden",
|
||||||
|
"drop": "Ablegen",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "Helm",
|
||||||
|
"body": "Rüstung",
|
||||||
|
"hands": "Handschuhe",
|
||||||
|
"pants": "Beine",
|
||||||
|
"boots": "Stiefel",
|
||||||
|
"backpack": "Rucksack"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "Laden",
|
||||||
|
"gems": "Edelstein-Laden",
|
||||||
|
"ships": "Schiffe",
|
||||||
|
"weapons": "Waffen",
|
||||||
|
"armour": "Rüstung",
|
||||||
|
"consumables": "Verbrauchsgüter"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Einstellungen",
|
||||||
|
"language": "Sprache",
|
||||||
|
"fontSize": "Schriftgröße",
|
||||||
|
"colorBlind": "Farbenblindmodus",
|
||||||
|
"reducedMotion": "Reduzierte Bewegung",
|
||||||
|
"volume": "Lautstärke",
|
||||||
|
"reset": "Auf Standard zurücksetzen"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "Zum Hauptinhalt springen",
|
||||||
|
"closeModal": "Modal schließen",
|
||||||
|
"openMenu": "Navigationsmenü öffnen",
|
||||||
|
"loading": "Lädt...",
|
||||||
|
"toastRegion": "Benachrichtigungen"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"_meta": { "lang": "en", "name": "English", "version": "1.0" },
|
"_meta": {
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"version": "1.2"
|
||||||
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "Dashboard",
|
"dashboard": "Dashboard",
|
||||||
"dungeons": "Dungeons",
|
"dungeons": "Dungeons",
|
||||||
@ -16,7 +20,8 @@
|
|||||||
"missions": "Missions",
|
"missions": "Missions",
|
||||||
"alliance": "Alliance",
|
"alliance": "Alliance",
|
||||||
"market": "Market",
|
"market": "Market",
|
||||||
"social": "Social"
|
"social": "Social",
|
||||||
|
"settings": "Settings"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 Buildings",
|
"buildings": "🏗 Buildings",
|
||||||
@ -45,7 +50,16 @@
|
|||||||
"deposit": "Deposit",
|
"deposit": "Deposit",
|
||||||
"withdraw": "Withdraw",
|
"withdraw": "Withdraw",
|
||||||
"buy": "Buy",
|
"buy": "Buy",
|
||||||
"sell": "Sell"
|
"sell": "Sell",
|
||||||
|
"craft": "Craft",
|
||||||
|
"research": "Research",
|
||||||
|
"repair": "Repair",
|
||||||
|
"equip": "Equip",
|
||||||
|
"save": "Save",
|
||||||
|
"send": "Send",
|
||||||
|
"speedUp": "Speed Up",
|
||||||
|
"collectAll": "Collect All",
|
||||||
|
"unequip": "Unequip"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
@ -53,6 +67,109 @@
|
|||||||
"inProgress": "In Progress",
|
"inProgress": "In Progress",
|
||||||
"completed": "Completed",
|
"completed": "Completed",
|
||||||
"locked": "Locked",
|
"locked": "Locked",
|
||||||
"maxLevel": "Max Level"
|
"maxLevel": "Max Level",
|
||||||
|
"ready": "Ready!",
|
||||||
|
"queued": "Queued",
|
||||||
|
"failed": "Failed"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "Dungeons",
|
||||||
|
"selectPrompt": "Select a dungeon to begin",
|
||||||
|
"difficulty": "Difficulty",
|
||||||
|
"minLevel": "Min. Level",
|
||||||
|
"energyCost": "Energy Cost",
|
||||||
|
"enter": "Enter Dungeon",
|
||||||
|
"easy": "Easy",
|
||||||
|
"medium": "Medium",
|
||||||
|
"hard": "Hard",
|
||||||
|
"extreme": "Extreme",
|
||||||
|
"legendary": "Legendary",
|
||||||
|
"boss": "Boss",
|
||||||
|
"room": "Room",
|
||||||
|
"rooms": "Rooms",
|
||||||
|
"loot": "Loot",
|
||||||
|
"rewardMultiplier": "Reward Multiplier",
|
||||||
|
"maxPlayers": "Max Players",
|
||||||
|
"clearBonus": "Clear Bonus"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "Quests",
|
||||||
|
"main": "Main Story",
|
||||||
|
"daily": "Daily",
|
||||||
|
"weekly": "Weekly",
|
||||||
|
"monthly": "Monthly",
|
||||||
|
"completed": "Completed",
|
||||||
|
"failed": "Failed",
|
||||||
|
"resetsIn": "Resets in",
|
||||||
|
"claim": "Claim Reward",
|
||||||
|
"objective": "Objective",
|
||||||
|
"reward": "Reward"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "Crafting",
|
||||||
|
"queue": "Queue",
|
||||||
|
"queueEmpty": "No items in queue",
|
||||||
|
"speedUpCost": "Speed Up ({n} Gems)",
|
||||||
|
"collectAll": "Collect All Ready",
|
||||||
|
"completes": "Completes",
|
||||||
|
"progress": "Progress"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "Alliance",
|
||||||
|
"create": "Create Alliance",
|
||||||
|
"find": "Find Alliance",
|
||||||
|
"chat": "Alliance Chat",
|
||||||
|
"research": "Alliance Research",
|
||||||
|
"warehouse": "Alliance Warehouse",
|
||||||
|
"members": "Members",
|
||||||
|
"deposit": "Deposit",
|
||||||
|
"withdraw": "Withdraw"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "Player Market",
|
||||||
|
"browse": "Browse",
|
||||||
|
"sell": "Sell",
|
||||||
|
"myListings": "My Listings",
|
||||||
|
"priceHistory": "Price History",
|
||||||
|
"fee": "2% listing fee"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "Inventory",
|
||||||
|
"empty": "Inventory is empty",
|
||||||
|
"equip": "Equip",
|
||||||
|
"use": "Use",
|
||||||
|
"drop": "Drop",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "Helmet",
|
||||||
|
"body": "Body Armour",
|
||||||
|
"hands": "Gloves",
|
||||||
|
"pants": "Legs",
|
||||||
|
"boots": "Boots",
|
||||||
|
"backpack": "Backpack"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "Shop",
|
||||||
|
"gems": "Gem Store",
|
||||||
|
"ships": "Ships",
|
||||||
|
"weapons": "Weapons",
|
||||||
|
"armour": "Armour",
|
||||||
|
"consumables": "Consumables"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Settings",
|
||||||
|
"language": "Language",
|
||||||
|
"fontSize": "Font Size",
|
||||||
|
"colorBlind": "Colour Blind Mode",
|
||||||
|
"reducedMotion": "Reduced Motion",
|
||||||
|
"volume": "Sound Volume",
|
||||||
|
"reset": "Reset to Defaults"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "Skip to main content",
|
||||||
|
"closeModal": "Close modal",
|
||||||
|
"openMenu": "Open navigation menu",
|
||||||
|
"loading": "Loading...",
|
||||||
|
"toastRegion": "Notifications"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "es",
|
"lang": "es",
|
||||||
"name": "Español",
|
"name": "Español",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "Panel",
|
"dashboard": "Panel",
|
||||||
@ -20,7 +20,8 @@
|
|||||||
"missions": "Misiones",
|
"missions": "Misiones",
|
||||||
"alliance": "Alianza",
|
"alliance": "Alianza",
|
||||||
"market": "Mercado",
|
"market": "Mercado",
|
||||||
"social": "Social"
|
"social": "Social",
|
||||||
|
"settings": "Ajustes"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 Edificios",
|
"buildings": "🏗 Edificios",
|
||||||
@ -32,7 +33,7 @@
|
|||||||
"metal": "Metal",
|
"metal": "Metal",
|
||||||
"gas": "Gas",
|
"gas": "Gas",
|
||||||
"crystal": "Cristal",
|
"crystal": "Cristal",
|
||||||
"energyCells": "Células de energía",
|
"energyCells": "Celdas de energía",
|
||||||
"darkMatter": "Materia oscura",
|
"darkMatter": "Materia oscura",
|
||||||
"credits": "Créditos",
|
"credits": "Créditos",
|
||||||
"gems": "Gemas"
|
"gems": "Gemas"
|
||||||
@ -41,7 +42,7 @@
|
|||||||
"build": "Construir",
|
"build": "Construir",
|
||||||
"upgrade": "Mejorar",
|
"upgrade": "Mejorar",
|
||||||
"cancel": "Cancelar",
|
"cancel": "Cancelar",
|
||||||
"collect": "Recoger",
|
"collect": "Recolectar",
|
||||||
"launch": "Lanzar",
|
"launch": "Lanzar",
|
||||||
"search": "Buscar",
|
"search": "Buscar",
|
||||||
"join": "Unirse",
|
"join": "Unirse",
|
||||||
@ -49,14 +50,126 @@
|
|||||||
"deposit": "Depositar",
|
"deposit": "Depositar",
|
||||||
"withdraw": "Retirar",
|
"withdraw": "Retirar",
|
||||||
"buy": "Comprar",
|
"buy": "Comprar",
|
||||||
"sell": "Vender"
|
"sell": "Vender",
|
||||||
|
"craft": "Fabricar",
|
||||||
|
"research": "Investigar",
|
||||||
|
"repair": "Reparar",
|
||||||
|
"equip": "Equipar",
|
||||||
|
"save": "Guardar",
|
||||||
|
"send": "Enviar",
|
||||||
|
"speedUp": "Acelerar",
|
||||||
|
"collectAll": "Recolectar todo",
|
||||||
|
"unequip": "Desequipar"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "En línea",
|
"online": "En línea",
|
||||||
"offline": "Desconectado",
|
"offline": "Sin conexión",
|
||||||
"inProgress": "En progreso",
|
"inProgress": "En progreso",
|
||||||
"completed": "Completado",
|
"completed": "Completado",
|
||||||
"locked": "Bloqueado",
|
"locked": "Bloqueado",
|
||||||
"maxLevel": "Nivel máx."
|
"maxLevel": "Nivel máx.",
|
||||||
|
"ready": "¡Listo!",
|
||||||
|
"queued": "En cola",
|
||||||
|
"failed": "Fallido"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "Mazmorras",
|
||||||
|
"selectPrompt": "Selecciona una mazmorra",
|
||||||
|
"difficulty": "Dificultad",
|
||||||
|
"minLevel": "Nivel mín.",
|
||||||
|
"energyCost": "Costo de energía",
|
||||||
|
"enter": "Entrar a la mazmorra",
|
||||||
|
"easy": "Fácil",
|
||||||
|
"medium": "Medio",
|
||||||
|
"hard": "Difícil",
|
||||||
|
"extreme": "Extremo",
|
||||||
|
"legendary": "Legendario",
|
||||||
|
"boss": "Jefe",
|
||||||
|
"room": "Sala",
|
||||||
|
"rooms": "Salas",
|
||||||
|
"loot": "Botín",
|
||||||
|
"rewardMultiplier": "Multiplicador de recompensa",
|
||||||
|
"maxPlayers": "Jugadores máx.",
|
||||||
|
"clearBonus": "Bonificación de limpieza"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "Misiones",
|
||||||
|
"main": "Historia principal",
|
||||||
|
"daily": "Diario",
|
||||||
|
"weekly": "Semanal",
|
||||||
|
"monthly": "Mensual",
|
||||||
|
"completed": "Completado",
|
||||||
|
"failed": "Fallido",
|
||||||
|
"resetsIn": "Se reinicia en",
|
||||||
|
"claim": "Reclamar recompensa",
|
||||||
|
"objective": "Objetivo",
|
||||||
|
"reward": "Recompensa"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "Fabricación",
|
||||||
|
"queue": "Cola",
|
||||||
|
"queueEmpty": "Sin objetos en cola",
|
||||||
|
"speedUpCost": "Acelerar ({n} gemas)",
|
||||||
|
"collectAll": "Recolectar todos",
|
||||||
|
"completes": "Completa",
|
||||||
|
"progress": "Progreso"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "Alianza",
|
||||||
|
"create": "Crear alianza",
|
||||||
|
"find": "Buscar alianza",
|
||||||
|
"chat": "Chat de alianza",
|
||||||
|
"research": "Investigación de alianza",
|
||||||
|
"warehouse": "Almacén de alianza",
|
||||||
|
"members": "Miembros",
|
||||||
|
"deposit": "Depositar",
|
||||||
|
"withdraw": "Retirar"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "Mercado de jugadores",
|
||||||
|
"browse": "Explorar",
|
||||||
|
"sell": "Vender",
|
||||||
|
"myListings": "Mis listados",
|
||||||
|
"priceHistory": "Historial de precios",
|
||||||
|
"fee": "2% de tarifa de listado"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "Inventario",
|
||||||
|
"empty": "El inventario está vacío",
|
||||||
|
"equip": "Equipar",
|
||||||
|
"use": "Usar",
|
||||||
|
"drop": "Soltar",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "Casco",
|
||||||
|
"body": "Armadura",
|
||||||
|
"hands": "Guantes",
|
||||||
|
"pants": "Piernas",
|
||||||
|
"boots": "Botas",
|
||||||
|
"backpack": "Mochila"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "Tienda",
|
||||||
|
"gems": "Tienda de gemas",
|
||||||
|
"ships": "Naves",
|
||||||
|
"weapons": "Armas",
|
||||||
|
"armour": "Armadura",
|
||||||
|
"consumables": "Consumibles"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Ajustes",
|
||||||
|
"language": "Idioma",
|
||||||
|
"fontSize": "Tamaño de fuente",
|
||||||
|
"colorBlind": "Modo daltónico",
|
||||||
|
"reducedMotion": "Movimiento reducido",
|
||||||
|
"volume": "Volumen",
|
||||||
|
"reset": "Restablecer ajustes"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "Ir al contenido principal",
|
||||||
|
"closeModal": "Cerrar ventana",
|
||||||
|
"openMenu": "Abrir menú de navegación",
|
||||||
|
"loading": "Cargando...",
|
||||||
|
"toastRegion": "Notificaciones"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "fr",
|
"lang": "fr",
|
||||||
"name": "Français",
|
"name": "Français",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "Tableau de bord",
|
"dashboard": "Tableau de bord",
|
||||||
@ -11,7 +11,7 @@
|
|||||||
"base": "Base",
|
"base": "Base",
|
||||||
"quests": "Quêtes",
|
"quests": "Quêtes",
|
||||||
"inventory": "Inventaire",
|
"inventory": "Inventaire",
|
||||||
"crafting": "Artisanat",
|
"crafting": "Fabrication",
|
||||||
"shop": "Boutique",
|
"shop": "Boutique",
|
||||||
"fleet": "Flotte",
|
"fleet": "Flotte",
|
||||||
"galaxy": "Galaxie",
|
"galaxy": "Galaxie",
|
||||||
@ -20,12 +20,13 @@
|
|||||||
"missions": "Missions",
|
"missions": "Missions",
|
||||||
"alliance": "Alliance",
|
"alliance": "Alliance",
|
||||||
"market": "Marché",
|
"market": "Marché",
|
||||||
"social": "Social"
|
"social": "Social",
|
||||||
|
"settings": "Paramètres"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 Bâtiments",
|
"buildings": "🏗 Bâtiments",
|
||||||
"shipyard": "🚀 Chantier naval",
|
"shipyard": "🚀 Chantier naval",
|
||||||
"starbase": "🌌 Base stellaire",
|
"starbase": "🌌 Étoile de base",
|
||||||
"overview": "📊 Vue d'ensemble"
|
"overview": "📊 Vue d'ensemble"
|
||||||
},
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
@ -43,13 +44,22 @@
|
|||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"collect": "Collecter",
|
"collect": "Collecter",
|
||||||
"launch": "Lancer",
|
"launch": "Lancer",
|
||||||
"search": "Rechercher",
|
"search": "Chercher",
|
||||||
"join": "Rejoindre",
|
"join": "Rejoindre",
|
||||||
"leave": "Quitter",
|
"leave": "Quitter",
|
||||||
"deposit": "Déposer",
|
"deposit": "Déposer",
|
||||||
"withdraw": "Retirer",
|
"withdraw": "Retirer",
|
||||||
"buy": "Acheter",
|
"buy": "Acheter",
|
||||||
"sell": "Vendre"
|
"sell": "Vendre",
|
||||||
|
"craft": "Fabriquer",
|
||||||
|
"research": "Rechercher",
|
||||||
|
"repair": "Réparer",
|
||||||
|
"equip": "Équiper",
|
||||||
|
"save": "Sauvegarder",
|
||||||
|
"send": "Envoyer",
|
||||||
|
"speedUp": "Accélérer",
|
||||||
|
"collectAll": "Tout collecter",
|
||||||
|
"unequip": "Déséquiper"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "En ligne",
|
"online": "En ligne",
|
||||||
@ -57,6 +67,109 @@
|
|||||||
"inProgress": "En cours",
|
"inProgress": "En cours",
|
||||||
"completed": "Terminé",
|
"completed": "Terminé",
|
||||||
"locked": "Verrouillé",
|
"locked": "Verrouillé",
|
||||||
"maxLevel": "Niveau max"
|
"maxLevel": "Niveau max",
|
||||||
|
"ready": "Prêt !",
|
||||||
|
"queued": "En file",
|
||||||
|
"failed": "Échoué"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "Donjons",
|
||||||
|
"selectPrompt": "Sélectionner un donjon",
|
||||||
|
"difficulty": "Difficulté",
|
||||||
|
"minLevel": "Niveau min.",
|
||||||
|
"energyCost": "Coût en énergie",
|
||||||
|
"enter": "Entrer dans le donjon",
|
||||||
|
"easy": "Facile",
|
||||||
|
"medium": "Moyen",
|
||||||
|
"hard": "Difficile",
|
||||||
|
"extreme": "Extrême",
|
||||||
|
"legendary": "Légendaire",
|
||||||
|
"boss": "Boss",
|
||||||
|
"room": "Salle",
|
||||||
|
"rooms": "Salles",
|
||||||
|
"loot": "Butin",
|
||||||
|
"rewardMultiplier": "Multiplicateur de récompense",
|
||||||
|
"maxPlayers": "Joueurs max",
|
||||||
|
"clearBonus": "Bonus de victoire"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "Quêtes",
|
||||||
|
"main": "Histoire principale",
|
||||||
|
"daily": "Quotidien",
|
||||||
|
"weekly": "Hebdomadaire",
|
||||||
|
"monthly": "Mensuel",
|
||||||
|
"completed": "Terminé",
|
||||||
|
"failed": "Échoué",
|
||||||
|
"resetsIn": "Réinitialisé dans",
|
||||||
|
"claim": "Réclamer la récompense",
|
||||||
|
"objective": "Objectif",
|
||||||
|
"reward": "Récompense"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "Fabrication",
|
||||||
|
"queue": "File d'attente",
|
||||||
|
"queueEmpty": "Aucun objet en attente",
|
||||||
|
"speedUpCost": "Accélérer ({n} gemmes)",
|
||||||
|
"collectAll": "Tout collecter",
|
||||||
|
"completes": "Terminé",
|
||||||
|
"progress": "Progression"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "Alliance",
|
||||||
|
"create": "Créer une alliance",
|
||||||
|
"find": "Trouver une alliance",
|
||||||
|
"chat": "Chat d'alliance",
|
||||||
|
"research": "Recherche d'alliance",
|
||||||
|
"warehouse": "Entrepôt d'alliance",
|
||||||
|
"members": "Membres",
|
||||||
|
"deposit": "Déposer",
|
||||||
|
"withdraw": "Retirer"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "Marché des joueurs",
|
||||||
|
"browse": "Parcourir",
|
||||||
|
"sell": "Vendre",
|
||||||
|
"myListings": "Mes annonces",
|
||||||
|
"priceHistory": "Historique des prix",
|
||||||
|
"fee": "2% de frais d'inscription"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "Inventaire",
|
||||||
|
"empty": "L'inventaire est vide",
|
||||||
|
"equip": "Équiper",
|
||||||
|
"use": "Utiliser",
|
||||||
|
"drop": "Jeter",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "Casque",
|
||||||
|
"body": "Armure",
|
||||||
|
"hands": "Gants",
|
||||||
|
"pants": "Jambes",
|
||||||
|
"boots": "Bottes",
|
||||||
|
"backpack": "Sac à dos"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "Boutique",
|
||||||
|
"gems": "Boutique de gemmes",
|
||||||
|
"ships": "Vaisseaux",
|
||||||
|
"weapons": "Armes",
|
||||||
|
"armour": "Armure",
|
||||||
|
"consumables": "Consommables"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Paramètres",
|
||||||
|
"language": "Langue",
|
||||||
|
"fontSize": "Taille de police",
|
||||||
|
"colorBlind": "Mode daltonien",
|
||||||
|
"reducedMotion": "Mouvement réduit",
|
||||||
|
"volume": "Volume sonore",
|
||||||
|
"reset": "Rétablir les paramètres"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "Aller au contenu principal",
|
||||||
|
"closeModal": "Fermer la fenêtre",
|
||||||
|
"openMenu": "Ouvrir le menu de navigation",
|
||||||
|
"loading": "Chargement...",
|
||||||
|
"toastRegion": "Notifications"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "ja",
|
"lang": "ja",
|
||||||
"name": "日本語",
|
"name": "日本語",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "ダッシュボード",
|
"dashboard": "ダッシュボード",
|
||||||
@ -20,12 +20,13 @@
|
|||||||
"missions": "ミッション",
|
"missions": "ミッション",
|
||||||
"alliance": "アライアンス",
|
"alliance": "アライアンス",
|
||||||
"market": "マーケット",
|
"market": "マーケット",
|
||||||
"social": "ソーシャル"
|
"social": "ソーシャル",
|
||||||
|
"settings": "設定"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 建物",
|
"buildings": "🏗 建物",
|
||||||
"shipyard": "🚀 造船所",
|
"shipyard": "🚀 造船所",
|
||||||
"starbase": "🌌 星間基地",
|
"starbase": "🌌 星基地",
|
||||||
"overview": "📊 概要"
|
"overview": "📊 概要"
|
||||||
},
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
@ -39,17 +40,26 @@
|
|||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"build": "建設",
|
"build": "建設",
|
||||||
"upgrade": "アップグレード",
|
"upgrade": "強化",
|
||||||
"cancel": "キャンセル",
|
"cancel": "キャンセル",
|
||||||
"collect": "収集",
|
"collect": "収集",
|
||||||
"launch": "発射",
|
"launch": "起動",
|
||||||
"search": "検索",
|
"search": "検索",
|
||||||
"join": "参加",
|
"join": "参加",
|
||||||
"leave": "退出",
|
"leave": "退出",
|
||||||
"deposit": "入金",
|
"deposit": "預け入れ",
|
||||||
"withdraw": "出金",
|
"withdraw": "引き出し",
|
||||||
"buy": "購入",
|
"buy": "購入",
|
||||||
"sell": "売却"
|
"sell": "売却",
|
||||||
|
"craft": "製作",
|
||||||
|
"research": "研究",
|
||||||
|
"repair": "修理",
|
||||||
|
"equip": "装備",
|
||||||
|
"save": "保存",
|
||||||
|
"send": "送信",
|
||||||
|
"speedUp": "加速",
|
||||||
|
"collectAll": "全て収集",
|
||||||
|
"unequip": "外す"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "オンライン",
|
"online": "オンライン",
|
||||||
@ -57,6 +67,109 @@
|
|||||||
"inProgress": "進行中",
|
"inProgress": "進行中",
|
||||||
"completed": "完了",
|
"completed": "完了",
|
||||||
"locked": "ロック中",
|
"locked": "ロック中",
|
||||||
"maxLevel": "最大レベル"
|
"maxLevel": "最大レベル",
|
||||||
|
"ready": "準備完了!",
|
||||||
|
"queued": "待機中",
|
||||||
|
"failed": "失敗"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "ダンジョン",
|
||||||
|
"selectPrompt": "ダンジョンを選択",
|
||||||
|
"difficulty": "難易度",
|
||||||
|
"minLevel": "最低レベル",
|
||||||
|
"energyCost": "エネルギーコスト",
|
||||||
|
"enter": "ダンジョンに入る",
|
||||||
|
"easy": "簡単",
|
||||||
|
"medium": "普通",
|
||||||
|
"hard": "難しい",
|
||||||
|
"extreme": "極難",
|
||||||
|
"legendary": "伝説",
|
||||||
|
"boss": "ボス",
|
||||||
|
"room": "部屋",
|
||||||
|
"rooms": "部屋数",
|
||||||
|
"loot": "戦利品",
|
||||||
|
"rewardMultiplier": "報酬倍率",
|
||||||
|
"maxPlayers": "最大プレイヤー数",
|
||||||
|
"clearBonus": "クリアボーナス"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "クエスト",
|
||||||
|
"main": "メインストーリー",
|
||||||
|
"daily": "デイリー",
|
||||||
|
"weekly": "ウィークリー",
|
||||||
|
"monthly": "マンスリー",
|
||||||
|
"completed": "完了",
|
||||||
|
"failed": "失敗",
|
||||||
|
"resetsIn": "リセットまで",
|
||||||
|
"claim": "報酬を受け取る",
|
||||||
|
"objective": "目標",
|
||||||
|
"reward": "報酬"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "クラフト",
|
||||||
|
"queue": "キュー",
|
||||||
|
"queueEmpty": "キューにアイテムがありません",
|
||||||
|
"speedUpCost": "加速({n}ジェム)",
|
||||||
|
"collectAll": "全て収集",
|
||||||
|
"completes": "完了",
|
||||||
|
"progress": "進捗"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "アライアンス",
|
||||||
|
"create": "アライアンス作成",
|
||||||
|
"find": "アライアンス検索",
|
||||||
|
"chat": "アライアンスチャット",
|
||||||
|
"research": "アライアンス研究",
|
||||||
|
"warehouse": "アライアンス倉庫",
|
||||||
|
"members": "メンバー",
|
||||||
|
"deposit": "預け入れ",
|
||||||
|
"withdraw": "引き出し"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "プレイヤーマーケット",
|
||||||
|
"browse": "閲覧",
|
||||||
|
"sell": "売却",
|
||||||
|
"myListings": "出品リスト",
|
||||||
|
"priceHistory": "価格履歴",
|
||||||
|
"fee": "2%出品手数料"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "インベントリ",
|
||||||
|
"empty": "インベントリが空です",
|
||||||
|
"equip": "装備",
|
||||||
|
"use": "使用",
|
||||||
|
"drop": "捨てる",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "ヘルメット",
|
||||||
|
"body": "ボディアーマー",
|
||||||
|
"hands": "グローブ",
|
||||||
|
"pants": "レッグ",
|
||||||
|
"boots": "ブーツ",
|
||||||
|
"backpack": "バックパック"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "ショップ",
|
||||||
|
"gems": "ジェムストア",
|
||||||
|
"ships": "艦船",
|
||||||
|
"weapons": "武器",
|
||||||
|
"armour": "防具",
|
||||||
|
"consumables": "消耗品"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "設定",
|
||||||
|
"language": "言語",
|
||||||
|
"fontSize": "フォントサイズ",
|
||||||
|
"colorBlind": "色覚補正モード",
|
||||||
|
"reducedMotion": "アニメーション軽減",
|
||||||
|
"volume": "音量",
|
||||||
|
"reset": "デフォルトに戻す"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "メインコンテンツへスキップ",
|
||||||
|
"closeModal": "モーダルを閉じる",
|
||||||
|
"openMenu": "ナビゲーションメニューを開く",
|
||||||
|
"loading": "読み込み中...",
|
||||||
|
"toastRegion": "通知"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "ko",
|
"lang": "ko",
|
||||||
"name": "한국어",
|
"name": "한국어",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "대시보드",
|
"dashboard": "대시보드",
|
||||||
@ -14,18 +14,19 @@
|
|||||||
"crafting": "제작",
|
"crafting": "제작",
|
||||||
"shop": "상점",
|
"shop": "상점",
|
||||||
"fleet": "함대",
|
"fleet": "함대",
|
||||||
"galaxy": "은하계",
|
"galaxy": "은하",
|
||||||
"research": "연구",
|
"research": "연구",
|
||||||
"leaderboard": "랭킹",
|
"leaderboard": "순위",
|
||||||
"missions": "미션",
|
"missions": "임무",
|
||||||
"alliance": "동맹",
|
"alliance": "동맹",
|
||||||
"market": "시장",
|
"market": "시장",
|
||||||
"social": "소셜"
|
"social": "소셜",
|
||||||
|
"settings": "설정"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 건물",
|
"buildings": "🏗 건물",
|
||||||
"shipyard": "🚀 조선소",
|
"shipyard": "🚀 조선소",
|
||||||
"starbase": "🌌 우주기지",
|
"starbase": "🌌 항성기지",
|
||||||
"overview": "📊 개요"
|
"overview": "📊 개요"
|
||||||
},
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
@ -33,30 +34,142 @@
|
|||||||
"gas": "가스",
|
"gas": "가스",
|
||||||
"crystal": "크리스탈",
|
"crystal": "크리스탈",
|
||||||
"energyCells": "에너지 셀",
|
"energyCells": "에너지 셀",
|
||||||
"darkMatter": "암흑 물질",
|
"darkMatter": "암흑물질",
|
||||||
"credits": "크레딧",
|
"credits": "크레딧",
|
||||||
"gems": "젬"
|
"gems": "젬"
|
||||||
},
|
},
|
||||||
"actions": {
|
"actions": {
|
||||||
"build": "건설",
|
"build": "건설",
|
||||||
"upgrade": "업그레이드",
|
"upgrade": "강화",
|
||||||
"cancel": "취소",
|
"cancel": "취소",
|
||||||
"collect": "수집",
|
"collect": "수집",
|
||||||
"launch": "발사",
|
"launch": "발사",
|
||||||
"search": "검색",
|
"search": "검색",
|
||||||
"join": "참가",
|
"join": "참가",
|
||||||
"leave": "나가기",
|
"leave": "나가기",
|
||||||
"deposit": "입금",
|
"deposit": "예치",
|
||||||
"withdraw": "출금",
|
"withdraw": "출금",
|
||||||
"buy": "구매",
|
"buy": "구매",
|
||||||
"sell": "판매"
|
"sell": "판매",
|
||||||
|
"craft": "제작",
|
||||||
|
"research": "연구",
|
||||||
|
"repair": "수리",
|
||||||
|
"equip": "장착",
|
||||||
|
"save": "저장",
|
||||||
|
"send": "전송",
|
||||||
|
"speedUp": "가속",
|
||||||
|
"collectAll": "모두 수집",
|
||||||
|
"unequip": "해제"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "온라인",
|
"online": "온라인",
|
||||||
"offline": "오프라인",
|
"offline": "오프라인",
|
||||||
"inProgress": "진행 중",
|
"inProgress": "진행 중",
|
||||||
"completed": "완료",
|
"completed": "완료",
|
||||||
"locked": "잠김",
|
"locked": "잠금",
|
||||||
"maxLevel": "최대 레벨"
|
"maxLevel": "최고 레벨",
|
||||||
|
"ready": "준비 완료!",
|
||||||
|
"queued": "대기 중",
|
||||||
|
"failed": "실패"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "던전",
|
||||||
|
"selectPrompt": "던전을 선택하세요",
|
||||||
|
"difficulty": "난이도",
|
||||||
|
"minLevel": "최소 레벨",
|
||||||
|
"energyCost": "에너지 비용",
|
||||||
|
"enter": "던전 입장",
|
||||||
|
"easy": "쉬움",
|
||||||
|
"medium": "보통",
|
||||||
|
"hard": "어려움",
|
||||||
|
"extreme": "극한",
|
||||||
|
"legendary": "전설",
|
||||||
|
"boss": "보스",
|
||||||
|
"room": "방",
|
||||||
|
"rooms": "방 수",
|
||||||
|
"loot": "전리품",
|
||||||
|
"rewardMultiplier": "보상 배율",
|
||||||
|
"maxPlayers": "최대 플레이어",
|
||||||
|
"clearBonus": "클리어 보너스"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "퀘스트",
|
||||||
|
"main": "메인 스토리",
|
||||||
|
"daily": "일일",
|
||||||
|
"weekly": "주간",
|
||||||
|
"monthly": "월간",
|
||||||
|
"completed": "완료",
|
||||||
|
"failed": "실패",
|
||||||
|
"resetsIn": "초기화까지",
|
||||||
|
"claim": "보상 받기",
|
||||||
|
"objective": "목표",
|
||||||
|
"reward": "보상"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "제작",
|
||||||
|
"queue": "대기열",
|
||||||
|
"queueEmpty": "대기열에 아이템 없음",
|
||||||
|
"speedUpCost": "가속 ({n}젬)",
|
||||||
|
"collectAll": "모두 수집",
|
||||||
|
"completes": "완료",
|
||||||
|
"progress": "진행도"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "동맹",
|
||||||
|
"create": "동맹 창설",
|
||||||
|
"find": "동맹 찾기",
|
||||||
|
"chat": "동맹 채팅",
|
||||||
|
"research": "동맹 연구",
|
||||||
|
"warehouse": "동맹 창고",
|
||||||
|
"members": "멤버",
|
||||||
|
"deposit": "예치",
|
||||||
|
"withdraw": "출금"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "플레이어 마켓",
|
||||||
|
"browse": "탐색",
|
||||||
|
"sell": "판매",
|
||||||
|
"myListings": "내 목록",
|
||||||
|
"priceHistory": "가격 기록",
|
||||||
|
"fee": "2% 등록 수수료"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "인벤토리",
|
||||||
|
"empty": "인벤토리가 비어 있습니다",
|
||||||
|
"equip": "장착",
|
||||||
|
"use": "사용",
|
||||||
|
"drop": "버리기",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "투구",
|
||||||
|
"body": "갑옷",
|
||||||
|
"hands": "장갑",
|
||||||
|
"pants": "하의",
|
||||||
|
"boots": "부츠",
|
||||||
|
"backpack": "배낭"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "상점",
|
||||||
|
"gems": "젬 상점",
|
||||||
|
"ships": "함선",
|
||||||
|
"weapons": "무기",
|
||||||
|
"armour": "방어구",
|
||||||
|
"consumables": "소모품"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "설정",
|
||||||
|
"language": "언어",
|
||||||
|
"fontSize": "글꼴 크기",
|
||||||
|
"colorBlind": "색맹 모드",
|
||||||
|
"reducedMotion": "애니메이션 줄이기",
|
||||||
|
"volume": "음량",
|
||||||
|
"reset": "기본값으로 재설정"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "주요 콘텐츠로 건너뛰기",
|
||||||
|
"closeModal": "모달 닫기",
|
||||||
|
"openMenu": "내비게이션 메뉴 열기",
|
||||||
|
"loading": "로딩 중...",
|
||||||
|
"toastRegion": "알림"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,7 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "pt",
|
"lang": "pt",
|
||||||
"name": "Português",
|
"name": "Português",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "Painel",
|
"dashboard": "Painel",
|
||||||
@ -11,7 +11,7 @@
|
|||||||
"base": "Base",
|
"base": "Base",
|
||||||
"quests": "Missões",
|
"quests": "Missões",
|
||||||
"inventory": "Inventário",
|
"inventory": "Inventário",
|
||||||
"crafting": "Criação",
|
"crafting": "Fabricação",
|
||||||
"shop": "Loja",
|
"shop": "Loja",
|
||||||
"fleet": "Frota",
|
"fleet": "Frota",
|
||||||
"galaxy": "Galáxia",
|
"galaxy": "Galáxia",
|
||||||
@ -20,7 +20,8 @@
|
|||||||
"missions": "Missões",
|
"missions": "Missões",
|
||||||
"alliance": "Aliança",
|
"alliance": "Aliança",
|
||||||
"market": "Mercado",
|
"market": "Mercado",
|
||||||
"social": "Social"
|
"social": "Social",
|
||||||
|
"settings": "Configurações"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 Edifícios",
|
"buildings": "🏗 Edifícios",
|
||||||
@ -47,9 +48,18 @@
|
|||||||
"join": "Entrar",
|
"join": "Entrar",
|
||||||
"leave": "Sair",
|
"leave": "Sair",
|
||||||
"deposit": "Depositar",
|
"deposit": "Depositar",
|
||||||
"withdraw": "Retirar",
|
"withdraw": "Sacar",
|
||||||
"buy": "Comprar",
|
"buy": "Comprar",
|
||||||
"sell": "Vender"
|
"sell": "Vender",
|
||||||
|
"craft": "Fabricar",
|
||||||
|
"research": "Pesquisar",
|
||||||
|
"repair": "Reparar",
|
||||||
|
"equip": "Equipar",
|
||||||
|
"save": "Salvar",
|
||||||
|
"send": "Enviar",
|
||||||
|
"speedUp": "Acelerar",
|
||||||
|
"collectAll": "Coletar tudo",
|
||||||
|
"unequip": "Desequipar"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "Online",
|
"online": "Online",
|
||||||
@ -57,6 +67,109 @@
|
|||||||
"inProgress": "Em andamento",
|
"inProgress": "Em andamento",
|
||||||
"completed": "Concluído",
|
"completed": "Concluído",
|
||||||
"locked": "Bloqueado",
|
"locked": "Bloqueado",
|
||||||
"maxLevel": "Nível máx."
|
"maxLevel": "Nível máximo",
|
||||||
|
"ready": "Pronto!",
|
||||||
|
"queued": "Na fila",
|
||||||
|
"failed": "Falhou"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "Masmorras",
|
||||||
|
"selectPrompt": "Selecione uma masmorra",
|
||||||
|
"difficulty": "Dificuldade",
|
||||||
|
"minLevel": "Nível mín.",
|
||||||
|
"energyCost": "Custo de energia",
|
||||||
|
"enter": "Entrar na masmorra",
|
||||||
|
"easy": "Fácil",
|
||||||
|
"medium": "Médio",
|
||||||
|
"hard": "Difícil",
|
||||||
|
"extreme": "Extremo",
|
||||||
|
"legendary": "Lendário",
|
||||||
|
"boss": "Chefe",
|
||||||
|
"room": "Sala",
|
||||||
|
"rooms": "Salas",
|
||||||
|
"loot": "Saque",
|
||||||
|
"rewardMultiplier": "Multiplicador de recompensa",
|
||||||
|
"maxPlayers": "Máx. jogadores",
|
||||||
|
"clearBonus": "Bônus de limpeza"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "Missões",
|
||||||
|
"main": "História principal",
|
||||||
|
"daily": "Diário",
|
||||||
|
"weekly": "Semanal",
|
||||||
|
"monthly": "Mensal",
|
||||||
|
"completed": "Concluído",
|
||||||
|
"failed": "Falhou",
|
||||||
|
"resetsIn": "Reinicia em",
|
||||||
|
"claim": "Reivindicar recompensa",
|
||||||
|
"objective": "Objetivo",
|
||||||
|
"reward": "Recompensa"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "Fabricação",
|
||||||
|
"queue": "Fila",
|
||||||
|
"queueEmpty": "Sem itens na fila",
|
||||||
|
"speedUpCost": "Acelerar ({n} gemas)",
|
||||||
|
"collectAll": "Coletar todos",
|
||||||
|
"completes": "Conclui",
|
||||||
|
"progress": "Progresso"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "Aliança",
|
||||||
|
"create": "Criar aliança",
|
||||||
|
"find": "Encontrar aliança",
|
||||||
|
"chat": "Chat da aliança",
|
||||||
|
"research": "Pesquisa da aliança",
|
||||||
|
"warehouse": "Armazém da aliança",
|
||||||
|
"members": "Membros",
|
||||||
|
"deposit": "Depositar",
|
||||||
|
"withdraw": "Sacar"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "Mercado dos jogadores",
|
||||||
|
"browse": "Explorar",
|
||||||
|
"sell": "Vender",
|
||||||
|
"myListings": "Meus anúncios",
|
||||||
|
"priceHistory": "Histórico de preços",
|
||||||
|
"fee": "2% de taxa de listagem"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "Inventário",
|
||||||
|
"empty": "Inventário vazio",
|
||||||
|
"equip": "Equipar",
|
||||||
|
"use": "Usar",
|
||||||
|
"drop": "Soltar",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "Capacete",
|
||||||
|
"body": "Armadura",
|
||||||
|
"hands": "Luvas",
|
||||||
|
"pants": "Calças",
|
||||||
|
"boots": "Botas",
|
||||||
|
"backpack": "Mochila"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "Loja",
|
||||||
|
"gems": "Loja de gemas",
|
||||||
|
"ships": "Naves",
|
||||||
|
"weapons": "Armas",
|
||||||
|
"armour": "Armadura",
|
||||||
|
"consumables": "Consumíveis"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "Configurações",
|
||||||
|
"language": "Idioma",
|
||||||
|
"fontSize": "Tamanho da fonte",
|
||||||
|
"colorBlind": "Modo daltônico",
|
||||||
|
"reducedMotion": "Movimento reduzido",
|
||||||
|
"volume": "Volume",
|
||||||
|
"reset": "Redefinir para padrão"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "Ir para o conteúdo principal",
|
||||||
|
"closeModal": "Fechar janela",
|
||||||
|
"openMenu": "Abrir menu de navegação",
|
||||||
|
"loading": "Carregando...",
|
||||||
|
"toastRegion": "Notificações"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,11 +2,11 @@
|
|||||||
"_meta": {
|
"_meta": {
|
||||||
"lang": "zh",
|
"lang": "zh",
|
||||||
"name": "中文",
|
"name": "中文",
|
||||||
"version": "1.0"
|
"version": "1.2"
|
||||||
},
|
},
|
||||||
"nav": {
|
"nav": {
|
||||||
"dashboard": "仪表板",
|
"dashboard": "仪表板",
|
||||||
"dungeons": "地下城",
|
"dungeons": "地牢",
|
||||||
"skills": "技能",
|
"skills": "技能",
|
||||||
"base": "基地",
|
"base": "基地",
|
||||||
"quests": "任务",
|
"quests": "任务",
|
||||||
@ -14,19 +14,20 @@
|
|||||||
"crafting": "制作",
|
"crafting": "制作",
|
||||||
"shop": "商店",
|
"shop": "商店",
|
||||||
"fleet": "舰队",
|
"fleet": "舰队",
|
||||||
"galaxy": "银河系",
|
"galaxy": "银河",
|
||||||
"research": "研究",
|
"research": "研究",
|
||||||
"leaderboard": "排行榜",
|
"leaderboard": "排行榜",
|
||||||
"missions": "任务",
|
"missions": "任务",
|
||||||
"alliance": "联盟",
|
"alliance": "联盟",
|
||||||
"market": "市场",
|
"market": "市场",
|
||||||
"social": "社交"
|
"social": "社交",
|
||||||
|
"settings": "设置"
|
||||||
},
|
},
|
||||||
"base": {
|
"base": {
|
||||||
"buildings": "🏗 建筑",
|
"buildings": "🏗 建筑",
|
||||||
"shipyard": "🚀 造船厂",
|
"shipyard": "🚀 造船厂",
|
||||||
"starbase": "🌌 星际基地",
|
"starbase": "🌌 星际基地",
|
||||||
"overview": "📊 总览"
|
"overview": "📊 概览"
|
||||||
},
|
},
|
||||||
"resources": {
|
"resources": {
|
||||||
"metal": "金属",
|
"metal": "金属",
|
||||||
@ -47,9 +48,18 @@
|
|||||||
"join": "加入",
|
"join": "加入",
|
||||||
"leave": "离开",
|
"leave": "离开",
|
||||||
"deposit": "存入",
|
"deposit": "存入",
|
||||||
"withdraw": "提取",
|
"withdraw": "取出",
|
||||||
"buy": "购买",
|
"buy": "购买",
|
||||||
"sell": "出售"
|
"sell": "出售",
|
||||||
|
"craft": "制作",
|
||||||
|
"research": "研究",
|
||||||
|
"repair": "修理",
|
||||||
|
"equip": "装备",
|
||||||
|
"save": "保存",
|
||||||
|
"send": "发送",
|
||||||
|
"speedUp": "加速",
|
||||||
|
"collectAll": "全部收集",
|
||||||
|
"unequip": "卸下"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"online": "在线",
|
"online": "在线",
|
||||||
@ -57,6 +67,109 @@
|
|||||||
"inProgress": "进行中",
|
"inProgress": "进行中",
|
||||||
"completed": "已完成",
|
"completed": "已完成",
|
||||||
"locked": "已锁定",
|
"locked": "已锁定",
|
||||||
"maxLevel": "最高等级"
|
"maxLevel": "最高等级",
|
||||||
|
"ready": "就绪!",
|
||||||
|
"queued": "排队中",
|
||||||
|
"failed": "失败"
|
||||||
|
},
|
||||||
|
"dungeons": {
|
||||||
|
"title": "地牢",
|
||||||
|
"selectPrompt": "选择一个地牢",
|
||||||
|
"difficulty": "难度",
|
||||||
|
"minLevel": "最低等级",
|
||||||
|
"energyCost": "能量消耗",
|
||||||
|
"enter": "进入地牢",
|
||||||
|
"easy": "简单",
|
||||||
|
"medium": "普通",
|
||||||
|
"hard": "困难",
|
||||||
|
"extreme": "极限",
|
||||||
|
"legendary": "传奇",
|
||||||
|
"boss": "首领",
|
||||||
|
"room": "房间",
|
||||||
|
"rooms": "房间数",
|
||||||
|
"loot": "战利品",
|
||||||
|
"rewardMultiplier": "奖励倍数",
|
||||||
|
"maxPlayers": "最多玩家",
|
||||||
|
"clearBonus": "清关奖励"
|
||||||
|
},
|
||||||
|
"quests": {
|
||||||
|
"title": "任务",
|
||||||
|
"main": "主线故事",
|
||||||
|
"daily": "每日",
|
||||||
|
"weekly": "每周",
|
||||||
|
"monthly": "每月",
|
||||||
|
"completed": "已完成",
|
||||||
|
"failed": "失败",
|
||||||
|
"resetsIn": "重置于",
|
||||||
|
"claim": "领取奖励",
|
||||||
|
"objective": "目标",
|
||||||
|
"reward": "奖励"
|
||||||
|
},
|
||||||
|
"crafting": {
|
||||||
|
"title": "制作",
|
||||||
|
"queue": "队列",
|
||||||
|
"queueEmpty": "队列中没有物品",
|
||||||
|
"speedUpCost": "加速({n}宝石)",
|
||||||
|
"collectAll": "全部收集",
|
||||||
|
"completes": "完成",
|
||||||
|
"progress": "进度"
|
||||||
|
},
|
||||||
|
"alliance": {
|
||||||
|
"title": "联盟",
|
||||||
|
"create": "创建联盟",
|
||||||
|
"find": "查找联盟",
|
||||||
|
"chat": "联盟聊天",
|
||||||
|
"research": "联盟研究",
|
||||||
|
"warehouse": "联盟仓库",
|
||||||
|
"members": "成员",
|
||||||
|
"deposit": "存入",
|
||||||
|
"withdraw": "取出"
|
||||||
|
},
|
||||||
|
"market": {
|
||||||
|
"title": "玩家市场",
|
||||||
|
"browse": "浏览",
|
||||||
|
"sell": "出售",
|
||||||
|
"myListings": "我的列表",
|
||||||
|
"priceHistory": "价格历史",
|
||||||
|
"fee": "2%上架费"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"title": "背包",
|
||||||
|
"empty": "背包是空的",
|
||||||
|
"equip": "装备",
|
||||||
|
"use": "使用",
|
||||||
|
"drop": "丢弃",
|
||||||
|
"slot": {
|
||||||
|
"helmet": "头盔",
|
||||||
|
"body": "胸甲",
|
||||||
|
"hands": "手套",
|
||||||
|
"pants": "腿甲",
|
||||||
|
"boots": "靴子",
|
||||||
|
"backpack": "背包"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"shop": {
|
||||||
|
"title": "商店",
|
||||||
|
"gems": "宝石商店",
|
||||||
|
"ships": "飞船",
|
||||||
|
"weapons": "武器",
|
||||||
|
"armour": "护甲",
|
||||||
|
"consumables": "消耗品"
|
||||||
|
},
|
||||||
|
"settings": {
|
||||||
|
"title": "设置",
|
||||||
|
"language": "语言",
|
||||||
|
"fontSize": "字体大小",
|
||||||
|
"colorBlind": "色盲模式",
|
||||||
|
"reducedMotion": "减少动画",
|
||||||
|
"volume": "音量",
|
||||||
|
"reset": "恢复默认"
|
||||||
|
},
|
||||||
|
"a11y": {
|
||||||
|
"skipToContent": "跳至主内容",
|
||||||
|
"closeModal": "关闭窗口",
|
||||||
|
"openMenu": "打开导航菜单",
|
||||||
|
"loading": "加载中...",
|
||||||
|
"toastRegion": "通知"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,842 +0,0 @@
|
|||||||
/* Table Styles for Galaxy Strike Online */
|
|
||||||
|
|
||||||
/* Base Table Styles */
|
|
||||||
.dungeon-table,
|
|
||||||
.skills-table,
|
|
||||||
.base-rooms-table,
|
|
||||||
.base-upgrades-table,
|
|
||||||
.ship-gallery-table,
|
|
||||||
.starbase-management-table,
|
|
||||||
.starbase-shop-table,
|
|
||||||
.quests-table,
|
|
||||||
.inventory-table,
|
|
||||||
.shop-table {
|
|
||||||
width: 100%;
|
|
||||||
border-collapse: collapse;
|
|
||||||
background: var(--card-bg);
|
|
||||||
border-radius: 8px;
|
|
||||||
overflow: hidden;
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
||||||
margin: 10px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dungeon-table th,
|
|
||||||
.skills-table th,
|
|
||||||
.base-rooms-table th,
|
|
||||||
.base-upgrades-table th,
|
|
||||||
.ship-gallery-table th,
|
|
||||||
.starbase-management-table th,
|
|
||||||
.starbase-shop-table th,
|
|
||||||
.quests-table th,
|
|
||||||
.inventory-table th,
|
|
||||||
.shop-table th {
|
|
||||||
background: var(--gradient-primary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
padding: 12px 15px;
|
|
||||||
text-align: left;
|
|
||||||
font-weight: 600;
|
|
||||||
font-size: 14px;
|
|
||||||
border-bottom: 2px solid rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dungeon-table td,
|
|
||||||
.skills-table td,
|
|
||||||
.base-rooms-table td,
|
|
||||||
.base-upgrades-table td,
|
|
||||||
.ship-gallery-table td,
|
|
||||||
.starbase-management-table td,
|
|
||||||
.starbase-shop-table td,
|
|
||||||
.quests-table td,
|
|
||||||
.inventory-table td,
|
|
||||||
.shop-table td {
|
|
||||||
padding: 12px 15px;
|
|
||||||
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
|
|
||||||
color: #e0e0e0;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dungeon-table tr:hover,
|
|
||||||
.skills-table tr:hover,
|
|
||||||
.base-rooms-table tr:hover,
|
|
||||||
.base-upgrades-table tr:hover,
|
|
||||||
.ship-gallery-table tr:hover,
|
|
||||||
.starbase-management-table tr:hover,
|
|
||||||
.starbase-shop-table tr:hover,
|
|
||||||
.quests-table tr:hover,
|
|
||||||
.inventory-table tr:hover,
|
|
||||||
.shop-table tr:hover {
|
|
||||||
background: rgba(102, 126, 234, 0.1);
|
|
||||||
transition: background 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dungeon Table Specific */
|
|
||||||
.dungeon-table .difficulty-easy { color: #00ff00; }
|
|
||||||
.dungeon-table .difficulty-medium { color: #ffff00; }
|
|
||||||
.dungeon-table .difficulty-hard { color: #ff9900; }
|
|
||||||
.dungeon-table .difficulty-extreme { color: #ff0000; }
|
|
||||||
|
|
||||||
/* Skills Table Specific */
|
|
||||||
.skills-table .skill-level {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #667eea;
|
|
||||||
}
|
|
||||||
|
|
||||||
.skills-table .skill-progress {
|
|
||||||
width: 100px;
|
|
||||||
height: 8px;
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
border-radius: 4px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.skills-table .progress-fill {
|
|
||||||
height: 100%;
|
|
||||||
background: linear-gradient(90deg, #667eea, #764ba2);
|
|
||||||
transition: width 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Base Tables Specific */
|
|
||||||
.base-rooms-table .room-status-active { color: #00ff00; }
|
|
||||||
.base-rooms-table .room-status-inactive { color: #ff0000; }
|
|
||||||
.base-rooms-table .room-status-upgrading { color: #ffff00; }
|
|
||||||
|
|
||||||
.base-upgrades-table .upgrade-level {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #667eea;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ship Gallery Grid Specific */
|
|
||||||
.ship-grid {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
|
|
||||||
gap: 15px;
|
|
||||||
padding: 20px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card {
|
|
||||||
background: var(--card-bg);
|
|
||||||
border-radius: 12px;
|
|
||||||
padding: 15px;
|
|
||||||
border: 2px solid var(--primary-color);
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card:hover {
|
|
||||||
transform: translateY(-5px);
|
|
||||||
border-color: var(--primary-color);
|
|
||||||
box-shadow: 0 8px 30px rgba(0, 212, 255, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card.active {
|
|
||||||
border-color: var(--success-color);
|
|
||||||
box-shadow: 0 8px 30px rgba(0, 255, 136, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card.active::before {
|
|
||||||
content: "ACTIVE";
|
|
||||||
position: absolute;
|
|
||||||
top: 10px;
|
|
||||||
right: 10px;
|
|
||||||
background: var(--gradient-secondary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
padding: 4px 8px;
|
|
||||||
border-radius: 4px;
|
|
||||||
font-size: 10px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-header {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
gap: 10px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-image {
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
border-radius: 8px;
|
|
||||||
object-fit: cover;
|
|
||||||
border: 2px solid var(--primary-color);
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-info {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-rarity {
|
|
||||||
color: var(--text-secondary);
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
padding: 4px 8px;
|
|
||||||
border-radius: 4px;
|
|
||||||
background: var(--hover-bg);
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-rarity.common {
|
|
||||||
color: #888;
|
|
||||||
border-color: #888;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-rarity.rare {
|
|
||||||
color: var(--primary-color);
|
|
||||||
border-color: var(--primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-rarity.epic {
|
|
||||||
color: var(--accent-color);
|
|
||||||
border-color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-rarity.legendary {
|
|
||||||
color: var(--warning-color);
|
|
||||||
border-color: var(--warning-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stats {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
gap: 8px;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 6px 10px;
|
|
||||||
background: rgba(255, 255, 255, 0.05);
|
|
||||||
border-radius: 4px;
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-label {
|
|
||||||
color: var(--text-muted);
|
|
||||||
font-size: 11px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-value {
|
|
||||||
color: var(--text-secondary);
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-value.health {
|
|
||||||
color: var(--success-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-value.attack {
|
|
||||||
color: var(--warning-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-value.defense {
|
|
||||||
color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stat .stat-value.speed {
|
|
||||||
color: var(--secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-actions {
|
|
||||||
display: flex;
|
|
||||||
gap: 10px;
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-actions .btn-action {
|
|
||||||
flex: 1;
|
|
||||||
padding: 8px 12px;
|
|
||||||
border: none;
|
|
||||||
border-radius: 6px;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
text-transform: uppercase;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-switch {
|
|
||||||
background: var(--gradient-primary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-switch:hover {
|
|
||||||
background: var(--gradient-secondary);
|
|
||||||
transform: translateY(-2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-switch:disabled {
|
|
||||||
background: var(--text-muted);
|
|
||||||
cursor: not-allowed;
|
|
||||||
transform: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-upgrade {
|
|
||||||
background: var(--gradient-secondary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-upgrade:hover {
|
|
||||||
background: var(--gradient-primary);
|
|
||||||
transform: translateY(-2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-repair {
|
|
||||||
background: var(--gradient-secondary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-repair:hover {
|
|
||||||
background: var(--gradient-primary);
|
|
||||||
transform: translateY(-2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ship Gallery Layout */
|
|
||||||
.ship-layout {
|
|
||||||
display: flex;
|
|
||||||
gap: 30px;
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-section {
|
|
||||||
flex: 0 0 400px;
|
|
||||||
background: var(--card-bg);
|
|
||||||
border-radius: 8px;
|
|
||||||
padding: 20px;
|
|
||||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
|
|
||||||
border: 2px solid var(--primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-grid-section {
|
|
||||||
flex: 1;
|
|
||||||
min-width: 0; /* Prevent flex item from overflowing */
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-grid-section h4 {
|
|
||||||
color: var(--primary-color);
|
|
||||||
margin-bottom: 20px;
|
|
||||||
font-size: 16px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-section h4 {
|
|
||||||
color: var(--primary-color);
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 18px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Current Ship Display */
|
|
||||||
.current-ship-display {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
gap: 20px;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-image {
|
|
||||||
flex-shrink: 0;
|
|
||||||
order: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-image img {
|
|
||||||
width: 120px;
|
|
||||||
height: 120px;
|
|
||||||
object-fit: cover;
|
|
||||||
border-radius: 8px;
|
|
||||||
border: 2px solid var(--primary-color);
|
|
||||||
box-shadow: 0 4px 15px rgba(0, 212, 255, 0.3);
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-details {
|
|
||||||
flex: 1;
|
|
||||||
order: 2;
|
|
||||||
min-width: 0;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-details h5 {
|
|
||||||
color: var(--text-primary);
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: bold;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-stats {
|
|
||||||
display: grid;
|
|
||||||
grid-template-columns: 1fr 1fr;
|
|
||||||
gap: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 8px 12px;
|
|
||||||
background: var(--hover-bg);
|
|
||||||
border-radius: 4px;
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-label {
|
|
||||||
color: var(--text-muted);
|
|
||||||
font-size: 12px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-value {
|
|
||||||
color: var(--text-secondary);
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-value.health {
|
|
||||||
color: var(--success-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-value.attack {
|
|
||||||
color: var(--warning-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-value.defense {
|
|
||||||
color: var(--accent-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-stat .stat-value.speed {
|
|
||||||
color: var(--secondary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-table-section {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-table-section h4 {
|
|
||||||
color: #667eea;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
font-size: 16px;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Responsive Design */
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.ship-layout {
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-section {
|
|
||||||
flex: 1;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-display {
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: flex-start;
|
|
||||||
gap: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-image img {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-stats {
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-grid {
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
gap: 15px;
|
|
||||||
padding: 15px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card {
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-header {
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: flex-start;
|
|
||||||
gap: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-image {
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-stats {
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
gap: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-actions {
|
|
||||||
flex-direction: column;
|
|
||||||
gap: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-actions .btn-action {
|
|
||||||
padding: 10px 12px;
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 480px) {
|
|
||||||
.ship-layout {
|
|
||||||
gap: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-section {
|
|
||||||
padding: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-display {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
gap: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-image {
|
|
||||||
order: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.current-ship-details {
|
|
||||||
order: 2;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-grid {
|
|
||||||
grid-template-columns: 1fr;
|
|
||||||
gap: 10px;
|
|
||||||
padding: 10px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card {
|
|
||||||
padding: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-header {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
text-align: center;
|
|
||||||
gap: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-image {
|
|
||||||
width: 80px;
|
|
||||||
height: 80px;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-info {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-name {
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ship-card-class {
|
|
||||||
font-size: 11px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Console Window Styles */
|
|
||||||
.console-window {
|
|
||||||
position: fixed;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
transform: translate(-50%, -50%);
|
|
||||||
width: 600px;
|
|
||||||
height: 400px;
|
|
||||||
background: var(--bg-secondary);
|
|
||||||
border: 2px solid var(--primary-color);
|
|
||||||
border-radius: 8px;
|
|
||||||
box-shadow: 0 8px 30px rgba(0, 0, 0, 0.8);
|
|
||||||
z-index: 10000;
|
|
||||||
display: none;
|
|
||||||
flex-direction: column;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-header {
|
|
||||||
background: var(--gradient-primary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
padding: 10px 15px;
|
|
||||||
border-radius: 6px 6px 0 0;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-close {
|
|
||||||
background: none;
|
|
||||||
border: none;
|
|
||||||
color: var(--text-primary);
|
|
||||||
font-size: 20px;
|
|
||||||
cursor: pointer;
|
|
||||||
padding: 0;
|
|
||||||
width: 24px;
|
|
||||||
height: 24px;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
border-radius: 4px;
|
|
||||||
transition: background 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-close:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-content {
|
|
||||||
flex: 1;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output {
|
|
||||||
flex: 1;
|
|
||||||
padding: 15px;
|
|
||||||
overflow-y: auto;
|
|
||||||
background: var(--bg-primary);
|
|
||||||
color: var(--text-primary);
|
|
||||||
font-size: 12px;
|
|
||||||
line-height: 1.4;
|
|
||||||
border-bottom: 1px solid var(--border-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output .console-line {
|
|
||||||
margin-bottom: 5px;
|
|
||||||
word-wrap: break-word;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output .console-error {
|
|
||||||
color: var(--error-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output .console-success {
|
|
||||||
color: var(--success-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output .console-warning {
|
|
||||||
color: var(--warning-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-output .console-info {
|
|
||||||
color: var(--primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-input-container {
|
|
||||||
padding: 10px;
|
|
||||||
background: var(--bg-secondary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-input {
|
|
||||||
width: 100%;
|
|
||||||
background: var(--bg-primary);
|
|
||||||
border: 1px solid var(--border-color);
|
|
||||||
color: var(--text-primary);
|
|
||||||
padding: 8px 12px;
|
|
||||||
font-family: 'Courier New', monospace;
|
|
||||||
font-size: 12px;
|
|
||||||
border-radius: 4px;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.console-input:focus {
|
|
||||||
border-color: var(--primary-color);
|
|
||||||
box-shadow: 0 0 0 2px rgba(0, 212, 255, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Starbase Tables Specific */
|
|
||||||
.starbase-management-table .starbase-level {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #667eea;
|
|
||||||
}
|
|
||||||
|
|
||||||
.starbase-shop-table .starbase-cost {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #ffd700;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Quests Table Specific */
|
|
||||||
.quests-table .quest-type-main { color: #667eea; }
|
|
||||||
.quests-table .quest-type-daily { color: #00ff00; }
|
|
||||||
.quests-table .quest-type-procedural { color: #ff9900; }
|
|
||||||
.quests-table .quest-type-completed { color: #888888; }
|
|
||||||
.quests-table .quest-type-failed { color: #ff0000; }
|
|
||||||
|
|
||||||
.quests-table .quest-progress {
|
|
||||||
width: 100px;
|
|
||||||
height: 8px;
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
border-radius: 4px;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
.quests-table .progress-fill {
|
|
||||||
height: 100%;
|
|
||||||
background: linear-gradient(90deg, #00ff00, #00cc00);
|
|
||||||
transition: width 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Inventory Table Specific */
|
|
||||||
.inventory-table .item-rarity-common { color: #888888; }
|
|
||||||
.inventory-table .item-rarity-uncommon { color: #00ff00; }
|
|
||||||
.inventory-table .item-rarity-rare { color: #0088ff; }
|
|
||||||
.inventory-table .item-rarity-epic { color: #8833ff; }
|
|
||||||
.inventory-table .item-rarity-legendary { color: #ff8800; }
|
|
||||||
|
|
||||||
.inventory-table .item-stats {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #cccccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Shop Table Specific */
|
|
||||||
.shop-table .item-price {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #ffd700;
|
|
||||||
}
|
|
||||||
|
|
||||||
.shop-table .item-description {
|
|
||||||
font-size: 12px;
|
|
||||||
color: #cccccc;
|
|
||||||
max-width: 200px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Action Buttons */
|
|
||||||
.dungeon-table .btn-action,
|
|
||||||
.skills-table .btn-action,
|
|
||||||
.base-rooms-table .btn-action,
|
|
||||||
.base-upgrades-table .btn-action,
|
|
||||||
.ship-gallery-table .btn-action,
|
|
||||||
.starbase-management-table .btn-action,
|
|
||||||
.starbase-shop-table .btn-action,
|
|
||||||
.quests-table .btn-action,
|
|
||||||
.inventory-table .btn-action,
|
|
||||||
.shop-table .btn-action {
|
|
||||||
padding: 6px 12px;
|
|
||||||
border: none;
|
|
||||||
border-radius: 4px;
|
|
||||||
cursor: pointer;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: 600;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
text-transform: uppercase;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-primary {
|
|
||||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-primary:hover {
|
|
||||||
background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
|
|
||||||
transform: translateY(-1px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-secondary {
|
|
||||||
background: rgba(255, 255, 255, 0.1);
|
|
||||||
color: white;
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-secondary:hover {
|
|
||||||
background: rgba(255, 255, 255, 0.2);
|
|
||||||
transform: translateY(-1px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-success {
|
|
||||||
background: linear-gradient(135deg, #00ff00 0%, #00cc00 100%);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-success:hover {
|
|
||||||
background: linear-gradient(135deg, #00cc00 0%, #00ff00 100%);
|
|
||||||
transform: translateY(-1px);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-danger {
|
|
||||||
background: linear-gradient(135deg, #ff0000 0%, #cc0000 100%);
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action.btn-danger:hover {
|
|
||||||
background: linear-gradient(135deg, #cc0000 0%, #ff0000 100%);
|
|
||||||
transform: translateY(-1px);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Responsive Design */
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.dungeon-table,
|
|
||||||
.skills-table,
|
|
||||||
.base-rooms-table,
|
|
||||||
.base-upgrades-table,
|
|
||||||
.ship-gallery-table,
|
|
||||||
.starbase-management-table,
|
|
||||||
.starbase-shop-table,
|
|
||||||
.quests-table,
|
|
||||||
.inventory-table,
|
|
||||||
.shop-table {
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dungeon-table th,
|
|
||||||
.skills-table th,
|
|
||||||
.base-rooms-table th,
|
|
||||||
.base-upgrades-table th,
|
|
||||||
.ship-gallery-table th,
|
|
||||||
.starbase-management-table th,
|
|
||||||
.starbase-shop-table th,
|
|
||||||
.quests-table th,
|
|
||||||
.inventory-table th,
|
|
||||||
.shop-table th {
|
|
||||||
padding: 8px 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dungeon-table td,
|
|
||||||
.skills-table td,
|
|
||||||
.base-rooms-table td,
|
|
||||||
.base-upgrades-table td,
|
|
||||||
.ship-gallery-table td,
|
|
||||||
.starbase-management-table td,
|
|
||||||
.starbase-shop-table td,
|
|
||||||
.quests-table td,
|
|
||||||
.inventory-table td,
|
|
||||||
.shop-table td {
|
|
||||||
padding: 8px 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-action {
|
|
||||||
padding: 4px 8px;
|
|
||||||
font-size: 10px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 45 KiB |
28
GameServer/data/gso/alliance/research_tree.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"tiers": [
|
||||||
|
{
|
||||||
|
"tier": 1,
|
||||||
|
"techs": [
|
||||||
|
{ "id": "alliance_storage_1", "name": "Expanded Warehouse I", "desc": "Increase alliance warehouse cap by 10,000 per resource.", "cost": {"credits":5000,"metal":2000}, "effect": {"warehouseCap":10000}, "prereq": [], "icon": "fa-warehouse", "maxLevel": 3 },
|
||||||
|
{ "id": "alliance_xp_1", "name": "Shared Knowledge I", "desc": "+5% XP for all members.", "cost": {"credits":8000,"crystal":500}, "effect": {"memberXpBonus":0.05}, "prereq": [], "icon": "fa-graduation-cap", "maxLevel": 3 },
|
||||||
|
{ "id": "alliance_credits_1", "name": "Trade Network I", "desc": "Reduce market listing fee by 0.5% for all members.", "cost": {"credits":6000,"gas":1000}, "effect": {"marketFeeReduction":0.005}, "prereq": [], "icon": "fa-coins", "maxLevel": 2 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tier": 2,
|
||||||
|
"techs": [
|
||||||
|
{ "id": "alliance_storage_2", "name": "Expanded Warehouse II", "desc": "Increase warehouse cap by an additional 25,000.", "cost": {"credits":15000,"metal":8000}, "effect": {"warehouseCap":25000}, "prereq": ["alliance_storage_1"], "icon": "fa-warehouse", "maxLevel": 1 },
|
||||||
|
{ "id": "alliance_craft_1", "name": "Collective Crafting", "desc": "All members gain -10% craft time.", "cost": {"credits":12000,"crystal":1500},"effect": {"craftTimeReduction":0.10}, "prereq": ["alliance_xp_1"], "icon": "fa-hammer", "maxLevel": 2 },
|
||||||
|
{ "id": "alliance_defense_1", "name": "Defensive Grid I", "desc": "+10% PvP defense for all members.", "cost": {"credits":10000,"metal":5000}, "effect": {"pvpDefenseBonus":0.10}, "prereq": ["alliance_credits_1"],"icon": "fa-shield-alt", "maxLevel": 3 }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tier": 3,
|
||||||
|
"techs": [
|
||||||
|
{ "id": "alliance_dm_1", "name": "Void Tap", "desc": "+15% dark matter production for all members.", "cost": {"credits":25000,"darkMatter":50},"effect": {"darkMatterBonus":0.15}, "prereq": ["alliance_storage_2","alliance_craft_1"], "icon": "fa-atom", "maxLevel": 1 },
|
||||||
|
{ "id": "alliance_fleet_1", "name": "Fleet Coordination", "desc": "+20% fleet mission rewards for all members.", "cost": {"credits":20000,"gas":5000}, "effect": {"fleetRewardBonus":0.20}, "prereq": ["alliance_defense_1"],"icon": "fa-fighter-jet","maxLevel": 2 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -26,5 +26,25 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-monument",
|
"icon": "fa-monument",
|
||||||
"color": "#4488cc"
|
"color": "#4488cc"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "wp_alien_ruins",
|
||||||
|
"weight": 8,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "energy_boost_small",
|
||||||
|
"weight": 60,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "health_kit_small",
|
||||||
|
"weight": 60,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -26,5 +26,25 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-meteor",
|
"icon": "fa-meteor",
|
||||||
"color": "#888844"
|
"color": "#888844"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "wp_arctic_station",
|
||||||
|
"weight": 8,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "fuel_cell",
|
||||||
|
"weight": 60,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "health_kit_small",
|
||||||
|
"weight": 50,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -26,5 +26,31 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-microchip",
|
"icon": "fa-microchip",
|
||||||
"color": "#44cc44"
|
"color": "#44cc44"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "room_vault",
|
||||||
|
"weight": 12,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "wp_void_black",
|
||||||
|
"weight": 10,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "credit_multiplier",
|
||||||
|
"weight": 40,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "xp_booster",
|
||||||
|
"weight": 40,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -26,5 +26,25 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-star",
|
"icon": "fa-star",
|
||||||
"color": "#cc44ff"
|
"color": "#cc44ff"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "wp_nebula_dawn",
|
||||||
|
"weight": 10,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "wp_deep_ocean",
|
||||||
|
"weight": 8,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "xp_booster",
|
||||||
|
"weight": 60,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -26,5 +26,25 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-skull-crossbones",
|
"icon": "fa-skull-crossbones",
|
||||||
"color": "#cc4444"
|
"color": "#cc4444"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "wp_lava_forge",
|
||||||
|
"weight": 6,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "health_kit_large",
|
||||||
|
"weight": 40,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "fuel_cell",
|
||||||
|
"weight": 50,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
@ -26,5 +26,86 @@
|
|||||||
"ui": {
|
"ui": {
|
||||||
"icon": "fa-circle-radiation",
|
"icon": "fa-circle-radiation",
|
||||||
"color": "#ff4488"
|
"color": "#ff4488"
|
||||||
}
|
},
|
||||||
|
"lootTable": [
|
||||||
|
{
|
||||||
|
"itemId": "wp_void_rift",
|
||||||
|
"weight": 5,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "room_vault",
|
||||||
|
"weight": 3,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "xp_booster",
|
||||||
|
"weight": 50,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "credit_multiplier",
|
||||||
|
"weight": 30,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "quantum_hull_plate",
|
||||||
|
"weight": 2,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "void_capacitor",
|
||||||
|
"weight": 8,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "advanced_circuit_board",
|
||||||
|
"weight": 12,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "phase_alloy",
|
||||||
|
"weight": 20,
|
||||||
|
"qtyMin": 2,
|
||||||
|
"qtyMax": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "chrono_alloy",
|
||||||
|
"weight": 15,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "sniper_epic",
|
||||||
|
"weight": 4,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "laser_bow_epic",
|
||||||
|
"weight": 4,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "helmet_tactical_epic",
|
||||||
|
"weight": 6,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"itemId": "body_exosuit_epic",
|
||||||
|
"weight": 3,
|
||||||
|
"qtyMin": 1,
|
||||||
|
"qtyMax": 1
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bossGuaranteedRare": true
|
||||||
}
|
}
|
||||||
11
GameServer/data/gso/enemies/defense_turret.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"id": "defense_turret",
|
||||||
|
"name": "Defense Turret",
|
||||||
|
"health": 35,
|
||||||
|
"attack": 14,
|
||||||
|
"defense": 8,
|
||||||
|
"speed": 0,
|
||||||
|
"experience": 20,
|
||||||
|
"credits": 15,
|
||||||
|
"rarity": "common"
|
||||||
|
}
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "backpack_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/backpack/backpack_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 20,
|
|
||||||
"resistance": 0.03,
|
|
||||||
"defenceRating": 1,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "backpack_field_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/backpack/backpack_field_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 40,
|
|
||||||
"resistance": 0.08,
|
|
||||||
"defenceRating": 3,
|
|
||||||
"reflectChance": 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "backpack_reactor_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/backpack/backpack_reactor_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 70,
|
|
||||||
"resistance": 0.15,
|
|
||||||
"defenceRating": 6,
|
|
||||||
"reflectChance": 0.03
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "body_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/body/body_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 60,
|
|
||||||
"resistance": 0.1,
|
|
||||||
"defenceRating": 4,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "body_exosuit_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/body/body_exosuit_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 180,
|
|
||||||
"resistance": 0.3,
|
|
||||||
"defenceRating": 14,
|
|
||||||
"reflectChance": 0.05
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "body_plated_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/body/body_plated_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 110,
|
|
||||||
"resistance": 0.2,
|
|
||||||
"defenceRating": 8,
|
|
||||||
"reflectChance": 0.02
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "boots_assault_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/boots/boots_assault_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 40,
|
|
||||||
"resistance": 0.12,
|
|
||||||
"defenceRating": 4,
|
|
||||||
"reflectChance": 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "boots_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/boots/boots_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 20,
|
|
||||||
"resistance": 0.05,
|
|
||||||
"defenceRating": 2,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "boots_gravity_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/boots/boots_gravity_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 65,
|
|
||||||
"resistance": 0.2,
|
|
||||||
"defenceRating": 7,
|
|
||||||
"reflectChance": 0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "hands_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/hands/hands_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 15,
|
|
||||||
"resistance": 0.04,
|
|
||||||
"defenceRating": 1,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "hands_combat_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/hands/hands_combat_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 30,
|
|
||||||
"resistance": 0.1,
|
|
||||||
"defenceRating": 3,
|
|
||||||
"reflectChance": 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "hands_elite_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/hands/hands_elite_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 50,
|
|
||||||
"resistance": 0.18,
|
|
||||||
"defenceRating": 6,
|
|
||||||
"reflectChance": 0.025
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "helmet_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/helmet/helmet_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 25,
|
|
||||||
"resistance": 0.05,
|
|
||||||
"defenceRating": 2,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "helmet_reinforced_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/helmet/helmet_reinforced_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 45,
|
|
||||||
"resistance": 0.12,
|
|
||||||
"defenceRating": 5,
|
|
||||||
"reflectChance": 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "helmet_tactical_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/helmet/helmet_tactical_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 70,
|
|
||||||
"resistance": 0.2,
|
|
||||||
"defenceRating": 8,
|
|
||||||
"reflectChance": 0.03
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "pants_basic_common",
|
|
||||||
"texture": "assets/gso/textures/armour/pants/pants_basic_common.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 30,
|
|
||||||
"resistance": 0.06,
|
|
||||||
"defenceRating": 2,
|
|
||||||
"reflectChance": 0.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "pants_exo_epic",
|
|
||||||
"texture": "assets/gso/textures/armour/pants/pants_exo_epic.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 85,
|
|
||||||
"resistance": 0.22,
|
|
||||||
"defenceRating": 9,
|
|
||||||
"reflectChance": 0.03
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"templates": {
|
|
||||||
"armour": {
|
|
||||||
"id": "pants_reinforced_rare",
|
|
||||||
"texture": "assets/gso/textures/armour/pants/pants_reinforced_rare.png",
|
|
||||||
"stats": {
|
|
||||||
"health": 55,
|
|
||||||
"resistance": 0.14,
|
|
||||||
"defenceRating": 5,
|
|
||||||
"reflectChance": 0.015
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
28
GameServer/data/gso/items/armours/backpack_field_rare.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "backpack_field_rare",
|
||||||
|
"texture": "assets/gso/textures/armour/backpack/backpack_field_rare.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 40,
|
||||||
|
"resistance": 0.08,
|
||||||
|
"defenceRating": 3,
|
||||||
|
"reflectChance": 0.01
|
||||||
|
},
|
||||||
|
"name": "Backpack Field Rare",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 3000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Backpack Field Rare.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 5
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/backpack_reactor_epic.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "backpack_reactor_epic",
|
||||||
|
"texture": "assets/gso/textures/armour/backpack/backpack_reactor_epic.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 70,
|
||||||
|
"resistance": 0.15,
|
||||||
|
"defenceRating": 6,
|
||||||
|
"reflectChance": 0.03
|
||||||
|
},
|
||||||
|
"name": "Backpack Reactor Epic",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 8000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Backpack Reactor Epic.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 10
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -6,7 +6,7 @@
|
|||||||
"type": "armour",
|
"type": "armour",
|
||||||
"slot": "body",
|
"slot": "body",
|
||||||
"rarity": "epic",
|
"rarity": "epic",
|
||||||
"price": 300,
|
"price": 18000,
|
||||||
"currency": "gems",
|
"currency": "gems",
|
||||||
"description": "Powered exosuit that amplifies strength and endurance",
|
"description": "Powered exosuit that amplifies strength and endurance",
|
||||||
"texture": "assets/gso/textures/armour/body/body_exosuit_epic.png",
|
"texture": "assets/gso/textures/armour/body/body_exosuit_epic.png",
|
||||||
|
|||||||
28
GameServer/data/gso/items/armours/boots_assault_rare.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "boots_assault_rare",
|
||||||
|
"texture": "assets/gso/textures/armour/boots/boots_assault_rare.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 40,
|
||||||
|
"resistance": 0.12,
|
||||||
|
"defenceRating": 4,
|
||||||
|
"reflectChance": 0.01
|
||||||
|
},
|
||||||
|
"name": "Boots Assault Rare",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 3000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Boots Assault Rare.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 5
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/boots_gravity_epic.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "boots_gravity_epic",
|
||||||
|
"texture": "assets/gso/textures/armour/boots/boots_gravity_epic.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 65,
|
||||||
|
"resistance": 0.2,
|
||||||
|
"defenceRating": 7,
|
||||||
|
"reflectChance": 0.025
|
||||||
|
},
|
||||||
|
"name": "Boots Gravity Epic",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 8000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Boots Gravity Epic.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 10
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/hands_basic_common.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "hands_basic_common",
|
||||||
|
"texture": "assets/gso/textures/armour/hands/hands_basic_common.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 15,
|
||||||
|
"resistance": 0.04,
|
||||||
|
"defenceRating": 1,
|
||||||
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Hands Basic Common",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 1000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Hands Basic Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/hands_combat_rare.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "hands_combat_rare",
|
||||||
|
"texture": "assets/gso/textures/armour/hands/hands_combat_rare.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 30,
|
||||||
|
"resistance": 0.1,
|
||||||
|
"defenceRating": 3,
|
||||||
|
"reflectChance": 0.01
|
||||||
|
},
|
||||||
|
"name": "Hands Combat Rare",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 3000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Hands Combat Rare.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 5
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/hands_elite_epic.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "hands_elite_epic",
|
||||||
|
"texture": "assets/gso/textures/armour/hands/hands_elite_epic.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 50,
|
||||||
|
"resistance": 0.18,
|
||||||
|
"defenceRating": 6,
|
||||||
|
"reflectChance": 0.025
|
||||||
|
},
|
||||||
|
"name": "Hands Elite Epic",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 8000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Hands Elite Epic.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 10
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/helmet_tactical_epic.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "helmet_tactical_epic",
|
||||||
|
"texture": "assets/gso/textures/armour/helmet/helmet_tactical_epic.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 70,
|
||||||
|
"resistance": 0.2,
|
||||||
|
"defenceRating": 8,
|
||||||
|
"reflectChance": 0.03
|
||||||
|
},
|
||||||
|
"name": "Helmet Tactical Epic",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 8000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Helmet Tactical Epic.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 10
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/pants_exo_epic.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "pants_exo_epic",
|
||||||
|
"texture": "assets/gso/textures/armour/pants/pants_exo_epic.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 85,
|
||||||
|
"resistance": 0.22,
|
||||||
|
"defenceRating": 9,
|
||||||
|
"reflectChance": 0.03
|
||||||
|
},
|
||||||
|
"name": "Pants Exo Epic",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 8000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Pants Exo Epic.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 10
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
GameServer/data/gso/items/armours/pants_reinforced_rare.json
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"armour": {
|
||||||
|
"id": "pants_reinforced_rare",
|
||||||
|
"texture": "assets/gso/textures/armour/pants/pants_reinforced_rare.png",
|
||||||
|
"stats": {
|
||||||
|
"health": 55,
|
||||||
|
"resistance": 0.14,
|
||||||
|
"defenceRating": 5,
|
||||||
|
"reflectChance": 0.015
|
||||||
|
},
|
||||||
|
"name": "Pants Reinforced Rare",
|
||||||
|
"type": "armour",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 3000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Pants Reinforced Rare.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"requirements": {
|
||||||
|
"level": 5
|
||||||
|
},
|
||||||
|
"stackable": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Credit Multiplier",
|
"name": "Credit Multiplier",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "rare",
|
"rarity": "rare",
|
||||||
"price": 50,
|
"price": 6500,
|
||||||
"currency": "gems",
|
"currency": "gems",
|
||||||
"description": "Doubles credits earned for 1 hour",
|
"description": "Doubles credits earned for 1 hour",
|
||||||
"texture": "assets/gso/textures/consumables/credit_multiplier.png",
|
"texture": "assets/gso/textures/consumables/credit_multiplier.png",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Max Energy Boost",
|
"name": "Max Energy Boost",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "uncommon",
|
"rarity": "uncommon",
|
||||||
"price": 100,
|
"price": 2750,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "Restores full energy",
|
"description": "Restores full energy",
|
||||||
"texture": "assets/gso/textures/consumables/energy_boost_large.png",
|
"texture": "assets/gso/textures/consumables/energy_boost_large.png",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Energy Boost",
|
"name": "Energy Boost",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "common",
|
"rarity": "common",
|
||||||
"price": 30,
|
"price": 1250,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "Restores 50 energy",
|
"description": "Restores 50 energy",
|
||||||
"texture": "assets/gso/textures/consumables/energy_boost_small.png",
|
"texture": "assets/gso/textures/consumables/energy_boost_small.png",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Fuel Cell",
|
"name": "Fuel Cell",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "common",
|
"rarity": "common",
|
||||||
"price": 20,
|
"price": 1250,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "Restores 25 energy \u2014 handy for long dungeon runs",
|
"description": "Restores 25 energy \u2014 handy for long dungeon runs",
|
||||||
"texture": "assets/gso/textures/consumables/fuel_cell.png",
|
"texture": "assets/gso/textures/consumables/fuel_cell.png",
|
||||||
|
|||||||
@ -5,22 +5,18 @@
|
|||||||
"name": "Large Health Kit",
|
"name": "Large Health Kit",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "uncommon",
|
"rarity": "uncommon",
|
||||||
"price": 150,
|
"price": 1200,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "Restores full health",
|
"description": "A comprehensive medical kit that restores significant hull integrity",
|
||||||
"texture": "assets/gso/textures/consumables/health_kit_large.png",
|
"texture": "assets/gso/textures/consumables/health_kit_large.png",
|
||||||
"effect": {
|
"effect": {
|
||||||
"heal": 999
|
"healAmount": 500,
|
||||||
},
|
"type": "heal"
|
||||||
"categories": [
|
|
||||||
"shop",
|
|
||||||
"dungeon_loot"
|
|
||||||
],
|
|
||||||
"requirements": {
|
|
||||||
"level": 1
|
|
||||||
},
|
},
|
||||||
|
"categories": ["shop", "dungeon_loot", "quest_reward"],
|
||||||
|
"requirements": { "level": 5 },
|
||||||
"stackable": true,
|
"stackable": true,
|
||||||
"maxStack": 10
|
"maxStack": 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Small Health Kit",
|
"name": "Small Health Kit",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "common",
|
"rarity": "common",
|
||||||
"price": 50,
|
"price": 1250,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "Restores 50 health",
|
"description": "Restores 50 health",
|
||||||
"texture": "assets/gso/textures/consumables/health_kit_small.png",
|
"texture": "assets/gso/textures/consumables/health_kit_small.png",
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Small Scrap Pack",
|
"name": "Small Scrap Pack",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "common",
|
"rarity": "common",
|
||||||
"price": 0,
|
"price": 350,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "A bundle of mixed crafting scraps",
|
"description": "A bundle of mixed crafting scraps",
|
||||||
"texture": "assets/gso/textures/consumables/scrap_pack_small.png",
|
"texture": "assets/gso/textures/consumables/scrap_pack_small.png",
|
||||||
@ -22,6 +22,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"categories": [
|
"categories": [
|
||||||
|
"shop",
|
||||||
"quest_reward",
|
"quest_reward",
|
||||||
"dungeon_loot"
|
"dungeon_loot"
|
||||||
],
|
],
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "Starter Crate",
|
"name": "Starter Crate",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "uncommon",
|
"rarity": "uncommon",
|
||||||
"price": 0,
|
"price": 800,
|
||||||
"currency": "credits",
|
"currency": "credits",
|
||||||
"description": "A crate of starter supplies for new recruits",
|
"description": "A crate of starter supplies for new recruits",
|
||||||
"texture": "assets/gso/textures/consumables/starter_crate.png",
|
"texture": "assets/gso/textures/consumables/starter_crate.png",
|
||||||
@ -26,6 +26,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"categories": [
|
"categories": [
|
||||||
|
"shop",
|
||||||
"quest_reward",
|
"quest_reward",
|
||||||
"starter"
|
"starter"
|
||||||
],
|
],
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"name": "XP Booster",
|
"name": "XP Booster",
|
||||||
"type": "consumable",
|
"type": "consumable",
|
||||||
"rarity": "rare",
|
"rarity": "rare",
|
||||||
"price": 75,
|
"price": 6500,
|
||||||
"currency": "gems",
|
"currency": "gems",
|
||||||
"description": "Doubles XP gained for 30 minutes",
|
"description": "Doubles XP gained for 30 minutes",
|
||||||
"texture": "assets/gso/textures/consumables/xp_booster.png",
|
"texture": "assets/gso/textures/consumables/xp_booster.png",
|
||||||
|
|||||||
24
GameServer/data/gso/items/decorations/room_armory.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "room_armory",
|
||||||
|
"name": "Armory Wing",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "room_unlock",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 5000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Unlock the Armory Wing of your starbase. Houses weapon racks, armour stands, and a personal combat trainer.",
|
||||||
|
"texture": "assets/gso/textures/decorations/room_armory.png",
|
||||||
|
"roomId": "left_wing",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
GameServer/data/gso/items/decorations/room_operations.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "room_operations",
|
||||||
|
"name": "Operations Centre",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "room_unlock",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 200,
|
||||||
|
"currency": "gems",
|
||||||
|
"description": "Unlock the Operations Centre. A private command room for coordinating missions and monitoring your empire.",
|
||||||
|
"texture": "assets/gso/textures/decorations/room_operations.png",
|
||||||
|
"roomId": "operations",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
GameServer/data/gso/items/decorations/room_research_lab.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "room_research_lab",
|
||||||
|
"name": "Research Lab",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "room_unlock",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 6000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Unlock the Research Lab. Advanced crafting terminals and science equipment for developing new technologies.",
|
||||||
|
"texture": "assets/gso/textures/decorations/room_research_lab.png",
|
||||||
|
"roomId": "right_wing",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
GameServer/data/gso/items/decorations/room_throne.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "room_throne",
|
||||||
|
"name": "Throne Room",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "room_unlock",
|
||||||
|
"rarity": "legendary",
|
||||||
|
"price": 0,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "A legendary throne room earned only by those who have completed the Commander's Story Arc.",
|
||||||
|
"texture": "assets/gso/textures/decorations/room_throne.png",
|
||||||
|
"roomId": "throne_room",
|
||||||
|
"categories": [
|
||||||
|
"quest_reward",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 24
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
GameServer/data/gso/items/decorations/room_vault.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "room_vault",
|
||||||
|
"name": "Commander's Vault",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "room_unlock",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 0,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "A legendary vault room \u2014 only accessible to those who have conquered the Corrupted Vault dungeon.",
|
||||||
|
"texture": "assets/gso/textures/decorations/room_vault.png",
|
||||||
|
"roomId": "commanders_vault",
|
||||||
|
"categories": [
|
||||||
|
"dungeon_loot",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
GameServer/data/gso/items/decorations/wp_alien_ruins.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "wp_alien_ruins",
|
||||||
|
"name": "Alien Ruins",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "wallpaper",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 0,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Cryptic green glyphs on ancient stone. Salvaged from the Alien Ruins dungeon.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_alien_ruins.png",
|
||||||
|
"preview": {
|
||||||
|
"floorColorEven": "#0a1508",
|
||||||
|
"floorColorOdd": "#081208",
|
||||||
|
"wallColor": "#44ff88",
|
||||||
|
"wallColorLeft": "#0a1e0a",
|
||||||
|
"wallColorRight": "#081808",
|
||||||
|
"wallColorTop": "#102a10",
|
||||||
|
"doorColor": "#88ffaa",
|
||||||
|
"doorFrameColor": "#44cc66"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"dungeon_loot",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
GameServer/data/gso/items/decorations/wp_arctic_station.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"templates": { "decoration": {
|
||||||
|
"id": "wp_arctic_station", "name": "Arctic Station", "type": "decoration",
|
||||||
|
"subtype": "wallpaper", "rarity": "uncommon", "price": 1000, "currency": "credits",
|
||||||
|
"description": "Crisp whites and icy blues. A frozen outpost at the edge of the galaxy.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_arctic_station.png",
|
||||||
|
"preview": { "floorColorEven": "#0e1820", "floorColorOdd": "#0c1418",
|
||||||
|
"wallColor": "#aaddff", "wallColorLeft": "#0c1828", "wallColorRight": "#0a1420", "wallColorTop": "#122030",
|
||||||
|
"doorColor": "#ddeeff", "doorFrameColor": "#88ccff" },
|
||||||
|
"categories": ["shop", "decoration"], "stackable": false
|
||||||
|
}}
|
||||||
|
}
|
||||||
12
GameServer/data/gso/items/decorations/wp_deep_ocean.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"templates": { "decoration": {
|
||||||
|
"id": "wp_deep_ocean", "name": "Deep Ocean", "type": "decoration",
|
||||||
|
"subtype": "wallpaper", "rarity": "uncommon", "price": 900, "currency": "credits",
|
||||||
|
"description": "Bioluminescent blues and teals. Like a starbase built beneath an alien sea.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_deep_ocean.png",
|
||||||
|
"preview": { "floorColorEven": "#081820", "floorColorOdd": "#061418",
|
||||||
|
"wallColor": "#00cccc", "wallColorLeft": "#062030", "wallColorRight": "#041820", "wallColorTop": "#083040",
|
||||||
|
"doorColor": "#00ffee", "doorFrameColor": "#00bbcc" },
|
||||||
|
"categories": ["shop", "decoration"], "stackable": false
|
||||||
|
}}
|
||||||
|
}
|
||||||
33
GameServer/data/gso/items/decorations/wp_golden_empire.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "wp_golden_empire",
|
||||||
|
"name": "Golden Empire",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "wallpaper",
|
||||||
|
"rarity": "epic",
|
||||||
|
"price": 150,
|
||||||
|
"currency": "gems",
|
||||||
|
"description": "Opulent golds and deep bronzes. Reserved for commanders of the highest rank.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_golden_empire.png",
|
||||||
|
"preview": {
|
||||||
|
"floorColorEven": "#1a1200",
|
||||||
|
"floorColorOdd": "#140e00",
|
||||||
|
"wallColor": "#ffcc00",
|
||||||
|
"wallColorLeft": "#221500",
|
||||||
|
"wallColorRight": "#1a1000",
|
||||||
|
"wallColorTop": "#2e1c00",
|
||||||
|
"doorColor": "#ffee88",
|
||||||
|
"doorFrameColor": "#ddaa00"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 16
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
GameServer/data/gso/items/decorations/wp_lava_forge.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "wp_lava_forge",
|
||||||
|
"name": "Lava Forge",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "wallpaper",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 2000,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Volcanic orange and molten red. A station carved from the heart of a dying star.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_lava_forge.png",
|
||||||
|
"preview": {
|
||||||
|
"floorColorEven": "#1e0a00",
|
||||||
|
"floorColorOdd": "#180800",
|
||||||
|
"wallColor": "#ff4400",
|
||||||
|
"wallColorLeft": "#2a0800",
|
||||||
|
"wallColorRight": "#200600",
|
||||||
|
"wallColorTop": "#350a00",
|
||||||
|
"doorColor": "#ffaa00",
|
||||||
|
"doorFrameColor": "#ff6600"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
12
GameServer/data/gso/items/decorations/wp_nebula_dawn.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"templates": { "decoration": {
|
||||||
|
"id": "wp_nebula_dawn", "name": "Nebula Dawn", "type": "decoration",
|
||||||
|
"subtype": "wallpaper", "rarity": "uncommon", "price": 800, "currency": "credits",
|
||||||
|
"description": "Soft pink and purple nebula clouds. A peaceful dawn among the stars.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_nebula_dawn.png",
|
||||||
|
"preview": { "floorColorEven": "#1a1228", "floorColorOdd": "#150e20",
|
||||||
|
"wallColor": "#cc66ff", "wallColorLeft": "#1a0a28", "wallColorRight": "#140820", "wallColorTop": "#220d35",
|
||||||
|
"doorColor": "#ff88ff", "doorFrameColor": "#cc44cc" },
|
||||||
|
"categories": ["shop", "decoration"], "stackable": false
|
||||||
|
}}
|
||||||
|
}
|
||||||
33
GameServer/data/gso/items/decorations/wp_void_black.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "wp_void_black",
|
||||||
|
"name": "Void Black",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "wallpaper",
|
||||||
|
"rarity": "rare",
|
||||||
|
"price": 1500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Absolute darkness. The walls absorb all light \u2014 only edges glow.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_void_black.png",
|
||||||
|
"preview": {
|
||||||
|
"floorColorEven": "#060608",
|
||||||
|
"floorColorOdd": "#040406",
|
||||||
|
"wallColor": "#444455",
|
||||||
|
"wallColorLeft": "#0a0a0f",
|
||||||
|
"wallColorRight": "#060608",
|
||||||
|
"wallColorTop": "#111118",
|
||||||
|
"doorColor": "#8888ff",
|
||||||
|
"doorFrameColor": "#6666cc"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
33
GameServer/data/gso/items/decorations/wp_void_rift.json
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"templates": {
|
||||||
|
"decoration": {
|
||||||
|
"id": "wp_void_rift",
|
||||||
|
"name": "Void Rift",
|
||||||
|
"type": "decoration",
|
||||||
|
"subtype": "wallpaper",
|
||||||
|
"rarity": "legendary",
|
||||||
|
"price": 0,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Fractured space-time tears through the walls. Only found deep in the Void Rift.",
|
||||||
|
"texture": "assets/gso/textures/decorations/wp_void_rift.png",
|
||||||
|
"preview": {
|
||||||
|
"floorColorEven": "#060010",
|
||||||
|
"floorColorOdd": "#04000c",
|
||||||
|
"wallColor": "#8800ff",
|
||||||
|
"wallColorLeft": "#0c0020",
|
||||||
|
"wallColorRight": "#080018",
|
||||||
|
"wallColorTop": "#100028",
|
||||||
|
"doorColor": "#cc44ff",
|
||||||
|
"doorFrameColor": "#9900ee"
|
||||||
|
},
|
||||||
|
"categories": [
|
||||||
|
"dungeon_loot",
|
||||||
|
"decoration"
|
||||||
|
],
|
||||||
|
"stackable": false,
|
||||||
|
"requirements": {
|
||||||
|
"level": 24
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Ballistic Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Ballistic Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Carbon Titanium Composite Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Carbon Titanium Composite Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Chrono Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Chrono Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Dimensional Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Dimensional Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Flux Core Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Flux Core Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Neutronium Composite Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Neutronium Composite Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Phase Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Phase Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Plasma Channel Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Plasma Channel Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Reinforced Steel Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Reinforced Steel Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Superconductive Alloy Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Superconductive Alloy Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,20 @@
|
|||||||
"resistance": 0.0,
|
"resistance": 0.0,
|
||||||
"defenceRating": 0,
|
"defenceRating": 0,
|
||||||
"reflectChance": 0.0
|
"reflectChance": 0.0
|
||||||
|
},
|
||||||
|
"name": "Voidsteel Common",
|
||||||
|
"type": "hullPlating",
|
||||||
|
"rarity": "common",
|
||||||
|
"price": 500,
|
||||||
|
"currency": "credits",
|
||||||
|
"description": "Voidsteel Common.",
|
||||||
|
"categories": [
|
||||||
|
"shop",
|
||||||
|
"dungeon_loot"
|
||||||
|
],
|
||||||
|
"stackable": true,
|
||||||
|
"requirements": {
|
||||||
|
"level": 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||