Files
odinsea-elixir/priv/repo/migrations/20260215000002_create_character_related_tables.exs
2026-02-14 23:58:01 -07:00

333 lines
12 KiB
Elixir

defmodule Odinsea.Repo.Migrations.CreateCharacterRelatedTables do
use Ecto.Migration
def up do
# ============================================================================
# QUEST SYSTEM
# ============================================================================
create table(:queststatus) do
add :characterid, references(:characters, on_delete: :delete_all), null: false, default: 0
add :quest, :integer, null: false, default: 0
add :status, :integer, null: false, default: 0
add :time, :integer, null: false, default: 0
add :forfeited, :integer, null: false, default: 0
add :customdata, :string, size: 255
end
create index(:queststatus, [:characterid])
create index(:queststatus, [:queststatusid])
create table(:queststatusmobs) do
add :queststatusid, references(:queststatus, on_delete: :delete_all), null: false, default: 0
add :mob, :integer, null: false, default: 0
add :count, :integer, null: false, default: 0
end
create index(:queststatusmobs, [:queststatusid])
create table(:questinfo) do
add :characterid, references(:characters, on_delete: :delete_all), null: false, default: 0
add :quest, :integer, null: false, default: 0
add :customdata, :string, size: 555
end
create index(:questinfo, [:characterid])
# ============================================================================
# PETS & FAMILIARS
# ============================================================================
create table(:pets) do
add :name, :string, size: 13
add :level, :integer, null: false
add :closeness, :integer, null: false
add :fullness, :integer, null: false
add :seconds, :integer, null: false, default: 0
add :flags, :integer, null: false, default: 0
end
create index(:pets, [:petid])
create table(:familiars) do
add :characterid, :integer, null: false, default: 0
add :familiar, :integer, null: false, default: 0
add :name, :string, size: 40, null: false, default: ""
add :fatigue, :integer, null: false, default: 0
add :expiry, :bigint, null: false, default: 0
add :vitality, :integer, null: false, default: 0
end
create table(:imps) do
add :characterid, :integer, null: false, default: 0
add :itemid, :integer, null: false, default: 0
add :level, :integer, null: false, default: 1
add :state, :integer, null: false, default: 1
add :closeness, :integer, null: false, default: 0
add :fullness, :integer, null: false, default: 0
end
create index(:imps, [:impid])
# ============================================================================
# MOUNT & TRANSPORT
# ============================================================================
create table(:mountdata) do
add :characterid, :integer, unique: true
add :level, :integer, null: false, default: 0
add :exp, :integer, null: false, default: 0
add :fatigue, :integer, null: false, default: 0
end
create unique_index(:mountdata, [:characterid])
create index(:mountdata, [:id])
create table(:trocklocations) do
add :characterid, :integer
add :mapid, :integer
end
create index(:trocklocations, [:characterid])
create table(:regrocklocations) do
add :characterid, :integer
add :mapid, :integer
end
create index(:regrocklocations, [:characterid])
create table(:hyperrocklocations) do
add :characterid, :integer
add :mapid, :integer
end
# ============================================================================
# MONSTER BOOK
# ============================================================================
create table(:monsterbook) do
add :charid, :integer, null: false, default: 0
add :cardid, :integer, null: false, default: 0
add :level, :integer, default: 1
end
create index(:monsterbook, [:id])
create index(:monsterbook, [:charid])
# ============================================================================
# SAVED LOCATIONS
# ============================================================================
create table(:savedlocations) do
add :characterid, references(:characters, on_delete: :delete_all), null: false
add :locationtype, :integer, null: false, default: 0
add :map, :integer, null: false
end
create index(:savedlocations, [:characterid], name: :savedlocations_ibfk_1)
# ============================================================================
# ACHIEVEMENTS & REPORTS
# ============================================================================
create table(:achievements) do
add :achievementid, :integer, null: false, default: 0
add :charid, :integer, null: false, default: 0
add :accountid, :integer, null: false, default: 0
end
create unique_index(:achievements, [:achievementid, :charid], name: :achievements_pkey)
create index(:achievements, [:achievementid])
create index(:achievements, [:accountid])
create index(:achievements, [:charid])
create table(:reports) do
add :characterid, :integer, null: false, default: 0
add :type, :integer, null: false, default: 0
add :count, :integer, null: false, default: 0
end
create index(:reports, [:characterid])
# ============================================================================
# NOTES & MESSAGING
# ============================================================================
create table(:notes) do
add :to, :string, size: 13, null: false, default: ""
add :from, :string, size: 13, null: false, default: ""
add :message, :text, null: false
add :timestamp, :bigint, null: false
add :gift, :boolean, null: false, default: false
end
create index(:notes, [:to])
# ============================================================================
# RINGS & MARRIAGE
# ============================================================================
create table(:rings) do
add :partnerringid, :integer, null: false, default: 0
add :partnerchrid, :integer, null: false, default: 0
add :itemid, :integer, null: false, default: 0
add :partnername, :string, size: 255, null: false
end
create index(:rings, [:ringid])
create index(:rings, [:partnerchrid])
create index(:rings, [:partnerringid])
# ============================================================================
# SIDEKICKS
# ============================================================================
create table(:sidekicks) do
add :firstid, :integer, null: false, default: 0
add :secondid, :integer, null: false, default: 0
end
# ============================================================================
# BATTLE & TOURNAMENT
# ============================================================================
create table(:battlelog) do
add :accid, references(:accounts, on_delete: :delete_all), null: false, default: 0
add :accid_to, :integer, null: false, default: 0
timestamps(type: :naive_datetime, inserted_at: :when, updated_at: false)
end
create index(:battlelog, [:accid])
create table(:tournamentlog) do
add :winnerid, :integer, null: false, default: 0
add :numcontestants, :integer, null: false, default: 0
timestamps(type: :naive_datetime, inserted_at: :when, updated_at: false)
end
create table(:speedruns) do
add :type, :string, size: 13, null: false
add :leader, :string, size: 13, null: false
add :timestring, :string, size: 1024, null: false
add :time, :bigint, null: false, default: 0
add :members, :string, size: 1024, null: false, default: ""
end
# ============================================================================
# PLAYER NPCS
# ============================================================================
create table(:playernpcs) do
add :name, :string, size: 13, null: false
add :hair, :integer, null: false
add :face, :integer, null: false
add :skin, :integer, null: false
add :x, :integer, null: false, default: 0
add :y, :integer, null: false, default: 0
add :map, :integer, null: false
add :charid, references(:characters, on_delete: :delete_all), null: false
add :scriptid, :integer, null: false
add :foothold, :integer, null: false
add :dir, :integer, null: false, default: 0
add :gender, :integer, null: false, default: 0
add :pets, :string, size: 25, default: "0,0,0"
end
create index(:playernpcs, [:scriptid])
create index(:playernpcs, [:charid], name: :playernpcs_ibfk_1)
create table(:playernpcs_equip) do
add :npcid, references(:playernpcs, column: :scriptid, on_delete: :delete_all), null: false
add :equipid, :integer, null: false
add :equippos, :integer, null: false
add :charid, references(:characters, on_delete: :delete_all), null: false
end
create index(:playernpcs_equip, [:charid], name: :playernpcs_equip_ibfk_1)
create index(:playernpcs_equip, [:npcid], name: :playernpcs_equip_ibfk_2)
# ============================================================================
# POKEMON SYSTEM
# ============================================================================
create table(:pokemon) do
add :monsterid, :integer, null: false, default: 0
add :characterid, :integer, null: false, default: 0
add :level, :integer, null: false, default: 1
add :exp, :integer, null: false, default: 0
add :name, :string, size: 255, null: false, default: ""
add :nature, :integer, null: false, default: 0
add :active, :boolean, null: false, default: false
add :accountid, :integer, null: false, default: 0
add :itemid, :integer, null: false, default: 0
add :gender, :integer, null: false, default: -1
add :hpiv, :integer, null: false, default: -1
add :atkiv, :integer, null: false, default: -1
add :defiv, :integer, null: false, default: -1
add :spatkiv, :integer, null: false, default: -1
add :spdefiv, :integer, null: false, default: -1
add :speediv, :integer, null: false, default: -1
add :evaiv, :integer, null: false, default: -1
add :acciv, :integer, null: false, default: -1
add :ability, :integer, null: false, default: -1
end
create index(:pokemon, [:id])
create index(:pokemon, [:characterid])
# ============================================================================
# ANDROID SYSTEM
# ============================================================================
create table(:androids) do
add :name, :string, size: 13, null: false, default: "Android"
add :hair, :integer, null: false, default: 0
add :face, :integer, null: false, default: 0
end
create index(:androids, [:uniqueid])
# ============================================================================
# WISHLIST
# ============================================================================
create table(:wishlist) do
add :characterid, :integer, null: false, primary_key: true
add :sn, :integer, null: false, primary_key: true
end
create index(:wishlist, [:characterid])
end
def down do
drop table(:wishlist)
drop table(:androids)
drop table(:pokemon)
drop table(:playernpcs_equip)
drop table(:playernpcs)
drop table(:speedruns)
drop table(:tournamentlog)
drop table(:battlelog)
drop table(:sidekicks)
drop table(:rings)
drop table(:notes)
drop table(:reports)
drop table(:achievements)
drop table(:savedlocations)
drop table(:monsterbook)
drop table(:hyperrocklocations)
drop table(:regrocklocations)
drop table(:trocklocations)
drop table(:mountdata)
drop table(:imps)
drop table(:familiars)
drop table(:pets)
drop table(:questinfo)
drop table(:queststatusmobs)
drop table(:queststatus)
end
end