Start repo, claude & kimi still vibing tho
This commit is contained in:
70
lib/odinsea/database/schema/account.ex
Normal file
70
lib/odinsea/database/schema/account.ex
Normal file
@@ -0,0 +1,70 @@
|
||||
defmodule Odinsea.Database.Schema.Account do
|
||||
@moduledoc """
|
||||
Ecto schema for the accounts table.
|
||||
Represents a user account in the game.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key {:id, :id, autogenerate: true}
|
||||
@timestamps_opts [inserted_at: :createdat, updated_at: false]
|
||||
|
||||
schema "accounts" do
|
||||
field :name, :string
|
||||
field :password, :string
|
||||
field :salt, :string
|
||||
field :second_password, :string, source: :"2ndpassword"
|
||||
field :salt2, :string
|
||||
field :loggedin, :integer, default: 0
|
||||
field :lastlogin, :naive_datetime
|
||||
field :createdat, :naive_datetime
|
||||
field :birthday, :date
|
||||
field :banned, :integer, default: 0
|
||||
field :banreason, :string
|
||||
field :gm, :integer, default: 0
|
||||
field :email, :string
|
||||
field :macs, :string
|
||||
field :tempban, :naive_datetime
|
||||
field :greason, :integer
|
||||
field :acash, :integer, default: 0, source: :ACash
|
||||
field :mpoints, :integer, default: 0, source: :mPoints
|
||||
field :gender, :integer, default: 0
|
||||
field :session_ip, :string, source: :SessionIP
|
||||
field :points, :integer, default: 0
|
||||
field :vpoints, :integer, default: 0
|
||||
field :totalvotes, :integer, default: 0
|
||||
field :lastlogon, :naive_datetime
|
||||
field :lastvoteip, :string
|
||||
|
||||
has_many :characters, Odinsea.Database.Schema.Character, foreign_key: :accountid
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for account registration.
|
||||
"""
|
||||
def registration_changeset(account, attrs) do
|
||||
account
|
||||
|> cast(attrs, [:name, :password, :salt, :birthday, :gender, :email])
|
||||
|> validate_required([:name, :password, :salt])
|
||||
|> validate_length(:name, min: 3, max: 13)
|
||||
|> validate_format(:name, ~r/^[a-zA-Z0-9]+$/, message: "only letters and numbers allowed")
|
||||
|> unique_constraint(:name)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for login updates (last login time, IP, etc).
|
||||
"""
|
||||
def login_changeset(account, attrs) do
|
||||
account
|
||||
|> cast(attrs, [:loggedin, :lastlogin, :session_ip])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for ban updates.
|
||||
"""
|
||||
def ban_changeset(account, attrs) do
|
||||
account
|
||||
|> cast(attrs, [:banned, :banreason, :tempban, :greason])
|
||||
end
|
||||
end
|
||||
134
lib/odinsea/database/schema/character.ex
Normal file
134
lib/odinsea/database/schema/character.ex
Normal file
@@ -0,0 +1,134 @@
|
||||
defmodule Odinsea.Database.Schema.Character do
|
||||
@moduledoc """
|
||||
Ecto schema for the characters table.
|
||||
Represents a player character in the game.
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key {:id, :id, autogenerate: true}
|
||||
@timestamps_opts [inserted_at: :createdate, updated_at: false]
|
||||
|
||||
schema "characters" do
|
||||
field :accountid, :integer
|
||||
field :world, :integer, default: 0
|
||||
field :name, :string
|
||||
field :level, :integer, default: 1
|
||||
field :exp, :integer, default: 0
|
||||
field :str, :integer, default: 4
|
||||
field :dex, :integer, default: 4
|
||||
field :luk, :integer, default: 4
|
||||
field :int, :integer, default: 4
|
||||
field :hp, :integer, default: 50
|
||||
field :mp, :integer, default: 5
|
||||
field :maxhp, :integer, default: 50
|
||||
field :maxmp, :integer, default: 5
|
||||
field :meso, :integer, default: 0
|
||||
field :hp_ap_used, :integer, default: 0, source: :hpApUsed
|
||||
field :job, :integer, default: 0
|
||||
field :skincolor, :integer, default: 0
|
||||
field :gender, :integer, default: 0
|
||||
field :fame, :integer, default: 0
|
||||
field :hair, :integer, default: 0
|
||||
field :face, :integer, default: 0
|
||||
field :ap, :integer, default: 0
|
||||
field :map, :integer, default: 100000000
|
||||
field :spawnpoint, :integer, default: 0
|
||||
field :gm, :integer, default: 0
|
||||
field :party, :integer, default: 0
|
||||
field :buddy_capacity, :integer, default: 25, source: :buddyCapacity
|
||||
field :createdate, :naive_datetime
|
||||
field :guildid, :integer, default: 0
|
||||
field :guildrank, :integer, default: 5
|
||||
field :alliance_rank, :integer, default: 5, source: :allianceRank
|
||||
field :guild_contribution, :integer, default: 0, source: :guildContribution
|
||||
field :pets, :string, default: "-1,-1,-1"
|
||||
field :sp, :string, default: "0,0,0,0,0,0,0,0,0,0"
|
||||
field :subcategory, :integer, default: 0
|
||||
field :rank, :integer, default: 1
|
||||
field :rank_move, :integer, default: 0, source: :rankMove
|
||||
field :job_rank, :integer, default: 1, source: :jobRank
|
||||
field :job_rank_move, :integer, default: 0, source: :jobRankMove
|
||||
field :marriage_id, :integer, default: 0, source: :marriageId
|
||||
field :familyid, :integer, default: 0
|
||||
field :seniorid, :integer, default: 0
|
||||
field :junior1, :integer, default: 0
|
||||
field :junior2, :integer, default: 0
|
||||
field :currentrep, :integer, default: 0
|
||||
field :totalrep, :integer, default: 0
|
||||
field :gachexp, :integer, default: 0
|
||||
field :fatigue, :integer, default: 0
|
||||
field :charm, :integer, default: 0
|
||||
field :craft, :integer, default: 0
|
||||
field :charisma, :integer, default: 0
|
||||
field :will, :integer, default: 0
|
||||
field :sense, :integer, default: 0
|
||||
field :insight, :integer, default: 0
|
||||
field :total_wins, :integer, default: 0, source: :totalWins
|
||||
field :total_losses, :integer, default: 0, source: :totalLosses
|
||||
field :pvp_exp, :integer, default: 0, source: :pvpExp
|
||||
field :pvp_points, :integer, default: 0, source: :pvpPoints
|
||||
|
||||
belongs_to :account, Odinsea.Database.Schema.Account,
|
||||
foreign_key: :accountid,
|
||||
references: :id,
|
||||
define_field: false
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for character creation.
|
||||
"""
|
||||
def creation_changeset(character, attrs) do
|
||||
character
|
||||
|> cast(attrs, [
|
||||
:accountid,
|
||||
:world,
|
||||
:name,
|
||||
:job,
|
||||
:gender,
|
||||
:skincolor,
|
||||
:hair,
|
||||
:face,
|
||||
:str,
|
||||
:dex,
|
||||
:luk,
|
||||
:int,
|
||||
:hp,
|
||||
:mp,
|
||||
:maxhp,
|
||||
:maxmp,
|
||||
:ap,
|
||||
:map,
|
||||
:spawnpoint
|
||||
])
|
||||
|> validate_required([:accountid, :world, :name, :job, :gender])
|
||||
|> validate_length(:name, min: 3, max: 13)
|
||||
|> validate_format(:name, ~r/^[a-zA-Z]+$/, message: "only letters allowed")
|
||||
|> unique_constraint(:name)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for character stat updates.
|
||||
"""
|
||||
def stat_changeset(character, attrs) do
|
||||
character
|
||||
|> cast(attrs, [:level, :exp, :str, :dex, :luk, :int, :hp, :mp, :maxhp, :maxmp, :ap, :meso, :fame])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for character position updates.
|
||||
"""
|
||||
def position_changeset(character, attrs) do
|
||||
character
|
||||
|> cast(attrs, [:map, :spawnpoint])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Changeset for guild/party updates.
|
||||
"""
|
||||
def social_changeset(character, attrs) do
|
||||
character
|
||||
|> cast(attrs, [:party, :guildid, :guildrank, :familyid])
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user