Add Essence 520 minimal DB, configs, and login/game Docker profile.
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
-- Login DB: L2J Mobius / Essence (совместимость с клиентом protocol 520).
|
||||
-- Пароль: Base64(SHA1(UTF-8 пароль)) — см. LoginController Mobius.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS accounts (
|
||||
login VARCHAR(45) NOT NULL PRIMARY KEY,
|
||||
password VARCHAR(45),
|
||||
lastactive BIGINT,
|
||||
"accessLevel" INTEGER NOT NULL DEFAULT 0,
|
||||
"lastIP" VARCHAR(20),
|
||||
"lastServer" INTEGER DEFAULT 1,
|
||||
"pcIp" VARCHAR(20),
|
||||
hop1 VARCHAR(20),
|
||||
hop2 VARCHAR(20),
|
||||
hop3 VARCHAR(20),
|
||||
hop4 VARCHAR(20)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS account_data (
|
||||
account_name VARCHAR(45) NOT NULL,
|
||||
var VARCHAR(20) NOT NULL,
|
||||
value VARCHAR(255),
|
||||
PRIMARY KEY (account_name, var),
|
||||
CONSTRAINT fk_account_data_login FOREIGN KEY (account_name)
|
||||
REFERENCES accounts (login) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS accounts_ipauth (
|
||||
login VARCHAR(45) NOT NULL,
|
||||
ip VARCHAR(15) NOT NULL,
|
||||
type VARCHAR(15) NOT NULL,
|
||||
PRIMARY KEY (login, ip)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS gameservers (
|
||||
server_id INTEGER NOT NULL PRIMARY KEY,
|
||||
hexid VARCHAR(50) NOT NULL,
|
||||
host VARCHAR(50) NOT NULL
|
||||
);
|
||||
@@ -1,49 +0,0 @@
|
||||
-- Минимальные таблицы под логин-сервер в стиле L2J (accounts / gameservers / account_data).
|
||||
-- Подходит для многих форков; у Samurai Crow/Essence могут отличаться имена колонок или хеш пароля —
|
||||
-- тогда сверьте с SQL из вашей сборки и поправьте этот файл.
|
||||
--
|
||||
-- Тестовый логин: admin / admin
|
||||
-- Хеш: Base64(SHA1 от UTF-8 строки «admin») — типично для L2J/Mobius.
|
||||
-- Альтернатива (если сборка ждёт hex SHA1): замените поле password на
|
||||
-- d033e22ae348aeb5660fc2140aec35850c4da997
|
||||
|
||||
CREATE TABLE IF NOT EXISTS accounts (
|
||||
login VARCHAR(45) NOT NULL PRIMARY KEY,
|
||||
password VARCHAR(128),
|
||||
lastactive BIGINT,
|
||||
accesslevel INTEGER NOT NULL DEFAULT 0,
|
||||
lastip VARCHAR(45),
|
||||
lastserver SMALLINT DEFAULT 1
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS account_data (
|
||||
account_name VARCHAR(45) NOT NULL,
|
||||
var VARCHAR(50) NOT NULL,
|
||||
value VARCHAR(255),
|
||||
PRIMARY KEY (account_name, var),
|
||||
CONSTRAINT fk_account_data_account FOREIGN KEY (account_name)
|
||||
REFERENCES accounts (login) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS gameservers (
|
||||
hexid VARCHAR(255) NOT NULL,
|
||||
server_id INTEGER NOT NULL PRIMARY KEY,
|
||||
host VARCHAR(255) NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO accounts (login, password, lastactive, accesslevel, lastip, lastserver)
|
||||
VALUES (
|
||||
'admin',
|
||||
'0DPiKuNIrrVmD8IUCuw1hQxNqZc=',
|
||||
(EXTRACT(EPOCH FROM NOW()) * 1000)::bigint,
|
||||
0,
|
||||
'127.0.0.1',
|
||||
1
|
||||
)
|
||||
ON CONFLICT (login) DO NOTHING;
|
||||
|
||||
-- Игровой сервер при первом подключении к логину часто сам делает INSERT в gameservers.
|
||||
-- Если нужна явная запись (hexid должен совпасть с RequestServerID / hex в конфиге GS):
|
||||
-- INSERT INTO gameservers (hexid, server_id, host)
|
||||
-- VALUES ('ВАШ_32_СИМВОЛА_HEX', 1, '127.0.0.1')
|
||||
-- ON CONFLICT (server_id) DO UPDATE SET hexid = EXCLUDED.hexid, host = EXCLUDED.host;
|
||||
@@ -0,0 +1,139 @@
|
||||
-- Game DB (та же БД): минимум для экрана выбора/создания персонажа и входа в мир.
|
||||
-- Полный дамп datapack ставьте поверх, если сборка Samurai Crow требует больше таблиц.
|
||||
|
||||
CREATE TABLE IF NOT EXISTS global_data (
|
||||
var VARCHAR(255) NOT NULL PRIMARY KEY,
|
||||
value TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS characters (
|
||||
account_name VARCHAR(45),
|
||||
charId INTEGER NOT NULL PRIMARY KEY,
|
||||
char_name VARCHAR(35) NOT NULL,
|
||||
level SMALLINT DEFAULT 1,
|
||||
maxHp INTEGER DEFAULT 100,
|
||||
curHp INTEGER DEFAULT 100,
|
||||
maxCp INTEGER DEFAULT 100,
|
||||
curCp INTEGER DEFAULT 100,
|
||||
maxMp INTEGER DEFAULT 100,
|
||||
curMp INTEGER DEFAULT 100,
|
||||
face SMALLINT DEFAULT 0,
|
||||
hairStyle SMALLINT DEFAULT 0,
|
||||
hairColor SMALLINT DEFAULT 0,
|
||||
sex SMALLINT DEFAULT 0,
|
||||
reputation INTEGER DEFAULT 0,
|
||||
fame INTEGER DEFAULT 0,
|
||||
raidbossPoints INTEGER DEFAULT 0,
|
||||
pvpkills INTEGER DEFAULT 0,
|
||||
pkkills INTEGER DEFAULT 0,
|
||||
clanid INTEGER DEFAULT 0,
|
||||
race SMALLINT DEFAULT 0,
|
||||
classid INTEGER DEFAULT 0,
|
||||
deletetime BIGINT DEFAULT 0,
|
||||
title VARCHAR(21) DEFAULT '',
|
||||
accesslevel INTEGER DEFAULT 0,
|
||||
online SMALLINT DEFAULT 0,
|
||||
onlinetime INTEGER DEFAULT 0,
|
||||
char_slot SMALLINT DEFAULT 0,
|
||||
lastAccess BIGINT DEFAULT 0,
|
||||
clan_privs INTEGER DEFAULT 0,
|
||||
wantspeace SMALLINT DEFAULT 0,
|
||||
base_class INTEGER DEFAULT 0,
|
||||
x INTEGER DEFAULT -114520,
|
||||
y INTEGER DEFAULT -249704,
|
||||
z INTEGER DEFAULT -2984,
|
||||
heading INTEGER DEFAULT 0,
|
||||
createDate DATE DEFAULT CURRENT_DATE,
|
||||
isIn7sDungeon SMALLINT DEFAULT 0,
|
||||
in_jail SMALLINT DEFAULT 0,
|
||||
jail_timer INTEGER DEFAULT 0,
|
||||
powerGrade SMALLINT DEFAULT 0,
|
||||
apprentice INTEGER DEFAULT 0,
|
||||
sponsor INTEGER DEFAULT 0,
|
||||
clan_join_expiry_time TIMESTAMP NULL,
|
||||
clan_create_expiry_time TIMESTAMP NULL,
|
||||
bookmarkslot SMALLINT DEFAULT 0,
|
||||
vitality_points INTEGER DEFAULT 35000,
|
||||
language VARCHAR(5) DEFAULT 'en'
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_characters_account ON characters (account_name);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_characters_name ON characters (char_name);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS character_subclasses (
|
||||
charId INTEGER NOT NULL,
|
||||
class_id INTEGER NOT NULL DEFAULT 0,
|
||||
exp BIGINT DEFAULT 0,
|
||||
sp BIGINT DEFAULT 0,
|
||||
level INTEGER DEFAULT 1,
|
||||
class_index INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (charId, class_index),
|
||||
CONSTRAINT fk_subclasses_char FOREIGN KEY (charId)
|
||||
REFERENCES characters (charId) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS character_skills (
|
||||
charId INTEGER NOT NULL,
|
||||
skill_id INTEGER NOT NULL,
|
||||
skill_level INTEGER NOT NULL DEFAULT 1,
|
||||
class_index INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (charId, skill_id, class_index),
|
||||
CONSTRAINT fk_skills_char FOREIGN KEY (charId)
|
||||
REFERENCES characters (charId) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS character_shortcuts (
|
||||
charId INTEGER NOT NULL,
|
||||
slot INTEGER NOT NULL,
|
||||
page INTEGER NOT NULL,
|
||||
type INTEGER DEFAULT 0,
|
||||
shortcut_id INTEGER DEFAULT 0,
|
||||
level INTEGER DEFAULT 0,
|
||||
class_index INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (charId, slot, page, class_index),
|
||||
CONSTRAINT fk_shortcuts_char FOREIGN KEY (charId)
|
||||
REFERENCES characters (charId) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS character_variables (
|
||||
charId INTEGER NOT NULL,
|
||||
var VARCHAR(255) NOT NULL,
|
||||
val TEXT,
|
||||
PRIMARY KEY (charId, var),
|
||||
CONSTRAINT fk_variables_char FOREIGN KEY (charId)
|
||||
REFERENCES characters (charId) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS items (
|
||||
object_id INTEGER NOT NULL PRIMARY KEY,
|
||||
owner_id INTEGER NOT NULL,
|
||||
item_id INTEGER NOT NULL,
|
||||
count BIGINT NOT NULL DEFAULT 1,
|
||||
enchant_level INTEGER DEFAULT 0,
|
||||
loc VARCHAR(10) NOT NULL DEFAULT 'INVENTORY',
|
||||
loc_data INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_items_owner ON items (owner_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS clan_data (
|
||||
clan_id INTEGER NOT NULL PRIMARY KEY,
|
||||
clan_name VARCHAR(45) NOT NULL,
|
||||
clan_level INTEGER DEFAULT 0,
|
||||
reputation_score INTEGER DEFAULT 0,
|
||||
hasCastle INTEGER DEFAULT 0,
|
||||
blood_alliance INTEGER DEFAULT 0,
|
||||
blood_oath INTEGER DEFAULT 0,
|
||||
ally_id INTEGER DEFAULT 0,
|
||||
ally_name VARCHAR(45) DEFAULT '',
|
||||
leader_id INTEGER DEFAULT 0,
|
||||
crest_id INTEGER DEFAULT 0,
|
||||
crest_large_id INTEGER DEFAULT 0,
|
||||
ally_crest_id INTEGER DEFAULT 0,
|
||||
auction_bid_at INTEGER DEFAULT 0,
|
||||
ally_penalty_expiry_time BIGINT DEFAULT 0,
|
||||
ally_penalty_type SMALLINT DEFAULT 0,
|
||||
char_penalty_expiry_time BIGINT DEFAULT 0,
|
||||
dissolving_expiry_time BIGINT DEFAULT 0,
|
||||
new_leader_id INTEGER DEFAULT 0
|
||||
);
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Выдаёт владельца таблиц логина роли из POSTGRES_USER (см. docker-compose).
|
||||
set -eu
|
||||
psql -v ON_ERROR_STOP=1 --username "postgres" --dbname "$POSTGRES_DB" <<-EOSQL
|
||||
ALTER TABLE IF EXISTS accounts OWNER TO "${POSTGRES_USER}";
|
||||
ALTER TABLE IF EXISTS account_data OWNER TO "${POSTGRES_USER}";
|
||||
ALTER TABLE IF EXISTS gameservers OWNER TO "${POSTGRES_USER}";
|
||||
EOSQL
|
||||
@@ -0,0 +1,33 @@
|
||||
-- Тестовые данные: Essence protocol 520 (логин + регистрация GS).
|
||||
-- Логины: admin/admin, test/test
|
||||
-- Hexid совпадает с server/hexid/default.txt
|
||||
|
||||
INSERT INTO global_data (var, value)
|
||||
VALUES ('essence_protocol', '520')
|
||||
ON CONFLICT (var) DO UPDATE SET value = EXCLUDED.value;
|
||||
|
||||
INSERT INTO accounts (login, password, lastactive, "accessLevel", "lastIP", "lastServer")
|
||||
VALUES
|
||||
(
|
||||
'admin',
|
||||
'0DPiKuNIrrVmD8IUCuw1hQxNqZc=',
|
||||
(EXTRACT(EPOCH FROM NOW()) * 1000)::bigint,
|
||||
100,
|
||||
'127.0.0.1',
|
||||
1
|
||||
),
|
||||
(
|
||||
'test',
|
||||
'qUqP5cyxm6YcTAhz05Hph5gvu9M=',
|
||||
(EXTRACT(EPOCH FROM NOW()) * 1000)::bigint,
|
||||
0,
|
||||
'127.0.0.1',
|
||||
1
|
||||
)
|
||||
ON CONFLICT (login) DO NOTHING;
|
||||
|
||||
-- RequestServerID = 1, hex из server/hexid/default.txt
|
||||
INSERT INTO gameservers (server_id, hexid, host)
|
||||
VALUES (1, 'a1b2c3d4e5f6789012345678901234ef', '127.0.0.1')
|
||||
ON CONFLICT (server_id) DO UPDATE
|
||||
SET hexid = EXCLUDED.hexid, host = EXCLUDED.host;
|
||||
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
# Владелец всех таблиц public → POSTGRES_USER (после всех *.sql).
|
||||
set -eu
|
||||
psql -v ON_ERROR_STOP=1 --username "postgres" --dbname "$POSTGRES_DB" <<-EOSQL
|
||||
DO \$\$
|
||||
DECLARE
|
||||
t text;
|
||||
BEGIN
|
||||
FOR t IN SELECT tablename FROM pg_tables WHERE schemaname = 'public'
|
||||
LOOP
|
||||
EXECUTE format('ALTER TABLE IF EXISTS %I OWNER TO %I', t, '${POSTGRES_USER}');
|
||||
END LOOP;
|
||||
END \$\$;
|
||||
EOSQL
|
||||
Reference in New Issue
Block a user