Fixed skillMods

This commit is contained in:
Treeku
2014-04-03 16:34:30 +01:00
parent 1f4dad4ff0
commit 967aba6652
@@ -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<SkillMod> skillMods;
@NotPersistent
private int skillModsUpdateCounter = 0;
private SWGMap<SkillMod> 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<String>(messageBuilder, 1, 3);
skillMods = new SWGList<SkillMod>(messageBuilder, 4, 3);
skillMods = new SWGMap<SkillMod>(messageBuilder, 4, 3);
abilities = new SWGList<String>(messageBuilder, 4, 14);
missionCriticalObjects = new SWGList<MissionCriticalObject>(messageBuilder, 4, 13);
equipmentList = new SWGList<SWGObject>(messageBuilder, 6, 0x17);
@@ -559,20 +558,13 @@ public class CreatureObject extends TangibleObject implements IPersistent {
this.accelerationMultiplierMod = accelerationMultiplierMod;
}
}
public SWGList<SkillMod> getSkillMods() {
public SWGMap<SkillMod> 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;