combat

package
v0.9.2-combat-as-module.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 25, 2025 License: GPL-3.0 Imports: 19 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AlignmentChange

func AlignmentChange(killerAlignment int8, killedAlignment int8) int

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 Hits

func Hits(attackSpd, defendSpd, hitModifier int) bool

Chance to hit

func InitializeRegistry

func InitializeRegistry()

InitializeRegistry sets up the combat registry event 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

func SetActiveCombatSystem(name string) error

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

func NewBaseTimer(name string, updateFunc func()) *BaseTimer

NewBaseTimer creates a new base timer

func (*BaseTimer) IsActive

func (bt *BaseTimer) IsActive() bool

IsActive returns whether the timer is running

func (*BaseTimer) Start

func (bt *BaseTimer) Start() error

Start begins the timer loop

func (*BaseTimer) Stop

func (bt *BaseTimer) Stop() error

Stop halts the timer loop

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) Clear

func (pt *PlayerTracker) Clear()

Clear removes all tracked players

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

Type returns the event type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL