implement classes tests and fix package

This commit is contained in:
Sky Johnson 2025-08-01 16:42:31 -05:00
parent f4ace393d3
commit 249bb4f3c1
5 changed files with 1783 additions and 69 deletions

File diff suppressed because it is too large Load Diff

View File

@ -3,94 +3,94 @@ package classes
// Adventure class ID constants converted from C++ classes.h
const (
// Base classes
ClassCommoner = 0
ClassFighter = 1
ClassPriest = 11
ClassMage = 21
ClassScout = 31
ClassCommoner = int8(0)
ClassFighter = int8(1)
ClassPriest = int8(11)
ClassMage = int8(21)
ClassScout = int8(31)
// Fighter subclasses
ClassWarrior = 2
ClassGuardian = 3
ClassBerserker = 4
ClassBrawler = 5
ClassMonk = 6
ClassBruiser = 7
ClassCrusader = 8
ClassShadowknight = 9
ClassPaladin = 10
ClassWarrior = int8(2)
ClassGuardian = int8(3)
ClassBerserker = int8(4)
ClassBrawler = int8(5)
ClassMonk = int8(6)
ClassBruiser = int8(7)
ClassCrusader = int8(8)
ClassShadowknight = int8(9)
ClassPaladin = int8(10)
// Priest subclasses
ClassCleric = 12
ClassTemplar = 13
ClassInquisitor = 14
ClassDruid = 15
ClassWarden = 16
ClassFury = 17
ClassShaman = 18
ClassMystic = 19
ClassDefiler = 20
ClassCleric = int8(12)
ClassTemplar = int8(13)
ClassInquisitor = int8(14)
ClassDruid = int8(15)
ClassWarden = int8(16)
ClassFury = int8(17)
ClassShaman = int8(18)
ClassMystic = int8(19)
ClassDefiler = int8(20)
// Mage subclasses
ClassSorcerer = 22
ClassWizard = 23
ClassWarlock = 24
ClassEnchanter = 25
ClassIllusionist = 26
ClassCoercer = 27
ClassSummoner = 28
ClassConjuror = 29
ClassNecromancer = 30
ClassSorcerer = int8(22)
ClassWizard = int8(23)
ClassWarlock = int8(24)
ClassEnchanter = int8(25)
ClassIllusionist = int8(26)
ClassCoercer = int8(27)
ClassSummoner = int8(28)
ClassConjuror = int8(29)
ClassNecromancer = int8(30)
// Scout subclasses
ClassRogue = 32
ClassSwashbuckler = 33
ClassBrigand = 34
ClassBard = 35
ClassTroubador = 36
ClassDirge = 37
ClassPredator = 38
ClassRanger = 39
ClassAssassin = 40
ClassAnimalist = 41
ClassBeastlord = 42
ClassRogue = int8(32)
ClassSwashbuckler = int8(33)
ClassBrigand = int8(34)
ClassBard = int8(35)
ClassTroubador = int8(36)
ClassDirge = int8(37)
ClassPredator = int8(38)
ClassRanger = int8(39)
ClassAssassin = int8(40)
ClassAnimalist = int8(41)
ClassBeastlord = int8(42)
// Special classes
ClassShaper = 43
ClassChanneler = 44
ClassShaper = int8(43)
ClassChanneler = int8(44)
)
// Tradeskill class ID constants
const (
// Base tradeskill classes
ClassArtisan = 45
ClassCraftsman = 46
ClassOutfitter = 50
ClassScholar = 54
ClassArtisan = int8(45)
ClassCraftsman = int8(46)
ClassOutfitter = int8(50)
ClassScholar = int8(54)
// Craftsman subclasses
ClassProvisioner = 47
ClassWoodworker = 48
ClassCarpenter = 49
ClassProvisioner = int8(47)
ClassWoodworker = int8(48)
ClassCarpenter = int8(49)
// Outfitter subclasses
ClassArmorer = 51
ClassWeaponsmith = 52
ClassTailor = 53
ClassArmorer = int8(51)
ClassWeaponsmith = int8(52)
ClassTailor = int8(53)
// Scholar subclasses
ClassJeweler = 55
ClassSage = 56
ClassAlchemist = 57
ClassJeweler = int8(55)
ClassSage = int8(56)
ClassAlchemist = int8(57)
)
// Class validation constants
const (
MaxClassID = 57
MinClassID = 0
MaxClassID = int8(57)
MinClassID = int8(0)
DefaultClassID = ClassCommoner
ClassicMaxAdventureClass = 40 // Classic adventure classes (0-40)
ClassicMaxTradeskillClass = 13 // Classic tradeskill progression (0-13)
ClassicMaxAdventureClass = int8(40) // Classic adventure classes (0-40)
ClassicMaxTradeskillClass = int8(13) // Classic tradeskill progression (0-13)
MaxClasses = 58 // Total number of classes
)

View File

@ -108,8 +108,8 @@ func (ci *ClassIntegration) CheckClassCompatibility(entity1, entity2 ClassAware)
}
// Check if they share the same base class (good for grouping)
base1 := ci.classes.GetBaseClass(class1)
base2 := ci.classes.GetBaseClass(class2)
// base1 := ci.classes.GetBaseClass(class1)
// base2 := ci.classes.GetBaseClass(class2)
// Different base classes can group together (provides diversity)
// Same base class provides synergy

View File

@ -172,7 +172,7 @@ func (cm *ClassManager) handleInfoCommand(args []string) (string, error) {
return fmt.Sprintf("Invalid class ID: %d", classID), nil
}
result := fmt.Sprintf("Class Information:\n")
result := "Class Information:\n"
result += fmt.Sprintf("ID: %d\n", classID)
result += fmt.Sprintf("Name: %s\n", classInfo["display_name"])
result += fmt.Sprintf("Type: %s\n", classInfo["type"])
@ -390,7 +390,7 @@ func (cm *ClassManager) GetClassRecommendations(preferences map[string]interface
// Check for base class preference
if baseClass, exists := preferences["base_class"]; exists {
if baseClassID, ok := baseClass.(int8); ok {
subClasses := cm.utils.GetClassesByBaseClass(baseClassID)
subClasses := cm.utils.GetClassesForBaseClass(baseClassID)
recommendations = append(recommendations, subClasses...)
}
}

View File

@ -259,8 +259,8 @@ func (cu *ClassUtils) GetClassProgression(classID int8) []int8 {
return progression
}
// GetClasssByBaseClass returns all classes that belong to a base class
func (cu *ClassUtils) GetClasssByBaseClass(baseClassID int8) []int8 {
// GetClassesForBaseClass returns all classes that belong to a base class
func (cu *ClassUtils) GetClassesForBaseClass(baseClassID int8) []int8 {
result := make([]int8, 0)
allClasses := cu.classes.GetAllClasses()