/* ============================================================ Stats ============================================================ */ CREATE TABLE stats ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `luck` INTEGER NOT NULL DEFAULT 0, `armor` INTEGER NOT NULL DEFAULT 0, `focus` INTEGER NOT NULL DEFAULT 0, `power` INTEGER NOT NULL DEFAULT 0, `resist` INTEGER NOT NULL DEFAULT 0, `accuracy` INTEGER NOT NULL DEFAULT 0, `ferocity` INTEGER NOT NULL DEFAULT 0, `precision` INTEGER NOT NULL DEFAULT 0, `toughness` INTEGER NOT NULL DEFAULT 0, `penetration` INTEGER NOT NULL DEFAULT 0, ) STRICT; /* ============================================================ 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, `stats_id` INTEGER NOT NULL, `inv_slots` INTEGER NOT NULL DEFAULT 10, `att_points` INTEGER NOT NULL DEFAULT 0, `bio` TEXT DEFAULT '' ); CREATE INDEX idx_characters_user_id ON characters (`user_id`); CREATE TABLE equipped_items ( `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, `stats_id` INTEGER NOT NULL, `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`); CREATE TABLE inventory_items ( `char_id` INTEGER NOT NULL, `item_id` INTEGER NOT NULL ); CREATE INDEX idx_inventory_char_id ON char_inventory (`char_id`); -- Wallets are account-bound rather than character-bound. Should I move this to auth? 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`); /* ============================================================ 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`); /* @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`);