218 lines
7.6 KiB
Go
218 lines
7.6 KiB
Go
package heroic_ops
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
)
|
|
|
|
// HeroicOPDatabase defines the interface for database operations
|
|
type HeroicOPDatabase interface {
|
|
// Starter operations
|
|
LoadStarters(ctx context.Context) ([]HeroicOPData, error)
|
|
LoadStarter(ctx context.Context, starterID int32) (*HeroicOPData, error)
|
|
SaveStarter(ctx context.Context, starter *HeroicOPStarter) error
|
|
DeleteStarter(ctx context.Context, starterID int32) error
|
|
|
|
// Wheel operations
|
|
LoadWheels(ctx context.Context) ([]HeroicOPData, error)
|
|
LoadWheelsForStarter(ctx context.Context, starterID int32) ([]HeroicOPData, error)
|
|
LoadWheel(ctx context.Context, wheelID int32) (*HeroicOPData, error)
|
|
SaveWheel(ctx context.Context, wheel *HeroicOPWheel) error
|
|
DeleteWheel(ctx context.Context, wheelID int32) error
|
|
|
|
// Instance operations
|
|
SaveHOInstance(ctx context.Context, ho *HeroicOP) error
|
|
LoadHOInstance(ctx context.Context, instanceID int64) (*HeroicOP, error)
|
|
DeleteHOInstance(ctx context.Context, instanceID int64) error
|
|
|
|
// Statistics and events
|
|
SaveHOEvent(ctx context.Context, event *HeroicOPEvent) error
|
|
LoadHOEvents(ctx context.Context, instanceID int64) ([]HeroicOPEvent, error)
|
|
GetHOStatistics(ctx context.Context, characterID int32) (*HeroicOPStatistics, error)
|
|
|
|
// Utility operations
|
|
GetNextStarterID(ctx context.Context) (int32, error)
|
|
GetNextWheelID(ctx context.Context) (int32, error)
|
|
GetNextInstanceID(ctx context.Context) (int64, error)
|
|
EnsureHOTables(ctx context.Context) error
|
|
}
|
|
|
|
// HeroicOPEventHandler defines the interface for handling HO events
|
|
type HeroicOPEventHandler interface {
|
|
// HO lifecycle events
|
|
OnHOStarted(ho *HeroicOP, initiatorID int32)
|
|
OnHOCompleted(ho *HeroicOP, completedBy int32, spellID int32)
|
|
OnHOFailed(ho *HeroicOP, reason string)
|
|
OnHOTimerExpired(ho *HeroicOP)
|
|
|
|
// Progress events
|
|
OnAbilityUsed(ho *HeroicOP, characterID int32, abilityIcon int16, success bool)
|
|
OnWheelShifted(ho *HeroicOP, characterID int32, newWheelID int32)
|
|
OnStarterMatched(ho *HeroicOP, starterID int32, characterID int32)
|
|
OnStarterEliminated(ho *HeroicOP, starterID int32, characterID int32)
|
|
|
|
// Phase transitions
|
|
OnWheelPhaseStarted(ho *HeroicOP, wheelID int32, timeRemaining int32)
|
|
OnProgressMade(ho *HeroicOP, characterID int32, progressPercent float32)
|
|
}
|
|
|
|
// SpellManager defines the interface for spell system integration
|
|
type SpellManager interface {
|
|
// Get spell information
|
|
GetSpellInfo(spellID int32) (*SpellInfo, error)
|
|
GetSpellName(spellID int32) string
|
|
GetSpellDescription(spellID int32) string
|
|
|
|
// Cast spells
|
|
CastSpell(casterID int32, spellID int32, targets []int32) error
|
|
IsSpellValid(spellID int32) bool
|
|
}
|
|
|
|
// ClientManager defines the interface for client communication
|
|
type ClientManager interface {
|
|
// Send HO packets to clients
|
|
SendHOUpdate(characterID int32, data *PacketData) error
|
|
SendHOStart(characterID int32, ho *HeroicOP) error
|
|
SendHOComplete(characterID int32, ho *HeroicOP, success bool) error
|
|
SendHOTimer(characterID int32, timeRemaining int32, totalTime int32) error
|
|
|
|
// Broadcast to multiple clients
|
|
BroadcastHOUpdate(characterIDs []int32, data *PacketData) error
|
|
BroadcastHOEvent(characterIDs []int32, eventType int, data string) error
|
|
|
|
// Client validation
|
|
IsClientConnected(characterID int32) bool
|
|
GetClientVersion(characterID int32) int
|
|
}
|
|
|
|
// EncounterManager defines the interface for encounter system integration
|
|
type EncounterManager interface {
|
|
// Get encounter information
|
|
GetEncounterParticipants(encounterID int32) ([]int32, error)
|
|
IsEncounterActive(encounterID int32) bool
|
|
GetEncounterInfo(encounterID int32) (*EncounterInfo, error)
|
|
|
|
// HO integration
|
|
CanStartHO(encounterID int32, initiatorID int32) bool
|
|
NotifyHOStarted(encounterID int32, instanceID int64)
|
|
NotifyHOCompleted(encounterID int32, instanceID int64, success bool)
|
|
}
|
|
|
|
// PlayerManager defines the interface for player system integration
|
|
type PlayerManager interface {
|
|
// Get player information
|
|
GetPlayerInfo(characterID int32) (*PlayerInfo, error)
|
|
GetPlayerClass(characterID int32) (int8, error)
|
|
GetPlayerLevel(characterID int32) (int16, error)
|
|
IsPlayerOnline(characterID int32) bool
|
|
|
|
// Player abilities
|
|
CanPlayerUseAbility(characterID int32, abilityIcon int16) bool
|
|
GetPlayerAbilities(characterID int32) ([]int16, error)
|
|
|
|
// Player state
|
|
IsPlayerInCombat(characterID int32) bool
|
|
GetPlayerEncounter(characterID int32) (int32, error)
|
|
}
|
|
|
|
// LogHandler defines the interface for logging operations
|
|
type LogHandler interface {
|
|
LogDebug(system, format string, args ...interface{})
|
|
LogInfo(system, format string, args ...interface{})
|
|
LogWarning(system, format string, args ...interface{})
|
|
LogError(system, format string, args ...interface{})
|
|
}
|
|
|
|
// TimerManager defines the interface for timer management
|
|
type TimerManager interface {
|
|
// Timer operations
|
|
StartTimer(instanceID int64, duration time.Duration, callback func()) error
|
|
StopTimer(instanceID int64) error
|
|
UpdateTimer(instanceID int64, newDuration time.Duration) error
|
|
GetTimeRemaining(instanceID int64) (time.Duration, error)
|
|
|
|
// Timer queries
|
|
IsTimerActive(instanceID int64) bool
|
|
GetActiveTimers() []int64
|
|
}
|
|
|
|
// CacheManager defines the interface for caching operations
|
|
type CacheManager interface {
|
|
// Cache operations
|
|
Set(key string, value interface{}, expiration time.Duration) error
|
|
Get(key string) (interface{}, bool)
|
|
Delete(key string) error
|
|
Clear() error
|
|
|
|
// Cache statistics
|
|
GetHitRate() float64
|
|
GetSize() int
|
|
GetCapacity() int
|
|
}
|
|
|
|
// Additional integration interfaces
|
|
|
|
// EncounterInfo contains encounter details
|
|
type EncounterInfo struct {
|
|
ID int32 `json:"id"`
|
|
Name string `json:"name"`
|
|
Participants []int32 `json:"participants"`
|
|
IsActive bool `json:"is_active"`
|
|
StartTime time.Time `json:"start_time"`
|
|
Level int16 `json:"level"`
|
|
}
|
|
|
|
// PlayerInfo contains player details needed for HO system
|
|
type PlayerInfo struct {
|
|
CharacterID int32 `json:"character_id"`
|
|
CharacterName string `json:"character_name"`
|
|
AccountID int32 `json:"account_id"`
|
|
AdventureClass int8 `json:"adventure_class"`
|
|
AdventureLevel int16 `json:"adventure_level"`
|
|
Zone string `json:"zone"`
|
|
IsOnline bool `json:"is_online"`
|
|
InCombat bool `json:"in_combat"`
|
|
EncounterID int32 `json:"encounter_id"`
|
|
}
|
|
|
|
// Adapter interfaces for integration with existing systems
|
|
|
|
// HeroicOPAware defines interface for entities that can participate in HOs
|
|
type HeroicOPAware interface {
|
|
GetCharacterID() int32
|
|
GetClass() int8
|
|
GetLevel() int16
|
|
CanParticipateInHO() bool
|
|
GetCurrentEncounter() int32
|
|
}
|
|
|
|
// EntityHOAdapter adapts entity system for HO integration
|
|
type EntityHOAdapter struct {
|
|
entity HeroicOPAware
|
|
}
|
|
|
|
// PacketBuilder defines interface for building HO packets
|
|
type PacketBuilder interface {
|
|
BuildHOStartPacket(ho *HeroicOP) ([]byte, error)
|
|
BuildHOUpdatePacket(ho *HeroicOP) ([]byte, error)
|
|
BuildHOCompletePacket(ho *HeroicOP, success bool) ([]byte, error)
|
|
BuildHOTimerPacket(timeRemaining, totalTime int32) ([]byte, error)
|
|
}
|
|
|
|
// StatisticsCollector defines interface for collecting HO statistics
|
|
type StatisticsCollector interface {
|
|
RecordHOStarted(instanceID int64, starterID int32, characterID int32)
|
|
RecordHOCompleted(instanceID int64, success bool, completionTime time.Duration)
|
|
RecordAbilityUsed(instanceID int64, characterID int32, abilityIcon int16)
|
|
RecordShiftUsed(instanceID int64, characterID int32)
|
|
GetStatistics() *HeroicOPStatistics
|
|
Reset()
|
|
}
|
|
|
|
// ConfigManager defines interface for configuration management
|
|
type ConfigManager interface {
|
|
GetHOConfig() *HeroicOPConfig
|
|
UpdateHOConfig(config *HeroicOPConfig) error
|
|
GetConfigValue(key string) interface{}
|
|
SetConfigValue(key string, value interface{}) error
|
|
} |