lots of db and css work, profiles
This commit is contained in:
parent
a6e959b8ef
commit
c9ff054426
28
database/create/auth.sql
Normal file
28
database/create/auth.sql
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
DROP TABLE IF EXISTS users;
|
||||||
|
CREATE TABLE users (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`username` TEXT NOT NULL UNIQUE,
|
||||||
|
`email` TEXT NOT NULL UNIQUE,
|
||||||
|
`password` TEXT NOT NULL,
|
||||||
|
`auth` INT NOT NULL DEFAULT 0,
|
||||||
|
`char_id` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`char_slots` INTEGER NOT NULL DEFAULT 2,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`last_login` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS sessions;
|
||||||
|
CREATE TABLE sessions (
|
||||||
|
`user_id` INTEGER NOT NULL,
|
||||||
|
`token` TEXT NOT NULL UNIQUE,
|
||||||
|
`expires` INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_sessions_user_id ON sessions (`user_id`);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS tokens;
|
||||||
|
CREATE TABLE tokens (
|
||||||
|
`user_id` INTEGER NOT NULL,
|
||||||
|
`token` TEXT NOT NULL UNIQUE,
|
||||||
|
`created` INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_tokens_user_id ON tokens (`user_id`);
|
56
database/create/blueprints.sql
Normal file
56
database/create/blueprints.sql
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
DROP TABLE IF EXISTS items;
|
||||||
|
CREATE TABLE items (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`subtype` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`slot` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`rarity` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`value` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`consumable` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`duration` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`durability` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`pow` INTEGER NOT NULL DEFAULT 0, -- Power
|
||||||
|
`acc` INTEGER NOT NULL DEFAULT 0, -- Accuracy
|
||||||
|
`pen` INTEGER NOT NULL DEFAULT 0, -- Penetration
|
||||||
|
`foc` INTEGER NOT NULL DEFAULT 0, -- Focus
|
||||||
|
`tou` INTEGER NOT NULL DEFAULT 0, -- Toughness
|
||||||
|
`arm` INTEGER NOT NULL DEFAULT 0, -- Armor
|
||||||
|
`res` INTEGER NOT NULL DEFAULT 0, -- Resist
|
||||||
|
`pre` INTEGER NOT NULL DEFAULT 0, -- Precision
|
||||||
|
`fer` INTEGER NOT NULL DEFAULT 0, -- Ferocity
|
||||||
|
`luck` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`reqs` TEXT NOT NULL DEFAULT "",
|
||||||
|
`traits` TEXT NOT NULL DEFAULT "",
|
||||||
|
`lore` TEXT NOT NULL DEFAULT "",
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS mobs;
|
||||||
|
CREATE TABLE mobs (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL,
|
||||||
|
`rank` INTEGER NOT NULL,
|
||||||
|
`level` INTEGER NOT NULL,
|
||||||
|
`hp` INTEGER NOT NULL,
|
||||||
|
`m_hp` INTEGER NOT NULL,
|
||||||
|
`mp` INTEGER NOT NULL,
|
||||||
|
`m_mp` INTEGER NOT NULL,
|
||||||
|
`pow` INTEGER NOT NULL, -- Power
|
||||||
|
`acc` INTEGER NOT NULL, -- Accuracy
|
||||||
|
`pen` INTEGER NOT NULL, -- Penetration
|
||||||
|
`foc` INTEGER NOT NULL, -- Focus
|
||||||
|
`tou` INTEGER NOT NULL, -- Toughness
|
||||||
|
`arm` INTEGER NOT NULL, -- Armor
|
||||||
|
`res` INTEGER NOT NULL, -- Resist
|
||||||
|
`pre` INTEGER NOT NULL, -- Precision
|
||||||
|
`fer` INTEGER NOT NULL, -- Ferocity
|
||||||
|
`xp` INTEGER NOT NULL,
|
||||||
|
`silver` INTEGER NOT NULL,
|
||||||
|
`loot` TEXT NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
103
database/create/fights.sql
Normal file
103
database/create/fights.sql
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/*
|
||||||
|
@PvE
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS pve;
|
||||||
|
CREATE TABLE pve (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`char_hp` INTEGER NOT NULL,
|
||||||
|
`char_m_hp` INTEGER NOT NULL,
|
||||||
|
`char_mp` INTEGER NOT NULL,
|
||||||
|
`char_m_mp` INTEGER NOT NULL,
|
||||||
|
`char_pow` INTEGER NOT NULL, -- Power
|
||||||
|
`char_acc` INTEGER NOT NULL, -- Accuracy
|
||||||
|
`char_pen` INTEGER NOT NULL, -- Penetration
|
||||||
|
`char_foc` INTEGER NOT NULL, -- Focus
|
||||||
|
`char_tou` INTEGER NOT NULL, -- Toughness
|
||||||
|
`char_arm` INTEGER NOT NULL, -- Armor
|
||||||
|
`char_res` INTEGER NOT NULL, -- Resist
|
||||||
|
`char_pre` INTEGER NOT NULL, -- Precision
|
||||||
|
`char_fer` INTEGER NOT NULL, -- Ferocity
|
||||||
|
`mob_id` INTEGER NOT NULL,
|
||||||
|
`mob_level` INTEGER NOT NULL,
|
||||||
|
`mob_rank` INTEGER NOT NULL,
|
||||||
|
`mob_hp` INTEGER NOT NULL,
|
||||||
|
`mob_m_hp` INTEGER NOT NULL,
|
||||||
|
`mob_mp` INTEGER NOT NULL,
|
||||||
|
`mob_m_mp` INTEGER NOT NULL,
|
||||||
|
`mob_pow` INTEGER NOT NULL, -- Power
|
||||||
|
`mob_acc` INTEGER NOT NULL, -- Accuracy
|
||||||
|
`mob_pen` INTEGER NOT NULL, -- Penetration
|
||||||
|
`mob_foc` INTEGER NOT NULL, -- Focus
|
||||||
|
`mob_tou` INTEGER NOT NULL, -- Toughness
|
||||||
|
`mob_arm` INTEGER NOT NULL, -- Armor
|
||||||
|
`mob_res` INTEGER NOT NULL, -- Resist
|
||||||
|
`mob_pre` INTEGER NOT NULL, -- Precision
|
||||||
|
`mob_fer` INTEGER NOT NULL, -- Ferocity
|
||||||
|
`first_turn` INTEGER NOT NULL,
|
||||||
|
`turn` INTEGER NOT NULL default 1,
|
||||||
|
`winner` INTEGER NOT NULL default 0,
|
||||||
|
`can_flee` INTEGER NOT NULL default 1,
|
||||||
|
`escaped` INTEGER NOT NULL default 0,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_pve_char_id ON pve (`char_id`);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS pve_logs;
|
||||||
|
CREATE TABLE pve_logs (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`fight_id` INTEGER NOT NULL,
|
||||||
|
`info` TEXT NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_pve_logs_fight_id ON pve_logs (`fight_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@PvP
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS pvp;
|
||||||
|
CREATE TABLE pvp (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`char1_id` INTEGER NOT NULL,
|
||||||
|
`char1_hp` INTEGER NOT NULL,
|
||||||
|
`char1_max_hp` INTEGER NOT NULL,
|
||||||
|
`char1_mp` INTEGER NOT NULL,
|
||||||
|
`char1_max_mp` INTEGER NOT NULL,
|
||||||
|
`char1_pow` INTEGER NOT NULL, -- Power
|
||||||
|
`char1_acc` INTEGER NOT NULL, -- Accuracy
|
||||||
|
`char1_pen` INTEGER NOT NULL, -- Penetration
|
||||||
|
`char1_foc` INTEGER NOT NULL, -- Focus
|
||||||
|
`char1_tou` INTEGER NOT NULL, -- Toughness
|
||||||
|
`char1_arm` INTEGER NOT NULL, -- Armor
|
||||||
|
`char1_res` INTEGER NOT NULL, -- Resist
|
||||||
|
`char1_pre` INTEGER NOT NULL, -- Precision
|
||||||
|
`char1_fer` INTEGER NOT NULL, -- Ferocity
|
||||||
|
`char2_id` INTEGER NOT NULL,
|
||||||
|
`char2_hp` INTEGER NOT NULL,
|
||||||
|
`char2_m_hp` INTEGER NOT NULL,
|
||||||
|
`char2_mp` INTEGER NOT NULL,
|
||||||
|
`char2_m_mp` INTEGER NOT NULL,
|
||||||
|
`char2_pow` INTEGER NOT NULL, -- Power
|
||||||
|
`char2_acc` INTEGER NOT NULL, -- Accuracy
|
||||||
|
`char2_pen` INTEGER NOT NULL, -- Penetration
|
||||||
|
`char2_foc` INTEGER NOT NULL, -- Focus
|
||||||
|
`char2_tou` INTEGER NOT NULL, -- Toughness
|
||||||
|
`char2_arm` INTEGER NOT NULL, -- Armor
|
||||||
|
`char2_res` INTEGER NOT NULL, -- Resist
|
||||||
|
`char2_pre` INTEGER NOT NULL, -- Precision
|
||||||
|
`char2_fer` INTEGER NOT NULL, -- Ferocity
|
||||||
|
`first_turn` INTEGER NOT NULL,
|
||||||
|
`turn` INTEGER NOT NULL default 1,
|
||||||
|
`winner` INTEGER NOT NULL default 0,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_pvp_char1_id ON pvp (`char1_id`);
|
||||||
|
CREATE INDEX idx_pvp_char2_id ON pvp (`char2_id`);
|
||||||
|
|
||||||
|
CREATE TABLE pvp_logs (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`fight_id` INTEGER NOT NULL,
|
||||||
|
`info` TEXT NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_pvp_logs_fight_id ON pvp_logs (`fight_id`);
|
329
database/create/live.sql
Normal file
329
database/create/live.sql
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
/*
|
||||||
|
@BLOG
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS blog;
|
||||||
|
CREATE TABLE blog (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`author_id` INTEGER NOT NULL,
|
||||||
|
`title` TEXT NOT NULL,
|
||||||
|
`slug` TEXT NOT NULL UNIQUE,
|
||||||
|
`content` TEXT NOT NULL,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_blog_author_id ON blog (`author_id`);
|
||||||
|
CREATE INDEX idx_blog_slug ON blog (`slug`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS characters;
|
||||||
|
CREATE TABLE characters (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`user_id` INTEGER NOT NULL,
|
||||||
|
`name` TEXT NOT NULL UNIQUE,
|
||||||
|
`title_id` INTEGER NOT NULL DEFAULT 1,
|
||||||
|
`level` INTEGER NOT NULL DEFAULT 1,
|
||||||
|
`xp` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`xp_to_level` INTEGER NOT NULL DEFAULT 100,
|
||||||
|
`hp` INTEGER NOT NULL DEFAULT 20,
|
||||||
|
`m_hp` INTEGER NOT NULL DEFAULT 20,
|
||||||
|
`mp` INTEGER NOT NULL DEFAULT 10,
|
||||||
|
`m_mp` INTEGER NOT NULL DEFAULT 10,
|
||||||
|
`tp` INTEGER NOT NULL DEFAULT 1,
|
||||||
|
`m_tp` INTEGER NOT NULL DEFAULT 1,
|
||||||
|
`pow` INTEGER NOT NULL DEFAULT 0, -- Power
|
||||||
|
`acc` INTEGER NOT NULL DEFAULT 0, -- Accuracy
|
||||||
|
`pen` INTEGER NOT NULL DEFAULT 0, -- Penetration
|
||||||
|
`foc` INTEGER NOT NULL DEFAULT 0, -- Focus
|
||||||
|
`tou` INTEGER NOT NULL DEFAULT 0, -- Toughness
|
||||||
|
`arm` INTEGER NOT NULL DEFAULT 0, -- Armor
|
||||||
|
`res` INTEGER NOT NULL DEFAULT 0, -- Resist
|
||||||
|
`pre` INTEGER NOT NULL DEFAULT 0, -- Precision
|
||||||
|
`fer` INTEGER NOT NULL DEFAULT 0, -- Ferocity
|
||||||
|
`luck` INTEGER NOT NULL DEFAULT 0, -- Luck
|
||||||
|
`inv_slots` INTEGER NOT NULL DEFAULT 10,
|
||||||
|
`att_points` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_characters_user_id ON characters (`user_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARGEAR
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_gear;
|
||||||
|
CREATE TABLE char_gear (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`head` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`chest` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`boots` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`hands` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`m_hand` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`o_hand` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`rune` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`ring` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`amulet` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`pow` INTEGER NOT NULL DEFAULT 0, -- Power
|
||||||
|
`acc` INTEGER NOT NULL DEFAULT 0, -- Accuracy
|
||||||
|
`pen` INTEGER NOT NULL DEFAULT 0, -- Penetration
|
||||||
|
`foc` INTEGER NOT NULL DEFAULT 0, -- Focus
|
||||||
|
`tou` INTEGER NOT NULL DEFAULT 0, -- Toughness
|
||||||
|
`arm` INTEGER NOT NULL DEFAULT 0, -- Armor
|
||||||
|
`res` INTEGER NOT NULL DEFAULT 0, -- Resist
|
||||||
|
`pre` INTEGER NOT NULL DEFAULT 0, -- Precision
|
||||||
|
`fer` INTEGER NOT NULL DEFAULT 0, -- Ferocity
|
||||||
|
`luck` INTEGER NOT NULL DEFAULT 0, -- Luck
|
||||||
|
`max_hp` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`max_mp` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_char_gear_char_id ON char_gear (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARINV
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_inventory;
|
||||||
|
CREATE TABLE char_inventory (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`item_id` INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_inventory_char_id ON char_inventory (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@WALLETS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS wallets;
|
||||||
|
CREATE TABLE wallets (
|
||||||
|
`user_id` INTEGER NOT NULL,
|
||||||
|
`silver` INTEGER NOT NULL DEFAULT 10,
|
||||||
|
`stargem` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_wallets_user_id ON wallets (`user_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARBANK
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_bank;
|
||||||
|
CREATE TABLE char_bank (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`slots` INTEGER NOT NULL DEFAULT 5,
|
||||||
|
`silver` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`tier` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`can_collect` INTEGER NOT NULL DEFAULT 1,
|
||||||
|
`last_collect` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_bank_char_id ON char_bank (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARBANKITEMS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_banked_items;
|
||||||
|
CREATE TABLE char_banked_items (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`item_id` INTEGER NOT NULL
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_banked_items_char_id ON char_banked_items (`char_id`);
|
||||||
|
CREATE INDEX idx_banked_items_item_id ON char_banked_items (`item_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@TOWNS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS towns;
|
||||||
|
CREATE TABLE towns (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`x` INTEGER NOT NULL,
|
||||||
|
`y` INTEGER NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_towns_location ON towns (`x`, `y`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@SHOPS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS shops;
|
||||||
|
CREATE TABLE shops (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL,
|
||||||
|
`x` INTEGER NOT NULL,
|
||||||
|
`y` INTEGER NOT NULL,
|
||||||
|
`items` TEXT NOT NULL,
|
||||||
|
`gear` TEXT NOT NULL,
|
||||||
|
`materials` TEXT NOT NULL,
|
||||||
|
`b_mod` INTEGER NOT NULL DEFAULT 100,
|
||||||
|
`s_mod` INTEGER NOT NULL DEFAULT 100,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_shops_location ON shops (`x`, `y`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@INNS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS inns;
|
||||||
|
CREATE TABLE inns (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL,
|
||||||
|
`x` INTEGER NOT NULL,
|
||||||
|
`y` INTEGER NOT NULL,
|
||||||
|
`cost` INTEGER NOT NULL,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_inns_location ON inns (`x`, `y`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@GUILDS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS guilds;
|
||||||
|
CREATE TABLE guilds (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL DEFAULT "",
|
||||||
|
`leader_id` INTEGER NOT NULL,
|
||||||
|
`silver` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`rep` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_guilds_leader_id ON guilds (`leader_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@GUILDRANKS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS guild_ranks;
|
||||||
|
CREATE TABLE guild_ranks (
|
||||||
|
`guild_id` INTEGER NOT NULL,
|
||||||
|
`order` INTEGER NOT NULL,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`permissions` TEXT NOT NULL,
|
||||||
|
`leader` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_guild_ranks_guild_id ON guild_ranks (`guild_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@GUILDMEMBERS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS guild_members;
|
||||||
|
CREATE TABLE guild_members (
|
||||||
|
`guild_id` INTEGER NOT NULL,
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`rank` INTEGER NOT NULL,
|
||||||
|
`rep` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`donated` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`joined` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_guild_members_guild_id ON guild_members (`guild_id`);
|
||||||
|
CREATE INDEX idx_guild_members_char_id ON guild_members (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@NPCS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS npcs;
|
||||||
|
CREATE TABLE npcs (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` INTEGER NOT NULL,
|
||||||
|
`lore` TEXT NOT NULL,
|
||||||
|
`conversation` TEXT NOT NULL,
|
||||||
|
`x` INTEGER NOT NULL,
|
||||||
|
`y` INTEGER NOT NULL,
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_npcs_location ON npcs (`x`, `y`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@TOWNREP
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_town_rep;
|
||||||
|
CREATE TABLE char_town_rep (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`town_id` INTEGER NOT NULL,
|
||||||
|
`rep` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_char_town_rep_char_id ON char_town_rep (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@ITEMS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS items;
|
||||||
|
CREATE TABLE items (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL,
|
||||||
|
`type` TEXT NOT NULL DEFAULT 0,
|
||||||
|
`rarity` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`forged` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`quality` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`value` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`consumable` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`duration` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`durability` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`m_durability` INTEGER NOT NULL DEFAULT 0,
|
||||||
|
`pow` INTEGER NOT NULL DEFAULT 0, -- Power
|
||||||
|
`acc` INTEGER NOT NULL DEFAULT 0, -- Accuracy
|
||||||
|
`pen` INTEGER NOT NULL DEFAULT 0, -- Penetration
|
||||||
|
`foc` INTEGER NOT NULL DEFAULT 0, -- Focus
|
||||||
|
`tou` INTEGER NOT NULL DEFAULT 0, -- Toughness
|
||||||
|
`arm` INTEGER NOT NULL DEFAULT 0, -- Armor
|
||||||
|
`res` INTEGER NOT NULL DEFAULT 0, -- Resist
|
||||||
|
`pre` INTEGER NOT NULL DEFAULT 0, -- Precision
|
||||||
|
`fer` INTEGER NOT NULL DEFAULT 0, -- Ferocity
|
||||||
|
`luck` INTEGER NOT NULL DEFAULT 0, -- Luck
|
||||||
|
`reqs` TEXT NOT NULL DEFAULT "",
|
||||||
|
`traits` TEXT NOT NULL DEFAULT "",
|
||||||
|
`lore` TEXT NOT NULL DEFAULT "",
|
||||||
|
`created` DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
`updated` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARTRAITS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_traits;
|
||||||
|
CREATE TABLE char_traits (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`trait_id` INTEGER NOT NULL,
|
||||||
|
`value` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_char_traits_char_id ON char_traits (`char_id`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@CHARLOCATIONS
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS char_locations;
|
||||||
|
CREATE TABLE char_locations (
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`x` INTEGER NOT NULL,
|
||||||
|
`y` INTEGER NOT NULL,
|
||||||
|
`currently` INTEGER NOT NULL DEFAULT 0
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_char_locations_char_id ON char_locations (`char_id`);
|
||||||
|
CREATE INDEX idx_char_locations_location ON char_locations (`x`, `y`);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@TITLES
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS titles;
|
||||||
|
CREATE TABLE titles (
|
||||||
|
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
`name` TEXT NOT NULL DEFAULT 'Title',
|
||||||
|
`lore` TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
@OWNEDTITLES
|
||||||
|
*/
|
||||||
|
DROP TABLE IF EXISTS owned_titles;
|
||||||
|
CREATE TABLE owned_titles (
|
||||||
|
`title_id` INTEGER NOT NULL,
|
||||||
|
`char_id` INTEGER NOT NULL,
|
||||||
|
`awarded` DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
CREATE INDEX idx_owned_titles_char_id ON owned_titles (`char_id`);
|
||||||
|
CREATE INDEX idx_owned_titles_owned ON owned_titles (`char_id`, `title_id`);
|
BIN
database/live.db-shm
Normal file
BIN
database/live.db-shm
Normal file
Binary file not shown.
BIN
database/live.db-wal
Normal file
BIN
database/live.db-wal
Normal file
Binary file not shown.
77
database/manage.sh
Executable file
77
database/manage.sh
Executable file
|
@ -0,0 +1,77 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Directories for schema and population scripts
|
||||||
|
CREATE_DIR="create"
|
||||||
|
POPULATE_DIR="populate"
|
||||||
|
|
||||||
|
# List of databases
|
||||||
|
DATABASES=("auth" "blueprints" "fights" "live")
|
||||||
|
|
||||||
|
# Function to create a database and apply the schema
|
||||||
|
create_db() {
|
||||||
|
for db in "${DATABASES[@]}"; do
|
||||||
|
db_file="${db}.db"
|
||||||
|
schema_file="${CREATE_DIR}/${db}.sql"
|
||||||
|
|
||||||
|
if [[ -f "$schema_file" ]]; then
|
||||||
|
echo "Creating $db_file and applying schema from $schema_file..."
|
||||||
|
sqlite3 "$db_file" < "$schema_file"
|
||||||
|
else
|
||||||
|
echo "Schema file for $db not found. Skipping."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to populate the database with data
|
||||||
|
populate_db() {
|
||||||
|
for db in "${DATABASES[@]}"; do
|
||||||
|
db_file="${db}.db"
|
||||||
|
populate_file="${POPULATE_DIR}/${db}.sql"
|
||||||
|
|
||||||
|
if [[ -f "$populate_file" ]]; then
|
||||||
|
echo "Populating $db_file using data from $populate_file..."
|
||||||
|
sqlite3 "$db_file" < "$populate_file"
|
||||||
|
else
|
||||||
|
echo "Population file for $db not found. Skipping."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to drop (delete) the databases
|
||||||
|
drop_db() {
|
||||||
|
for db in "${DATABASES[@]}"; do
|
||||||
|
db_file="${db}.db"
|
||||||
|
|
||||||
|
if [[ -f "$db_file" ]]; then
|
||||||
|
echo "Dropping $db_file..."
|
||||||
|
rm "$db_file"
|
||||||
|
else
|
||||||
|
echo "$db_file does not exist. Skipping."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function for a full reset (create and populate)
|
||||||
|
full_reset() {
|
||||||
|
create_db
|
||||||
|
populate_db
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
case $1 in
|
||||||
|
create)
|
||||||
|
create_db
|
||||||
|
;;
|
||||||
|
populate)
|
||||||
|
populate_db
|
||||||
|
;;
|
||||||
|
reset)
|
||||||
|
full_reset
|
||||||
|
;;
|
||||||
|
drop)
|
||||||
|
drop_db
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {create|populate|reset}"
|
||||||
|
;;
|
||||||
|
esac
|
1
database/populate/live.sql
Normal file
1
database/populate/live.sql
Normal file
|
@ -0,0 +1 @@
|
||||||
|
INSERT INTO titles (`name`, `lore`) VALUES ('Adventurer', 'A risk-taker hunting for glory and loot!');
|
|
@ -1,666 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
This script is used to create the database and the tables for said database.
|
|
||||||
php create.php <database>
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once __DIR__ . '/../../color.php';
|
|
||||||
|
|
||||||
const AUTH = 'auth.db';
|
|
||||||
const LIVE = 'live.db';
|
|
||||||
const FIGHTS = 'fights.db';
|
|
||||||
const BPS = 'blueprints.db';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Echo a string with a newline.
|
|
||||||
*/
|
|
||||||
function eln($string)
|
|
||||||
{
|
|
||||||
echo $string . PHP_EOL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// pick the database to create
|
|
||||||
if (!isset($argv[1])) {
|
|
||||||
eln(red('Missing database name.'));
|
|
||||||
eln(blue('Usage: ') . 'php create.php auth.db|live.db|fight.db|blueprints.db [-d]');
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure it's a valid database
|
|
||||||
if (!in_array($argv[1], [AUTH, LIVE, FIGHTS, BPS, 'reset'])) {
|
|
||||||
eln(red('Invalid database: ') . $argv[1]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$database = $argv[1];
|
|
||||||
// whether the -d flag is set
|
|
||||||
$drop = isset($argv[2]) && $argv[2] === '-d';
|
|
||||||
|
|
||||||
/*
|
|
||||||
================================================================================
|
|
||||||
Databases
|
|
||||||
================================================================================
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
The Auth database is used to store user information - not player info, but user info.
|
|
||||||
Usernames, passwords, email, session tokens, etc.
|
|
||||||
*/
|
|
||||||
if ($database === AUTH || $database === 'reset') {
|
|
||||||
if ($drop || $database === 'reset') {
|
|
||||||
unlink(__DIR__ . '/../' . AUTH);
|
|
||||||
eln(red('Dropped database: ') . 'auth.db');
|
|
||||||
}
|
|
||||||
$db = new SQLite3(__DIR__ . '/../' . AUTH);
|
|
||||||
|
|
||||||
// Users table
|
|
||||||
$db->exec('DROP TABLE IF EXISTS users');
|
|
||||||
$r = $db->exec('CREATE TABLE users (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
username TEXT NOT NULL UNIQUE,
|
|
||||||
email TEXT NOT NULL UNIQUE,
|
|
||||||
password TEXT NOT NULL,
|
|
||||||
auth INT NOT NULL DEFAULT 0,
|
|
||||||
char_id INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char_slots INTEGER NOT NULL DEFAULT 300,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
last_login DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
|
|
||||||
created_or_error($r, 'users');
|
|
||||||
|
|
||||||
// Sessions table
|
|
||||||
$db->exec('DROP TABLE IF EXISTS sessions');
|
|
||||||
$r = $db->exec('CREATE TABLE sessions (
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
token TEXT NOT NULL UNIQUE,
|
|
||||||
expires INTEGER NOT NULL
|
|
||||||
)');
|
|
||||||
$db->exec('CREATE INDEX idx_sessions_user_id ON sessions (user_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'sessions');
|
|
||||||
|
|
||||||
// Verification tokens
|
|
||||||
$db->exec('DROP TABLE IF EXISTS tokens');
|
|
||||||
$r = $db->exec('CREATE TABLE tokens (
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
token TEXT NOT NULL UNIQUE,
|
|
||||||
created INTEGER NOT NULL
|
|
||||||
)');
|
|
||||||
$db->exec('CREATE INDEX idx_tokens_user_id ON tokens (user_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'tokens');
|
|
||||||
|
|
||||||
eln(green('Created database: ') . 'auth.db');
|
|
||||||
|
|
||||||
if ($database !== 'reset') exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
The Fights database is used to store information about fights.
|
|
||||||
A fight is a battle between two characters; players or NPCs.
|
|
||||||
*/
|
|
||||||
if ($database === FIGHTS || $database === 'reset') {
|
|
||||||
if ($drop || $database === 'reset') {
|
|
||||||
unlink(__DIR__ . '/../' . FIGHTS);
|
|
||||||
eln(red('Dropped database: ') . 'fights.db');
|
|
||||||
}
|
|
||||||
$db = new SQLite3(__DIR__ . '/../' . FIGHTS);
|
|
||||||
|
|
||||||
// PvE fights
|
|
||||||
$db->exec('DROP TABLE IF EXISTS pve');
|
|
||||||
$r = $db->exec('CREATE TABLE pve (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
char_hp INTEGER NOT NULL,
|
|
||||||
char_max_hp INTEGER NOT NULL,
|
|
||||||
char_mp INTEGER NOT NULL,
|
|
||||||
char_max_mp INTEGER NOT NULL,
|
|
||||||
char_power INTEGER NOT NULL,
|
|
||||||
char_accuracy INTEGER NOT NULL,
|
|
||||||
char_penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char_focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char_toughness INTEGER NOT NULL,
|
|
||||||
char_armor INTEGER NOT NULL,
|
|
||||||
char_resist INTEGER NOT NULL,
|
|
||||||
char_crit INTEGER NOT NULL,
|
|
||||||
char_precision INTEGER NOT NULL,
|
|
||||||
char_ferocity INTEGER NOT NULL,
|
|
||||||
mob_id INTEGER NOT NULL,
|
|
||||||
mob_level INTEGER NOT NULL,
|
|
||||||
mob_rank INTEGER NOT NULL,
|
|
||||||
mob_hp INTEGER NOT NULL,
|
|
||||||
mob_max_hp INTEGER NOT NULL,
|
|
||||||
mob_mp INTEGER NOT NULL,
|
|
||||||
mob_max_mp INTEGER NOT NULL,
|
|
||||||
mob_power INTEGER NOT NULL,
|
|
||||||
mob_toughness INTEGER NOT NULL,
|
|
||||||
mob_armor INTEGER NOT NULL,
|
|
||||||
mob_precision INTEGER NOT NULL,
|
|
||||||
mob_penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
mob_focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
mob_crit INTEGER NOT NULL,
|
|
||||||
mob_ferocity INTEGER NOT NULL,
|
|
||||||
mob_vitality INTEGER NOT NULL,
|
|
||||||
first_turn INTEGER NOT NULL,
|
|
||||||
turn INTEGER NOT NULL default 1,
|
|
||||||
winner INTEGER NOT NULL default 0,
|
|
||||||
flee INTEGER NOT NULL default 1,
|
|
||||||
escaped INTEGER NOT NULL default 0,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_pve_char_id ON pve (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'pve');
|
|
||||||
|
|
||||||
// PvP fights
|
|
||||||
$db->exec('DROP TABLE IF EXISTS pvp');
|
|
||||||
$r = $db->exec('CREATE TABLE pvp (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
char1_id INTEGER NOT NULL,
|
|
||||||
char1_hp INTEGER NOT NULL,
|
|
||||||
char1_max_hp INTEGER NOT NULL,
|
|
||||||
char1_mp INTEGER NOT NULL,
|
|
||||||
char1_max_mp INTEGER NOT NULL,
|
|
||||||
char1_power INTEGER NOT NULL,
|
|
||||||
char1_accuracy INTEGER NOT NULL,
|
|
||||||
char1_penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char1_focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char1_toughness INTEGER NOT NULL,
|
|
||||||
char1_armor INTEGER NOT NULL,
|
|
||||||
char1_resist INTEGER NOT NULL,
|
|
||||||
char1_crit INTEGER NOT NULL,
|
|
||||||
char1_precision INTEGER NOT NULL,
|
|
||||||
char1_ferocity INTEGER NOT NULL,
|
|
||||||
char2_id INTEGER NOT NULL,
|
|
||||||
char2_hp INTEGER NOT NULL,
|
|
||||||
char2_max_hp INTEGER NOT NULL,
|
|
||||||
char2_mp INTEGER NOT NULL,
|
|
||||||
char2_max_mp INTEGER NOT NULL,
|
|
||||||
char2_power INTEGER NOT NULL,
|
|
||||||
char2_accuracy INTEGER NOT NULL,
|
|
||||||
char2_penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char2_focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
char2_toughness INTEGER NOT NULL,
|
|
||||||
char2_armor INTEGER NOT NULL,
|
|
||||||
char2_resist INTEGER NOT NULL,
|
|
||||||
char2_crit INTEGER NOT NULL,
|
|
||||||
char2_precision INTEGER NOT NULL,
|
|
||||||
char2_ferocity INTEGER NOT NULL,
|
|
||||||
first_turn INTEGER NOT NULL,
|
|
||||||
turn INTEGER NOT NULL default 1,
|
|
||||||
winner INTEGER NOT NULL default 0,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for char1_id
|
|
||||||
$db->exec('CREATE INDEX idx_pvp_char1_id ON pvp (char1_id)');
|
|
||||||
// Create an index for char2_id
|
|
||||||
$db->exec('CREATE INDEX idx_pvp_char2_id ON pvp (char2_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'pvp');
|
|
||||||
|
|
||||||
// PvE fight logs
|
|
||||||
$db->exec('DROP TABLE IF EXISTS pve_logs');
|
|
||||||
$r = $db->exec('CREATE TABLE pve_logs (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
fight_id INTEGER NOT NULL,
|
|
||||||
info TEXT NOT NULL
|
|
||||||
)');
|
|
||||||
// Create an index for fight_id
|
|
||||||
$db->exec('CREATE INDEX idx_pve_logs_fight_id ON pve_logs (fight_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'pve_logs');
|
|
||||||
|
|
||||||
// PvP fight logs
|
|
||||||
$db->exec('DROP TABLE IF EXISTS pvp_logs');
|
|
||||||
$r = $db->exec('CREATE TABLE pvp_logs (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
fight_id INTEGER NOT NULL,
|
|
||||||
info TEXT NOT NULL
|
|
||||||
)');
|
|
||||||
// Create an index for fight_id
|
|
||||||
$db->exec('CREATE INDEX idx_pvp_logs_fight_id ON pvp_logs (fight_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'pvp_logs');
|
|
||||||
|
|
||||||
eln(green('Created database: ') . 'fights.db');
|
|
||||||
|
|
||||||
if ($database !== 'reset') exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
The Blueprints database is used to store information about items, weapons, armor, etc.
|
|
||||||
*/
|
|
||||||
if ($database === BPS || $database === 'reset') {
|
|
||||||
if ($drop || $database === 'reset') {
|
|
||||||
unlink(__DIR__ . '/../' . BPS);
|
|
||||||
eln(red('Dropped database: ') . 'blueprints.db');
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = new SQLite3(__DIR__ . '/../' . BPS);
|
|
||||||
|
|
||||||
// Items
|
|
||||||
$db->exec('DROP TABLE IF EXISTS items');
|
|
||||||
$r = $db->exec('CREATE TABLE items (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type INTEGER NOT NULL DEFAULT 0,
|
|
||||||
subtype INTEGER NOT NULL DEFAULT 0,
|
|
||||||
slot INTEGER NOT NULL DEFAULT 0,
|
|
||||||
rarity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
value INTEGER NOT NULL DEFAULT 0,
|
|
||||||
consumable INTEGER NOT NULL DEFAULT 0,
|
|
||||||
duration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
durability INTEGER NOT NULL DEFAULT 0,
|
|
||||||
power INTEGER NOT NULL DEFAULT 0,
|
|
||||||
accuracy INTEGER NOT NULL DEFAULT 0,
|
|
||||||
penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
toughness INTEGER NOT NULL DEFAULT 0,
|
|
||||||
armor INTEGER NOT NULL DEFAULT 0,
|
|
||||||
resist INTEGER NOT NULL DEFAULT 0,
|
|
||||||
crit INTEGER NOT NULL DEFAULT 0,
|
|
||||||
precision INTEGER NOT NULL DEFAULT 0,
|
|
||||||
ferocity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
luck INTEGER NOT NULL DEFAULT 0,
|
|
||||||
reqs TEXT NOT NULL DEFAULT "",
|
|
||||||
traits TEXT NOT NULL DEFAULT "",
|
|
||||||
lore TEXT NOT NULL DEFAULT "",
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
|
|
||||||
created_or_error($r, 'items');
|
|
||||||
|
|
||||||
// Mobs
|
|
||||||
$db->exec('DROP TABLE IF EXISTS mobs');
|
|
||||||
$r = $db->exec('CREATE TABLE mobs (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type INTEGER NOT NULL,
|
|
||||||
rank INTEGER NOT NULL,
|
|
||||||
level INTEGER NOT NULL,
|
|
||||||
hp INTEGER NOT NULL,
|
|
||||||
max_hp INTEGER NOT NULL,
|
|
||||||
mp INTEGER NOT NULL,
|
|
||||||
max_mp INTEGER NOT NULL,
|
|
||||||
power INTEGER NOT NULL,
|
|
||||||
toughness INTEGER NOT NULL,
|
|
||||||
armor INTEGER NOT NULL,
|
|
||||||
precision INTEGER NOT NULL,
|
|
||||||
crit INTEGER NOT NULL,
|
|
||||||
ferocity INTEGER NOT NULL,
|
|
||||||
vitality INTEGER NOT NULL,
|
|
||||||
xp INTEGER NOT NULL,
|
|
||||||
silver INTEGER NOT NULL,
|
|
||||||
loot TEXT NOT NULL,
|
|
||||||
lore TEXT NOT NULL,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
|
|
||||||
created_or_error($r, 'mobs');
|
|
||||||
|
|
||||||
eln(green('Created database: ') . 'blueprints.db');
|
|
||||||
|
|
||||||
if ($database !== 'reset') exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
The Live database is used to store information about players, NPCs, guilds, etc.
|
|
||||||
*/
|
|
||||||
if ($database === LIVE || $database === 'reset') {
|
|
||||||
if ($drop || $database === 'reset') {
|
|
||||||
unlink(__DIR__ . '/../' . LIVE);
|
|
||||||
eln(red('Dropped database: ') . 'live.db');
|
|
||||||
}
|
|
||||||
|
|
||||||
$db = new SQLite3(__DIR__ . '/../' . LIVE);
|
|
||||||
|
|
||||||
// Blog posts
|
|
||||||
$db->exec('DROP TABLE IF EXISTS blog');
|
|
||||||
$r = $db->exec('CREATE TABLE blog (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
author_id INTEGER NOT NULL,
|
|
||||||
title TEXT NOT NULL,
|
|
||||||
slug TEXT NOT NULL UNIQUE,
|
|
||||||
content TEXT NOT NULL,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for author_id
|
|
||||||
$db->exec('CREATE INDEX idx_blog_author_id ON blog (author_id)');
|
|
||||||
// Create an index for the slug
|
|
||||||
$db->exec('CREATE INDEX idx_blog_slug ON blog (slug)');
|
|
||||||
|
|
||||||
created_or_error($r, 'blog');
|
|
||||||
|
|
||||||
// Characters
|
|
||||||
$db->exec('DROP TABLE IF EXISTS characters');
|
|
||||||
$r = $db->exec('CREATE TABLE characters (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
name TEXT NOT NULL UNIQUE,
|
|
||||||
title_id INTEGER NOT NULL DEFAULT 0,
|
|
||||||
level INTEGER NOT NULL DEFAULT 1,
|
|
||||||
xp INTEGER NOT NULL DEFAULT 0,
|
|
||||||
xp_to_level INTEGER NOT NULL DEFAULT 100,
|
|
||||||
current_hp INTEGER NOT NULL DEFAULT 20,
|
|
||||||
max_hp INTEGER NOT NULL DEFAULT 20,
|
|
||||||
current_mp INTEGER NOT NULL DEFAULT 10,
|
|
||||||
max_mp INTEGER NOT NULL DEFAULT 10,
|
|
||||||
current_tp INTEGER NOT NULL DEFAULT 1,
|
|
||||||
max_tp INTEGER NOT NULL DEFAULT 1,
|
|
||||||
power INTEGER NOT NULL DEFAULT 0,
|
|
||||||
accuracy INTEGER NOT NULL DEFAULT 0,
|
|
||||||
penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
toughness INTEGER NOT NULL DEFAULT 0,
|
|
||||||
armor INTEGER NOT NULL DEFAULT 0,
|
|
||||||
resist INTEGER NOT NULL DEFAULT 0,
|
|
||||||
precision INTEGER NOT NULL DEFAULT 0,
|
|
||||||
ferocity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
luck INTEGER NOT NULL DEFAULT 0,
|
|
||||||
inv_slots INTEGER NOT NULL DEFAULT 10,
|
|
||||||
attrib_points INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for user_id
|
|
||||||
$db->exec('CREATE INDEX idx_characters_user_id ON characters (user_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'characters');
|
|
||||||
|
|
||||||
// Player gear
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_gear');
|
|
||||||
$r = $db->exec('CREATE TABLE char_gear (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
head INTEGER NOT NULL DEFAULT 0,
|
|
||||||
chest INTEGER NOT NULL DEFAULT 0,
|
|
||||||
boots INTEGER NOT NULL DEFAULT 0,
|
|
||||||
hands INTEGER NOT NULL DEFAULT 0,
|
|
||||||
main_hand INTEGER NOT NULL DEFAULT 0,
|
|
||||||
off_hand INTEGER NOT NULL DEFAULT 0,
|
|
||||||
rune INTEGER NOT NULL DEFAULT 0,
|
|
||||||
ring INTEGER NOT NULL DEFAULT 0,
|
|
||||||
amulet INTEGER NOT NULL DEFAULT 0,
|
|
||||||
power INTEGER NOT NULL DEFAULT 0,
|
|
||||||
accuracy INTEGER NOT NULL DEFAULT 0,
|
|
||||||
penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
toughness INTEGER NOT NULL DEFAULT 0,
|
|
||||||
armor INTEGER NOT NULL DEFAULT 0,
|
|
||||||
resist INTEGER NOT NULL DEFAULT 0,
|
|
||||||
crit INTEGER NOT NULL DEFAULT 0,
|
|
||||||
precision INTEGER NOT NULL DEFAULT 0,
|
|
||||||
ferocity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
luck INTEGER NOT NULL DEFAULT 0,
|
|
||||||
max_hp INTEGER NOT NULL DEFAULT 0,
|
|
||||||
max_mp INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_char_gear_char_id ON char_gear (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_gear');
|
|
||||||
|
|
||||||
// Player inventory
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_inventory');
|
|
||||||
$r = $db->exec('CREATE TABLE char_inventory (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
item_id INTEGER NOT NULL
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_inventory_char_id ON char_inventory (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_inventory');
|
|
||||||
|
|
||||||
// Player wallet
|
|
||||||
$db->exec('DROP TABLE IF EXISTS wallets');
|
|
||||||
$r = $db->exec('CREATE TABLE wallets (
|
|
||||||
user_id INTEGER NOT NULL,
|
|
||||||
silver INTEGER NOT NULL DEFAULT 10,
|
|
||||||
stargem INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for user_id
|
|
||||||
$db->exec('CREATE INDEX idx_wallets_user_id ON wallets (user_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'wallets');
|
|
||||||
|
|
||||||
// Player bank
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_bank');
|
|
||||||
$r = $db->exec('CREATE TABLE char_bank (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
slots INTEGER NOT NULL DEFAULT 5,
|
|
||||||
silver INTEGER NOT NULL DEFAULT 0,
|
|
||||||
tier INTEGER NOT NULL DEFAULT 0,
|
|
||||||
can_collect INTEGER NOT NULL DEFAULT 1,
|
|
||||||
last_collected DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_bank_char_id ON char_bank (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_bank');
|
|
||||||
|
|
||||||
// Banked items
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_banked_items');
|
|
||||||
$r = $db->exec('CREATE TABLE char_banked_items (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
item_id INTEGER NOT NULL
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_banked_items_char_id ON char_banked_items (char_id)');
|
|
||||||
// Create an index for item_id
|
|
||||||
$db->exec('CREATE INDEX idx_banked_items_item_id ON char_banked_items (item_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_banked_items');
|
|
||||||
|
|
||||||
// Towns
|
|
||||||
$db->exec('DROP TABLE IF EXISTS towns');
|
|
||||||
$r = $db->exec('CREATE TABLE towns (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
x INTEGER NOT NULL,
|
|
||||||
y INTEGER NOT NULL,
|
|
||||||
type INTEGER NOT NULL,
|
|
||||||
lore TEXT NOT NULL,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for the x, y location
|
|
||||||
$db->exec('CREATE INDEX idx_towns_location ON towns (x, y)');
|
|
||||||
|
|
||||||
created_or_error($r, 'towns');
|
|
||||||
|
|
||||||
// Shops
|
|
||||||
$db->exec('DROP TABLE IF EXISTS shops');
|
|
||||||
$r = $db->exec('CREATE TABLE shops (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type INTEGER NOT NULL,
|
|
||||||
lore TEXT NOT NULL,
|
|
||||||
x INTEGER NOT NULL,
|
|
||||||
y INTEGER NOT NULL,
|
|
||||||
items TEXT NOT NULL,
|
|
||||||
gear TEXT NOT NULL,
|
|
||||||
materials TEXT NOT NULL,
|
|
||||||
buy_modifier INTEGER NOT NULL DEFAULT 100,
|
|
||||||
sell_modifier INTEGER NOT NULL DEFAULT 100,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for the x, y location
|
|
||||||
$db->exec('CREATE INDEX idx_shops_location ON shops (x, y)');
|
|
||||||
|
|
||||||
created_or_error($r, 'shops');
|
|
||||||
|
|
||||||
// Inns
|
|
||||||
$db->exec('DROP TABLE IF EXISTS inns');
|
|
||||||
$r = $db->exec('CREATE TABLE inns (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type INTEGER NOT NULL,
|
|
||||||
lore TEXT NOT NULL,
|
|
||||||
x INTEGER NOT NULL,
|
|
||||||
y INTEGER NOT NULL,
|
|
||||||
cost INTEGER NOT NULL,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for the x, y location
|
|
||||||
$db->exec('CREATE INDEX idx_inns_location ON inns (x, y)');
|
|
||||||
|
|
||||||
created_or_error($r, 'inns');
|
|
||||||
|
|
||||||
// Guilds
|
|
||||||
$db->exec('DROP TABLE IF EXISTS guilds');
|
|
||||||
$r = $db->exec('CREATE TABLE guilds (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
lore TEXT NOT NULL DEFAULT "",
|
|
||||||
leader_id INTEGER NOT NULL,
|
|
||||||
silver INTEGER NOT NULL DEFAULT 0,
|
|
||||||
rep INTEGER NOT NULL DEFAULT 0,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for leader_id
|
|
||||||
$db->exec('CREATE INDEX idx_guilds_leader_id ON guilds (leader_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'guilds');
|
|
||||||
|
|
||||||
// Guild ranks
|
|
||||||
$db->exec('DROP TABLE IF EXISTS guild_ranks');
|
|
||||||
$r = $db->exec('CREATE TABLE guild_ranks (
|
|
||||||
guild_id INTEGER NOT NULL,
|
|
||||||
rank INTEGER NOT NULL,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
permissions TEXT NOT NULL
|
|
||||||
)');
|
|
||||||
// Create an index for guild_id
|
|
||||||
$db->exec('CREATE INDEX idx_guild_ranks_guild_id ON guild_ranks (guild_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'guild_ranks');
|
|
||||||
|
|
||||||
// Guild members
|
|
||||||
$db->exec('DROP TABLE IF EXISTS guild_members');
|
|
||||||
$r = $db->exec('CREATE TABLE guild_members (
|
|
||||||
guild_id INTEGER NOT NULL,
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
rank INTEGER NOT NULL,
|
|
||||||
rep INTEGER NOT NULL DEFAULT 0,
|
|
||||||
donated INTEGER NOT NULL DEFAULT 0,
|
|
||||||
joined DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for guild_id
|
|
||||||
$db->exec('CREATE INDEX idx_guild_members_guild_id ON guild_members (guild_id)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_guild_members_char_id ON guild_members (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'guild_members');
|
|
||||||
|
|
||||||
// NPCs
|
|
||||||
$db->exec('DROP TABLE IF EXISTS npcs');
|
|
||||||
$r = $db->exec('CREATE TABLE npcs (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type INTEGER NOT NULL,
|
|
||||||
lore TEXT NOT NULL,
|
|
||||||
conversation TEXT NOT NULL,
|
|
||||||
x INTEGER NOT NULL,
|
|
||||||
y INTEGER NOT NULL,
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
// Create an index for the x, y location
|
|
||||||
$db->exec('CREATE INDEX idx_npcs_location ON npcs (x, y)');
|
|
||||||
|
|
||||||
created_or_error($r, 'npcs');
|
|
||||||
|
|
||||||
// Town reputation
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_town_rep');
|
|
||||||
$r = $db->exec('CREATE TABLE char_town_rep (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
town_id INTEGER NOT NULL,
|
|
||||||
rep INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_char_town_rep_char_id ON char_town_rep (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_town_rep');
|
|
||||||
|
|
||||||
// Items
|
|
||||||
$db->exec('DROP TABLE IF EXISTS items');
|
|
||||||
$r = $db->exec('CREATE TABLE items (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
type TEXT NOT NULL DEFAULT 0,
|
|
||||||
rarity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
forged INTEGER NOT NULL DEFAULT 0,
|
|
||||||
quality INTEGER NOT NULL DEFAULT 0,
|
|
||||||
value INTEGER NOT NULL DEFAULT 0,
|
|
||||||
consumable INTEGER NOT NULL DEFAULT 0,
|
|
||||||
duration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
durability INTEGER NOT NULL DEFAULT 0,
|
|
||||||
max_durability INTEGER NOT NULL DEFAULT 0,
|
|
||||||
power INTEGER NOT NULL DEFAULT 0,
|
|
||||||
accuracy INTEGER NOT NULL DEFAULT 0,
|
|
||||||
penetration INTEGER NOT NULL DEFAULT 0,
|
|
||||||
focus INTEGER NOT NULL DEFAULT 0,
|
|
||||||
toughness INTEGER NOT NULL DEFAULT 0,
|
|
||||||
armor INTEGER NOT NULL DEFAULT 0,
|
|
||||||
resist INTEGER NOT NULL DEFAULT 0,
|
|
||||||
crit INTEGER NOT NULL DEFAULT 0,
|
|
||||||
precision INTEGER NOT NULL DEFAULT 0,
|
|
||||||
ferocity INTEGER NOT NULL DEFAULT 0,
|
|
||||||
luck INTEGER NOT NULL DEFAULT 0,
|
|
||||||
reqs TEXT NOT NULL DEFAULT "",
|
|
||||||
traits TEXT NOT NULL DEFAULT "",
|
|
||||||
lore TEXT NOT NULL DEFAULT "",
|
|
||||||
created DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
updated DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
||||||
)');
|
|
||||||
|
|
||||||
created_or_error($r, 'items');
|
|
||||||
|
|
||||||
// Player traits
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_traits');
|
|
||||||
$r = $db->exec('CREATE TABLE char_traits (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
trait_id INTEGER NOT NULL,
|
|
||||||
value INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_char_traits_char_id ON char_traits (char_id)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_traits');
|
|
||||||
|
|
||||||
// Character location
|
|
||||||
$db->exec('DROP TABLE IF EXISTS char_locations');
|
|
||||||
$r = $db->exec('CREATE TABLE char_locations (
|
|
||||||
char_id INTEGER NOT NULL,
|
|
||||||
x INTEGER NOT NULL,
|
|
||||||
y INTEGER NOT NULL,
|
|
||||||
currently INTEGER NOT NULL DEFAULT 0
|
|
||||||
)');
|
|
||||||
// Create an index for char_id
|
|
||||||
$db->exec('CREATE INDEX idx_char_locations_char_id ON char_locations (char_id)');
|
|
||||||
// Create an index for x, y location
|
|
||||||
$db->exec('CREATE INDEX idx_char_locations_location ON char_locations (x, y)');
|
|
||||||
|
|
||||||
created_or_error($r, 'char_locations');
|
|
||||||
|
|
||||||
eln(green('Created database: ') . 'live.db');
|
|
||||||
|
|
||||||
if ($database !== 'reset') exit(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function created_or_error($result, $table)
|
|
||||||
{
|
|
||||||
if ($result === false) {
|
|
||||||
eln(red('Failed to create table: ') . $table);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
eln(yellow('Created table: ') . $table);
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
|
@ -3,6 +3,7 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border: none;
|
border: none;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
font-family: var(--main-font);
|
||||||
background: #f7f8fa linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.1));
|
background: #f7f8fa linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.1));
|
||||||
box-shadow: 0 1px 0 1px rgba(255, 255, 255, 0.3) inset, 0 0 0 1px #adb2bb inset;
|
box-shadow: 0 1px 0 1px rgba(255, 255, 255, 0.3) inset, 0 0 0 1px #adb2bb inset;
|
||||||
color: #111111;
|
color: #111111;
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
@import 'utilities.css';
|
@import 'utilities.css';
|
||||||
@import 'buttons.css';
|
@import 'buttons.css';
|
||||||
@import 'forms.css';
|
@import 'forms.css';
|
||||||
|
@import 'profile.css';
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: #bcc6cf;
|
background-color: #bcc6cf;
|
||||||
|
@ -10,10 +11,10 @@ body {
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
max-width: 1640px;
|
max-width: 1640px;
|
||||||
margin: 0px auto;
|
margin: 0px auto;
|
||||||
font-family: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
|
font-family: var(--main-font);
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header#main-header {
|
||||||
height: 76px;
|
height: 76px;
|
||||||
color: white;
|
color: white;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -315,7 +316,7 @@ span.badge {
|
||||||
font-family: monospace;
|
font-family: monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
#center section {
|
#center > section {
|
||||||
&:not(:last-child) {
|
&:not(:last-child) {
|
||||||
padding-bottom: 1rem;
|
padding-bottom: 1rem;
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
||||||
|
|
49
public/assets/css/src/profile.css
Normal file
49
public/assets/css/src/profile.css
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
section.profile {
|
||||||
|
header {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
color: rgba(0, 0, 0, 0.3);
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.grid {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
|
||||||
|
& > section {
|
||||||
|
width: 50%;
|
||||||
|
|
||||||
|
& > div:not(:last-child) {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
div.avatar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
img {
|
||||||
|
max-width: 250px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.stats {
|
||||||
|
& > div {
|
||||||
|
color: white;
|
||||||
|
background-color: rgba(0, 0, 0, 0.3);
|
||||||
|
border-radius: 0.15rem;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
:root {
|
:root {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
--main-font: Cambria, Cochin, Georgia, Times, 'Times New Roman', serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
* {
|
* {
|
||||||
|
|
BIN
public/assets/img/rathalos.webp
Normal file
BIN
public/assets/img/rathalos.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
|
@ -41,6 +41,12 @@ router_post($r, '/character/delete', 'char_controller_delete_post');
|
||||||
router_get($r, '/world', 'world_controller_get');
|
router_get($r, '/world', 'world_controller_get');
|
||||||
router_post($r, '/move', 'world_controller_move_post');
|
router_post($r, '/move', 'world_controller_move_post');
|
||||||
|
|
||||||
|
/*
|
||||||
|
Profile
|
||||||
|
*/
|
||||||
|
router_get($r, '/profile', 'profile_controller_get');
|
||||||
|
router_get($r, '/profile/:id', 'profile_controller_show_get');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Settings
|
Settings
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,6 +25,7 @@ require_once SRC . '/controller/auth.php';
|
||||||
require_once SRC . '/controller/world.php';
|
require_once SRC . '/controller/world.php';
|
||||||
require_once SRC . '/controller/settings.php';
|
require_once SRC . '/controller/settings.php';
|
||||||
require_once SRC . '/controller/auctions.php';
|
require_once SRC . '/controller/auctions.php';
|
||||||
|
require_once SRC . '/controller/profile.php';
|
||||||
|
|
||||||
// Track the start time of the request
|
// Track the start time of the request
|
||||||
define('START_TIME', microtime(true));
|
define('START_TIME', microtime(true));
|
||||||
|
|
|
@ -164,6 +164,9 @@ function char_controller_create_post()
|
||||||
char_location_create($char);
|
char_location_create($char);
|
||||||
char_gear_create($char);
|
char_gear_create($char);
|
||||||
|
|
||||||
|
// Award the Adventurer title.
|
||||||
|
char_award_title(1, $char);
|
||||||
|
|
||||||
// Set the character as the user's selected character
|
// Set the character as the user's selected character
|
||||||
change_user_character($char);
|
change_user_character($char);
|
||||||
|
|
||||||
|
|
24
src/controller/profile.php
Normal file
24
src/controller/profile.php
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View your current character's profile.
|
||||||
|
*/
|
||||||
|
function profile_controller_get()
|
||||||
|
{
|
||||||
|
auth_only_and_must_have_character();
|
||||||
|
|
||||||
|
$GLOBALS['active_nav_tab'] = "profile";
|
||||||
|
echo page('profile/main');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* View another character's profile.
|
||||||
|
*/
|
||||||
|
function profile_controller_show_get($id)
|
||||||
|
{
|
||||||
|
auth_only_and_must_have_character();
|
||||||
|
|
||||||
|
if (($char = char_find($id)) == false) router_error(999);
|
||||||
|
if (user('char_id') == $id) redirect('/profile');
|
||||||
|
echo page('profile/show', ['char' => $char]);
|
||||||
|
}
|
|
@ -279,3 +279,11 @@ function json_response($data)
|
||||||
echo json_encode($data);
|
echo json_encode($data);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a title's [name, lore].
|
||||||
|
*/
|
||||||
|
function title($title_id)
|
||||||
|
{
|
||||||
|
return db_query(db_live(), 'SELECT * FROM titles WHERE id = :i', [':i' => $title_id])->fetchArray();
|
||||||
|
}
|
||||||
|
|
|
@ -73,11 +73,11 @@ function char_gear_create($char_id, $initialGear = [])
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a charcter by their ID. Returns the character's data as an associative array, or false if not found.
|
* Get a charcter by their ID or name. Returns the character's data as an associative array, or false if not found.
|
||||||
*/
|
*/
|
||||||
function char_find($char_id)
|
function char_find($char_id)
|
||||||
{
|
{
|
||||||
$char = db_query(db_live(), "SELECT * FROM characters WHERE id = :id", [':id' => $char_id])->fetchArray(SQLITE3_ASSOC);
|
$char = db_query(db_live(), "SELECT * FROM characters WHERE id = :id OR name = :id", [':id' => $char_id])->fetchArray(SQLITE3_ASSOC);
|
||||||
return $char === false ? false : $char;
|
return $char === false ? false : $char;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -235,3 +235,43 @@ function char_delete($char_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Award a character a title.
|
||||||
|
*/
|
||||||
|
function char_award_title($title_id, $char_id)
|
||||||
|
{
|
||||||
|
$r = db_query(
|
||||||
|
db_live(),
|
||||||
|
'INSERT INTO owned_titles (`title_id`, `char_id`) VALUES (:t, :c)',
|
||||||
|
[':t' => $title_id, ':c' => $char_id]
|
||||||
|
);
|
||||||
|
if ($r === false) throw new Exception("Failed to award $char_id the title $title_id. (cat)");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the character's title's info and award date. Will use the currently logged in character's ID if $char_id is 0.
|
||||||
|
*/
|
||||||
|
function char_get_title($char_id = 0)
|
||||||
|
{
|
||||||
|
$char = $char_id === 0 ? char() : char_find($char_id);
|
||||||
|
$title = title($char['title_id']);
|
||||||
|
|
||||||
|
$stmt = db_query(
|
||||||
|
db_live(),
|
||||||
|
'SELECT awarded FROM owned_titles WHERE char_id = :c AND title_id = :t LIMIT 1',
|
||||||
|
[':c' => $char['id'], ':t' => $char['title_id']]
|
||||||
|
);
|
||||||
|
|
||||||
|
// If the query failed, send back an array with only an error.
|
||||||
|
if ($stmt === false) return ['error' => "owned titles query failed {$char['id']} (cat) (1)"];
|
||||||
|
|
||||||
|
$award = $stmt->fetchArray(SQLITE3_ASSOC);
|
||||||
|
|
||||||
|
// If no title, send back an empty array
|
||||||
|
if (!$award) return [];
|
||||||
|
|
||||||
|
$title['awarded'] = $award['awarded'];
|
||||||
|
return $title;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,29 +3,29 @@
|
||||||
<div>
|
<div>
|
||||||
<img class="icon" src="/assets/img/icons/user1.png" alt="User">
|
<img class="icon" src="/assets/img/icons/user1.png" alt="User">
|
||||||
<?= $char['name'] ?> <span class="badge ml-2 tooltip-hover" data-tooltip-content="Level"><?= $char['level'] ?></span>
|
<?= $char['name'] ?> <span class="badge ml-2 tooltip-hover" data-tooltip-content="Level"><?= $char['level'] ?></span>
|
||||||
<?php if ($char['attrib_points'] > 0): ?>
|
<?php if ($char['att_points'] > 0): ?>
|
||||||
<span class="ui button primary badge ml-2 tooltip-hover" data-tooltip-content="Attribute Points"><?= $char['attrib_points'] ?></span>
|
<span class="ui button primary badge ml-2 tooltip-hover" data-tooltip-content="Attribute Points"><?= $char['att_points'] ?></span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="char-meter">
|
<div class="char-meter">
|
||||||
<div class="hp" style="width: <?= percent($char['current_hp'], $char['max_hp']) ?>%"></div>
|
<div class="hp" style="width: <?= percent($char['hp'], $char['m_hp']) ?>%"></div>
|
||||||
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Health<br><?= $char['current_hp'] ?> / <?= $char['max_hp'] ?>"></div>
|
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Health<br><?= $char['hp'] ?> / <?= $char['m_hp'] ?>"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="char-meter">
|
<div class="char-meter">
|
||||||
<div class="mp" style="width: <?= percent($char['current_mp'], $char['max_mp']) ?>%"></div>
|
<div class="mp" style="width: <?= percent($char['mp'], $char['m_mp']) ?>%"></div>
|
||||||
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Mana<br><?= $char['current_mp'] ?> / <?= $char['max_mp'] ?>"></div>
|
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Mana<br><?= $char['mp'] ?> / <?= $char['m_mp'] ?>"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="char-meter">
|
<div class="char-meter">
|
||||||
<div class="tp" style="width: <?= percent($char['current_tp'], $char['max_tp']) ?>%"></div>
|
<div class="tp" style="width: <?= percent($char['tp'], $char['m_tp']) ?>%"></div>
|
||||||
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Travel Points<br><?= $char['current_tp'] ?> / <?= $char['max_tp'] ?>"></div>
|
<div class="tooltip-trigger tooltip-hover" data-tooltip-content="Travel Points<br><?= $char['tp'] ?> / <?= $char['m_tp'] ?>"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<script src="/assets/scripts/htmx.js"></script>
|
<script src="/assets/scripts/htmx.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<header>
|
<header id="main-header">
|
||||||
<div class="left">
|
<div class="left">
|
||||||
<h1>Dragon Knight</h1>
|
<h1>Dragon Knight</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
25
templates/pages/profile/main.php
Normal file
25
templates/pages/profile/main.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<section class="profile">
|
||||||
|
<header>
|
||||||
|
<h1><?= char('name') ?></h1>
|
||||||
|
<h3>Level <?= char('level') ?> <?= char_get_title()['name'] ?></h2>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<section class="left">
|
||||||
|
<div class="avatar">
|
||||||
|
<img src="/assets/img/rathalos.webp">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="stats">
|
||||||
|
<h4>Stats</h4>
|
||||||
|
<div>Power: <?= char('power') ?></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="right">
|
||||||
|
<div class="bio">
|
||||||
|
HELLO THERE MY FRIEND.
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
</section>
|
2
templates/pages/profile/show.php
Normal file
2
templates/pages/profile/show.php
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<h1><?= $char['name'] ?><?php if ($char['user_id'] == user('id')): ?><span class="badge">Owned</span><?php endif; ?></h1>
|
||||||
|
other
|
Loading…
Reference in New Issue
Block a user