173 lines
5.9 KiB
Go

package alt_advancement
// AA tab/group constants based on group # from DB
const (
AA_CLASS = 0 // Class-specific advancement trees
AA_SUBCLASS = 1 // Subclass-specific advancement trees
AA_SHADOW = 2 // Shadows advancement (from Shadows of Luclin)
AA_HEROIC = 3 // Heroic advancement (from Destiny of Velious)
AA_TRADESKILL = 4 // Tradeskill advancement trees
AA_PRESTIGE = 5 // Prestige advancement (from Destiny of Velious)
AA_TRADESKILL_PRESTIGE = 6 // Tradeskill prestige advancement
AA_DRAGON = 7 // Dragon advancement
AA_DRAGONCLASS = 8 // Dragon class-specific advancement
AA_FARSEAS = 9 // Far Seas advancement
)
// AA tab names for display
var AATabNames = map[int8]string{
AA_CLASS: "Class",
AA_SUBCLASS: "Subclass",
AA_SHADOW: "Shadows",
AA_HEROIC: "Heroic",
AA_TRADESKILL: "Tradeskill",
AA_PRESTIGE: "Prestige",
AA_TRADESKILL_PRESTIGE: "Tradeskill Prestige",
AA_DRAGON: "Dragon",
AA_DRAGONCLASS: "Dragon Class",
AA_FARSEAS: "Far Seas",
}
// Maximum AA values per tab (from C++ packet data)
const (
MAX_CLASS_AA = 100 // 0x64
MAX_SUBCLASS_AA = 100 // 0x64
MAX_SHADOWS_AA = 70 // 0x46
MAX_HEROIC_AA = 50 // 0x32
MAX_TRADESKILL_AA = 40 // 0x28
MAX_PRESTIGE_AA = 25 // 0x19
MAX_TRADESKILL_PRESTIGE_AA = 25 // 0x19
MAX_DRAGON_AA = 100 // Estimated
MAX_DRAGONCLASS_AA = 100 // Estimated
MAX_FARSEAS_AA = 100 // Estimated
)
// AA template constants
const (
AA_TEMPLATE_PERSONAL_1 = 1 // Personal template 1
AA_TEMPLATE_PERSONAL_2 = 2 // Personal template 2
AA_TEMPLATE_PERSONAL_3 = 3 // Personal template 3
AA_TEMPLATE_SERVER_1 = 4 // Server template 1
AA_TEMPLATE_SERVER_2 = 5 // Server template 2
AA_TEMPLATE_SERVER_3 = 6 // Server template 3
AA_TEMPLATE_CURRENT = 7 // Current active template
MAX_AA_TEMPLATES = 8 // Maximum number of templates
)
// AA template names
var AATemplateNames = map[int8]string{
AA_TEMPLATE_PERSONAL_1: "Personal 1",
AA_TEMPLATE_PERSONAL_2: "Personal 2",
AA_TEMPLATE_PERSONAL_3: "Personal 3",
AA_TEMPLATE_SERVER_1: "Server 1",
AA_TEMPLATE_SERVER_2: "Server 2",
AA_TEMPLATE_SERVER_3: "Server 3",
AA_TEMPLATE_CURRENT: "Current",
}
// AA prerequisite constants
const (
AA_PREREQ_NONE = 0 // No prerequisite
AA_PREREQ_EXPANSION = 1 // Requires specific expansion
AA_PREREQ_LEVEL = 2 // Requires minimum level
AA_PREREQ_CLASS = 3 // Requires specific class
AA_PREREQ_POINTS = 4 // Requires points spent in tree
AA_PREREQ_ACHIEVEMENT = 5 // Requires achievement completion
)
// Expansion requirement flags
const (
EXPANSION_NONE = 0x00 // No expansion required
EXPANSION_KOS = 0x01 // Kingdom of Sky required
EXPANSION_EOF = 0x02 // Echoes of Faydwer required
EXPANSION_ROK = 0x04 // Rise of Kunark required
EXPANSION_TSO = 0x08 // The Shadow Odyssey required
EXPANSION_SF = 0x10 // Sentinel's Fate required
EXPANSION_DOV = 0x20 // Destiny of Velious required
EXPANSION_COE = 0x40 // Chains of Eternity required
EXPANSION_TOV = 0x80 // Tears of Veeshan required
)
// AA node positioning constants
const (
MIN_AA_COL = 0 // Minimum column position
MAX_AA_COL = 10 // Maximum column position
MIN_AA_ROW = 0 // Minimum row position
MAX_AA_ROW = 15 // Maximum row position
)
// AA cost and rank constants
const (
MIN_RANK_COST = 1 // Minimum cost per rank
MAX_RANK_COST = 10 // Maximum cost per rank
MIN_MAX_RANK = 1 // Minimum maximum rank
MAX_MAX_RANK = 20 // Maximum maximum rank
MIN_TITLE_LEVEL = 1 // Minimum title level
MAX_TITLE_LEVEL = 100 // Maximum title level
)
// AA packet operation codes
const (
OP_ADVENTURE_LIST = 0x023B // Adventure list packet opcode
OP_AA_UPDATE = 0x024C // AA update packet opcode
OP_AA_PURCHASE = 0x024D // AA purchase packet opcode
)
// AA display modes
const (
AA_DISPLAY_NEW = 0 // New template display
AA_DISPLAY_CHANGE = 1 // Change template display
AA_DISPLAY_UPDATE = 2 // Update existing display
)
// AA validation constants
const (
MIN_SPELL_ID = 1 // Minimum valid spell ID
MAX_SPELL_ID = 2147483647 // Maximum valid spell ID
MIN_NODE_ID = 1 // Minimum valid node ID
MAX_NODE_ID = 2147483647 // Maximum valid node ID
)
// AA processing constants
const (
AA_PROCESSING_BATCH_SIZE = 100 // Batch size for processing AAs
AA_CACHE_SIZE = 10000 // Cache size for AA data
AA_UPDATE_INTERVAL = 1000 // Update interval in milliseconds
)
// AA error codes
const (
AA_ERROR_NONE = 0 // No error
AA_ERROR_INVALID_SPELL_ID = 1 // Invalid spell ID
AA_ERROR_INVALID_NODE_ID = 2 // Invalid node ID
AA_ERROR_INSUFFICIENT_POINTS = 3 // Insufficient AA points
AA_ERROR_PREREQ_NOT_MET = 4 // Prerequisites not met
AA_ERROR_MAX_RANK_REACHED = 5 // Maximum rank already reached
AA_ERROR_INVALID_CLASS = 6 // Invalid class for this AA
AA_ERROR_EXPANSION_REQUIRED = 7 // Required expansion not owned
AA_ERROR_LEVEL_TOO_LOW = 8 // Character level too low
AA_ERROR_TREE_LOCKED = 9 // AA tree is locked
AA_ERROR_DATABASE_ERROR = 10 // Database operation failed
)
// AA statistic tracking constants
const (
STAT_TOTAL_AAS_LOADED = "total_aas_loaded"
STAT_TOTAL_NODES_LOADED = "total_nodes_loaded"
STAT_AAS_PER_TAB = "aas_per_tab"
STAT_PLAYER_AA_PURCHASES = "player_aa_purchases"
STAT_CACHE_HITS = "cache_hits"
STAT_CACHE_MISSES = "cache_misses"
STAT_DATABASE_QUERIES = "database_queries"
)
// Default AA configuration values
const (
DEFAULT_ENABLE_AA_SYSTEM = true
DEFAULT_ENABLE_AA_CACHING = true
DEFAULT_ENABLE_AA_VALIDATION = true
DEFAULT_ENABLE_AA_LOGGING = false
DEFAULT_AA_POINTS_PER_LEVEL = 2
DEFAULT_AA_MAX_BANKED_POINTS = 30
)