Added scaleStat v3

This commit is contained in:
2024-08-24 23:32:12 -04:00
parent 1897be97ca
commit bd39a22ccd
3 changed files with 74 additions and 49 deletions

View File

@@ -93,48 +93,48 @@ var StatModifiers = map[int]float64{
}
var ScalingFactor = map[int]float64{
0: 1.5, // ITEM_MOD_MANA
1: 2.0, // ITEM_MOD_HEALTH
3: 2.0, // ITEM_MOD_AGILITY
4: 2.0, // ITEM_MOD_STRENGTH
5: 2.0, // ITEM_MOD_INTELLECT
6: 1.0, // ITEM_MOD_SPIRIT
7: 2.5, // ITEM_MOD_STAMINA
12: 1.5, // ITEM_MOD_DEFENSE_SKILL_RATING
13: 1.5, // ITEM_MOD_DODGE_RATING
14: 1.25, // ITEM_MOD_PARRY_RATING
15: 1.25, // ITEM_MOD_BLOCK_RATING
16: 1.25, // ITEM_MOD_HIT_MELEE_RATING
17: 1.25, // ITEM_MOD_HIT_RANGED_RATING
18: 1.25, // ITEM_MOD_HIT_SPELL_RATING
19: 1.5, // ITEM_MOD_CRIT_MELEE_RATING
20: 1.5, // ITEM_MOD_CRIT_RANGED_RATING
21: 1.0, // ITEM_MOD_CRIT_SPELL_RATING
22: 1.0, // ITEM_MOD_HIT_TAKEN_MELEE_RATING
23: 1.0, // ITEM_MOD_HIT_TAKEN_RANGED_RATING
24: 1.0, // ITEM_MOD_HIT_TAKEN_SPELL_RATING
25: 1.0, // ITEM_MOD_CRIT_TAKEN_MELEE_RATING
26: 1.0, // ITEM_MOD_CRIT_TAKEN_RANGED_RATING
27: 1.0, // ITEM_MOD_CRIT_TAKEN_SPELL_RATING
28: 1.5, // ITEM_MOD_HASTE_MELEE_RATING
29: 1.5, // ITEM_MOD_HASTE_RANGED_RATING
30: 1.5, // ITEM_MOD_HASTE_SPELL_RATING
31: 1.25, // ITEM_MOD_HIT_RATING
32: 1.5, // ITEM_MOD_CRIT_RATING
33: 1.0, // ITEM_MOD_HIT_TAKEN_RATING
34: 1.0, // ITEM_MOD_CRIT_TAKEN_RATING
35: 1.0, // ITEM_MOD_RESILIENCE_RATING
36: 1.5, // ITEM_MOD_HASTE_RATING
37: 1.25, // ITEM_MOD_EXPERTISE_RATING
38: 3.5, // ITEM_MOD_ATTACK_POWER
39: 3.5, // ITEM_MOD_RANGED_ATTACK_POWER
40: 3.5, // ITEM_MOD_FERAL_ATTACK_POWER (not used as of 3.3)
41: 3.5, // ITEM_MOD_SPELL_HEALING_DONE
42: 3.5, // ITEM_MOD_SPELL_DAMAGE_DONE
43: 1.5, // ITEM_MOD_MANA_REGENERATION
44: 1.5, // ITEM_MOD_ARMOR_PENETRATION_RATING
45: 3.75, // ITEM_MOD_SPELL_POWER
46: 1.8, // ITEM_MOD_HEALTH_REGEN
47: 2.0, // ITEM_MOD_SPELL_PENETRATION
48: 1.5, // ITEM_MOD_BLOCK_VALUE
0: 1.1, // ITEM_MOD_MANA
1: 1.1, // ITEM_MOD_HEALTH
3: 1.1, // ITEM_MOD_AGILITY
4: 1.1, // ITEM_MOD_STRENGTH
5: 1.1, // ITEM_MOD_INTELLECT
6: 1.1, // ITEM_MOD_SPIRIT
7: 2.0, // ITEM_MOD_STAMINA
12: 1.1, // ITEM_MOD_DEFENSE_SKILL_RATING
13: 1.1, // ITEM_MOD_DODGE_RATING
14: 1.1, // ITEM_MOD_PARRY_RATING
15: 1.1, // ITEM_MOD_BLOCK_RATING
16: 1.1, // ITEM_MOD_HIT_MELEE_RATING
17: 1.1, // ITEM_MOD_HIT_RANGED_RATING
18: 1.1, // ITEM_MOD_HIT_SPELL_RATING
19: 1.1, // ITEM_MOD_CRIT_MELEE_RATING
20: 1.1, // ITEM_MOD_CRIT_RANGED_RATING
21: 1.1, // ITEM_MOD_CRIT_SPELL_RATING
22: 1.1, // ITEM_MOD_HIT_TAKEN_MELEE_RATING
23: 1.1, // ITEM_MOD_HIT_TAKEN_RANGED_RATING
24: 1.1, // ITEM_MOD_HIT_TAKEN_SPELL_RATING
25: 1.1, // ITEM_MOD_CRIT_TAKEN_MELEE_RATING
26: 1.1, // ITEM_MOD_CRIT_TAKEN_RANGED_RATING
27: 1.1, // ITEM_MOD_CRIT_TAKEN_SPELL_RATING
28: 1.1, // ITEM_MOD_HASTE_MELEE_RATING
29: 1.1, // ITEM_MOD_HASTE_RANGED_RATING
30: 1.1, // ITEM_MOD_HASTE_SPELL_RATING
31: 1.1, // ITEM_MOD_HIT_RATING
32: 1.1, // ITEM_MOD_CRIT_RATING
33: 1.1, // ITEM_MOD_HIT_TAKEN_RATING
34: 1.1, // ITEM_MOD_CRIT_TAKEN_RATING
35: 1.1, // ITEM_MOD_RESILIENCE_RATING
36: 1.1, // ITEM_MOD_HASTE_RATING
37: 1.1, // ITEM_MOD_EXPERTISE_RATING
38: 1.5, // ITEM_MOD_ATTACK_POWER
39: 1.1, // ITEM_MOD_RANGED_ATTACK_POWER
40: 1.1, // ITEM_MOD_FERAL_ATTACK_POWER (not used as of 3.3)
41: 1.7, // ITEM_MOD_SPELL_HEALING_DONE
42: 1.7, // ITEM_MOD_SPELL_DAMAGE_DONE
43: 1.5, // ITEM_MOD_MANA_REGENERATION
44: 1.0, // ITEM_MOD_ARMOR_PENETRATION_RATING
45: 1.7, // ITEM_MOD_SPELL_POWER
46: 1.1, // ITEM_MOD_HEALTH_REGEN
47: 1.0, // ITEM_MOD_SPELL_PENETRATION
48: 1.1, // ITEM_MOD_BLOCK_VALUE
}

