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 )