feat: Fixes in DB engines, SQL queries, added and improved Python management scripts, changed max level.
This commit is contained in:
31
README.md
31
README.md
@@ -1 +1,30 @@
|
||||
# m2dev-server
|
||||
# Server Repository
|
||||
|
||||
This repository contains the core server files and configurations. It includes fixes for database performance, quest logic, and crucial setup scripts.
|
||||
|
||||
---
|
||||
|
||||
## ✨ Key Updates and Fixes
|
||||
|
||||
The following changes have been implemented to improve stability, performance, and development workflow:
|
||||
|
||||
### ⚙️ Initial Setup & Build Process
|
||||
|
||||
* **NEW Script: `clear.py`:** Added an up-to-date script for comprehensive cleanup of log, PID, and temporary files across channels and the database.
|
||||
* **NEW Script: `perms.py`:** Added a script to automatically assign necessary permissions to all compiled binaries (`game`, `db` and `qc`).
|
||||
* ⚠️ **Action Required:** The `perms.py` script uses `os.getcwd()` to determine the root path. **You must run this script from your game's root directory (e.g., `/usr/home/game`) for it to function correctly.**
|
||||
* **Fix: `install.py`:** Corrected the script to properly create the `data/package` folder and ensure it is symbolically linked across all channels.
|
||||
* **Configuration: `conf/game.txt`:** Changed the maximum character level supported in the server configuration to **120**.
|
||||
|
||||
### 🐍 Core Logic & Quest Engine
|
||||
|
||||
* **Fix: `make.py` (Quest Compilation):** Fixed a critical logic bug (missing `else` assignment) in `share/locale/[xxx]/quest/make.py` that was causing compiled quests and dialogs to be unresponsive in-game.
|
||||
* **Fix: `pre_qc.py` (Quest Pre-processing):** Resolved a syntax error in `share/locale/[xxx]/quest/pre_qc.py` by specifying the correct encoding option when reading files.
|
||||
|
||||
### 💾 Database Performance & Integrity
|
||||
|
||||
* **Performance:** Replaced the default database engine on most tables with either **Aria** (for high-read tables like `item_proto`, `mob_proto`) or **InnoDB** (for high-write tables like `item`, `affect`).
|
||||
* *Note: Most `log` tables retain the default **MyISAM** engine due to compatibility requirements.*
|
||||
* **Integrity Fix:** Corrected a syntax error in the `item_proto` section of `sql/player.sql` where a single quote (`'`) was missing from the "Bambi Seal" item insert query.
|
||||
* **Bug fix:** A fix was applied to the `MOV_SPEED` value for skill 19 in the `skill_proto` table to prevent characters from becoming immobile during the effect.
|
||||
* **Updates:** All `.sql` files (`account.sql`, `common.sql`, `log.sql`, `player.sql`) are updated with the new engine and functioning query settings.
|
||||
103
clear.py
Normal file
103
clear.py
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
import shutil # Import shutil for recursive directory deletion
|
||||
|
||||
def print_green(text):
|
||||
print("\033[1;32m" + text + "\033[0m")
|
||||
|
||||
def print_magenta_prompt():
|
||||
print("\033[0;35m> ", end="", flush=True)
|
||||
|
||||
def main():
|
||||
"""
|
||||
Cleans up specified files from the game server's channels directory.
|
||||
"""
|
||||
# List of files to remove, including file extensions.
|
||||
FILES_TO_CLEAN = ['.core', 'syserr.log', 'syslog.log', '.txt', 'pid', 'stdout']
|
||||
|
||||
# 🌟 NEW: File in the current directory to remove
|
||||
ROOT_FILES_TO_CLEAN = ['pids.json']
|
||||
|
||||
# The base directory to start the cleanup from.
|
||||
# This assumes the script is run from the root of the game installation.
|
||||
root_dir = os.getcwd() # The script's execution directory
|
||||
base_dir = os.path.join(root_dir, 'channels')
|
||||
|
||||
print_green("Starting cleanup...")
|
||||
|
||||
# --- 1. Clean up files in the root directory (where 'channels' is) ---
|
||||
print(f"Scanning '{root_dir}' for root files...")
|
||||
for filename in ROOT_FILES_TO_CLEAN:
|
||||
file_path = os.path.join(root_dir, filename)
|
||||
|
||||
if os.path.exists(file_path):
|
||||
try:
|
||||
os.remove(file_path)
|
||||
print(f" - Removed '{filename}' from root.")
|
||||
except OSError as e:
|
||||
print(f" - Error removing '{filename}': {e}")
|
||||
|
||||
# --- 2. Clean up 'channels' directory and its subdirectories ---
|
||||
print_green("Starting cleanup in '" + base_dir + "'...")
|
||||
|
||||
if not os.path.exists(base_dir):
|
||||
print(f"Error: Directory '{base_dir}' not found.")
|
||||
sys.exit(1)
|
||||
|
||||
# Use os.walk to recursively search for files.
|
||||
for root, dirs, files in os.walk(base_dir, topdown=False):
|
||||
# Determine if the current directory is a target for cleanup.
|
||||
is_target_dir = False
|
||||
|
||||
if os.path.basename(root) in ['auth', 'db']:
|
||||
is_target_dir = True
|
||||
elif os.path.basename(os.path.dirname(root)).startswith('channel') and os.path.basename(root).startswith('core'):
|
||||
is_target_dir = True
|
||||
|
||||
if is_target_dir:
|
||||
print(f"\nScanning '{os.path.relpath(root, base_dir)}'...")
|
||||
|
||||
# 🌟 NEW: Empty the 'log' subdirectory if it exists
|
||||
log_dir_path = os.path.join(root, 'log')
|
||||
|
||||
if os.path.exists(log_dir_path) and os.path.isdir(log_dir_path):
|
||||
print(f"\nScanning '{os.path.relpath(root, base_dir)}'...")
|
||||
print(f" - Cleaning 'log' directory in '{os.path.relpath(root, base_dir)}'")
|
||||
|
||||
try:
|
||||
# Iterate over all files and directories inside the 'log' folder
|
||||
for item in os.listdir(log_dir_path):
|
||||
item_path = os.path.join(log_dir_path, item)
|
||||
|
||||
if os.path.isdir(item_path):
|
||||
# If it's a directory, recursively delete it
|
||||
shutil.rmtree(item_path)
|
||||
print(f" - Removed directory: '{item}'")
|
||||
else:
|
||||
# If it's a file, delete the file
|
||||
os.remove(item_path)
|
||||
print(f" - Removed file: '{item}'")
|
||||
|
||||
except OSError as e:
|
||||
print(f" - Error cleaning 'log' directory at '{os.path.relpath(log_dir_path, base_dir)}': {e}")
|
||||
|
||||
for filename in files:
|
||||
for file_to_clean in FILES_TO_CLEAN:
|
||||
if filename.endswith(file_to_clean):
|
||||
file_path = os.path.join(root, filename)
|
||||
|
||||
try:
|
||||
os.remove(file_path)
|
||||
print(f" - Removed '{os.path.relpath(file_path, base_dir)}'")
|
||||
except OSError as e:
|
||||
print(f" - Error removing '{file_path}': {e}")
|
||||
|
||||
print_green("\nCleanup complete.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
finally:
|
||||
print("\033[0m", end="", flush=True)
|
||||
@@ -57,6 +57,7 @@ def setup_links_game(target_dir, name):
|
||||
try_symlink(os.path.join(GAMEDIR, "share", "data"), "data", is_dir=True)
|
||||
try_symlink(os.path.join(GAMEDIR, "share", "locale"), "locale", is_dir=True)
|
||||
try_symlink(os.path.join(GAMEDIR, "share", "mark"), "mark", is_dir=True)
|
||||
try_symlink(os.path.join(GAMEDIR, "share", "package"), "package", is_dir=True)
|
||||
try_symlink(os.path.join(GAMEDIR, "share", "bin", "game"), name, is_dir=False)
|
||||
|
||||
# Helper function to create symlinks cross-platform
|
||||
@@ -86,6 +87,9 @@ if os.path.exists(channels_dir):
|
||||
print_green("> Clearing up channels...")
|
||||
shutil.rmtree(channels_dir)
|
||||
|
||||
package_dir = os.path.join(GAMEDIR, "share", "package")
|
||||
if not os.path.exists(package_dir):
|
||||
os.makedirs(package_dir)
|
||||
## DB Setup
|
||||
print_green("> Setting up environment for the DB Cache...")
|
||||
db_dir = os.path.join(GAMEDIR, "channels", "db")
|
||||
|
||||
66
perms.py
Normal file
66
perms.py
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Define the root directory of your game.
|
||||
# Change this line to your desired path.
|
||||
GAME_ROOT_DIR = os.getcwd()
|
||||
|
||||
# --- Derived Paths (Do not change below this line) ---
|
||||
DB_ROOT_DIR = '/var/db/mysql'
|
||||
GAME_BIN_DIR = os.path.join(GAME_ROOT_DIR, 'share', 'bin')
|
||||
|
||||
def set_permissions(path: str, permission_code: int) -> None:
|
||||
"""
|
||||
Sets the specified permission code on a given file.
|
||||
"""
|
||||
if os.name == "nt":
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
os.chmod(path, permission_code)
|
||||
print(f" - Changed permissions on: {path}")
|
||||
except OSError as e:
|
||||
print(f" - ERROR: Failed to change permissions on {path}: {e}")
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main function to set permissions on specified files and directories.
|
||||
"""# Only attempt to set permissions on Unix-like systems, not Windows (os.name == "nt")
|
||||
if os.name == "nt":
|
||||
print(f"Skipped setting Unix permissions on Windows for: {os.path.basename(path)}.")
|
||||
else:
|
||||
# 777 in octal
|
||||
permission_code = 0o777
|
||||
|
||||
# --- Section 1: Set permissions for files inside /var/db/mysql subdirectories ---
|
||||
print(f"Setting permissions on files within subdirectories of '{DB_ROOT_DIR}'...")
|
||||
if not os.path.isdir(DB_ROOT_DIR):
|
||||
print(f"ERROR: '{DB_ROOT_DIR}' not found. Skipping.")
|
||||
else:
|
||||
# Use os.walk to go through all directories and files.
|
||||
for root, dirs, files in os.walk(DB_ROOT_DIR):
|
||||
# Check if the current directory is not the root itself
|
||||
if root != DB_ROOT_DIR:
|
||||
for file in files:
|
||||
file_path = os.path.join(root, file)
|
||||
set_permissions(file_path, permission_code)
|
||||
|
||||
# --- Section 2: Set permissions for game and db binaries ---
|
||||
print(f"\nSetting permissions on 'game' and 'db' binaries in '{GAME_BIN_DIR}'...")
|
||||
binaries_to_set = ['game', 'db']
|
||||
if not os.path.isdir(GAME_BIN_DIR):
|
||||
print(f"ERROR: '{GAME_BIN_DIR}' not found. Skipping.")
|
||||
else:
|
||||
for binary in binaries_to_set:
|
||||
binary_path = os.path.join(GAME_BIN_DIR, binary)
|
||||
if os.path.isfile(binary_path):
|
||||
set_permissions(binary_path, permission_code)
|
||||
else:
|
||||
print(f" - Skipping: '{binary}' not found at '{binary_path}'")
|
||||
|
||||
print("\nPermission changes complete.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -16,4 +16,4 @@ SPEEDHACK_LIMIT_COUNT: 300
|
||||
SPEEDHACK_LIMIT_BONUS: 80
|
||||
PK_PROTECT_LEVEL: 15
|
||||
MALL_URL: example.com
|
||||
MAX_LEVEL: 105
|
||||
MAX_LEVEL: 120
|
||||
@@ -29,6 +29,18 @@ def main() -> None:
|
||||
else:
|
||||
pre_qc_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# --- ADDED FIXES BELOW ---
|
||||
import grp # Need to import grp for proper chown/chgrp logic
|
||||
|
||||
# 1. Set Group Ownership (equivalent to chgrp quest object)
|
||||
# NOTE: You must know the numerical GID of the 'quest' group.
|
||||
# A simpler shell-based approach is often safer in Python:
|
||||
os.system('chgrp quest ' + str(object_dir))
|
||||
|
||||
# 2. Set Permissions (equivalent to chmod -R 770 object)
|
||||
os.system('chmod -R 770 ' + str(object_dir))
|
||||
# --- END ADDED FIXES ---
|
||||
|
||||
qc_exe = script_dir / ("qc.exe" if sys.platform.startswith("win") else "qc")
|
||||
|
||||
with open("locale_list") as file:
|
||||
@@ -37,6 +49,8 @@ def main() -> None:
|
||||
r = pre_qc.run(line)
|
||||
if r:
|
||||
filename = os.path.join("pre_qc", line)
|
||||
else:
|
||||
filename = line
|
||||
|
||||
subprocess.run([str(qc_exe), str(filename.strip())], check=True)
|
||||
|
||||
|
||||
@@ -166,8 +166,13 @@ def run(filename):
|
||||
filename = filename.strip("\n")
|
||||
if filename == "":
|
||||
return
|
||||
with open(filename, "r") as fh:
|
||||
lines = fh.readlines()
|
||||
try:
|
||||
with open(filename, "r", encoding='utf-8') as fh:
|
||||
lines = fh.readlines()
|
||||
except UnicodeDecodeError:
|
||||
with open(filename, "r", encoding='latin1') as fh:
|
||||
lines = fh.readlines()
|
||||
|
||||
|
||||
start = MakeParameterTable(lines, parameter_table, keys)
|
||||
if len(keys) == 0:
|
||||
|
||||
@@ -48,11 +48,11 @@ CREATE TABLE `account` (
|
||||
`total_mileage` int(11) NOT NULL DEFAULT 0,
|
||||
`channel_company` varchar(30) NOT NULL DEFAULT '',
|
||||
`ip` varchar(255) DEFAULT NULL,
|
||||
`last_play` datetime NOT NULL,
|
||||
`last_play` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `login` (`login`) USING BTREE,
|
||||
KEY `social_id` (`social_id`) USING BTREE
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=ascii COLLATE=ascii_general_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=ascii COLLATE=ascii_general_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -61,7 +61,7 @@ CREATE TABLE `account` (
|
||||
|
||||
LOCK TABLES `account` WRITE;
|
||||
/*!40000 ALTER TABLE `account` DISABLE KEYS */;
|
||||
INSERT INTO `account` VALUES (1,'admin','*CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D','1234567','','0000-00-00 00:00:00',0,'OK','',0,0,0,'0000-00-00 00:00:00',0,1650,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,'',NULL,'2021-11-21 20:10:46'),(2,'test','*CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D','1234567','','0000-00-00 00:00:00',0,'OK','',0,0,0,'0000-00-00 00:00:00',0,0,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,'',NULL,'2021-08-06 11:42:12');
|
||||
INSERT INTO `account` VALUES (1,'admin','*CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D','1234567','','0000-00-00 00:00:00',0,'OK',0,0,0,'0000-00-00 00:00:00',0,1650,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,'',NULL,'2021-11-21 20:10:46'),(2,'test','*CC67043C7BCFF5EEA5566BD9B1F3C74FD9A5CF5D','1234567','','0000-00-00 00:00:00',0,'OK','',0,0,0,'0000-00-00 00:00:00',0,0,'0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00','0000-00-00 00:00:00',0,0,'',NULL,'2021-08-06 11:42:12');
|
||||
/*!40000 ALTER TABLE `account` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
@@ -79,7 +79,7 @@ CREATE TABLE `gametime` (
|
||||
`LimitDt` datetime DEFAULT '1990-01-01 00:00:00',
|
||||
`Scores` int(11) DEFAULT 0,
|
||||
PRIMARY KEY (`UserID`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=euckr COLLATE=euckr_korean_ci;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=euckr COLLATE=euckr_korean_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -111,7 +111,7 @@ CREATE TABLE `gametimeip` (
|
||||
PRIMARY KEY (`ipid`),
|
||||
UNIQUE KEY `ip_uniq` (`ip`,`startIP`,`endIP`),
|
||||
KEY `ip_idx` (`ip`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=euckr COLLATE=euckr_korean_ci;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=euckr COLLATE=euckr_korean_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -139,7 +139,7 @@ CREATE TABLE `gametimelog` (
|
||||
`ip` varchar(15) NOT NULL DEFAULT '000.000.000.000',
|
||||
`server` varchar(32) NOT NULL DEFAULT '',
|
||||
KEY `login_key` (`login`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COLLATE=gb2312_chinese_ci;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 COLLATE=gb2312_chinese_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -162,7 +162,7 @@ CREATE TABLE `string` (
|
||||
`name` varchar(64) NOT NULL DEFAULT '',
|
||||
`text` text DEFAULT NULL,
|
||||
PRIMARY KEY (`name`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
|
||||
@@ -24,7 +24,7 @@ DROP TABLE IF EXISTS `gmhost`;
|
||||
/*!40101 SET character_set_client = utf8mb4 */;
|
||||
CREATE TABLE `gmhost` (
|
||||
`mIP` varchar(16) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -52,7 +52,7 @@ CREATE TABLE `gmlist` (
|
||||
`mServerIP` varchar(16) NOT NULL DEFAULT 'ALL',
|
||||
`mAuthority` enum('IMPLEMENTOR','HIGH_WIZARD','GOD','LOW_WIZARD','PLAYER') DEFAULT 'PLAYER',
|
||||
PRIMARY KEY (`mID`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=Aria AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -76,7 +76,7 @@ CREATE TABLE `locale` (
|
||||
`mKey` varchar(255) NOT NULL DEFAULT '',
|
||||
`mValue` varchar(255) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`mKey`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -101,7 +101,7 @@ CREATE TABLE `spam_db` (
|
||||
`word` varchar(256) NOT NULL,
|
||||
`score` int(11) NOT NULL DEFAULT 10,
|
||||
PRIMARY KEY (`word`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
|
||||
28
sql/log.sql
28
sql/log.sql
@@ -26,7 +26,7 @@ CREATE TABLE `bootlog` (
|
||||
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`hostname` char(128) NOT NULL DEFAULT 'UNKNOWN',
|
||||
`channel` tinyint(1) NOT NULL DEFAULT 0
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -137,7 +137,7 @@ CREATE TABLE `dragon_slay_log` (
|
||||
`vnum` int(11) unsigned NOT NULL,
|
||||
`start_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -165,7 +165,7 @@ CREATE TABLE `fish_log` (
|
||||
`waiting_time` int(11) NOT NULL DEFAULT 0,
|
||||
`success` tinyint(4) NOT NULL DEFAULT 0,
|
||||
`size` smallint(6) NOT NULL DEFAULT 0
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -222,7 +222,7 @@ CREATE TABLE `hack_crc_log` (
|
||||
`server` char(100) NOT NULL DEFAULT '',
|
||||
`why` char(255) NOT NULL DEFAULT '',
|
||||
`crc` int(11) NOT NULL DEFAULT 0
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -248,7 +248,7 @@ CREATE TABLE `hack_log` (
|
||||
`ip` char(15) NOT NULL DEFAULT '',
|
||||
`server` char(100) NOT NULL DEFAULT '',
|
||||
`why` char(255) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -274,7 +274,7 @@ CREATE TABLE `hackshield_log` (
|
||||
`name` varchar(25) DEFAULT NULL,
|
||||
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`reason` varchar(25) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -301,7 +301,7 @@ CREATE TABLE `levellog` (
|
||||
`account_id` int(11) NOT NULL,
|
||||
`pid` int(11) NOT NULL,
|
||||
PRIMARY KEY (`name`,`level`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -395,7 +395,7 @@ CREATE TABLE `loginlog2` (
|
||||
`logout_time` datetime DEFAULT NULL,
|
||||
`playtime` int(11) NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -449,7 +449,7 @@ CREATE TABLE `pcbang_loginlog` (
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `pid` (`pid`) USING BTREE,
|
||||
KEY `pcbang_id` (`pcbang_id`) USING BTREE
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -474,7 +474,7 @@ CREATE TABLE `playercount` (
|
||||
`count_yellow` int(11) DEFAULT NULL,
|
||||
`count_blue` int(11) DEFAULT NULL,
|
||||
`count_total` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=FIXED;
|
||||
) ENGINE=Aria DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=FIXED;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -502,7 +502,7 @@ CREATE TABLE `quest_reward_log` (
|
||||
`reward_value2` int(11) DEFAULT NULL,
|
||||
`time` datetime DEFAULT NULL,
|
||||
KEY `player_id` (`player_id`) USING BTREE
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -529,7 +529,7 @@ CREATE TABLE `refinelog` (
|
||||
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`is_success` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`setType` set('SOCKET','POWER','ROD','GUILD','SCROLL','HYUNIRON','GOD_SCROLL','MUSIN_SCROLL') DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -554,7 +554,7 @@ CREATE TABLE `shout_log` (
|
||||
`empire` tinyint(4) DEFAULT NULL,
|
||||
`shout` varchar(350) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL,
|
||||
KEY `time_idx` (`time`) USING BTREE
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=big5 COLLATE=big5_chinese_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
@@ -579,7 +579,7 @@ CREATE TABLE `speed_hack` (
|
||||
`x` int(11) DEFAULT NULL,
|
||||
`y` int(11) DEFAULT NULL,
|
||||
`hack_count` varchar(20) CHARACTER SET big5 COLLATE big5_bin DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC;
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci ROW_FORMAT=DYNAMIC;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
|
||||
--
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user