View File

@@ -467,15 +467,15 @@ func (item *Item) ScaleItem(itemLevel int, itemQuality int) (bool, error) {
origValue := stat.Value
scaleParams := StatScaleParams{
ItemLevel: *item.ItemLevel,
NewItemLevel: fromItemLevel,
ItemLevel: fromItemLevel,
NewItemLevel: *item.ItemLevel,
Quality: *item.Quality,
ItemType: *item.InventoryType,
StatTypeId: statId,
StatValue: stat.Value,
}
stat.Value = scaleStatv2(scaleParams)
stat.Value = scaleStatv3(scaleParams)
// stat.Value = scaleStatv2(itemLevel, *item.InventoryType, *item.Quality, stat.Percent, config.StatModifiers[statId])
log.Printf(">>>>>> Scaled : StatId: %v Type: %s Orig: %v - New Value: %v Percent: %v", statId, stat.Type, origValue, stat.Value, stat.Percent)
@@ -698,12 +698,37 @@ func scaleStat(itemLevel int, itemType int, itemQuality int, percOfStat float64,
func scaleStatv2(scaleParams StatScaleParams) int {
modifier := config.QualityModifiers[scaleParams.Quality] * config.ScalingFactor[scaleParams.StatTypeId]
scaledValue := float64(scaleParams.StatValue) * float64(scaleParams.NewItemLevel/scaleParams.ItemLevel) * modifier
modifier *= float64(scaleParams.NewItemLevel) / float64(scaleParams.ItemLevel)
scaledValue := float64(scaleParams.StatValue) * modifier // * config.InvTypeModifiers[scaleParams.ItemType]
log.Printf("------- scaledValue: %v modifier: %v", scaledValue, modifier)
return int(math.Ceil(scaledValue))
}
func scaleStatv3(scaleParams StatScaleParams) int {
// Calculate the quality and inventory type modifiers
qualityModifier := config.QualityModifiers[scaleParams.Quality]
// invTypeModifier := config.InvTypeModifiers[scaleParams.ItemType]
// Calculate the base scaling factor
baseScalingFactor := config.ScalingFactor[scaleParams.StatTypeId]
// Calculate the level ratio (new item level / original item level)
levelRatio := float64(scaleParams.NewItemLevel) / float64(scaleParams.ItemLevel)
// Apply the comprehensive scaling formula
scaledValue := float64(scaleParams.StatValue) *
math.Pow(levelRatio, baseScalingFactor) *
qualityModifier
// // Log the details for debugging
// log.Printf("------- scaledValue: %v, levelRatio: %v, qualityModifier: %v, baseScalingFactor: %v",
// scaledValue, levelRatio, qualityModifier, baseScalingFactor)
// Return the scaled value, rounded up
return int(math.Ceil(scaledValue))
}
func ItemToSql(item Item, reqLevel int, difficulty int) string {
entryBump := 20000000

View File

@@ -105,7 +105,7 @@ func main() {
item.ApplyStats(items.ItemFromDbItem(highLevelItem))
item.ScaleItem(*itemLevel, 4)
item.ScaleItem(*itemLevel, 3)
log.Printf("Item Name: %v Stat1: %v Stat2: %v Stat3: %v Stat4: %v Stat5: %v Stat6: %v Stat7: %v Stat8: %v \n",
item.Name, *item.StatValue1, *item.StatValue2, *item.StatValue3, *item.StatValue4, *item.StatValue5, *item.StatValue6, *item.StatValue7, *item.StatValue8)