added high level item lookups, full refactors of database side of things and regernated end game items

This commit is contained in:
2024-08-24 23:02:18 -04:00
parent 16c1a79ee6
commit 506b23038b
2 changed files with 86 additions and 10 deletions

View File

@@ -91,3 +91,50 @@ var StatModifiers = map[int]float64{
47: 2.0, // ITEM_MOD_SPELL_PENETRATION
48: 0.65, // ITEM_MOD_BLOCK_VALUE
}
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
}

View File

@@ -33,6 +33,15 @@ type ItemStat struct {
AdjValue float64
}
type StatScaleParams struct {
ItemLevel int
NewItemLevel int
Quality int
ItemType int
StatTypeId int
StatValue int
}
// Create a new item from the database item
func ItemFromDbItem(dbItem mysql.DbItem) Item {
return Item{
@@ -215,8 +224,8 @@ func (item *Item) ScaleDPS(level int) (float64, error) {
adjDps := (dps * (*item.Delay / 1000) / 100)
//(((Y8*Y4)/100))*((100 - Y5)) Forumula from Weapon Item Genertor
minimum := adjDps * float64(100-(rand.IntN(15)+22))
maximum := adjDps * float64(100+(rand.IntN(15)+22))
minimum := adjDps * float64(100-(rand.IntN(17)+20))
maximum := adjDps * float64(100+(rand.IntN(25)+28))
// If the weapon has secondary damage, scale that as well based on the ratio of the primary damage
if item.MinDmg2 != nil && item.MaxDmg2 != nil {
@@ -229,8 +238,8 @@ func (item *Item) ScaleDPS(level int) (float64, error) {
item.MaxDmg2 = &maximum2
// In order to balance the original scale of the secondary damage from primary
minimum = minimum - float64(minimum2)*0.75
maximum = maximum - float64(maximum2)*0.75
minimum = minimum - float64(minimum2)*0.85
maximum = maximum - float64(maximum2)*0.85
}
// item.MinDmg1 = &minimum
@@ -256,7 +265,7 @@ func (item Item) GetStatPercents(spellStats []spells.ConvItemStat) map[int]*Item
continue
}
adjValue := float64(statValue) * config.StatModifiers[int(statType)]
adjValue := float64(statValue) / config.StatModifiers[int(statType)]
statBudget += adjValue
statMap[int(statType)] = &ItemStat{
Value: int(statValue),
@@ -401,6 +410,8 @@ func (item *Item) ApplyStats(otherItem Item) (success bool, err error) {
item.SocketContent3 = otherItem.SocketContent3
}
item.ItemLevel = otherItem.ItemLevel
return true, nil
}
@@ -455,7 +466,17 @@ func (item *Item) ScaleItem(itemLevel int, itemQuality int) (bool, error) {
for statId, stat := range allStats {
origValue := stat.Value
stat.Value = scaleStat(itemLevel, *item.InventoryType, *item.Quality, stat.Percent, config.StatModifiers[statId])
scaleParams := StatScaleParams{
ItemLevel: *item.ItemLevel,
NewItemLevel: fromItemLevel,
Quality: *item.Quality,
ItemType: *item.InventoryType,
StatTypeId: statId,
StatValue: stat.Value,
}
stat.Value = scaleStatv2(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)
}
@@ -634,11 +655,11 @@ func (item *Item) addStats(stats map[int]*ItemStat) {
// MP5 adjustment
if statId == 43 {
stat.Value = int(math.Round(float64(stat.Value) * 0.5))
stat.Value = int(math.Round(float64(stat.Value) * 0.85))
}
if statId == 12 {
stat.Value = int(math.Round(float64(stat.Value) * 0.5))
stat.Value = int(math.Round(float64(stat.Value) * 0.85))
}
if statId == 12 {
@@ -646,11 +667,11 @@ func (item *Item) addStats(stats map[int]*ItemStat) {
}
if statId == 13 {
stat.Value = int(math.Round(float64(stat.Value) * 0.65))
stat.Value = int(math.Round(float64(stat.Value) * 0.75))
}
if statId == 31 {
stat.Value = int(math.Round(float64(stat.Value) * 0.55))
stat.Value = int(math.Round(float64(stat.Value) * 0.65))
}
// Update the item with new stats from scaling
@@ -675,6 +696,14 @@ func scaleStat(itemLevel int, itemType int, itemQuality int, percOfStat float64,
return int(math.Ceil(math.Pow(scaledUp, 1/1.7095))) // normalized
}
func scaleStatv2(scaleParams StatScaleParams) int {
modifier := config.QualityModifiers[scaleParams.Quality] * config.ScalingFactor[scaleParams.StatTypeId] * config.InvTypeModifiers[scaleParams.ItemType]
scaledValue := float64(scaleParams.StatValue) * float64(scaleParams.NewItemLevel/scaleParams.ItemLevel) * modifier
log.Printf("------- scaledValue: %v modifier: %v", scaledValue, modifier)
return int(math.Ceil(scaledValue))
}
func ItemToSql(item Item, reqLevel int, difficulty int) string {
entryBump := 20000000