eq2go/internal/player/types.go

520 lines
12 KiB
Go

package player
import (
"sync"
"sync/atomic"
"time"
"eq2emu/internal/common"
"eq2emu/internal/entity"
"eq2emu/internal/factions"
"eq2emu/internal/languages"
"eq2emu/internal/quests"
"eq2emu/internal/skills"
"eq2emu/internal/spells"
"eq2emu/internal/titles"
)
// SpawnState represents the state of a spawn for a player
type SpawnState int32
const (
SPAWN_STATE_NONE SpawnState = iota
SPAWN_STATE_SENDING
SPAWN_STATE_SENT_WAIT
SPAWN_STATE_SENT
SPAWN_STATE_REMOVING
SPAWN_STATE_REMOVING_SLEEP
SPAWN_STATE_REMOVED
)
// HistoryData represents character history data matching the character_history table
type HistoryData struct {
Value int32
Value2 int32
Location [200]byte
EventID int32
EventDate int32
NeedsSave bool
}
// LUAHistory represents history set through the LUA system
type LUAHistory struct {
Value int32
Value2 int32
SaveNeeded bool
}
// SpellBookEntry represents a spell in the player's spell book
type SpellBookEntry struct {
SpellID int32
Tier int8
Type int32
Slot int32
RecastAvailable int32
Status int8
Recast int16
Timer int32
SaveNeeded bool
InUse bool
InRemiss bool
Player *Player
Visible bool
}
// GMTagFilter represents a GM visual filter
type GMTagFilter struct {
FilterType int32
FilterValue int32
FilterSearchCriteria [256]byte
VisualTag int16
}
// QuickBarItem represents an item on the player's quickbar
type QuickBarItem struct {
Deleted bool
Hotbar int32
Slot int32
Type int32
Icon int16
IconType int16
ID int32
Tier int8
UniqueID int64
Text common.EQ2String16Bit
}
// LoginAppearances represents equipment appearance data for login
type LoginAppearances struct {
Deleted bool
EquipType int16
Red int8
Green int8
Blue int8
HRed int8
HGreen int8
HBlue int8
UpdateNeeded bool
}
// SpawnQueueState represents the spawn queue state with timer
type SpawnQueueState struct {
SpawnStateTimer time.Time
IndexID int16
}
// PlayerLoginAppearance manages login appearance data
type PlayerLoginAppearance struct {
appearanceList map[int8]*LoginAppearances
}
// InstanceData represents instance information for a player
type InstanceData struct {
DBID int32
InstanceID int32
ZoneID int32
ZoneInstanceType int8
ZoneName string
LastSuccessTimestamp int32
LastFailureTimestamp int32
SuccessLockoutTime int32
FailureLockoutTime int32
}
// CharacterInstances manages all instances for a character
type CharacterInstances struct {
instanceList []InstanceData
mu sync.Mutex
}
// PlayerInfo contains detailed player information for serialization
type PlayerInfo struct {
player *Player
infoStruct *entity.InfoStruct
houseZoneID int32
bindZoneID int32
bindX float32
bindY float32
bindZ float32
bindHeading float32
boatXOffset float32
boatYOffset float32
boatZOffset float32
boatSpawn int32
changes []byte
origPacket []byte
petChanges []byte
petOrigPacket []byte
}
// PlayerControlFlags manages player control flags
type PlayerControlFlags struct {
flagsChanged bool
flagChanges map[int8]map[int8]int8
currentFlags map[int8]map[int8]bool
controlMutex sync.Mutex
changesMutex sync.Mutex
}
// PlayerGroup represents a player's group information
type PlayerGroup struct {
// TODO: Implement group structure
}
// GroupMemberInfo represents information about a group member
type GroupMemberInfo struct {
// TODO: Implement group member structure
}
// Statistic represents a player statistic
type Statistic struct {
StatID int32
Value int64
Date int32
}
// Mail represents in-game mail
type Mail struct {
MailID int32
PlayerTo int32
PlayerFrom int32
Subject string
MailBody string
AlreadyRead int8
MailType int8
Coin int32
Stack int16
Postage int32
AttachmentID int32
CharItemID int32
TimeStamp int32
ExpireTime int32
}
// Collection represents a player collection
type Collection struct {
// TODO: Implement collection structure
}
// PlayerItemList manages the player's items
type PlayerItemList struct {
// TODO: Implement item list structure
}
// PlayerSkillList manages the player's skills
type PlayerSkillList struct {
skills.PlayerSkillList
}
// PlayerTitlesList manages the player's titles
type PlayerTitlesList struct {
titles.PlayerTitlesList
}
// PlayerLanguagesList manages the player's languages
type PlayerLanguagesList struct {
languages.PlayerLanguagesList
}
// PlayerFaction manages the player's faction standings
type PlayerFaction struct {
factions.PlayerFaction
}
// PlayerCollectionList manages the player's collections
type PlayerCollectionList struct {
// TODO: Implement collection list structure
}
// PlayerRecipeList manages the player's recipes
type PlayerRecipeList struct {
// TODO: Implement recipe list structure
}
// PlayerRecipeBookList manages the player's recipe books
type PlayerRecipeBookList struct {
// TODO: Implement recipe book list structure
}
// PlayerAchievementList manages the player's achievements
type PlayerAchievementList struct {
// TODO: Implement achievement list structure
}
// PlayerAchievementUpdateList manages achievement updates
type PlayerAchievementUpdateList struct {
// TODO: Implement achievement update list structure
}
// Guild represents a player's guild
type Guild struct {
// TODO: Implement guild structure
}
// Recipe represents a crafting recipe
type Recipe struct {
// TODO: Implement recipe structure
}
// TraitData represents a character trait
type TraitData struct {
// TODO: Implement trait structure
}
// PacketStruct represents a network packet structure
type PacketStruct struct {
// TODO: Implement packet structure
}
// Client represents a connected client
type Client struct {
// TODO: Implement client structure
}
// ZoneServer represents a zone server instance
type ZoneServer struct {
// TODO: Implement zone server structure
}
// NPC represents a non-player character
type NPC struct {
// TODO: Implement NPC structure
}
// Item represents an in-game item
type Item struct {
// TODO: Implement item structure
}
// MaintainedEffects represents a maintained spell effect
type MaintainedEffects struct {
spells.MaintainedEffects
}
// SpellEffects represents active spell effects
type SpellEffects struct {
spells.SpellEffects
}
// Player represents a player character extending Entity
type Player struct {
entity.Entity
// Client connection
client *Client
// Character identifiers
charID int32
spawnID int32
accountID int32
// Tutorial progress
tutorialStep int8
// Player information
info *PlayerInfo
// Group information
group *PlayerGroup
// Movement and position
movementPacket []byte
oldMovementPacket []byte
lastMovementActivity int16
posPacketSpeed float32
testX float32
testY float32
testZ float32
testTime int32
// Combat
rangeAttack bool
combatTarget *entity.Entity
resurrecting bool
// Packet management
packetNum int32
spawnIndex int16
spellCount int16
spellOrigPacket []byte
spellXorPacket []byte
raidOrigPacket []byte
raidXorPacket []byte
// Spawn management
spawnVisPacketList map[int32]string
spawnInfoPacketList map[int32]string
spawnPosPacketList map[int32]string
spawnPacketSent map[int32]int8
spawnStateList map[int32]*SpawnQueueState
playerSpawnIDMap map[int32]*entity.Spawn
playerSpawnReverseIDMap map[*entity.Spawn]int32
playerAggroRangeSpawns map[int32]bool
// Temporary spawn packets for XOR
spawnTmpVisXorPacket []byte
spawnTmpPosXorPacket []byte
spawnTmpInfoXorPacket []byte
visXorSize int32
posXorSize int32
infoXorSize int32
// Packet structures
spawnPosStruct *PacketStruct
spawnInfoStruct *PacketStruct
spawnVisStruct *PacketStruct
spawnHeaderStruct *PacketStruct
spawnFooterStruct *PacketStruct
widgetFooterStruct *PacketStruct
signFooterStruct *PacketStruct
// Character flags
charsheetChanged atomic.Bool
raidsheetChanged atomic.Bool
hassentRaid atomic.Bool
quickbarUpdated bool
// Quest system
playerQuests map[int32]*quests.Quest
completedQuests map[int32]*quests.Quest
pendingQuests map[int32]*quests.Quest
currentQuestFlagged map[*entity.Spawn]bool
playerSpawnQuestsRequired map[int32][]int32
playerSpawnHistoryRequired map[int32][]int32
// Skills and spells
spells []*SpellBookEntry
passiveSpells []int32
skillList PlayerSkillList
allSpellsLocked bool
// Items and equipment
itemList PlayerItemList
quickbarItems []*QuickBarItem
pendingLootItems map[int32]map[int32]bool
// Social lists
friendList map[string]int8
ignoreList map[string]int8
// Character history
characterHistory map[int8]map[int8][]*HistoryData
charLuaHistory map[int32]*LUAHistory
// POI discoveries
playersPoiList map[int32][]int32
// Collections and achievements
collectionList PlayerCollectionList
pendingCollectionReward *Collection
pendingItemRewards []Item
pendingSelectableItemRewards map[int32][]Item
achievementList PlayerAchievementList
achievementUpdateList PlayerAchievementUpdateList
// Titles and languages
playerTitlesList PlayerTitlesList
playerLanguagesList PlayerLanguagesList
currentLanguageID int32
// Recipes
recipeList PlayerRecipeList
recipebookList PlayerRecipeBookList
currentRecipe int32
// Factions
factions PlayerFaction
// Statistics
statistics map[int32]*Statistic
// Mail
mailList map[int32]*Mail
// Character instances
characterInstances CharacterInstances
// Character state
awayMessage string
biography string
isTracking bool
pendingDeletion bool
returningFromLD bool
custNPC bool
custNPCTarget *entity.Entity
stopSaveSpellEffects bool
gmVision bool
resetMentorship bool
activeReward bool
// Guild
guild *Guild
// Appearance
savedApp common.AppearanceData
savedFeatures common.CharFeatures
// Bots
spawnedBots map[int32]int32 // bot index -> spawn id
// Control flags
controlFlags PlayerControlFlags
// Target invisibility history
targetInvisHistory map[int32]bool
// Mount information
tmpMountModel int32
tmpMountColor common.EQ2Color
tmpMountSaddleColor common.EQ2Color
// Lift cooldown
liftCooldown time.Time
// GM visual filters
gmVisualFilters []GMTagFilter
// Food and drink
activeFoodUniqueID atomic.Int64
activeDrinkUniqueID atomic.Int64
// Housing
houseVaultSlots int8
// Traits
sortedTraitList map[int8]map[int8][]*TraitData
classTraining map[int8][]*TraitData
raceTraits map[int8][]*TraitData
innateRaceTraits map[int8][]*TraitData
focusEffects map[int8][]*TraitData
needTraitUpdate atomic.Bool
// Mutexes
playerQuestsMutex sync.RWMutex
spellsBookMutex sync.RWMutex
recipeBookMutex sync.RWMutex
playerSpawnQuestsRequiredMutex sync.RWMutex
playerSpawnHistoryRequiredMutex sync.RWMutex
luaHistoryMutex sync.RWMutex
controlFlagsMutex sync.RWMutex
infoMutex sync.RWMutex
posMutex sync.RWMutex
visMutex sync.RWMutex
indexMutex sync.RWMutex
spawnMutex sync.RWMutex
spawnAggroRangeMutex sync.RWMutex
traitMutex sync.RWMutex
spellPacketUpdateMutex sync.RWMutex
raidUpdateMutex sync.RWMutex
mailMutex sync.RWMutex
}
// SkillBonus represents a skill bonus from a spell
type SkillBonus struct {
SpellID int32
SkillID int32
Value float32
}
// AddItemType represents the type of item addition
type AddItemType int8