Start repo, claude & kimi still vibing tho

This commit is contained in:
ra
2026-02-14 17:04:21 -07:00
commit f5b8aeb39d
54 changed files with 9466 additions and 0 deletions

View 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