Read defense, bulk and primary attr from the cache ItemTemplate
item_defense_rating, item_bulk_factor and item_primary_attr are Item-only fields, not on CObjectTemplate, so their consumers read engine.parsers.objects.ItemTemplate._items by templateID, like the RuneTemplate and DeedTemplate consumers. The primary attr checks compare with == because the cache template leaves the attr null (legacy: None) on non-weapons. Parity (offline, scripts/p14.py, 7586 templates): 0 differences in item_defense_rating, item_bulk_factor and item_primary_attr. Every DB ARMOR and WEAPON template is in the ITEM folder, so both sides gate these fields on the same templates. No value changes expected. JSON-Refactor-Plan Task 1.4. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d197f62c1f
commit
9a10574e59
3 files changed
+10
-10
No files matched your search
@@ -315,7 +315,7 @@ public enum NPCManager {
|
||||
//has main hand weapon
|
||||
Item weapon = guard.charItemManager.equipped.get(mbEnums.EquipSlotType.RHELD);
|
||||
|
||||
if (weapon.template.item_primary_attr.equals(mbEnums.AttributeType.Strength))
|
||||
if (engine.parsers.objects.ItemTemplate._items.get(weapon.templateID).item_primary_attr == mbEnums.AttributeType.Strength)
|
||||
primaryStat = guard.getStatStrCurrent();
|
||||
else
|
||||
primaryStat = guard.getStatDexCurrent();
|
||||
@@ -327,7 +327,7 @@ public enum NPCManager {
|
||||
} else if (guard.charItemManager.equipped.containsKey(mbEnums.EquipSlotType.LHELD) && !ItemManager.isShield(guard.charItemManager.equipped.get(mbEnums.EquipSlotType.LHELD).template)) {
|
||||
//has off hand weapon
|
||||
Item weapon = guard.charItemManager.equipped.get(mbEnums.EquipSlotType.LHELD);
|
||||
if (weapon.template.item_primary_attr.equals(mbEnums.AttributeType.Strength))
|
||||
if (engine.parsers.objects.ItemTemplate._items.get(weapon.templateID).item_primary_attr == mbEnums.AttributeType.Strength)
|
||||
primaryStat = guard.getStatStrCurrent();
|
||||
else
|
||||
primaryStat = guard.getStatDexCurrent();
|
||||
@@ -353,7 +353,7 @@ public enum NPCManager {
|
||||
int armorDefense = 0;
|
||||
for (Item equipped : guard.charItemManager.equipped.values())
|
||||
if (equipped.template.cacheTemplate.getItemType().equals(mbEnums.ItemType.ARMOR) || ItemManager.isShield(equipped.template))
|
||||
armorDefense += equipped.template.item_defense_rating;
|
||||
armorDefense += engine.parsers.objects.ItemTemplate._items.get(equipped.templateID).item_defense_rating;
|
||||
guard.defenseRating = dexterity + baseDef + armorDefense;
|
||||
}
|
||||
|
||||
|
||||
@@ -778,7 +778,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
|
||||
min = damages[0];
|
||||
max = damages[1];
|
||||
|
||||
strBased = weaponTemplate.item_primary_attr.equals(AttributeType.Strength);
|
||||
strBased = engine.parsers.objects.ItemTemplate._items.get(weapon.templateID).item_primary_attr == AttributeType.Strength;
|
||||
}
|
||||
|
||||
if (abstractCharacter.effects != null && abstractCharacter.effects.containsKey("DeathShroud"))
|
||||
@@ -970,7 +970,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
|
||||
} else
|
||||
skillMod = blockSkill.getModifiedAmount();
|
||||
|
||||
float def = template.item_defense_rating;
|
||||
float def = engine.parsers.objects.ItemTemplate._items.get(shield.templateID).item_defense_rating;
|
||||
|
||||
//apply item defense bonuses
|
||||
|
||||
@@ -1001,20 +1001,20 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
|
||||
return 0;
|
||||
|
||||
if (armor.template.item_skill_used.isEmpty())
|
||||
return template.item_defense_rating;
|
||||
return engine.parsers.objects.ItemTemplate._items.get(armor.templateID).item_defense_rating;
|
||||
|
||||
CharacterSkill armorSkill = abstractCharacter.skills.get(armor.template.item_skill_used);
|
||||
|
||||
if (abstractCharacter.getObjectType().equals(GameObjectType.PlayerCharacter) && armorSkill == null) {
|
||||
Logger.error("Player " + abstractCharacter.getObjectUUID()
|
||||
+ " has armor equipped without the nescessary skill to equip it");
|
||||
return template.item_defense_rating;
|
||||
return engine.parsers.objects.ItemTemplate._items.get(armor.templateID).item_defense_rating;
|
||||
}
|
||||
|
||||
if (armorSkill == null)
|
||||
return template.item_defense_rating; // Mobiles do not have armor skills @TODO
|
||||
return engine.parsers.objects.ItemTemplate._items.get(armor.templateID).item_defense_rating; // Mobiles do not have armor skills @TODO
|
||||
|
||||
float def = template.item_defense_rating;
|
||||
float def = engine.parsers.objects.ItemTemplate._items.get(armor.templateID).item_defense_rating;
|
||||
|
||||
//apply item defense bonuses
|
||||
|
||||
|
||||
@@ -1356,7 +1356,7 @@ public class PlayerCharacter extends AbstractCharacter {
|
||||
ItemTemplate ab = armor.template;
|
||||
if (ab == null)
|
||||
return 0f;
|
||||
return ab.item_bulk_factor;
|
||||
return engine.parsers.objects.ItemTemplate._items.get(armor.templateID).item_bulk_factor;
|
||||
}
|
||||
|
||||
public static void InitializeSkillsOnLoad(PlayerCharacter pc) {
|
||||
|
||||
Reference in new issue
Block a user