expanded basic game features
This commit is contained in:
107
sql/INSTALL_PROCEDURES.md
Normal file
107
sql/INSTALL_PROCEDURES.md
Normal file
@@ -0,0 +1,107 @@
|
||||
# Installing Stored Procedures
|
||||
|
||||
All stored procedure SQL files are ready to use. You have several options:
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **SSH Port Forwarding** - Make sure you have an active SSH tunnel:
|
||||
```bash
|
||||
ssh -L 3306:localhost:3306 lukesau.com
|
||||
```
|
||||
Keep this terminal open while running SQL commands.
|
||||
|
||||
2. **MySQL Client** - Install if needed:
|
||||
```bash
|
||||
brew install mysql-client
|
||||
```
|
||||
|
||||
To add mysql-client to your PATH permanently, add to `~/.zshrc`:
|
||||
```bash
|
||||
echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc
|
||||
source ~/.zshrc
|
||||
```
|
||||
|
||||
## Option 1: Use the Helper Script (Easiest)
|
||||
|
||||
```bash
|
||||
./sql/run_sql.sh sql/create_all_stored_procedures.sql
|
||||
```
|
||||
|
||||
## Option 2: Use MySQL Client Directly
|
||||
|
||||
If mysql is in your PATH (added to ~/.zshrc), you can use:
|
||||
|
||||
```bash
|
||||
mysql -h 127.0.0.1 -P 3306 -u vckonline -p vckonline < sql/create_all_stored_procedures.sql
|
||||
```
|
||||
|
||||
Or use the full path:
|
||||
|
||||
```bash
|
||||
/opt/homebrew/opt/mysql-client/bin/mysql -h 127.0.0.1 -P 3306 -u vckonline -p vckonline < sql/create_all_stored_procedures.sql
|
||||
```
|
||||
|
||||
**Note:** The `-h 127.0.0.1 -P 3306` flags connect through your SSH tunnel to the remote database.
|
||||
|
||||
## Option 3: Interactive MariaDB Session
|
||||
|
||||
If you're already logged into MariaDB on the server:
|
||||
|
||||
```sql
|
||||
source sql/create_all_stored_procedures.sql;
|
||||
```
|
||||
|
||||
## Option 4: Install Individually
|
||||
|
||||
Run each procedure file separately using the helper script:
|
||||
|
||||
```bash
|
||||
./sql/run_sql.sh sql/select_base1_citizens_sp.sql
|
||||
./sql/run_sql.sh sql/select_base1_monsters_sp.sql
|
||||
./sql/run_sql.sh sql/select_base2_citizens_sp.sql
|
||||
./sql/run_sql.sh sql/select_base2_monsters_sp.sql
|
||||
./sql/run_sql.sh sql/select_random_domains_sp.sql
|
||||
./sql/run_sql.sh sql/select_random_dukes_sp.sql
|
||||
```
|
||||
|
||||
Or using mysql client directly:
|
||||
|
||||
```bash
|
||||
/opt/homebrew/Cellar/mysql-client/9.5.0/bin/mysql -h 127.0.0.1 -P 3306 -u vckonline -p vckonline < sql/select_base1_citizens_sp.sql
|
||||
# ... repeat for each file
|
||||
```
|
||||
|
||||
Or interactively in MariaDB on the server:
|
||||
|
||||
```sql
|
||||
source sql/select_base1_citizens_sp.sql;
|
||||
source sql/select_base1_monsters_sp.sql;
|
||||
source sql/select_base2_citizens_sp.sql;
|
||||
source sql/select_base2_monsters_sp.sql;
|
||||
source sql/select_random_domains_sp.sql;
|
||||
source sql/select_random_dukes_sp.sql;
|
||||
```
|
||||
|
||||
## Verify Installation
|
||||
|
||||
After installing, verify with:
|
||||
|
||||
```sql
|
||||
SHOW PROCEDURE STATUS WHERE Db = 'vckonline';
|
||||
```
|
||||
|
||||
Or run the test script:
|
||||
|
||||
```bash
|
||||
python3 test_database.py
|
||||
```
|
||||
|
||||
## What Each Procedure Does
|
||||
|
||||
- **select_base1_citizens()** - Returns all citizens from base game 1
|
||||
- **select_base1_monsters()** - Returns all monsters from base game 1
|
||||
- **select_base2_citizens()** - Returns base game 2 citizens + Peasant and Knight from base1
|
||||
- **select_base2_monsters()** - Returns base game 2 monsters + 2 random areas from base1
|
||||
- **select_random_domains()** - Returns 15 random domains
|
||||
- **select_random_dukes()** - Returns all dukes in random order
|
||||
|
||||
129
sql/USER_SETUP_GUIDE.md
Normal file
129
sql/USER_SETUP_GUIDE.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# MariaDB User Setup Guide for VCK Online
|
||||
|
||||
Run these commands interactively in MariaDB as root to investigate and fix the user setup.
|
||||
|
||||
## Investigation Commands
|
||||
|
||||
### 1. Check if the database exists
|
||||
```sql
|
||||
SHOW DATABASES LIKE 'vckonline';
|
||||
```
|
||||
|
||||
### 2. Check if the user exists and from which hosts
|
||||
```sql
|
||||
SELECT User, Host FROM mysql.user WHERE User = 'vckonline';
|
||||
```
|
||||
|
||||
### 3. Check current privileges (if user exists)
|
||||
```sql
|
||||
SHOW GRANTS FOR 'vckonline'@'localhost';
|
||||
SHOW GRANTS FOR 'vckonline'@'127.0.0.1';
|
||||
SHOW GRANTS FOR 'vckonline'@'%';
|
||||
```
|
||||
|
||||
### 4. Check if database has data (if database exists)
|
||||
```sql
|
||||
USE vckonline;
|
||||
SHOW TABLES;
|
||||
```
|
||||
|
||||
### 5. Verify data exists in key tables
|
||||
```sql
|
||||
SELECT COUNT(*) AS citizens_count FROM citizens;
|
||||
SELECT COUNT(*) AS monsters_count FROM monsters;
|
||||
SELECT COUNT(*) AS domains_count FROM domains;
|
||||
SELECT COUNT(*) AS dukes_count FROM dukes;
|
||||
SELECT COUNT(*) AS starters_count FROM starters;
|
||||
```
|
||||
|
||||
## Fix Commands
|
||||
|
||||
### Scenario A: User doesn't exist - Create new user
|
||||
|
||||
```sql
|
||||
-- Create user for localhost connections
|
||||
CREATE USER 'vckonline'@'localhost' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Create user for 127.0.0.1 connections (SSH tunnel)
|
||||
CREATE USER 'vckonline'@'127.0.0.1' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Create user for remote connections (optional, for direct connections)
|
||||
CREATE USER 'vckonline'@'%' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Grant privileges
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'127.0.0.1';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'%';
|
||||
|
||||
-- Apply changes
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
### Scenario B: User exists but password is wrong - Reset password
|
||||
|
||||
```sql
|
||||
-- Reset password for existing user
|
||||
ALTER USER 'vckonline'@'localhost' IDENTIFIED BY 'vckonline';
|
||||
ALTER USER 'vckonline'@'127.0.0.1' IDENTIFIED BY 'vckonline';
|
||||
ALTER USER 'vckonline'@'%' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Ensure privileges are granted
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'127.0.0.1';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'%';
|
||||
|
||||
-- Apply changes
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
### Scenario C: User exists but lacks privileges - Grant privileges
|
||||
|
||||
```sql
|
||||
-- Grant privileges
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'127.0.0.1';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'%';
|
||||
|
||||
-- Apply changes
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
## Verification
|
||||
|
||||
After running the fix commands, verify the setup:
|
||||
|
||||
```sql
|
||||
-- Check user exists
|
||||
SELECT User, Host FROM mysql.user WHERE User = 'vckonline';
|
||||
|
||||
-- Check privileges
|
||||
SHOW GRANTS FOR 'vckonline'@'localhost';
|
||||
SHOW GRANTS FOR 'vckonline'@'127.0.0.1';
|
||||
|
||||
-- Test connection (from another terminal, not in MariaDB)
|
||||
-- mysql -u vckonline -p vckonline
|
||||
-- Password: vckonline
|
||||
```
|
||||
|
||||
## Quick Fix (All-in-One)
|
||||
|
||||
If you're confident the database exists with data, run this complete setup:
|
||||
|
||||
```sql
|
||||
-- Create users if they don't exist (will error if they do, that's OK)
|
||||
CREATE USER IF NOT EXISTS 'vckonline'@'localhost' IDENTIFIED BY 'vckonline';
|
||||
CREATE USER IF NOT EXISTS 'vckonline'@'127.0.0.1' IDENTIFIED BY 'vckonline';
|
||||
CREATE USER IF NOT EXISTS 'vckonline'@'%' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Grant privileges (safe to run even if already granted)
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'localhost';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'127.0.0.1';
|
||||
GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'%';
|
||||
|
||||
-- Apply changes
|
||||
FLUSH PRIVILEGES;
|
||||
|
||||
-- Verify
|
||||
SHOW GRANTS FOR 'vckonline'@'localhost';
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
INSERT INTO vckonline.citizens (name,gold_cost,roll_match1,roll_match2,shadow_count,holy_count,soldier_count,worker_count,gold_payout_on_turn,gold_payout_off_turn,strength_payout_on_turn,strength_payout_off_turn,magic_payout_on_turn,magic_payout_off_turn,has_special_payout_on_turn,has_special_payout_off_turn,special_payout_on_turn,special_payout_off_turn,special_citizen,image) VALUES
|
||||
('Cleric',3,1,0,0,1,0,0,0,0,0,0,3,1,0,0,NULL,NULL,0,NULL),
|
||||
('Merchant',2,2,0,0,0,0,1,0,1,0,0,0,0,1,0,NULL,NULL,0,NULL),
|
||||
('Merchant',2,2,0,0,0,0,1,1,0,0,0,0,0,1,0,NULL,NULL,0,NULL),
|
||||
('Mercenary',3,3,0,1,0,0,0,1,0,1,0,0,0,0,1,NULL,NULL,0,NULL),
|
||||
('Archer',4,4,0,0,0,1,0,0,0,2,1,0,0,0,0,NULL,NULL,0,NULL),
|
||||
('Peasant',2,5,0,0,0,0,1,1,1,0,0,0,0,0,0,NULL,NULL,0,NULL),
|
||||
|
||||
76
sql/create_all_stored_procedures.sql
Normal file
76
sql/create_all_stored_procedures.sql
Normal file
@@ -0,0 +1,76 @@
|
||||
-- Create all stored procedures for VCK Online
|
||||
-- Run this file as the vckonline user (or any user with CREATE ROUTINE privilege on vckonline database)
|
||||
-- Usage: mysql -u vckonline -p vckonline < create_all_stored_procedures.sql
|
||||
-- Or interactively: source create_all_stored_procedures.sql;
|
||||
|
||||
DELIMITER //
|
||||
|
||||
-- Drop existing procedures if they exist (to allow re-running this script)
|
||||
DROP PROCEDURE IF EXISTS select_base1_citizens //
|
||||
DROP PROCEDURE IF EXISTS select_base1_monsters //
|
||||
DROP PROCEDURE IF EXISTS select_base2_citizens //
|
||||
DROP PROCEDURE IF EXISTS select_base2_monsters //
|
||||
DROP PROCEDURE IF EXISTS select_random_domains //
|
||||
DROP PROCEDURE IF EXISTS select_random_dukes //
|
||||
|
||||
-- Base 1 Citizens
|
||||
CREATE PROCEDURE select_base1_citizens()
|
||||
BEGIN
|
||||
SELECT * FROM citizens WHERE expansion = "base1";
|
||||
END //
|
||||
|
||||
-- Base 1 Monsters
|
||||
CREATE PROCEDURE select_base1_monsters()
|
||||
BEGIN
|
||||
SELECT * FROM monsters WHERE expansion = "base1";
|
||||
END //
|
||||
|
||||
-- Base 2 Citizens
|
||||
CREATE PROCEDURE select_base2_citizens()
|
||||
BEGIN
|
||||
SELECT * FROM citizens WHERE expansion = "base2"
|
||||
UNION
|
||||
SELECT * FROM citizens WHERE expansion = "base1" AND name IN ('Peasant', 'Knight');
|
||||
END //
|
||||
|
||||
-- Base 2 Monsters
|
||||
CREATE PROCEDURE select_base2_monsters()
|
||||
BEGIN
|
||||
DECLARE chosen_area1 VARCHAR(255);
|
||||
DECLARE chosen_area2 VARCHAR(255);
|
||||
SET chosen_area1 = (
|
||||
SELECT area FROM monsters WHERE expansion = 'base1' GROUP BY area ORDER BY RAND() LIMIT 1
|
||||
);
|
||||
SET chosen_area2 = (
|
||||
SELECT area FROM monsters WHERE expansion = 'base1' AND area <> chosen_area1 ORDER BY RAND() LIMIT 1
|
||||
);
|
||||
SELECT id_monsters, name, area, monster_type, monster_order,
|
||||
strength_cost, magic_cost, vp_reward, gold_reward, strength_reward, magic_reward,
|
||||
has_special_reward, special_reward, has_special_cost, special_cost, is_extra, expansion
|
||||
FROM monsters
|
||||
WHERE expansion = 'base2'
|
||||
UNION
|
||||
SELECT id_monsters, name, area, monster_type, monster_order,
|
||||
strength_cost, magic_cost, vp_reward, gold_reward, strength_reward, magic_reward,
|
||||
has_special_reward, special_reward, has_special_cost, special_cost, is_extra, expansion
|
||||
FROM monsters
|
||||
WHERE expansion = 'base1' AND area IN (chosen_area1, chosen_area2);
|
||||
END //
|
||||
|
||||
-- Random Domains
|
||||
CREATE PROCEDURE select_random_domains()
|
||||
BEGIN
|
||||
SELECT * FROM domains ORDER BY RAND() LIMIT 15;
|
||||
END //
|
||||
|
||||
-- Random Dukes
|
||||
CREATE PROCEDURE select_random_dukes()
|
||||
BEGIN
|
||||
SELECT * FROM dukes ORDER BY RAND();
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- Verify procedures were created
|
||||
SHOW PROCEDURE STATUS WHERE Db = 'vckonline';
|
||||
|
||||
56
sql/fix_user_setup.sql
Normal file
56
sql/fix_user_setup.sql
Normal file
@@ -0,0 +1,56 @@
|
||||
-- ============================================
|
||||
-- VCK Online Database User Setup Commands
|
||||
-- Run these interactively in MariaDB as root
|
||||
-- ============================================
|
||||
|
||||
-- Step 1: Check if the database exists
|
||||
SHOW DATABASES LIKE 'vckonline';
|
||||
|
||||
-- Step 2: Check if the user exists
|
||||
SELECT User, Host FROM mysql.user WHERE User = 'vckonline';
|
||||
|
||||
-- Step 3: Check current user privileges (if user exists)
|
||||
SHOW GRANTS FOR 'vckonline'@'localhost';
|
||||
SHOW GRANTS FOR 'vckonline'@'%';
|
||||
|
||||
-- Step 4: Check what tables exist in the database (if it exists)
|
||||
USE vckonline;
|
||||
SHOW TABLES;
|
||||
|
||||
-- Step 5: Check table row counts to verify data exists
|
||||
SELECT
|
||||
'citizens' AS table_name, COUNT(*) AS row_count FROM citizens
|
||||
UNION ALL
|
||||
SELECT 'monsters', COUNT(*) FROM monsters
|
||||
UNION ALL
|
||||
SELECT 'domains', COUNT(*) FROM domains
|
||||
UNION ALL
|
||||
SELECT 'dukes', COUNT(*) FROM dukes
|
||||
UNION ALL
|
||||
SELECT 'starters', COUNT(*) FROM starters;
|
||||
|
||||
-- ============================================
|
||||
-- FIX COMMANDS (run only if needed)
|
||||
-- ============================================
|
||||
|
||||
-- Option A: If user doesn't exist, create it
|
||||
-- CREATE USER 'vckonline'@'localhost' IDENTIFIED BY 'vckonline';
|
||||
-- CREATE USER 'vckonline'@'127.0.0.1' IDENTIFIED BY 'vckonline';
|
||||
-- CREATE USER 'vckonline'@'%' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Option B: If user exists but password is wrong, reset it
|
||||
-- ALTER USER 'vckonline'@'localhost' IDENTIFIED BY 'vckonline';
|
||||
-- ALTER USER 'vckonline'@'127.0.0.1' IDENTIFIED BY 'vckonline';
|
||||
-- ALTER USER 'vckonline'@'%' IDENTIFIED BY 'vckonline';
|
||||
|
||||
-- Grant all privileges on vckonline database
|
||||
-- GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'localhost';
|
||||
-- GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'127.0.0.1';
|
||||
-- GRANT ALL PRIVILEGES ON vckonline.* TO 'vckonline'@'%';
|
||||
|
||||
-- Flush privileges to apply changes
|
||||
-- FLUSH PRIVILEGES;
|
||||
|
||||
-- Verify the grants after creating/fixing
|
||||
-- SHOW GRANTS FOR 'vckonline'@'localhost';
|
||||
|
||||
63
sql/run_sql.sh
Executable file
63
sql/run_sql.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
# Helper script to run SQL files on remote database through SSH port forwarding
|
||||
# Usage: ./sql/run_sql.sh sql/your_file.sql
|
||||
# Or: bash sql/run_sql.sh sql/your_file.sql
|
||||
|
||||
# Find mysql binary (try PATH first, then specific location)
|
||||
if command -v mysql >/dev/null 2>&1; then
|
||||
MYSQL_BIN="mysql"
|
||||
elif [ -f "/opt/homebrew/opt/mysql-client/bin/mysql" ]; then
|
||||
MYSQL_BIN="/opt/homebrew/opt/mysql-client/bin/mysql"
|
||||
elif [ -f "/opt/homebrew/Cellar/mysql-client/9.5.0/bin/mysql" ]; then
|
||||
MYSQL_BIN="/opt/homebrew/Cellar/mysql-client/9.5.0/bin/mysql"
|
||||
else
|
||||
echo "Error: mysql binary not found"
|
||||
echo "Please install mysql-client: brew install mysql-client"
|
||||
echo "Or add to PATH: export PATH=\"/opt/homebrew/opt/mysql-client/bin:\$PATH\""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if SQL file is provided
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: $0 <sql_file>"
|
||||
echo "Example: $0 sql/create_all_stored_procedures.sql"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SQL_FILE="$1"
|
||||
|
||||
# Check if SQL file exists
|
||||
if [ ! -f "$SQL_FILE" ]; then
|
||||
echo "Error: SQL file not found: $SQL_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if port 3306 is accessible (SSH tunnel check)
|
||||
if ! nc -z 127.0.0.1 3306 2>/dev/null; then
|
||||
echo "Warning: Cannot connect to localhost:3306"
|
||||
echo "Make sure SSH port forwarding is active:"
|
||||
echo " ssh -L 3306:localhost:3306 lukesau.com"
|
||||
echo ""
|
||||
read -p "Continue anyway? (y/n) " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Run the SQL file
|
||||
echo "Running SQL file: $SQL_FILE"
|
||||
echo "Connecting to database through SSH tunnel (localhost:3306)..."
|
||||
echo ""
|
||||
|
||||
"$MYSQL_BIN" -h 127.0.0.1 -P 3306 -u vckonline -p vckonline < "$SQL_FILE"
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ""
|
||||
echo "✓ SQL file executed successfully"
|
||||
else
|
||||
echo ""
|
||||
echo "✗ Error executing SQL file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user