From 967aba6652b4ad65fc60771cea48249619906e67 Mon Sep 17 00:00:00 2001 From: Treeku Date: Thu, 3 Apr 2014 16:34:30 +0100 Subject: [PATCH] Fixed skillMods --- .../objects/creature/CreatureObject.java | 68 +++++++------------ 1 file changed, 23 insertions(+), 45 deletions(-) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 5a26a8bf..8791b4cc 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -49,6 +49,7 @@ import engine.clients.Client; import resources.objects.Buff; import resources.objects.DamageOverTime; import resources.objects.SWGList; +import resources.objects.SWGMap; import resources.objects.SkillMod; import engine.resources.objects.IPersistent; import engine.resources.objects.MissionCriticalObject; @@ -59,7 +60,7 @@ import engine.resources.scene.Quaternion; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -@Entity(version=4) +@Entity(version=5) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -83,9 +84,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { // CREO 4 private float accelerationMultiplierBase = 1; private float accelerationMultiplierMod = 1; - private SWGList skillMods; - @NotPersistent - private int skillModsUpdateCounter = 0; + private SWGMap skillMods; private float speedMultiplierBase = 1; private float speedMultiplierMod = 1; private float runSpeed = (float) 7.3; @@ -184,7 +183,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { messageBuilder = new CreatureMessageBuilder(this); loadTemplateData(); skills = new SWGList(messageBuilder, 1, 3); - skillMods = new SWGList(messageBuilder, 4, 3); + skillMods = new SWGMap(messageBuilder, 4, 3); abilities = new SWGList(messageBuilder, 4, 14); missionCriticalObjects = new SWGList(messageBuilder, 4, 13); equipmentList = new SWGList(messageBuilder, 6, 0x17); @@ -559,20 +558,13 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.accelerationMultiplierMod = accelerationMultiplierMod; } } - - public SWGList getSkillMods() { + + public SWGMap getSkillMods() { return skillMods; } public SkillMod getSkillMod(String name) { - synchronized(skillMods.getMutex()) { - for(SkillMod skillMod : skillMods.get()) { - if(skillMod.getName().equals(name)) - return skillMod; - } - } - - return null; + return skillMods.get(name); } public int getSkillModBase(String name) { @@ -581,54 +573,40 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public void addSkillMod(String name, int base) { - if(getSkillMod(name) == null) { - // TODO: Send skill mods delta in sendListDelta - SkillMod skillMod = new SkillMod(); - skillMod.setBase(base); - skillMod.setName(name); - skillMod.setModifier(0); - skillMods.add(skillMod); + SkillMod mod; + + if (getSkillMod(name) == null) { + mod = new SkillMod(); + mod.setBase(base); + mod.setName(name); + mod.setModifier(0); } else { - - SkillMod mod = getSkillMod(name); + mod = getSkillMod(name); mod.setBase(mod.getBase() + base); - - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } } + skillMods.put(name, mod); } public void deductSkillMod(String name, int base) { - - if(getSkillMod(name) == null) + if (getSkillMod(name) == null) { return; + } SkillMod mod = getSkillMod(name); mod.setBase(mod.getBase() - base); - if(mod.getBase() <= 0) { + if (mod.getBase() <= 0) { removeSkillMod(mod); } else { - skillMods.set(skillMods.indexOf(mod), mod); - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } + skillMods.put(name, mod); } } - + public void removeSkillMod(SkillMod mod) { - skillMods.remove(mod); - - if(getClient() != null) { - setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getName(), mod.getBase())); - } + skillMods.remove(mod.getName()); } - + public short getSkillModsUpdateCounter() { synchronized(objectMutex) { return (short) skillModsUpdateCounter;