diff options
Diffstat (limited to 'sql/schema.sql')
| -rw-r--r-- | sql/schema.sql | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/sql/schema.sql b/sql/schema.sql new file mode 100644 index 0000000..18c2938 --- /dev/null +++ b/sql/schema.sql @@ -0,0 +1,177 @@ +CREATE TABLE IF NOT EXISTS Worlds ( + WorldID INTEGER NOT NULL, + Name TEXT NOT NULL COLLATE NOCASE, + Type INTEGER NOT NULL, + RebootTime INTEGER NOT NULL, + Address INTEGER NOT NULL, + Port INTEGER NOT NULL, + MaxPlayers INTEGER NOT NULL, + PremiumPlayerBuffer INTEGER NOT NULL, + MaxNewbies INTEGER NOT NULL, + PremiumNewbieBuffer INTEGER NOT NULL, + PRIMARY KEY (WorldID), + UNIQUE (Name) +); + +CREATE TABLE IF NOT EXISTS Accounts ( + AccountID INTEGER NOT NULL, + Auth BLOB NOT NULL, + EMail TEXT NOT NULL COLLATE NOCASE, + PremiumEnd INTEGER NOT NULL, + AddPremiumDays INTEGER NOT NULL, + PRIMARY KEY (AccountID), + UNIQUE (EMail) +); + +-- Character Tables +--============================================================================== +CREATE TABLE IF NOT EXISTS Characters ( + WorldID INTEGER NOT NULL, + CharacterID INTEGER NOT NULL, + AccountID INTEGER NOT NULL, + Name TEXT NOT NULL COLLATE NOCASE, + Sex INTEGER NOT NULL, + Guild TEXT NOT NULL COLLATE NOCASE DEFAULT '', + Rank TEXT NOT NULL COLLATE NOCASE DEFAULT '', + Title TEXT NOT NULL COLLATE NOCASE DEFAULT '', + PRIMARY KEY (CharacterID), + UNIQUE (Name) +); +CREATE INDEX IF NOT EXISTS CharactersAccountIndex ON Characters(AccountID); +CREATE INDEX IF NOT EXISTS CharactersGuildIndex ON Characters(Guild); + +CREATE TABLE IF NOT EXISTS CharacterBuddies ( + CharacterID INTEGER NOT NULL, + BuddyID INTEGER NOT NULL, + PRIMARY KEY (CharacterID, BuddyID) +); + +CREATE TABLE IF NOT EXISTS CharacterInvitations ( + WorldID INTEGER NOT NULL, + CharacterID INTEGER NOT NULL, + PRIMARY KEY (WorldID, CharacterID) +); + +CREATE TABLE IF NOT EXISTS CharacterRights ( + CharacterID INTEGER NOT NULL, + Right TEXT NOT NULL COLLATE NOCASE, + PRIMARY KEY(CharacterID, Right) +); + +CREATE TABLE IF NOT EXISTS OnlineCharacters ( + CharacterID INTEGER NOT NULL, + AccountID INTEGER NOT NULL, + IPAddress INTEGER NOT NULL, + MultiClient INTEGER NOT NULL, + PRIMARY KEY (CharacterID) +); +CREATE INDEX IF NOT EXISTS OnlineCharactersAccountIndex ON OnlineCharacters(AccountID); + +-- House Tables +--============================================================================== +CREATE TABLE IF NOT EXISTS Houses ( + WorldID INTEGER NOT NULL, + HouseID INTEGER NOT NULL, + Name TEXT NOT NULL, + Rent INTEGER NOT NULL, + Description TEXT NOT NULL, + Size INTEGER NOT NULL, + PositionX INTEGER NOT NULL, + PositionY INTEGER NOT NULL, + PositionZ INTEGER NOT NULL, + Town TEXT NOT NULL, + GuildHouse INTEGER NOT NULL, + PRIMARY KEY (WorldID, HouseID) +); + +CREATE TABLE IF NOT EXISTS HouseOwners ( + WorldID INTEGER NOT NULL, + HouseID INTEGER NOT NULL, + OwnerID INTEGER NOT NULL, + PaidUntil INTEGER NOT NULL, + PRIMARY KEY (WorldID, HouseID) +); + +-- NOTE(fusion): An auction would have a non null `FinishTime` but it doesn't make +-- sense to finish an auction just to restart it afterwards so it should only be +-- set after the first bid, along with `BidderID` and `BidAmount`. +CREATE TABLE IF NOT EXISTS HouseAuctions ( + WorldID INTEGER NOT NULL, + HouseID INTEGER NOT NULL, + BidderID INTEGER, + BidAmount INTEGER, + FinishTime INTEGER, + PRIMARY KEY (WorldID, HouseID) +); + +CREATE TABLE IF NOT EXISTS HouseTransfers ( + WorldID INTEGER NOT NULL, + HouseID INTEGER NOT NULL, + NewOwnerID INTEGER NOT NULL, + Price INTEGER NOT NULL, + PRIMARY KEY (WorldID, HouseID) +); + +CREATE TABLE IF NOT EXISTS HouseAssignments ( + WorldID INTEGER NOT NULL, + HouseID INTEGER NOT NULL, + OwnerID INTEGER NOT NULL, + Price INTEGER NOT NULL, + Timestamp INTEGER NOT NULL +); +CREATE INDEX IF NOT EXISTS HouseAssignmentsHouseIndex ON HouseAssignments(WorldID, HouseID); +CREATE INDEX IF NOT EXISTS HouseAssignmentsOwnerIndex ON HouseAssignments(OwnerID); + +-- Banishment Tables +--============================================================================== +CREATE TABLE IF NOT EXISTS Banishments ( + BanishmentID INTEGER NOT NULL, + AccountID INTEGER NOT NULL, + IPAddress INTEGER NOT NULL, + GamemasterID INTEGER NOT NULL, + Reason TEXT NOT NULL, + Comment TEXT NOT NULL, + FinalWarning INTEGER NOT NULL, + Until INTEGER NOT NULL, + PRIMARY KEY (BanishmentID) +); + +CREATE TABLE IF NOT EXISTS IPBanishments ( + IPAddress INTEGER NOT NULL, + CharacterID INTEGER NOT NULL, + GamemasterID INTEGER NOT NULL, + Reason TEXT NOT NULL, + Comment TEXT NOT NULL, + PRIMARY KEY (IPAddress) +); + +CREATE TABLE IF NOT EXISTS Namelocks ( + CharacterID INTEGER NOT NULL, + IPAddress INTEGER NOT NULL, + GamemasterID INTEGER NOT NULL, + Reason TEXT NOT NULL, + Comment TEXT NOT NULL, + PRIMARY KEY (CharacterID) +); + +CREATE TABLE IF NOT EXISTS Notations ( + CharacterID INTEGER NOT NULL, + IPAddress INTEGER NOT NULL, + GamemasterID INTEGER NOT NULL, + Reason TEXT NOT NULL, + Comment TEXT NOT NULL +); +CREATE INDEX IF NOT EXISTS NotationsCharacterIndex ON Notations(CharacterID); + +CREATE TABLE IF NOT EXISTS Statements ( + Timestamp INTEGER NOT NULL, + StatementID INTEGER NOT NULL, + CharacterID INTEGER NOT NULL, + Statement TEXT NOT NULL, + Context TEXT NOT NULL, + BanishmentID INTEGER NOT NULL, + ReporterID INTEGER NOT NULL, + Reason TEXT NOT NULL, + Comment TEXT NOT NULL, + PRIMARY KEY (Timestamp, StatementID) +); |
