eq2go/internal/zone/constants.go

531 lines
13 KiB
Go

package zone
// Configuration keys for zone rules and settings
const (
// Zone configuration keys
ConfigTreasureChestEnabled = "treasure_chest_enabled"
ConfigPvPEnabled = "pvp_enabled"
ConfigDeathPenalty = "death_penalty_enabled"
ConfigSafeZone = "safe_zone"
ConfigGroupSpawns = "group_spawns_allowed"
ConfigInstanced = "instanced"
ConfigMaxPlayers = "max_players"
ConfigMinLevel = "min_level"
ConfigMaxLevel = "max_level"
ConfigLockoutTime = "lockout_time"
ConfigReenterTime = "reenter_time"
ConfigResetTime = "reset_time"
ConfigWeatherEnabled = "weather_enabled"
ConfigWeatherType = "weather_type"
ConfigSpawnRates = "spawn_rate_modifier"
ConfigLootRates = "loot_rate_modifier"
ConfigExperienceRates = "experience_rate_modifier"
)
// Logging prefixes for consistent log formatting
const (
LogPrefixZone = "[ZONE]"
LogPrefixMap = "[MAP]"
LogPrefixPathfind = "[PATHFIND]"
LogPrefixMovement = "[MOVEMENT]"
LogPrefixRegion = "[REGION]"
LogPrefixWeather = "[WEATHER]"
LogPrefixTransport = "[TRANSPORT]"
LogPrefixFlight = "[FLIGHT]"
LogPrefixProximity = "[PROXIMITY]"
LogPrefixGrid = "[GRID]"
LogPrefixScript = "[SCRIPT]"
LogPrefixCombat = "[COMBAT]"
LogPrefixSpawn = "[SPAWN]"
LogPrefixClient = "[CLIENT]"
)
// Map version constants
const (
MapVersionV1 = 1
MapVersionV2 = 2
MapVersionV2Deflated = 3
MapVersionV3Deflated = 4
)
// Map loading states
const (
MapStateUnloaded = iota
MapStateLoading
MapStateLoaded
MapStateFailed
)
// Pathfinding backend types
const (
PathfinderTypeNull = iota
PathfinderTypeWaypoint
PathfinderTypeNavmesh
)
// Pathfinding poly flags for terrain types
const (
PathingPolyFlagWalk = 0x01
PathingPolyFlagSwim = 0x02
PathingPolyFlagDoor = 0x04
PathingPolyFlagJump = 0x08
PathingPolyFlagDisabled = 0x10
PathingPolyFlagAll = 0xFFFF
)
// Water types for region detection
const (
WaterTypeNone = iota
WaterTypeNormal
WaterTypeLava
WaterTypeSlime
WaterTypeIce
WaterTypeVirtual
)
// Region types
const (
RegionTypeNormal = iota
RegionTypeWater
RegionTypeLava
RegionTypePvP
RegionTypeZoneLine
RegionTypeNoSpawn
RegionTypeEnvironmentalDamage
)
// Environmental damage types
const (
EnvironmentalDamageNone = iota
EnvironmentalDamageLava
EnvironmentalDamagePoison
EnvironmentalDamageCold
EnvironmentalDamageHeat
)
// Movement command types
const (
MovementCommandMoveTo = iota
MovementCommandSwimTo
MovementCommandTeleportTo
MovementCommandRotateTo
MovementCommandStop
MovementCommandEvadeCombat
MovementCommandFollowPath
)
// Movement modes
const (
MovementModeWalk = iota
MovementModeRun
MovementModeSwim
MovementModeFly
)
// Stuck behaviors for movement
const (
StuckBehaviorNone = iota
StuckBehaviorRun
StuckBehaviorWarp
StuckBehaviorEvade
)
// Movement speeds (units per second)
const (
DefaultWalkSpeed = 2.5
DefaultRunSpeed = 7.0
DefaultSwimSpeed = 3.5
DefaultFlySpeed = 10.0
)
// NPC brain types
const (
BrainTypeNone = iota
BrainTypeBasic
BrainTypeCombatPet
BrainTypeNonCombatPet
BrainTypeBlank
BrainTypeLua
BrainTypeDumbFire
)
// Combat states
const (
CombatStateNone = iota
CombatStateInCombat
CombatStateEvading
CombatStateReturning
)
// NPC AI timing constants (in milliseconds)
const (
AIThinkInterval = 100 // How often AI thinks
AggroCheckInterval = 1000 // How often to check for new targets
MovementUpdateInterval = 250 // How often to update movement
CombatTickInterval = 1000 // How often to process combat
SpellCheckInterval = 500 // How often to check for spell casting
HateDecayInterval = 5000 // How often hate decays
)
// Combat ranges
const (
DefaultMeleeRange = 5.0 // Default melee attack range
DefaultSpellRange = 30.0 // Default spell casting range
DefaultAggroRange = 25.0 // Default aggro acquisition range
DefaultLeashRange = 100.0 // Default leash range before reset
DefaultSocialRange = 15.0 // Range for social aggro
)
// Hate system constants
const (
MaxHateValue = 2000000000 // Maximum hate value
MinHateValue = -MaxHateValue
InitialHateValue = 1 // Starting hate for new targets
HateDecayAmount = 1 // How much hate decays per interval
HateDecayMinimum = 1 // Minimum hate before removal
)
// Spell targeting types
const (
SpellTargetSelf = iota
SpellTargetSingle
SpellTargetGroup
SpellTargetRaid
SpellTargetAOE
SpellTargetPBAOE
SpellTargetPet
)
// Spell effect types
const (
SpellEffectHeal = iota
SpellEffectDamage
SpellEffectBuff
SpellEffectDebuff
SpellEffectSummon
SpellEffectTeleport
SpellEffectResurrect
)
// Damage types
const (
DamageTypeSlashing = iota
DamageTypeCrushing
DamageTypePiercing
DamageTypeHeat
DamageTypeCold
DamageTypeMagic
DamageTypeMental
DamageTypePoison
DamageTypeDisease
)
// Resist types
const (
ResistElemental = iota
ResistNoxious
ResistArcane
ResistPhysical
)
// Timer intervals (in milliseconds)
const (
DefaultTimerInterval = 1000 // 1 second
FastTimerInterval = 100 // 100ms for high-frequency updates
SlowTimerInterval = 5000 // 5 seconds for infrequent updates
SpawnRangeUpdateInterval = 1000 // How often to update spawn ranges
SpawnVisibilityInterval = 500 // How often to check spawn visibility
CharsheetUpdateInterval = 30000 // How often to update character sheets
ClientSaveInterval = 300000 // How often to save client data
WeatherUpdateInterval = 60000 // How often to update weather
LocationProximityInterval = 1000 // How often to check location proximity
PlayerProximityInterval = 500 // How often to check player proximity
TrackingUpdateInterval = 2000 // How often to update tracking
WidgetUpdateInterval = 100 // How often to update widgets
RespawnCheckInterval = 5000 // How often to check respawns
DeadSpawnCleanupInterval = 30000 // How often to clean up dead spawns
ScriptTimerCheckInterval = 100 // How often to check script timers
)
// Packet opcodes and types
const (
PacketTypeUpdateLoot = "UpdateLoot"
PacketTypeLootResponse = "LootResponse"
PacketTypeStoppedLooting = "StoppedLooting"
PacketTypeSpawnUpdate = "SpawnUpdate"
PacketTypeRemoveSpawn = "RemoveSpawn"
PacketTypeAddSpawn = "AddSpawn"
PacketTypeZoneInfo = "ZoneInfo"
PacketTypeWeatherUpdate = "WeatherUpdate"
PacketTypeTimeUpdate = "TimeUpdate"
PacketTypeChatMessage = "ChatMessage"
PacketTypeEmote = "Emote"
PacketTypeAnimation = "Animation"
)
// Chat channel types
const (
ChatChannelSay = iota
ChatChannelTell
ChatChannelGroup
ChatChannelRaid
ChatChannelGuild
ChatChannelBroadcast
ChatChannelAnnouncement
ChatChannelOOC
ChatChannelYell
ChatChannelAuction
)
// Animation types
const (
AnimationTypeStandard = iota
AnimationTypeLooping
AnimationTypeTriggered
)
// Visual state types
const (
VisualStateStun = iota
VisualStateRoot
VisualStateFear
VisualStateMezz
VisualStateStifle
VisualStateInvisible
VisualStateStealth
)
// Emote types
const (
EmoteTypeStandard = iota
EmoteTypeTargeted
EmoteTypeUntargeted
)
// Tradeskill recipe difficulty levels
const (
RecipeDifficultyTrivial = iota
RecipeDifficultyEasy
RecipeDifficultyMedium
RecipeDifficultyHard
RecipeDifficultyExpert
)
// Harvest skill names
const (
HarvestSkillMining = "Mining"
HarvestSkillForesting = "Foresting"
HarvestSkillFishing = "Fishing"
HarvestSkillTrapping = "Trapping"
HarvestSkillGathering = "Gathering"
)
// Transport types
const (
TransportTypeNormal = iota
TransportTypeGuild
TransportTypeBoat
TransportTypeFlight
TransportTypeTeleporter
)
// Flight path states
const (
FlightPathStateNone = iota
FlightPathStateStarting
FlightPathStateFlying
FlightPathStateLanding
FlightPathStateCompleted
)
// Widget types
const (
WidgetTypeDoor = iota
WidgetTypeLift
WidgetTypeTransporter
WidgetTypeGeneric
)
// Widget states
const (
WidgetStateClosed = iota
WidgetStateOpen
WidgetStateMoving
)
// Sign types
const (
SignTypeGeneric = iota
SignTypeZoneTransport
)
// Ground spawn states
const (
GroundSpawnStateAvailable = iota
GroundSpawnStateHarvesting
GroundSpawnStateDepeted
GroundSpawnStateRespawning
)
// Group loot methods
const (
GroupLootMethodFFA = iota
GroupLootMethodRoundRobin
GroupLootMethodMasterLooter
GroupLootMethodNeedGreed
GroupLootMethodLotto
)
// Default configuration values
const (
DefaultMaxPlayers = 100
DefaultInstanceLockoutTime = 18000 // 5 hours in seconds
DefaultInstanceReenterTime = 3600 // 1 hour in seconds
DefaultInstanceResetTime = 259200 // 72 hours in seconds
DefaultRespawnTime = 600 // 10 minutes in seconds
DefaultSpawnDeleteTimer = 300 // 5 minutes in seconds
DefaultWeatherFrequency = 600 // 10 minutes in seconds
DefaultWeatherMinSeverity = 0.0
DefaultWeatherMaxSeverity = 1.0
DefaultWeatherChangeAmount = 0.1
DefaultWeatherDynamicOffset = 0.2
DefaultWeatherChangeChance = 50 // 50% chance
)
// Error messages
const (
ErrZoneNotFound = "zone not found"
ErrZoneShuttingDown = "zone is shutting down"
ErrZoneNotInitialized = "zone not initialized"
ErrMapNotLoaded = "map not loaded"
ErrPathfindingFailed = "pathfinding failed"
ErrInvalidPosition = "invalid position"
ErrSpawnNotFound = "spawn not found"
ErrPlayerNotFound = "player not found"
ErrClientNotFound = "client not found"
ErrInvalidSpawnType = "invalid spawn type"
ErrInvalidMovementCommand = "invalid movement command"
ErrNoPathAvailable = "no path available"
ErrTargetTooFar = "target too far away"
ErrNotInRange = "not in range"
ErrInvalidTarget = "invalid target"
ErrCannotCast = "cannot cast spell"
ErrInsufficientPower = "insufficient power"
ErrSpellOnCooldown = "spell on cooldown"
ErrInterrupted = "spell interrupted"
)
// File extensions
const (
MapFileExtension = ".map"
RegionFileExtension = ".rgn"
NavmeshFileExtension = ".nav"
WaypointFileExtension = ".wpt"
)
// Default file paths
const (
DefaultMapsPath = "maps/"
DefaultRegionsPath = "regions/"
DefaultNavmeshPath = "navmesh/"
DefaultWaypointsPath = "waypoints/"
)
// Grid system constants
const (
DefaultGridSize = 100.0 // Grid cell size in world units
MaxGridID = 1000 // Maximum grid ID
GridUpdateRadius = 2 // How many grid cells to update around player
)
// Proximity system constants
const (
MaxProximityDistance = 500.0 // Maximum proximity detection distance
ProximityUpdateRadius = 250.0 // Radius for proximity updates
LocationProximityRadius = 10.0 // Default radius for location proximity
)
// Memory and performance constants
const (
MaxSpawnsPerGrid = 100 // Maximum spawns per grid cell
MaxClientsPerZone = 200 // Maximum clients per zone
MaxTrackedSpawns = 500 // Maximum tracked spawns per client
SpawnPoolSize = 1000 // Size of spawn object pool
PacketBufferSize = 4096 // Size of packet buffers
MaxConcurrentLoaders = 4 // Maximum concurrent map loaders
)
// Version compatibility
const (
MinSupportedClientVersion = 1
MaxSupportedClientVersion = 60114
DefaultClientVersion = 60114
)
// Database query limits
const (
MaxSpawnLocationsPerQuery = 1000
MaxLootTablesPerQuery = 100
MaxNPCsPerQuery = 500
MaxObjectsPerQuery = 200
DatabaseQueryTimeout = 30 // seconds
)
// Thread pool sizes
const (
DefaultWorkerThreads = 4
IOWorkerThreads = 2
NetworkWorkerThreads = 2
DatabaseWorkerThreads = 2
)
// Cache sizes
const (
SpawnCacheSize = 10000
PlayerCacheSize = 1000
ItemCacheSize = 50000
SpellCacheSize = 10000
QuestCacheSize = 5000
)
// Cleanup intervals
const (
DeadSpawnCleanupTime = 300 // 5 minutes before dead spawn cleanup
ExpiredTimersCleanup = 60 // 1 minute to clean expired timers
InactiveClientCleanup = 3600 // 1 hour for inactive client cleanup
MemoryCleanupInterval = 300 // 5 minutes for general memory cleanup
)
// Language system constants
const (
CommonLanguageID = 0 // Common tongue (understood by all)
MaxLanguageSkill = 100 // Maximum language skill value
DefaultLanguageSkill = 25 // Default language skill for racial languages
)
// Quest system constants
const (
MaxActiveQuests = 75 // Maximum active quests per player
MaxCompletedQuests = 1000 // Maximum completed quests to track
QuestUpdateRadius = 50.0 // Radius for quest update notifications
)
// PvP system constants
const (
PvPSafeZoneRadius = 100.0 // Radius around safe zones where PvP is disabled
PvPCombatTimeout = 30 // Seconds before PvP combat timeout
PvPFlagDuration = 300 // Duration of PvP flag in seconds
)
// Housing system constants
const (
MaxHouseItems = 800 // Maximum items per house
HouseMaintenanceDays = 30 // Days before house maintenance due
MaxHouseSize = 100.0 // Maximum house dimensions
)
// Achievement system constants
const (
MaxAchievementPoints = 50000 // Maximum achievement points
AchievementUpdateRadius = 100.0 // Radius for achievement notifications
)