421 lines
17 KiB
Elixir
421 lines
17 KiB
Elixir
defmodule Odinsea.Repo.Migrations.CreateBaseTables do
|
|
use Ecto.Migration
|
|
|
|
def up do
|
|
# ============================================================================
|
|
# CORE ACCOUNT TABLES
|
|
# ============================================================================
|
|
|
|
create table(:accounts) do
|
|
add :name, :string, size: 13, null: false
|
|
add :password, :string, size: 128, null: false, default: ""
|
|
add :salt, :string, size: 32
|
|
add :secondpassword, :string, size: 134
|
|
add :salt2, :string, size: 32
|
|
add :loggedin, :boolean, null: false, default: false
|
|
add :lastlogin, :naive_datetime
|
|
add :birthday, :date, null: false, default: "0000-01-01"
|
|
add :banned, :boolean, null: false, default: false
|
|
add :banreason, :text
|
|
add :gm, :boolean, null: false, default: false
|
|
add :email, :string, size: 255
|
|
add :macs, :string, size: 255
|
|
add :tempban, :naive_datetime, null: false, default: fragment("'0000-00-00 00:00:00'")
|
|
add :greason, :integer
|
|
add :acash, :integer, null: false, default: 0
|
|
add :mpoints, :integer, null: false, default: 0
|
|
add :gender, :integer, null: false, default: 0
|
|
add :session_ip, :string, size: 64
|
|
add :points, :integer, null: false, default: 0
|
|
add :vpoints, :integer, null: false, default: 0
|
|
add :totalvotes, :integer, null: false, default: 0
|
|
add :lastlogon, :naive_datetime
|
|
add :lastvoteip, :string, size: 64
|
|
|
|
timestamps(type: :naive_datetime, inserted_at: :createdat, updated_at: false)
|
|
end
|
|
|
|
create unique_index(:accounts, [:name])
|
|
create index(:accounts, [:id, :banned, :gm], name: :ranking1)
|
|
create index(:accounts, [:id])
|
|
|
|
create table(:character_slots) do
|
|
add :accid, :integer, null: false, default: 0
|
|
add :worldid, :integer, null: false, default: 0
|
|
add :charslots, :integer, null: false, default: 6
|
|
end
|
|
|
|
create index(:character_slots, [:accid])
|
|
create index(:character_slots, [:id])
|
|
|
|
create table(:storages) do
|
|
add :accountid, references(:accounts, on_delete: :delete_all), null: false, default: 0
|
|
add :slots, :integer, null: false, default: 0
|
|
add :meso, :integer, null: false, default: 0
|
|
end
|
|
|
|
create index(:storages, [:accountid])
|
|
|
|
create table(:iplog) do
|
|
add :accid, :integer, null: false
|
|
add :ip, :string, size: 45, null: false
|
|
add :time, :string, size: 45, null: false
|
|
end
|
|
|
|
create table(:ipbans) do
|
|
add :ip, :string, size: 40, null: false, default: ""
|
|
end
|
|
|
|
create table(:macbans) do
|
|
add :mac, :string, size: 30, null: false
|
|
end
|
|
|
|
create unique_index(:macbans, [:mac], name: :mac_2)
|
|
|
|
create table(:macfilters) do
|
|
add :filter, :string, size: 30, null: false
|
|
end
|
|
|
|
# ============================================================================
|
|
# CHARACTER TABLES
|
|
# ============================================================================
|
|
|
|
create table(:characters) do
|
|
add :accountid, :integer, null: false, default: 0
|
|
add :world, :integer, null: false, default: 0
|
|
add :name, :string, size: 13, null: false, default: ""
|
|
add :level, :integer, null: false, default: 0
|
|
add :exp, :integer, null: false, default: 0
|
|
add :str, :integer, null: false, default: 0
|
|
add :dex, :integer, null: false, default: 0
|
|
add :luk, :integer, null: false, default: 0
|
|
add :int, :integer, null: false, default: 0
|
|
add :hp, :integer, null: false, default: 0
|
|
add :mp, :integer, null: false, default: 0
|
|
add :maxhp, :integer, null: false, default: 0
|
|
add :maxmp, :integer, null: false, default: 0
|
|
add :meso, :integer, null: false, default: 0
|
|
add :hp_ap_used, :integer, null: false, default: 0
|
|
add :job, :integer, null: false, default: 0
|
|
add :skincolor, :integer, null: false, default: 0
|
|
add :gender, :integer, null: false, default: 0
|
|
add :fame, :integer, null: false, default: 0
|
|
add :hair, :integer, null: false, default: 0
|
|
add :face, :integer, null: false, default: 0
|
|
add :ap, :integer, null: false, default: 0
|
|
add :map, :integer, null: false, default: 0
|
|
add :spawnpoint, :integer, null: false, default: 0
|
|
add :gm, :integer, null: false, default: 0
|
|
add :party, :integer, null: false, default: 0
|
|
add :buddycapacity, :integer, null: false, default: 25
|
|
add :guildid, :integer, null: false, default: 0
|
|
add :guildrank, :integer, null: false, default: 5
|
|
add :alliancerank, :integer, null: false, default: 5
|
|
add :guildcontribution, :integer, null: false, default: 0
|
|
add :pets, :string, size: 13, null: false, default: "-1,-1,-1"
|
|
add :sp, :string, size: 255, null: false, default: "0,0,0,0,0,0,0,0,0,0"
|
|
add :subcategory, :integer, null: false, default: 0
|
|
add :rank, :integer, null: false, default: 1
|
|
add :rankmove, :integer, null: false, default: 0
|
|
add :jobrank, :integer, null: false, default: 1
|
|
add :jobrankmove, :integer, null: false, default: 0
|
|
add :marriageid, :integer, null: false, default: 0
|
|
add :familyid, :integer, null: false, default: 0
|
|
add :seniorid, :integer, null: false, default: 0
|
|
add :junior1, :integer, null: false, default: 0
|
|
add :junior2, :integer, null: false, default: 0
|
|
add :currentrep, :integer, null: false, default: 0
|
|
add :totalrep, :integer, null: false, default: 0
|
|
add :gachexp, :integer, null: false, default: 0
|
|
add :fatigue, :integer, null: false, default: 0
|
|
add :charm, :integer, null: false, default: 0
|
|
add :craft, :integer, null: false, default: 0
|
|
add :charisma, :integer, null: false, default: 0
|
|
add :will, :integer, null: false, default: 0
|
|
add :sense, :integer, null: false, default: 0
|
|
add :insight, :integer, null: false, default: 0
|
|
add :totalwins, :integer, null: false, default: 0
|
|
add :totallosses, :integer, null: false, default: 0
|
|
add :pvpexp, :integer, null: false, default: 0
|
|
add :pvppoints, :integer, null: false, default: 0
|
|
|
|
timestamps(type: :naive_datetime, inserted_at: :createdate, updated_at: false)
|
|
end
|
|
|
|
create index(:characters, [:accountid])
|
|
create index(:characters, [:id])
|
|
create index(:characters, [:guildid])
|
|
create index(:characters, [:familyid])
|
|
create index(:characters, [:marriageid])
|
|
create index(:characters, [:seniorid])
|
|
|
|
# ============================================================================
|
|
# INVENTORY TABLES
|
|
# ============================================================================
|
|
|
|
create table(:inventoryitems) do
|
|
add :characterid, :integer
|
|
add :accountid, :integer
|
|
add :packageid, :integer
|
|
add :itemid, :integer, null: false, default: 0
|
|
add :inventorytype, :integer, null: false, default: 0
|
|
add :position, :integer, null: false, default: 0
|
|
add :quantity, :integer, null: false, default: 0
|
|
add :owner, :string, size: 255
|
|
add :gm_log, :string, size: 255
|
|
add :uniqueid, :integer, null: false, default: -1
|
|
add :flag, :integer, null: false, default: 0
|
|
add :expiredate, :bigint, null: false, default: -1
|
|
add :type, :integer, null: false, default: 0
|
|
add :sender, :string, size: 13, null: false, default: ""
|
|
end
|
|
|
|
create index(:inventoryitems, [:inventorytype])
|
|
create index(:inventoryitems, [:accountid])
|
|
create index(:inventoryitems, [:packageid])
|
|
create index(:inventoryitems, [:characterid, :inventorytype], name: :characterid_2)
|
|
|
|
create table(:inventoryequipment) do
|
|
add :inventoryitemid, references(:inventoryitems, on_delete: :delete_all), null: false, default: 0
|
|
add :upgradeslots, :integer, null: false, default: 0
|
|
add :level, :integer, null: false, default: 0
|
|
add :str, :integer, null: false, default: 0
|
|
add :dex, :integer, null: false, default: 0
|
|
add :int, :integer, null: false, default: 0
|
|
add :luk, :integer, null: false, default: 0
|
|
add :hp, :integer, null: false, default: 0
|
|
add :mp, :integer, null: false, default: 0
|
|
add :watk, :integer, null: false, default: 0
|
|
add :matk, :integer, null: false, default: 0
|
|
add :wdef, :integer, null: false, default: 0
|
|
add :mdef, :integer, null: false, default: 0
|
|
add :acc, :integer, null: false, default: 0
|
|
add :avoid, :integer, null: false, default: 0
|
|
add :hands, :integer, null: false, default: 0
|
|
add :speed, :integer, null: false, default: 0
|
|
add :jump, :integer, null: false, default: 0
|
|
add :vicioushammer, :integer, null: false, default: 0
|
|
add :itemexp, :integer, null: false, default: 0
|
|
add :durability, :integer, null: false, default: -1
|
|
add :enhance, :integer, null: false, default: 0
|
|
add :potential1, :integer, null: false, default: 0
|
|
add :potential2, :integer, null: false, default: 0
|
|
add :potential3, :integer, null: false, default: 0
|
|
add :hpr, :integer, null: false, default: 0
|
|
add :mpr, :integer, null: false, default: 0
|
|
add :incskill, :integer, null: false, default: -1
|
|
add :charmexp, :integer, null: false, default: -1
|
|
add :pvpdamage, :integer, null: false, default: 0
|
|
end
|
|
|
|
create index(:inventoryequipment, [:inventoryitemid])
|
|
|
|
create table(:inventoryslot) do
|
|
add :characterid, :integer, unique: true
|
|
add :equip, :integer
|
|
add :use, :integer
|
|
add :setup, :integer
|
|
add :etc, :integer
|
|
add :cash, :integer
|
|
end
|
|
|
|
create unique_index(:inventoryslot, [:characterid])
|
|
create index(:inventoryslot, [:id])
|
|
|
|
create table(:inventorylog) do
|
|
add :inventoryitemid, :integer, null: false, default: 0
|
|
add :msg, :string, size: 255, null: false
|
|
end
|
|
|
|
create index(:inventorylog, [:inventoryitemid])
|
|
|
|
create table(:extendedslots) do
|
|
add :characterid, :integer, null: false, default: 0
|
|
add :itemid, :integer, null: false, default: 0
|
|
end
|
|
|
|
# ============================================================================
|
|
# SKILLS & KEYMAP TABLES
|
|
# ============================================================================
|
|
|
|
create table(:skills) do
|
|
add :skillid, :integer, null: false, default: 0
|
|
add :characterid, references(:characters, on_delete: :delete_all), null: false, default: 0
|
|
add :skilllevel, :integer, null: false, default: 0
|
|
add :masterlevel, :integer, null: false, default: 0
|
|
add :expiration, :bigint, null: false, default: -1
|
|
end
|
|
|
|
create index(:skills, [:characterid], name: :skills_ibfk_1)
|
|
|
|
create table(:skills_cooldowns) do
|
|
add :charid, :integer, null: false
|
|
add :skillid, :integer, null: false
|
|
add :length, :bigint, null: false
|
|
add :starttime, :bigint, null: false
|
|
end
|
|
|
|
create index(:skills_cooldowns, [:charid])
|
|
|
|
create table(:keymap) do
|
|
add :characterid, references(:characters, on_delete: :delete_all), null: false, default: 0
|
|
add :key, :integer, null: false, default: 0
|
|
add :type, :integer, null: false, default: 0
|
|
add :action, :integer, null: false, default: 0
|
|
end
|
|
|
|
create index(:keymap, [:characterid], name: :keymap_ibfk_1)
|
|
|
|
create table(:skillmacros) do
|
|
add :characterid, :integer, null: false, default: 0
|
|
add :position, :integer, null: false, default: 0
|
|
add :skill1, :integer, null: false, default: 0
|
|
add :skill2, :integer, null: false, default: 0
|
|
add :skill3, :integer, null: false, default: 0
|
|
add :name, :string, size: 30
|
|
add :shout, :boolean, null: false, default: false
|
|
end
|
|
|
|
create index(:skillmacros, [:characterid])
|
|
|
|
# ============================================================================
|
|
# BUDDY SYSTEM
|
|
# ============================================================================
|
|
|
|
create table(:buddies) do
|
|
add :characterid, references(:characters, on_delete: :delete_all), null: false
|
|
add :buddyid, :integer, null: false
|
|
add :pending, :boolean, null: false, default: false
|
|
add :groupname, :string, size: 16, null: false, default: "ETC"
|
|
end
|
|
|
|
create index(:buddies, [:characterid], name: :buddies_ibfk_1)
|
|
create index(:buddies, [:buddyid])
|
|
create index(:buddies, [:id])
|
|
|
|
# ============================================================================
|
|
# GUILD SYSTEM
|
|
# ============================================================================
|
|
|
|
create table(:guilds) do
|
|
add :leader, :integer, null: false, default: 0
|
|
add :gp, :integer, null: false, default: 0
|
|
add :logo, :integer
|
|
add :logocolor, :integer, null: false, default: 0
|
|
add :name, :string, size: 45, null: false
|
|
add :rank1title, :string, size: 45, null: false, default: "Master"
|
|
add :rank2title, :string, size: 45, null: false, default: "Jr. Master"
|
|
add :rank3title, :string, size: 45, null: false, default: "Member"
|
|
add :rank4title, :string, size: 45, null: false, default: "Member"
|
|
add :rank5title, :string, size: 45, null: false, default: "Member"
|
|
add :capacity, :integer, null: false, default: 10
|
|
add :logobg, :integer
|
|
add :logobgcolor, :integer, null: false, default: 0
|
|
add :notice, :string, size: 101
|
|
add :signature, :integer, null: false, default: 0
|
|
add :alliance, :integer, null: false, default: 0
|
|
end
|
|
|
|
create unique_index(:guilds, [:name])
|
|
create index(:guilds, [:id])
|
|
create index(:guilds, [:leader])
|
|
|
|
create table(:guildskills) do
|
|
add :guildid, :integer, null: false, default: 0
|
|
add :skillid, :integer, null: false, default: 0
|
|
add :level, :integer, null: false, default: 1
|
|
add :timestamp, :bigint, null: false, default: 0
|
|
add :purchaser, :string, size: 13, null: false, default: ""
|
|
end
|
|
|
|
create table(:alliances) do
|
|
add :name, :string, size: 13, null: false
|
|
add :leaderid, :integer, null: false
|
|
add :guild1, :integer, null: false
|
|
add :guild2, :integer, null: false
|
|
add :guild3, :integer, null: false, default: 0
|
|
add :guild4, :integer, null: false, default: 0
|
|
add :guild5, :integer, null: false, default: 0
|
|
add :rank1, :string, size: 13, null: false, default: "Master"
|
|
add :rank2, :string, size: 13, null: false, default: "Jr.Master"
|
|
add :rank3, :string, size: 13, null: false, default: "Member"
|
|
add :rank4, :string, size: 13, null: false, default: "Member"
|
|
add :rank5, :string, size: 13, null: false, default: "Member"
|
|
add :capacity, :integer, null: false, default: 2
|
|
add :notice, :string, size: 100, null: false, default: ""
|
|
end
|
|
|
|
create unique_index(:alliances, [:name])
|
|
create index(:alliances, [:id])
|
|
create index(:alliances, [:leaderid])
|
|
|
|
create table(:bbs_threads) do
|
|
add :postercid, :integer, null: false
|
|
add :name, :string, size: 26, null: false, default: ""
|
|
add :timestamp, :bigint, null: false
|
|
add :icon, :integer, null: false
|
|
add :startpost, :text, null: false
|
|
add :guildid, :integer, null: false
|
|
add :localthreadid, :integer, null: false
|
|
end
|
|
|
|
create table(:bbs_replies) do
|
|
add :threadid, :integer, null: false
|
|
add :postercid, :integer, null: false
|
|
add :timestamp, :bigint, null: false
|
|
add :content, :string, size: 26, null: false, default: ""
|
|
add :guildid, :integer, null: false, default: 0
|
|
end
|
|
|
|
# ============================================================================
|
|
# FAMILY SYSTEM
|
|
# ============================================================================
|
|
|
|
create table(:families) do
|
|
add :leaderid, :integer, null: false, default: 0
|
|
add :notice, :string, size: 255, null: false, default: ""
|
|
end
|
|
|
|
create index(:families, [:familyid])
|
|
create index(:families, [:leaderid])
|
|
|
|
create table(:famelog) do
|
|
add :characterid, references(:characters, on_delete: :delete_all), null: false, default: 0
|
|
add :characterid_to, :integer, null: false, default: 0
|
|
|
|
timestamps(type: :naive_datetime, inserted_at: :when, updated_at: false)
|
|
end
|
|
|
|
create index(:famelog, [:characterid])
|
|
end
|
|
|
|
def down do
|
|
# Drop in reverse order of creation to avoid foreign key constraints
|
|
drop table(:famelog)
|
|
drop table(:families)
|
|
drop table(:bbs_replies)
|
|
drop table(:bbs_threads)
|
|
drop table(:alliances)
|
|
drop table(:guildskills)
|
|
drop table(:guilds)
|
|
drop table(:buddies)
|
|
drop table(:skillmacros)
|
|
drop table(:keymap)
|
|
drop table(:skills_cooldowns)
|
|
drop table(:skills)
|
|
drop table(:extendedslots)
|
|
drop table(:inventorylog)
|
|
drop table(:inventoryslot)
|
|
drop table(:inventoryequipment)
|
|
drop table(:inventoryitems)
|
|
drop table(:characters)
|
|
drop table(:storages)
|
|
drop table(:iplog)
|
|
drop table(:ipbans)
|
|
drop table(:macbans)
|
|
drop table(:macfilters)
|
|
drop table(:character_slots)
|
|
drop table(:accounts)
|
|
end
|
|
end
|