1
0
EQ2Emu/internal/models/common/characters.go

111 lines
4.3 KiB
Go

package common
import (
"time"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)
// Represents a character in the game.
type Character struct {
ID int64 `db:"id"`
AccountID int32 `db:"account_id"`
ServerID int32 `db:"server_id"`
Name string `db:"name"`
Race int8 `db:"race"`
Class int8 `db:"class"`
Gender int8 `db:"gender"`
Deity int8 `db:"deity"`
BodySize float64 `db:"body_size"`
BodyAge float64 `db:"body_age"`
CurrentZoneID int32 `db:"current_zone_id"`
Level int32 `db:"level"`
TradeskillClass int8 `db:"tradeskill_class"`
TradeskillLevel int32 `db:"tradeskill_level"`
SogaWingType int32 `db:"soga_wing_type"`
SogaChestType int32 `db:"soga_chest_type"`
SogaLegsType int32 `db:"soga_legs_type"`
SogaHairType int32 `db:"soga_hair_type"`
SogaFacialHairType int32 `db:"soga_facial_hair_type"`
SogaModelType int32 `db:"soga_model_type"`
LegsType int32 `db:"legs_type"`
ChestType int32 `db:"chest_type"`
WingType int32 `db:"wing_type"`
HairType int32 `db:"hair_type"`
FacialHairType int32 `db:"facial_hair_type"`
ModelType int32 `db:"model_type"`
X float64 `db:"x"`
Y float64 `db:"y"`
Z float64 `db:"z"`
Heading float64 `db:"heading"`
InstanceID int32 `db:"instance_id"`
StartingCity int8 `db:"starting_city"`
Deleted bool `db:"deleted"`
UnixTimestamp int32 `db:"unix_timestamp"`
CreatedDate time.Time `db:"created_date"`
LastPlayed time.Time `db:"last_played"`
LastSaved int32 `db:"last_saved"`
AdminStatus int32 `db:"admin_status"`
IsOnline bool `db:"is_online"`
GroupID int32 `db:"group_id"`
Alignment int8 `db:"alignment"`
FirstWorldLogin bool `db:"first_world_login"`
ZoneDuplicatingID int32 `db:"zone_duplicating_id"`
}
// Creates the characters table if it doesn't exist.
func CreateCharactersTable(conn *sqlite.Conn) error {
return sqlitex.ExecScript(conn, `
CREATE TABLE IF NOT EXISTS characters (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
account_id INTEGER NOT NULL DEFAULT 0,
server_id INTEGER NOT NULL DEFAULT 0,
name TEXT NOT NULL DEFAULT '',
race INTEGER NOT NULL DEFAULT 0,
class INTEGER NOT NULL DEFAULT 0,
gender INTEGER NOT NULL DEFAULT 0,
deity INTEGER NOT NULL DEFAULT 0,
body_size REAL NOT NULL DEFAULT 0,
body_age REAL NOT NULL DEFAULT 0,
current_zone_id INTEGER NOT NULL DEFAULT 253,
level INTEGER NOT NULL DEFAULT 1,
tradeskill_class INTEGER NOT NULL DEFAULT 0,
tradeskill_level INTEGER NOT NULL DEFAULT 1,
soga_wing_type INTEGER NOT NULL,
soga_chest_type INTEGER NOT NULL,
soga_legs_type INTEGER NOT NULL,
soga_hair_type INTEGER NOT NULL,
soga_facial_hair_type INTEGER NOT NULL DEFAULT 0,
soga_model_type INTEGER NOT NULL,
legs_type INTEGER NOT NULL,
chest_type INTEGER NOT NULL,
wing_type INTEGER NOT NULL,
hair_type INTEGER NOT NULL,
facial_hair_type INTEGER NOT NULL DEFAULT 0,
model_type INTEGER NOT NULL,
x REAL NOT NULL DEFAULT 0,
y REAL NOT NULL DEFAULT 0,
z REAL NOT NULL DEFAULT 0,
heading REAL NOT NULL DEFAULT 0,
instance_id INTEGER NOT NULL DEFAULT 0,
starting_city INTEGER NOT NULL DEFAULT 1,
deleted INTEGER NOT NULL DEFAULT 0,
unix_timestamp INTEGER NOT NULL DEFAULT 0,
created_date TEXT NOT NULL DEFAULT '0000-00-00 00:00:00',
last_played TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_saved INTEGER NOT NULL DEFAULT 0,
admin_status INTEGER NOT NULL DEFAULT 0,
is_online INTEGER NOT NULL DEFAULT 0,
group_id INTEGER NOT NULL DEFAULT 0,
alignment INTEGER NOT NULL DEFAULT 0,
first_world_login INTEGER NOT NULL DEFAULT 0,
zone_duplicating_id INTEGER NOT NULL DEFAULT 0
);
CREATE INDEX IF NOT EXISTS CharIDX ON characters(name);
CREATE INDEX IF NOT EXISTS CharZoneIDX ON characters(current_zone_id);
CREATE INDEX IF NOT EXISTS CharAcctIDX ON characters(account_id);
`)
}