eq2go/internal/rules/constants.go

346 lines
18 KiB
Go

package rules
import "errors"
// RuleCategory defines the major categories of rules in EQ2
type RuleCategory int32
const (
CategoryClient RuleCategory = 0 // Client-related rules
CategoryFaction RuleCategory = 1 // Faction system rules
CategoryGuild RuleCategory = 2 // Guild system rules
CategoryPlayer RuleCategory = 3 // Player-related rules
CategoryPVP RuleCategory = 4 // Player vs Player rules
CategoryCombat RuleCategory = 5 // Combat system rules
CategorySpawn RuleCategory = 6 // Spawn/NPC rules
CategoryUI RuleCategory = 7 // User interface rules
CategoryWorld RuleCategory = 8 // World/server rules
CategoryZone RuleCategory = 9 // Zone-specific rules
CategoryLoot RuleCategory = 10 // Loot system rules
CategorySpells RuleCategory = 11 // Spell system rules
CategoryExpansion RuleCategory = 12 // Expansion flags
CategoryDiscord RuleCategory = 13 // Discord integration
)
// RuleType defines specific rule types within categories
type RuleType int32
// CLIENT RULES
const (
ClientShowWelcomeScreen RuleType = 0 // Show welcome screen to new players
ClientGroupSpellsTimer RuleType = 1 // Group spells update timer
ClientQuestQueueTimer RuleType = 2 // Quest queue processing timer
)
// FACTION RULES
const (
FactionAllowBasedCombat RuleType = 0 // Allow faction-based combat
)
// GUILD RULES
const (
GuildMaxLevel RuleType = 0 // Maximum guild level
GuildMaxPlayers RuleType = 1 // Maximum guild members
)
// PLAYER RULES
const (
PlayerMaxLevel RuleType = 0 // Maximum player level
PlayerMaxLevelOverrideStatus RuleType = 1 // Status required to override max level
PlayerMaxPlayers RuleType = 2 // Maximum players on server
PlayerMaxPlayersOverrideStatus RuleType = 3 // Status required to override max players
PlayerVitalityAmount RuleType = 4 // Vitality bonus amount
PlayerVitalityFrequency RuleType = 5 // Vitality bonus frequency
PlayerMaxAA RuleType = 6 // Maximum total AA points
PlayerMaxClassAA RuleType = 7 // Maximum class AA points
PlayerMaxSubclassAA RuleType = 8 // Maximum subclass AA points
PlayerMaxShadowsAA RuleType = 9 // Maximum shadows AA points
PlayerMaxHeroicAA RuleType = 10 // Maximum heroic AA points
PlayerMaxTradeskillAA RuleType = 11 // Maximum tradeskill AA points
PlayerMaxPrestigeAA RuleType = 12 // Maximum prestige AA points
PlayerMaxTradeskillPrestigeAA RuleType = 13 // Maximum tradeskill prestige AA points
PlayerMaxDragonAA RuleType = 14 // Maximum dragon AA points
PlayerMinLastNameLevel RuleType = 15 // Minimum level for last name
PlayerMaxLastNameLength RuleType = 16 // Maximum last name length
PlayerMinLastNameLength RuleType = 17 // Minimum last name length
PlayerDisableHouseAlignmentRequirement RuleType = 18 // Disable house alignment requirement
PlayerMentorItemDecayRate RuleType = 19 // Item decay rate when mentoring
PlayerTemporaryItemLogoutTime RuleType = 20 // Time for temporary items to decay
PlayerHeirloomItemShareExpiration RuleType = 21 // Heirloom item sharing expiration
PlayerSwimmingSkillMinSpeed RuleType = 22 // Minimum swimming speed
PlayerSwimmingSkillMaxSpeed RuleType = 23 // Maximum swimming speed
PlayerSwimmingSkillMinBreathLength RuleType = 24 // Minimum breath length
PlayerSwimmingSkillMaxBreathLength RuleType = 25 // Maximum breath length
PlayerAutoSkillUpBaseSkills RuleType = 26 // Auto-skill base skills on level
PlayerMaxWeightStrengthMultiplier RuleType = 27 // Strength multiplier for max weight
PlayerBaseWeight RuleType = 28 // Base weight for all classes
PlayerWeightPercentImpact RuleType = 29 // Speed impact per weight percent
PlayerWeightPercentCap RuleType = 30 // Maximum weight impact cap
PlayerCoinWeightPerStone RuleType = 31 // Coin weight per stone
PlayerWeightInflictsSpeed RuleType = 32 // Whether weight affects speed
PlayerLevelMasterySkillMultiplier RuleType = 33 // Level mastery skill multiplier
PlayerTraitTieringSelection RuleType = 34 // Trait tiering selection rules
PlayerClassicTraitLevelTable RuleType = 35 // Use classic trait level table
PlayerTraitFocusSelectLevel RuleType = 36 // Trait focus selection level
PlayerTraitTrainingSelectLevel RuleType = 37 // Trait training selection level
PlayerTraitRaceSelectLevel RuleType = 38 // Trait race selection level
PlayerTraitCharacterSelectLevel RuleType = 39 // Trait character selection level
PlayerStartHPBase RuleType = 40 // Starting HP base
PlayerStartPowerBase RuleType = 41 // Starting power base
PlayerStartHPLevelMod RuleType = 42 // HP level modifier
PlayerStartPowerLevelMod RuleType = 43 // Power level modifier
PlayerAllowEquipCombat RuleType = 44 // Allow equipment changes in combat
PlayerMaxTargetCommandDistance RuleType = 45 // Max distance for target command
PlayerMinSkillMultiplierValue RuleType = 46 // Min skill multiplier value
PlayerHarvestSkillUpMultiplier RuleType = 47 // Harvest skill up multiplier
PlayerMiniDingPercentage RuleType = 48 // Mini ding percentage
)
// PVP RULES
const (
PVPAllowPVP RuleType = 0 // Allow PVP combat
PVPLevelRange RuleType = 1 // PVP level range
PVPInvisPlayerDiscoveryRange RuleType = 2 // Invisible player discovery range
PVPMitigationModByLevel RuleType = 3 // PVP mitigation modifier by level
PVPType RuleType = 4 // PVP type (FFA, alignment, etc.)
)
// COMBAT RULES
const (
CombatMaxRange RuleType = 0 // Maximum combat range
CombatDeathExperienceDebt RuleType = 1 // Experience debt on death
CombatGroupExperienceDebt RuleType = 2 // Share debt with group
CombatPVPDeathExperienceDebt RuleType = 3 // PVP death experience debt
CombatExperienceToDebt RuleType = 4 // Percentage of experience to debt
CombatExperienceDebtRecoveryPercent RuleType = 5 // Debt recovery percentage
CombatExperienceDebtRecoveryPeriod RuleType = 6 // Debt recovery period
CombatEnableSpiritShards RuleType = 7 // Enable spirit shards
CombatSpiritShardSpawnScript RuleType = 8 // Spirit shard spawn script
CombatShardDebtRecoveryPercent RuleType = 9 // Shard debt recovery percentage
CombatShardRecoveryByRadius RuleType = 10 // Shard recovery by radius
CombatShardLifetime RuleType = 11 // Shard lifetime
CombatEffectiveMitigationCapLevel RuleType = 12 // Effective mitigation cap level
CombatCalculatedMitigationCapLevel RuleType = 13 // Calculated mitigation cap level
CombatMitigationLevelEffectivenessMax RuleType = 14 // Max mitigation effectiveness
CombatMitigationLevelEffectivenessMin RuleType = 15 // Min mitigation effectiveness
CombatMaxMitigationAllowed RuleType = 16 // Max mitigation allowed PVE
CombatMaxMitigationAllowedPVP RuleType = 17 // Max mitigation allowed PVP
CombatStrengthNPC RuleType = 18 // NPC strength multiplier
CombatStrengthOther RuleType = 19 // Other strength multiplier
CombatMaxSkillBonusByLevel RuleType = 20 // Max skill bonus by level
CombatLockedEncounterNoAttack RuleType = 21 // Locked encounter no attack
CombatMaxChaseDistance RuleType = 22 // Maximum chase distance
)
// SPAWN RULES
const (
SpawnSpeedMultiplier RuleType = 0 // Speed multiplier
SpawnClassicRegen RuleType = 1 // Use classic regeneration
SpawnHailMovementPause RuleType = 2 // Hail movement pause time
SpawnHailDistance RuleType = 3 // Hail distance
SpawnUseHardCodeWaterModelType RuleType = 4 // Use hardcoded water model type
SpawnUseHardCodeFlyingModelType RuleType = 5 // Use hardcoded flying model type
)
// UI RULES
const (
UIMaxWhoResults RuleType = 0 // Maximum /who results
UIMaxWhoOverrideStatus RuleType = 1 // Status to override max /who results
)
// WORLD RULES
const (
WorldDefaultStartingZoneID RuleType = 0 // Default starting zone ID
WorldEnablePOIDiscovery RuleType = 1 // Enable POI discovery
WorldGamblingTokenItemID RuleType = 2 // Gambling token item ID
WorldGuildAutoJoin RuleType = 3 // Auto join guild
WorldGuildAutoJoinID RuleType = 4 // Auto join guild ID
WorldGuildAutoJoinDefaultRankID RuleType = 5 // Auto join default rank ID
WorldServerLocked RuleType = 6 // Server locked
WorldServerLockedOverrideStatus RuleType = 7 // Server locked override status
WorldSyncZonesWithLogin RuleType = 8 // Sync zones with login
WorldSyncEquipWithLogin RuleType = 9 // Sync equipment with login
WorldUseBannedIPsTable RuleType = 10 // Use banned IPs table
WorldLinkDeadTimer RuleType = 11 // Link dead timer
WorldRemoveDisconnectedClientsTimer RuleType = 12 // Remove disconnected clients timer
WorldPlayerCampTimer RuleType = 13 // Player camp timer
WorldGMCampTimer RuleType = 14 // GM camp timer
WorldAutoAdminPlayers RuleType = 15 // Auto admin players
WorldAutoAdminGMs RuleType = 16 // Auto admin GMs
WorldAutoAdminStatusValue RuleType = 17 // Auto admin status value
WorldDuskTime RuleType = 18 // Dusk time
WorldDawnTime RuleType = 19 // Dawn time
WorldThreadedLoad RuleType = 20 // Threaded loading
WorldTradeskillSuccessChance RuleType = 21 // Tradeskill success chance
WorldTradeskillCritSuccessChance RuleType = 22 // Tradeskill critical success chance
WorldTradeskillFailChance RuleType = 23 // Tradeskill fail chance
WorldTradeskillCritFailChance RuleType = 24 // Tradeskill critical fail chance
WorldTradeskillEventChance RuleType = 25 // Tradeskill event chance
WorldEditorURL RuleType = 26 // Editor URL
WorldEditorIncludeID RuleType = 27 // Editor include ID
WorldEditorOfficialServer RuleType = 28 // Editor official server
WorldSavePaperdollImage RuleType = 29 // Save paperdoll image
WorldSaveHeadshotImage RuleType = 30 // Save headshot image
WorldSendPaperdollImagesToLogin RuleType = 31 // Send paperdoll images to login
WorldTreasureChestDisabled RuleType = 32 // Treasure chest disabled
WorldStartingZoneLanguages RuleType = 33 // Starting zone languages
WorldStartingZoneRuleFlag RuleType = 34 // Starting zone rule flag
WorldEnforceRacialAlignment RuleType = 35 // Enforce racial alignment
WorldMemoryCacheZoneMaps RuleType = 36 // Memory cache zone maps
WorldAutoLockEncounter RuleType = 37 // Auto lock encounter
WorldDisplayItemTiers RuleType = 38 // Display item tiers
WorldLoreAndLegendAccept RuleType = 39 // Lore and legend accept
)
// ZONE RULES
const (
ZoneMinLevelOverrideStatus RuleType = 0 // Min level override status
ZoneMinAccessOverrideStatus RuleType = 1 // Min access override status
ZoneXPMultiplier RuleType = 2 // Experience multiplier
ZoneTSXPMultiplier RuleType = 3 // Tradeskill experience multiplier
ZoneWeatherEnabled RuleType = 4 // Weather enabled
ZoneWeatherType RuleType = 5 // Weather type
ZoneMinWeatherSeverity RuleType = 6 // Min weather severity
ZoneMaxWeatherSeverity RuleType = 7 // Max weather severity
ZoneWeatherChangeFrequency RuleType = 8 // Weather change frequency
ZoneWeatherChangePerInterval RuleType = 9 // Weather change per interval
ZoneWeatherDynamicMaxOffset RuleType = 10 // Weather dynamic max offset
ZoneWeatherChangeChance RuleType = 11 // Weather change chance
ZoneSpawnUpdateTimer RuleType = 12 // Spawn update timer
ZoneCheckAttackPlayer RuleType = 13 // Check attack player
ZoneCheckAttackNPC RuleType = 14 // Check attack NPC
ZoneHOTime RuleType = 15 // Heroic opportunity time
ZoneUseMapUnderworldCoords RuleType = 16 // Use map underworld coords
ZoneMapUnderworldCoordOffset RuleType = 17 // Map underworld coord offset
ZoneSharedMaxPlayers RuleType = 18 // Shared zone max players
ZoneRegenTimer RuleType = 19 // Regeneration timer
ZoneClientSaveTimer RuleType = 20 // Client save timer
ZoneShutdownDelayTimer RuleType = 21 // Shutdown delay timer
ZoneWeatherTimer RuleType = 22 // Weather timer
ZoneSpawnDeleteTimer RuleType = 23 // Spawn delete timer
)
// LOOT RULES
const (
LootRadius RuleType = 0 // Loot pickup radius
LootAutoDisarmChest RuleType = 1 // Auto disarm chest
LootChestTriggerRadiusGroup RuleType = 2 // Chest trigger radius group
LootChestUnlockedTimeDrop RuleType = 3 // Chest unlocked time drop
LootAllowChestUnlockByDropTime RuleType = 4 // Allow chest unlock by drop time
LootChestUnlockedTimeTrap RuleType = 5 // Chest unlocked time trap
LootAllowChestUnlockByTrapTime RuleType = 6 // Allow chest unlock by trap time
LootSkipGrayMob RuleType = 7 // Skip loot from gray mobs
LootDistributionTime RuleType = 8 // Loot distribution time
)
// SPELLS RULES
const (
SpellsNoInterruptBaseChance RuleType = 0 // No interrupt base chance
SpellsEnableFizzleSpells RuleType = 1 // Enable fizzle spells
SpellsDefaultFizzleChance RuleType = 2 // Default fizzle chance
SpellsFizzleMaxSkill RuleType = 3 // Fizzle max skill
SpellsFizzleDefaultSkill RuleType = 4 // Fizzle default skill
SpellsEnableCrossZoneGroupBuffs RuleType = 5 // Enable cross zone group buffs
SpellsEnableCrossZoneTargetBuffs RuleType = 6 // Enable cross zone target buffs
SpellsPlayerSpellSaveStateWaitInterval RuleType = 7 // Player spell save state wait interval
SpellsPlayerSpellSaveStateCap RuleType = 8 // Player spell save state cap
SpellsRequirePreviousTierScribe RuleType = 9 // Require previous tier scribe
SpellsCureSpellID RuleType = 10 // Cure spell ID
SpellsCureCurseSpellID RuleType = 11 // Cure curse spell ID
SpellsCureNoxiousSpellID RuleType = 12 // Cure noxious spell ID
SpellsCureMagicSpellID RuleType = 13 // Cure magic spell ID
SpellsCureTraumaSpellID RuleType = 14 // Cure trauma spell ID
SpellsCureArcaneSpellID RuleType = 15 // Cure arcane spell ID
SpellsMinistrationSkillID RuleType = 16 // Ministration skill ID
SpellsMinistrationPowerReductionMax RuleType = 17 // Ministration power reduction max
SpellsMinistrationPowerReductionSkill RuleType = 18 // Ministration power reduction skill
SpellsMasterSkillReduceSpellResist RuleType = 19 // Master skill reduce spell resist
SpellsUseClassicSpellLevel RuleType = 20 // Use classic spell level
)
// EXPANSION RULES
const (
ExpansionGlobalFlag RuleType = 0 // Global expansion flag
ExpansionHolidayFlag RuleType = 1 // Global holiday flag
)
// DISCORD RULES
const (
DiscordEnabled RuleType = 0 // Discord enabled
DiscordWebhookURL RuleType = 1 // Discord webhook URL
DiscordBotToken RuleType = 2 // Discord bot token
DiscordChannel RuleType = 3 // Discord channel
DiscordListenChan RuleType = 4 // Discord listen channel
)
// Rule validation constants
const (
MaxRuleValueLength = 1024 // Maximum rule value length
MaxRuleCombinedLength = 2048 // Maximum combined rule string length
MaxRuleNameLength = 64 // Maximum rule name length
)
// Database constants
const (
TableRuleSets = "rulesets"
TableRuleSetDetails = "ruleset_details"
TableVariables = "variables"
DefaultRuleSetIDVar = "default_ruleset_id"
)
// Error variables
var (
ErrRuleNotFound = errors.New("rule not found")
ErrRuleSetNotFound = errors.New("rule set not found")
ErrInvalidRuleCategory = errors.New("invalid rule category")
ErrInvalidRuleType = errors.New("invalid rule type")
ErrInvalidRuleValue = errors.New("invalid rule value")
ErrDuplicateRuleSet = errors.New("duplicate rule set")
ErrRuleSetNotActive = errors.New("rule set not active")
ErrGlobalRuleSetNotSet = errors.New("global rule set not set")
ErrZoneRuleSetNotFound = errors.New("zone rule set not found")
ErrRuleValueTooLong = errors.New("rule value too long")
ErrRuleNameTooLong = errors.New("rule name too long")
)
// Rule category names for string conversion
var CategoryNames = map[RuleCategory]string{
CategoryClient: "Client",
CategoryFaction: "Faction",
CategoryGuild: "Guild",
CategoryPlayer: "Player",
CategoryPVP: "PVP",
CategoryCombat: "Combat",
CategorySpawn: "Spawn",
CategoryUI: "UI",
CategoryWorld: "World",
CategoryZone: "Zone",
CategoryLoot: "Loot",
CategorySpells: "Spells",
CategoryExpansion: "Expansion",
CategoryDiscord: "Discord",
}
// Reverse mapping for category name lookup
var CategoryByName = make(map[string]RuleCategory)
func init() {
// Initialize reverse category mapping
for category, name := range CategoryNames {
CategoryByName[name] = category
}
}
// GetCategoryName returns the string name for a rule category
func GetCategoryName(category RuleCategory) string {
if name, exists := CategoryNames[category]; exists {
return name
}
return "Unknown"
}
// GetCategoryByName returns the rule category for a string name
func GetCategoryByName(name string) (RuleCategory, bool) {
category, exists := CategoryByName[name]
return category, exists
}