Documentation
¶
Index ¶
- func AlignmentChange(killerAlignment int8, killedAlignment int8) int
- func ChanceToTame(s *users.UserRecord, t *mobs.Mob) int
- func ClearRegistry()
- func Crits(sourceChar characters.Character, targetChar characters.Character) bool
- func GetActiveCombatSystemName() string
- func Hits(attackSpd, defendSpd, hitModifier int) bool
- func InitializeRegistry()
- func ListCombatSystems() []string
- func PowerRanking(atkChar characters.Character, defChar characters.Character) float64
- func RegisterCombatSystem(name string, system ICombatSystem) error
- func SetActiveCombatSystem(name string) error
- func ShutdownCombatSystem() error
- type AttackResult
- func AttackMobVsMob(mobAtk *mobs.Mob, mobDef *mobs.Mob) AttackResult
- func AttackMobVsPlayer(mob *mobs.Mob, user *users.UserRecord) AttackResult
- func AttackPlayerVsMob(user *users.UserRecord, mob *mobs.Mob) AttackResult
- func AttackPlayerVsPlayer(userAtk *users.UserRecord, userDef *users.UserRecord) AttackResult
- func GetWaitMessages(stepType items.Intensity, sourceChar *characters.Character, ...) AttackResult
- type BaseTimer
- type CombatAction
- type CombatState
- type ICombatCalculator
- type ICombatSystem
- type ICombatTimer
- type PlayerTracker
- type SourceTarget
- type SwitchCombatSystemEvent
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AlignmentChange ¶
func ChanceToTame ¶
func ChanceToTame(s *users.UserRecord, t *mobs.Mob) int
func ClearRegistry ¶
func ClearRegistry()
ClearRegistry removes all registered combat systems (for testing)
func Crits ¶
func Crits(sourceChar characters.Character, targetChar characters.Character) bool
Whether they crit
func GetActiveCombatSystemName ¶
func GetActiveCombatSystemName() string
GetActiveCombatSystemName returns the name of the currently active combat system
func InitializeRegistry ¶
func InitializeRegistry()
InitializeRegistry sets up the combat registry event handlers ARCHITECTURAL NOTE: This must be called explicitly from main() rather than using init() to avoid event handler registration during init phase, which could cause initialization order issues. The combat system needs the event system to be fully initialized before registering handlers.
func ListCombatSystems ¶
func ListCombatSystems() []string
ListCombatSystems returns all registered combat system names
func PowerRanking ¶
func PowerRanking(atkChar characters.Character, defChar characters.Character) float64
PowerRanking delegates to the active combat system's calculator or uses default
func RegisterCombatSystem ¶
func RegisterCombatSystem(name string, system ICombatSystem) error
RegisterCombatSystem registers a combat system implementation
func SetActiveCombatSystem ¶
SetActiveCombatSystem sets the active combat system
func ShutdownCombatSystem ¶
func ShutdownCombatSystem() error
ShutdownCombatSystem shuts down the active combat system
Types ¶
type AttackResult ¶
type AttackResult struct {
Hit bool // defaults false
Crit bool // defaults false
BuffSource []int // defaults 0
BuffTarget []int // defaults 0
DamageToTarget int // defaults 0
DamageToTargetReduction int // defaults 0
DamageToSource int // defaults 0
DamageToSourceReduction int // defaults 0
MessagesToSource []string
MessagesToTarget []string
MessagesToSourceRoom []string
MessagesToTargetRoom []string
MessagesToRoomOld []string
}
func AttackMobVsMob ¶
func AttackMobVsMob(mobAtk *mobs.Mob, mobDef *mobs.Mob) AttackResult
AttackMobVsMob delegates to the active combat system
func AttackMobVsPlayer ¶
func AttackMobVsPlayer(mob *mobs.Mob, user *users.UserRecord) AttackResult
AttackMobVsPlayer delegates to the active combat system
func AttackPlayerVsMob ¶
func AttackPlayerVsMob(user *users.UserRecord, mob *mobs.Mob) AttackResult
AttackPlayerVsMob delegates to the active combat system
func AttackPlayerVsPlayer ¶
func AttackPlayerVsPlayer(userAtk *users.UserRecord, userDef *users.UserRecord) AttackResult
AttackPlayerVsPlayer delegates to the active combat system
func GetWaitMessages ¶
func GetWaitMessages(stepType items.Intensity, sourceChar *characters.Character, targetChar *characters.Character, sourceType SourceTarget, targetType SourceTarget) AttackResult
func (*AttackResult) SendToRoomOld ¶
func (a *AttackResult) SendToRoomOld(msg string)
func (*AttackResult) SendToSource ¶
func (a *AttackResult) SendToSource(msg string)
func (*AttackResult) SendToSourceRoom ¶
func (a *AttackResult) SendToSourceRoom(msg string)
func (*AttackResult) SendToTarget ¶
func (a *AttackResult) SendToTarget(msg string)
func (*AttackResult) SendToTargetRoom ¶
func (a *AttackResult) SendToTargetRoom(msg string)
type BaseTimer ¶
type BaseTimer struct {
// contains filtered or unexported fields
}
BaseTimer provides common timer functionality for combat systems
func NewBaseTimer ¶
NewBaseTimer creates a new base timer
type CombatAction ¶
type CombatAction struct {
AttackerId int
AttackerType SourceTarget
DefenderId int
DefenderType SourceTarget
ActionType characters.AggroType
SpellId int
ExitName string
Timestamp time.Time
}
CombatAction represents a queued combat action
type CombatState ¶
type CombatState struct {
UserId int
Aggro *characters.Aggro
}
CombatState holds saved combat state for a user
type ICombatCalculator ¶
type ICombatCalculator interface {
// CalculateHitChance determines if an attack hits
CalculateHitChance(attacker, defender *characters.Character) bool
// CalculateDamage computes damage for an attack
CalculateDamage(attacker, defender *characters.Character, weapon *items.Item) int
// CalculateCriticalChance determines if an attack is critical
CalculateCriticalChance(attacker, defender *characters.Character) bool
// CalculateDefense computes defensive value
CalculateDefense(defender *characters.Character) int
// CalculateInitiative determines action order
CalculateInitiative(actor *characters.Character) int
// CalculateAttackCount determines number of attacks per round
CalculateAttackCount(attacker, defender *characters.Character) int
// PowerRanking calculates relative power between actors
PowerRanking(attacker, defender *characters.Character) float64
}
ICombatCalculator defines combat calculation methods
type ICombatSystem ¶
type ICombatSystem interface {
// Initialize sets up the combat system
Initialize() error
// Shutdown cleanly shuts down the combat system
Shutdown() error
// GetName returns the name of this combat system
GetName() string
// ProcessCombatRound handles combat for all actors (called by round system)
ProcessCombatRound()
// GetCalculator returns the combat calculator
GetCalculator() ICombatCalculator
// GetTimer returns the combat timer (may be nil for round-based combat)
GetTimer() ICombatTimer
}
ICombatSystem defines the interface for modular combat implementations
func GetActiveCombatSystem ¶
func GetActiveCombatSystem() ICombatSystem
GetActiveCombatSystem returns the currently active combat system
func GetCombatSystem ¶
func GetCombatSystem(name string) (ICombatSystem, error)
GetCombatSystem returns a registered combat system by name
type ICombatTimer ¶
type ICombatTimer interface {
// Start begins the timer system
Start() error
// Stop halts the timer system
Stop() error
}
ICombatTimer defines minimal timing system interface for combat
type PlayerTracker ¶
type PlayerTracker struct {
// contains filtered or unexported fields
}
PlayerTracker provides common player tracking functionality
func NewPlayerTracker ¶
func NewPlayerTracker() *PlayerTracker
NewPlayerTracker creates a new player tracker
func (*PlayerTracker) AddPlayer ¶
func (pt *PlayerTracker) AddPlayer(userId int)
AddPlayer adds a player to tracking
func (*PlayerTracker) GetTrackedPlayers ¶
func (pt *PlayerTracker) GetTrackedPlayers() []int
GetTrackedPlayers returns a copy of tracked player IDs
func (*PlayerTracker) IsPlayerTracked ¶
func (pt *PlayerTracker) IsPlayerTracked(userId int) bool
IsPlayerTracked checks if a player is being tracked
func (*PlayerTracker) RemovePlayer ¶
func (pt *PlayerTracker) RemovePlayer(userId int)
RemovePlayer removes a player from tracking
type SourceTarget ¶
type SourceTarget string
const ( User SourceTarget = "user" Mob SourceTarget = "mob" )
type SwitchCombatSystemEvent ¶
type SwitchCombatSystemEvent struct {
NewSystem string
OldSystem string
RequestingUser int
SavedStates []CombatState
SavedMobStates map[int]*characters.Aggro
}
SwitchCombatSystemEvent is triggered when a combat system switch is requested
func (SwitchCombatSystemEvent) Type ¶
func (e SwitchCombatSystemEvent) Type() string
Type returns the event type