From 0175a6716e168066d8934c40898e1467fd685bc9 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sat, 16 Aug 2014 20:35:06 +0100 Subject: [PATCH 1/9] Refactored CreatureObject --- .../swg/ResourceListForSurveyMessage.java | 1 - src/resources/buffs/Buff.java | 583 ++-- src/resources/buffs/BuffList.java | 91 + src/resources/equipment/Equipment.java | 96 + src/resources/group/GroupInviteInfo.java | 77 + .../creature/CreatureMessageBuilder.java | 1131 -------- .../objects/creature/CreatureObject.java | 2531 +++++++---------- src/services/BuffService.java | 10 +- src/services/EntertainmentService.java | 20 +- src/services/GroupService.java | 4 +- src/services/LootService.java | 2 +- src/services/PlayerService.java | 25 +- src/services/SkillService.java | 2 +- src/services/SurveyService.java | 1 - src/services/ai/AIActor.java | 12 +- src/services/ai/LairActor.java | 2 +- src/services/ai/states/AttackState.java | 2 +- src/services/combat/CombatService.java | 14 +- src/services/equipment/BonusSetTemplate.java | 5 +- src/services/equipment/EquipmentService.java | 5 +- src/services/housing/HousingService.java | 4 +- src/services/pet/MountService.java | 2 +- src/services/pet/PetService.java | 14 +- 23 files changed, 1769 insertions(+), 2865 deletions(-) create mode 100644 src/resources/buffs/BuffList.java create mode 100644 src/resources/equipment/Equipment.java create mode 100644 src/resources/group/GroupInviteInfo.java diff --git a/src/protocol/swg/ResourceListForSurveyMessage.java b/src/protocol/swg/ResourceListForSurveyMessage.java index a7dd2b68..1b95f623 100644 --- a/src/protocol/swg/ResourceListForSurveyMessage.java +++ b/src/protocol/swg/ResourceListForSurveyMessage.java @@ -25,7 +25,6 @@ import java.io.UnsupportedEncodingException; import java.nio.ByteOrder; import java.util.ArrayList; import java.util.List; -import java.util.Vector; import main.NGECore; diff --git a/src/resources/buffs/Buff.java b/src/resources/buffs/Buff.java index cac48c4f..d2443d25 100644 --- a/src/resources/buffs/Buff.java +++ b/src/resources/buffs/Buff.java @@ -21,8 +21,6 @@ ******************************************************************************/ package resources.buffs; -import java.io.Serializable; -import java.nio.ByteOrder; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -30,50 +28,43 @@ import java.util.concurrent.TimeUnit; import main.NGECore; import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.buffer.SimpleBufferAllocator; import resources.objects.creature.CreatureObject; -import com.sleepycat.persist.model.NotPersistent; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.objects.Delta; -import engine.resources.common.CRC; -import engine.resources.objects.IDelta; -import engine.resources.objects.SWGObject; - -public class Buff implements IDelta, Serializable { +public class Buff extends Delta { private static final long serialVersionUID = 1L; - @NotPersistent - private transient static SimpleBufferAllocator bufferPool = new SimpleBufferAllocator(); - private String group1, group2; - private int priority; - private float duration; - private String buffName; - private long ownerId; - private String effect1Name, effect2Name, effect3Name, effect4Name, effect5Name; + + private String group1 = "", group2 = ""; + private int priority = 0; + private float duration = 0; + private String buffName = ""; + private long ownerId = 0; + private String effect1Name = "", effect2Name = "", effect3Name = "", effect4Name = "", effect5Name = ""; private float effect1Value, effect2Value, effect3Value, effect4Value, effect5Value; - private String callback; - private String particleEffect; - private boolean isDebuff; - private boolean removeOnDeath; - private boolean isRemovableByPlayer; - private int maxStacks; - private boolean isPersistent; - private boolean removeOnRespec; - private boolean aiRemoveOnEndCombat; - private boolean decayOnPvPDeath; - private long startTime; - private int totalPlayTime; + private String callback = ""; + private String particleEffect = ""; + private boolean isDebuff = false; + private boolean removeOnDeath = false; + private boolean isRemovableByPlayer = false; + private int maxStacks = 0; + private boolean isPersistent = false; + private boolean removeOnRespec = false; + private boolean aiRemoveOnEndCombat = false; + private boolean decayOnPvPDeath = false; + private long startTime = 0; + private int totalPlayTime = 0; private byte decayCounter = 0; - @NotPersistent private transient ScheduledFuture removalTask; private int stacks = 1; - private long groupBufferId; - private int buffCRC; + private long groupBufferId = 0; public Buff(Buff baseBuff, long ownerId) { this.buffName = baseBuff.getBuffName(); - this.buffCRC = baseBuff.getBuffCRC(); this.group1 = baseBuff.getGroup1(); this.group2 = baseBuff.getGroup2(); this.priority = baseBuff.getPriority(); @@ -100,398 +91,502 @@ public class Buff implements IDelta, Serializable { this.decayOnPvPDeath = baseBuff.isDecayOnPvPDeath(); } - /*public Buff(String buffName, long ownerId) { - + public Buff(String buffName, long ownerId) { this.buffName = buffName; this.ownerId = ownerId; - this.buffCRC = CRC.StringtoCRC(buffName); - + DatatableVisitor visitor; try { - visitor = ClientFileManager.loadFile("datatables/buff/buff.iff", DatatableVisitor.class); - for(int i = 0; i < visitor.getRowCount(); i++) { - if(visitor.getObject(i, 0) != null) - if(((String) visitor.getObject(i, 0)).equalsIgnoreCase(buffName)) { - - group1 = (String) visitor.getObject(i, 1); - group2 = (String) visitor.getObject(i, 2); - priority = (int) visitor.getObject(i, 4); - duration = (Float) visitor.getObject(i, 6); - effect1Name = (String) visitor.getObject(i, 7); - effect1Value = (Float) visitor.getObject(i, 8); - effect2Name = (String) visitor.getObject(i, 9); - effect2Value = (Float) visitor.getObject(i, 10); - effect3Name = (String) visitor.getObject(i, 11); - effect3Value = (Float) visitor.getObject(i, 12); - effect4Name = (String) visitor.getObject(i, 13); - effect4Value = (Float) visitor.getObject(i, 14); - effect5Name = (String) visitor.getObject(i, 15); - effect5Value = (Float) visitor.getObject(i, 16); - callback = (String) visitor.getObject(i, 18); - particleEffect = (String) visitor.getObject(i, 19); - isDebuff = (Boolean) visitor.getObject(i, 22); - removeOnDeath = (Integer) visitor.getObject(i, 25) != 0; - isRemovableByPlayer = (Integer) visitor.getObject(i, 26) != 0; - maxStacks = (Integer) visitor.getObject(i, 28); - isPersistent = (Integer) visitor.getObject(i, 29) != 0; - removeOnRespec = (Integer) visitor.getObject(i, 31) != 0; - aiRemoveOnEndCombat = (Integer) visitor.getObject(i, 32) != 0; - decayOnPvPDeath = (Integer) visitor.getObject(i, 33) != 0; - + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 0) != null) { + if (((String) visitor.getObject(i, 0)).equalsIgnoreCase(buffName)) { + group1 = (String) visitor.getObject(i, 1); + group2 = (String) visitor.getObject(i, 2); + priority = (int) visitor.getObject(i, 4); + duration = (Float) visitor.getObject(i, 6); + effect1Name = (String) visitor.getObject(i, 7); + effect1Value = (Float) visitor.getObject(i, 8); + effect2Name = (String) visitor.getObject(i, 9); + effect2Value = (Float) visitor.getObject(i, 10); + effect3Name = (String) visitor.getObject(i, 11); + effect3Value = (Float) visitor.getObject(i, 12); + effect4Name = (String) visitor.getObject(i, 13); + effect4Value = (Float) visitor.getObject(i, 14); + effect5Name = (String) visitor.getObject(i, 15); + effect5Value = (Float) visitor.getObject(i, 16); + callback = (String) visitor.getObject(i, 18); + particleEffect = (String) visitor.getObject(i, 19); + isDebuff = (Boolean) visitor.getObject(i, 22); + removeOnDeath = (Integer) visitor.getObject(i, 25) != 0; + isRemovableByPlayer = (Integer) visitor.getObject(i, 26) != 0; + maxStacks = (Integer) visitor.getObject(i, 28); + isPersistent = (Integer) visitor.getObject(i, 29) != 0; + removeOnRespec = (Integer) visitor.getObject(i, 31) != 0; + aiRemoveOnEndCombat = (Integer) visitor.getObject(i, 32) != 0; + decayOnPvPDeath = (Integer) visitor.getObject(i, 33) != 0; + } } - } - } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } - }*/ - - public Buff() { } + } - @Override - public void init(SWGObject object) { - // TODO Auto-generated method stub + public Buff() { } - @Override public byte[] getBytes() { - - IoBuffer buffer = bufferPool.allocate(28, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(CRC.StringtoCRC(buffName.toLowerCase())); - if(duration > 0) { - buffer.putInt((int) (totalPlayTime + getRemainingDuration())); - buffer.putInt(0); - buffer.putInt((int) duration); - } else { - buffer.putInt(-1); - buffer.putInt(0); - buffer.putInt(0); + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(24); + if (duration > 0) { + buffer.putInt((int) (totalPlayTime + getRemainingDuration())); + buffer.putInt(0); + buffer.putInt((int) duration); + } else { + buffer.putInt(-1); + buffer.putInt(0); + buffer.putInt(0); + } + buffer.putLong(ownerId); + buffer.putInt(stacks); + buffer.flip(); + return buffer.array(); } - buffer.putLong(ownerId); - buffer.putInt(stacks); // stacks - - buffer.flip(); - - return buffer.array(); - } - + + public String getGroup1() { - return group1; + synchronized(objectMutex) { + return group1; + } } public void setGroup1(String group1) { - this.group1 = group1; + synchronized(objectMutex) { + this.group1 = group1; + } } - + + public String getGroup2() { + synchronized(objectMutex) { + return group2; + } + } + + public void setGroup2(String group2) { + synchronized(objectMutex) { + this.group2 = group2; + } + } + public int getPriority() { - return priority; + synchronized(objectMutex) { + return priority; + } } public void setPriority(int priority) { - this.priority = priority; + synchronized(objectMutex) { + this.priority = priority; + } } public float getDuration() { - return duration; + synchronized(objectMutex) { + return duration; + } } - + public void setDuration(float duration) { - this.duration = duration; + synchronized(objectMutex) { + this.duration = duration; + } } - + public String getBuffName() { - return buffName; + synchronized(objectMutex) { + return buffName; + } } - + public void setBuffName(String buffName) { - this.buffName = buffName; + synchronized(objectMutex) { + this.buffName = buffName; + } } - + public long getOwnerId() { - return ownerId; + synchronized(objectMutex) { + return ownerId; + } } - + public void setOwnerId(long ownerId) { - this.ownerId = ownerId; + synchronized(objectMutex) { + this.ownerId = ownerId; + } } - + public String getEffect1Name() { - return effect1Name; + synchronized(objectMutex) { + return effect1Name; + } } - + public void setEffect1Name(String effect1Name) { - this.effect1Name = effect1Name; + synchronized(objectMutex) { + this.effect1Name = effect1Name; + } } - + public String getEffect2Name() { - return effect2Name; + synchronized(objectMutex) { + return effect2Name; + } } - + public void setEffect2Name(String effect2Name) { - this.effect2Name = effect2Name; + synchronized(objectMutex) { + this.effect2Name = effect2Name; + } } - + public String getEffect3Name() { - return effect3Name; + synchronized(objectMutex) { + return effect3Name; + } } - + public void setEffect3Name(String effect3Name) { - this.effect3Name = effect3Name; + synchronized(objectMutex) { + this.effect3Name = effect3Name; + } } - + public String getEffect4Name() { - return effect4Name; + synchronized(objectMutex) { + return effect4Name; + } } - + public void setEffect4Name(String effect4Name) { - this.effect4Name = effect4Name; + synchronized(objectMutex) { + this.effect4Name = effect4Name; + } } - + public String getEffect5Name() { - return effect5Name; + synchronized(objectMutex) { + return effect5Name; + } } - + public void setEffect5Name(String effect5Name) { - this.effect5Name = effect5Name; + synchronized(objectMutex) { + this.effect5Name = effect5Name; + } } - + public float getEffect1Value() { - return effect1Value; + synchronized(objectMutex) { + return effect1Value; + } } - + public void setEffect1Value(float effect1Value) { - this.effect1Value = effect1Value; + synchronized(objectMutex) { + this.effect1Value = effect1Value; + } } - + public float getEffect2Value() { - return effect2Value; + synchronized(objectMutex) { + return effect2Value; + } } - + public void setEffect2Value(float effect2Value) { - this.effect2Value = effect2Value; + synchronized(objectMutex) { + this.effect2Value = effect2Value; + } } - + public float getEffect3Value() { - return effect3Value; + synchronized(objectMutex) { + return effect3Value; + } } - + public void setEffect3Value(float effect3Value) { - this.effect3Value = effect3Value; + synchronized(objectMutex) { + this.effect3Value = effect3Value; + } } - + public float getEffect4Value() { - return effect4Value; + synchronized(objectMutex) { + return effect4Value; + } } - + public void setEffect4Value(float effect4Value) { - this.effect4Value = effect4Value; + synchronized(objectMutex) { + this.effect4Value = effect4Value; + } } - + public float getEffect5Value() { - return effect5Value; + synchronized(objectMutex) { + return effect5Value; + } } - + public void setEffect5Value(float effect5Value) { - this.effect5Value = effect5Value; + synchronized(objectMutex) { + this.effect5Value = effect5Value; + } } public String getCallback() { - return callback; + synchronized(objectMutex) { + return callback; + } } public void setCallback(String callback) { - this.callback = callback; + synchronized(objectMutex) { + this.callback = callback; + } } - + public String getParticleEffect() { - return particleEffect; + synchronized(objectMutex) { + return particleEffect; + } } - + public void setParticleEffect(String particleEffect) { - this.particleEffect = particleEffect; + synchronized(objectMutex) { + this.particleEffect = particleEffect; + } } - + public boolean isDebuff() { - return isDebuff; + synchronized(objectMutex) { + return isDebuff; + } } - + public void setDebuff(boolean isDebuff) { - this.isDebuff = isDebuff; + synchronized(objectMutex) { + this.isDebuff = isDebuff; + } } - + public boolean isRemoveOnDeath() { - return removeOnDeath; + synchronized(objectMutex) { + return removeOnDeath; + } } - + public void setRemoveOnDeath(boolean removeOnDeath) { - this.removeOnDeath = removeOnDeath; + synchronized(objectMutex) { + this.removeOnDeath = removeOnDeath; + } } - + public boolean isRemovableByPlayer() { - return isRemovableByPlayer; + synchronized(objectMutex) { + return isRemovableByPlayer; + } } - + public void setRemovableByPlayer(boolean isRemovableByPlayer) { - this.isRemovableByPlayer = isRemovableByPlayer; + synchronized(objectMutex) { + this.isRemovableByPlayer = isRemovableByPlayer; + } } - + public int getMaxStacks() { - return maxStacks; + synchronized(objectMutex) { + return maxStacks; + } } - + public void setMaxStacks(int maxStacks) { - this.maxStacks = maxStacks; + synchronized(objectMutex) { + this.maxStacks = maxStacks; + } } - + public boolean isPersistent() { - return isPersistent; + synchronized(objectMutex) { + return isPersistent; + } } - + public void setPersistent(boolean isPersistent) { - this.isPersistent = isPersistent; + synchronized(objectMutex) { + this.isPersistent = isPersistent; + } } - + public boolean isRemoveOnRespec() { - return removeOnRespec; + synchronized(objectMutex) { + return removeOnRespec; + } } - + public void setRemoveOnRespec(boolean removeOnRespec) { - this.removeOnRespec = removeOnRespec; + synchronized(objectMutex) { + this.removeOnRespec = removeOnRespec; + } } - + public boolean isAiRemoveOnEndCombat() { - return aiRemoveOnEndCombat; + synchronized(objectMutex) { + return aiRemoveOnEndCombat; + } } - + public void setAiRemoveOnEndCombat(boolean aiRemoveOnEndCombat) { - this.aiRemoveOnEndCombat = aiRemoveOnEndCombat; + synchronized(objectMutex) { + this.aiRemoveOnEndCombat = aiRemoveOnEndCombat; + } } - + public boolean isDecayOnPvPDeath() { - return decayOnPvPDeath; + synchronized(objectMutex) { + return decayOnPvPDeath; + } } - + public void setDecayOnPvPDeath(boolean decayOnPvPDeath) { - this.decayOnPvPDeath = decayOnPvPDeath; + synchronized(objectMutex) { + this.decayOnPvPDeath = decayOnPvPDeath; + } } - + public void setStartTime() { - this.startTime = System.currentTimeMillis(); + synchronized(objectMutex) { + this.startTime = System.currentTimeMillis(); + } } public long getStartTime() { - return startTime; + synchronized(objectMutex) { + return startTime; + } } public int getRemainingDuration() { - - long currentTime = System.currentTimeMillis(); - long timeDiff = (currentTime - startTime) / 1000; - int remaining = (int) (duration - timeDiff); - for(int i = 0; i < decayCounter; i++) { - remaining /= 2; + synchronized(objectMutex) { + long currentTime = System.currentTimeMillis(); + long timeDiff = (currentTime - startTime) / 1000; + int remaining = (int) (duration - timeDiff); + + for (int i = 0; i < decayCounter; i++) { + remaining /= 2; + } + + return remaining; } - return remaining; - } - + public int getTotalPlayTime() { - return totalPlayTime; + synchronized(objectMutex) { + return totalPlayTime; + } } - + public void setTotalPlayTime(int totalPlayTime) { - this.totalPlayTime = totalPlayTime; + synchronized(objectMutex) { + this.totalPlayTime = totalPlayTime; + } } - + public byte getDecayCounter() { - return decayCounter; + synchronized(objectMutex) { + return decayCounter; + } } - + public void incDecayCounter() { - this.decayCounter++; + synchronized(objectMutex) { + this.decayCounter++; + } } - + public ScheduledFuture getRemovalTask() { return removalTask; } - + public void setRemovalTask(ScheduledFuture removalTask) { this.removalTask = removalTask; } public void updateRemovalTask() { - - if(removalTask == null) + if (removalTask == null) { return; + } removalTask.cancel(true); final NGECore core = NGECore.getInstance(); final CreatureObject owner = (CreatureObject) core.objectService.getObject(getOwnerId()); - if(owner == null) + if (owner == null) { return; + } ScheduledFuture task = Executors.newScheduledThreadPool(1).schedule(new Runnable() { @Override public void run() { - try { core.buffService.removeBuffFromCreature(owner, Buff.this); } catch (Exception e) { e.printStackTrace(); } - } }, (long) getRemainingDuration(), TimeUnit.SECONDS); setRemovalTask(task); - } - + public int getStacks() { - return stacks; + synchronized(objectMutex) { + return stacks; + } } - + public void setStacks(int stacks) { - this.stacks = stacks; + synchronized(objectMutex) { + this.stacks = stacks; + } } public boolean isGroupBuff() { - return effect1Name == null ? false : effect1Name.equals("group"); - } - - public long getGroupBufferId() { - return groupBufferId; - } - - public void setGroupBufferId(long groupBufferId) { - this.groupBufferId = groupBufferId; - } - - public String getGroup2() { - return group2; - } - - public void setGroup2(String group2) { - this.group2 = group2; - } - - public int getBuffCRC() { - return buffCRC; + synchronized(objectMutex) { + return effect1Name.equals("group"); + } } - public void setBuffCRC(int buffCRC) { - this.buffCRC = buffCRC; + public long getGroupBufferId() { + synchronized(objectMutex) { + return groupBufferId; + } + } + + public void setGroupBufferId(long groupBufferId) { + synchronized(objectMutex) { + this.groupBufferId = groupBufferId; + } } } diff --git a/src/resources/buffs/BuffList.java b/src/resources/buffs/BuffList.java new file mode 100644 index 00000000..dfcbfb4e --- /dev/null +++ b/src/resources/buffs/BuffList.java @@ -0,0 +1,91 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.buffs; + +import java.util.Map.Entry; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.objects.Delta; +import resources.objects.SWGMap; + +public class BuffList extends Delta { + + private static final long serialVersionUID = 1L; + + private SWGMap list; + + public BuffList(SWGMap list) { + this.list = list; + } + + public BuffList() { + + } + + public SWGMap getList() { + synchronized(objectMutex) { + return list; + } + } + + public byte[] getBytes() { + int size = 8 + ((list.size() > 0) ? 4 : 0); + + for (Buff buff : list.values().toArray(new Buff[] { })) { + size += (25 + ((buff.getBuffName().equals("")) ? 0 : 4)); + } + + IoBuffer buffer = createBuffer(size); + buffer.putInt(list.size()); + buffer.putInt(list.getUpdateCounter()); + for (Entry entry : list.entrySet()) { + int crc = entry.getKey(); + Buff buff = entry.getValue(); + + buffer.put(getBoolean(!buff.getBuffName().equals(""))); + if (!buff.getBuffName().equals("")) { + buffer.putInt(0); + } + buffer.putInt(crc); + if (buff.getDuration() > 0) { + buffer.putInt((int) (buff.getTotalPlayTime() + buff.getRemainingDuration())); + buffer.putInt(0); + buffer.putInt((int) buff.getDuration()); + } else { + buffer.putInt(-1); + buffer.putInt(0); + if (buff.getBuffName().equals("")) { + buffer.putInt(0); + } else { + buffer.putInt(-1); + } + } + buffer.putLong(buff.getOwnerId()); + } + if (list.size() > 0) { + buffer.putInt(1); + } + return buffer.array(); + } + +} diff --git a/src/resources/equipment/Equipment.java b/src/resources/equipment/Equipment.java new file mode 100644 index 00000000..4a1418ab --- /dev/null +++ b/src/resources/equipment/Equipment.java @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.equipment; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.CRC; +import engine.resources.objects.Delta; +import engine.resources.objects.SWGObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.weapon.WeaponObject; + +public class Equipment extends Delta { + + private static final long serialVersionUID = 1L; + + private long objectId; + + public Equipment(SWGObject object) { + this.objectId = ((object instanceof TangibleObject) ? object.getObjectID() : 0); + } + + public Equipment() { + + } + + public SWGObject getObject() { + synchronized(objectMutex) { + return NGECore.getInstance().objectService.getObject(objectId); + } + } + + public long getObjectId() { + synchronized(objectMutex) { + return objectId; + } + } + + public byte[] getBytes() { + if (!(getObject() instanceof TangibleObject)) { + if (getObject() == null) { + System.err.println("Serious error: Equipment object is null in objectList."); + } else { + System.err.println("Serious error: Equipment object isn't a TangibleObject"); + } + } + + TangibleObject object = (TangibleObject) getObject(); + + synchronized(objectMutex) { + int size = 19 + object.getCustomization ().length; + + if (object instanceof WeaponObject) { + size += ((WeaponObject) object).getBaseline(3).getBaseline().array().length; + size += ((WeaponObject) object).getBaseline(6).getBaseline().array().length; + } + + IoBuffer buffer = createBuffer(size); + buffer.putShort((short) object.getCustomization().length); + buffer.put(object.getCustomization()); + buffer.putInt(object.getArrangementId()); + buffer.putLong(object.getObjectID()); + buffer.putInt(CRC.StringtoCRC(object.getTemplate())); + buffer.put(getBoolean((object instanceof WeaponObject))); + if (object instanceof WeaponObject) { + buffer.put(((WeaponObject) object).getBaseline(3).getBaseline().array()); + buffer.put(((WeaponObject) object).getBaseline(6).getBaseline().array()); + } + buffer.flip(); + + return buffer.array(); + } + } + +} diff --git a/src/resources/group/GroupInviteInfo.java b/src/resources/group/GroupInviteInfo.java new file mode 100644 index 00000000..923adc33 --- /dev/null +++ b/src/resources/group/GroupInviteInfo.java @@ -0,0 +1,77 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.group; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.common.AString; +import engine.resources.objects.Delta; + +public class GroupInviteInfo extends Delta { + + private static final long serialVersionUID = 1L; + + private long senderId; + private AString senderName; + private long inviteCounter; + + public GroupInviteInfo(long senderId, String senderName) { + this.senderId = senderId; + this.senderName = new AString(senderName); + inviteCounter = 0; + } + + public GroupInviteInfo() { + + } + + public long getSenderId() { + synchronized(objectMutex) { + return senderId; + } + } + + public String getSenderName() { + synchronized(objectMutex) { + return senderName.get(); + } + } + + public void setSender(long senderId, String senderName) { + synchronized(objectMutex) { + this.senderId = senderId; + this.senderName = new AString(senderName); + inviteCounter++; + } + } + + public byte[] getBytes() { + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(16 + senderName.getBytes().length); + buffer.putLong(senderId); + buffer.put(senderName.getBytes()); + buffer.putLong(inviteCounter); + return buffer.array(); + } + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 33367160..8ba0155a 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -21,23 +21,10 @@ ******************************************************************************/ package resources.objects.creature; -import java.nio.ByteOrder; import java.util.Map; -import java.util.Map.Entry; -import main.NGECore; - -import org.apache.mina.core.buffer.IoBuffer; - -import engine.resources.common.CRC; -import resources.buffs.Buff; import engine.resources.objects.Builder; -import engine.resources.objects.SWGObject; -import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleMessageBuilder; -import resources.objects.tangible.TangibleObject; -import resources.objects.weapon.WeaponObject; -import resources.skills.SkillMod; public class CreatureMessageBuilder extends TangibleMessageBuilder { @@ -49,1124 +36,6 @@ public class CreatureMessageBuilder extends TangibleMessageBuilder { super(); } - public IoBuffer buildBaseline1() { - CreatureObject creature = (CreatureObject) object; - IoBuffer buffer = bufferPool.allocate(26, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 4); - buffer.putInt(creature.getBankCredits()); - buffer.putInt(creature.getCashCredits()); - - buffer.putInt(6); // Base HAM List - so leveling knows the base HAM, before equipment etc - buffer.putInt(0); - buffer.putInt(creature.getHealth()); - buffer.putInt(0); - buffer.putInt(creature.getAction()); - buffer.putInt(0); - buffer.putInt(0x2C01); - buffer.putInt(0); - - if(creature.getSkills().isEmpty()) { - buffer.putInt(0); - buffer.putInt(creature.getSkillsUpdateCounter()); - } else { - buffer.putInt(creature.getSkills().size()); - buffer.putInt(creature.getSkillsUpdateCounter()); - for(String skill : creature.getSkills()) - buffer.put(getAsciiString(skill)); - } - int size = buffer.position(); - - buffer.flip(); - buffer = createBaseline("CREO", (byte) 1, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline3() { - - CreatureObject creature = (CreatureObject) object; - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - - if(creature.getStfName() == null || creature.getStfFilename() == null) { - creature.setStfName(""); - creature.setStfFilename(""); - } - - buffer.putShort((short) 19); // Object Count - - // BaseObject - buffer.putFloat(1); - buffer.put(getAsciiString(creature.getStfFilename())); - buffer.putInt(0); - buffer.put(getAsciiString(creature.getStfName())); - if (creature.getCustomName() == null) { creature.setCustomName(""); }//Not all CreatureObjects have CustomName (Shuttles) - buffer.put(getUnicodeString(creature.getCustomName())); - // buffer.putInt(0x000F4240); // volume - buffer.putInt(1); - - // TangibleObject - buffer.putInt(CRC.StringtoCRC(creature.getFaction())); - - buffer.putInt(creature.getFactionStatus()); - - byte[] customizationData = creature.getCustomization(); - //byte[] customizationData = new byte[]{(byte)0x03,(byte)0xBF,(byte)0xC3,(byte)0x33,(byte)0x02,(byte)0x01,(byte)0x02}; - - if(customizationData == null || customizationData.length <= 0) // Shuttles have no customization data - buffer.putShort((short) 0); - else { - buffer.putShort((short) customizationData.length); - buffer.put(customizationData); - } - //buffer.putInt(1); - buffer.putInt(0); // TANO Data - buffer.putInt(0); - buffer.putInt(creature.getOptionsBitmask()); // 0x80 = Player, 0x08 = Quest NPC, - //buffer.putInt(0x80); - buffer.putInt(creature.getIncapTimer()); - buffer.putInt(0); - buffer.putInt(0x3A98); - - buffer.put((byte) 1); - - // CreatureObject - buffer.put((byte) creature.getPosture()); - buffer.put((byte) 0); - - buffer.putLong(creature.getOwnerId()); - - float height = creature.getHeight(); - //if (height < 0.7 || height > 1.5) - // height = 1; - buffer.putFloat(height); - buffer.putInt(0); // battle fatigue - buffer.putLong(creature.getStateBitmask()); - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("CREO", (byte) 3, buffer, size); - - tools.CharonPacketUtils.printAnalysis(buffer, "CREO 3"); - - return buffer; - - } - - public IoBuffer buildBaseline4() { - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 0x10); - buffer.putFloat(creature.getAccelerationMultiplierBase()); - buffer.putFloat(creature.getAccelerationMultiplierMod()); - - buffer.putInt(0); // HAM Encumberance List unused in NGE - buffer.putInt(0); - - buffer.putInt(creature.getSkillMods().size()); - buffer.putInt(creature.getSkillMods().getUpdateCounter()); - for (Entry skillMod : creature.getSkillMods().entrySet()) { - buffer.put((byte) 0); - buffer.put(getAsciiString(skillMod.getKey())); - buffer.put(skillMod.getValue().getBytes()); - } - - buffer.putFloat(creature.getSpeedMultiplierBase()); - buffer.putFloat(creature.getSpeedMultiplierMod()); - - if(creature.getPerformanceListenee() != null) - buffer.putLong(creature.getPerformanceListenee().getObjectId()); - else - buffer.putLong(0); - - buffer.putFloat(creature.getRunSpeed()); - - buffer.putFloat(creature.getSlopeModAngle()); - buffer.putFloat(creature.getSlopeModPercent()); - buffer.putFloat(creature.getTurnRadius()); - - buffer.putFloat(creature.getWalkSpeed()); - buffer.putFloat(creature.getWaterModPercent()); - - buffer.putInt(0); // MissionCritical objects todo later - buffer.putInt(0); - buffer.put(creature.getAbilities().getBytes()); - buffer.putInt(creature.getXpBarValue()); // xp bar value - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - buffer.flip(); - buffer = createBaseline("CREO", (byte) 4, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline6() { - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.setAutoExpand(true); - buffer.putShort((short) 0x23); - - // BaseObject - buffer.putInt(0x43); // serverId - - buffer.putShort((short) 0); // detaiLStfFilename - buffer.putInt(0); // detailStfSpacer - buffer.putShort((short) 0); // detailStfName - - // TangibleObject - buffer.put(creature.getCombatFlag()); - - buffer.putLong(0); //Set cloakViewers (set of objectIds of who can see a cloaked spy) - buffer.putInt(0); //Int - buffer.putLong(0); //List - buffer.putLong(0); //List - buffer.putLong(0); //List - - buffer.putShort(creature.getLevel()); - buffer.putInt(creature.getGrantedHealth()); // From player_level.iff. Ranges from 0-2000 as you level, consistent with that table. - - //0A - if(creature.getCurrentAnimation() == null || creature.getCurrentAnimation().length() == 0) - buffer.putShort((short) 0); - else - buffer.put(getAsciiString(creature.getCurrentAnimation())); - - if(creature.getMoodAnimation() == null || creature.getMoodAnimation().length() == 0) - buffer.put(getAsciiString("neutral")); - else - buffer.put(getAsciiString(creature.getMoodAnimation())); - - buffer.putLong(creature.getWeaponId()); - - buffer.putLong(creature.getGroupId()); - buffer.putLong(creature.getInviteSenderId()); - if(creature.getInviteSenderName() == null || creature.getInviteSenderName().length() == 0) - buffer.putShort((short) 0); - else - buffer.put(getAsciiString(creature.getInviteSenderName())); - - buffer.putLong(creature.getInviteCounter()); - - buffer.putInt(creature.getGuildId()); - - buffer.putLong(creature.getLookAtTarget()); // lookAtTarget 0x10 - buffer.putLong(creature.getIntendedTarget()); // intendedTarget 0x11 - buffer.put(creature.getMoodId()); - buffer.putInt(creature.getPerformanceCounter()); - /* - * minor dilemma: performance ID is needed for XP calculation, but it can't be sent - * in the CREO, otherwise the evul note bubbles appear - */ - buffer.putInt((creature.getPerformanceType()) ? 0 : creature.getPerformanceId()); - - buffer.putInt(6); // Current HAM // These 6 vars are also known as "attributes", referred to as "attribs" - buffer.putInt(creature.getHamListCounter()); - - buffer.putInt(creature.getHealth()); - //1A - buffer.putInt(0); - buffer.putInt(creature.getAction()); - buffer.putInt(0); - buffer.putInt(0x2C01); - buffer.putInt(0); - - buffer.putInt(6); // Max HAM - buffer.putInt(creature.getMaxHAMListCounter()); - - buffer.putInt(creature.getMaxHealth()); - buffer.putInt(0); - buffer.putInt(creature.getMaxAction()); - buffer.putInt(0); - buffer.putInt(0x2C01); - buffer.putInt(0); - - - if(creature.getEquipmentList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(creature.getEquipmentListUpdateCounter()); - } else { - int size = 0; - - for (Long objId : creature.getEquipmentList().get()) { - size += ((NGECore.getInstance().objectService.getObject(objId) == null) ? 0 : 1); - } - - buffer.putInt(size); - buffer.putInt(creature.getEquipmentListUpdateCounter()); - - for(Long objId : creature.getEquipmentList().get()) { - - SWGObject obj = NGECore.getInstance().objectService.getObject(objId); - - if(obj == null) { - System.err.println("Cant find obj for obj id in equip list!!!"); - continue; - } - - if(obj instanceof TangibleObject && !(obj instanceof WeaponObject)) { - TangibleObject tangible = (TangibleObject) obj; - if(tangible.getCustomization() == null || tangible.getCustomization().length == 0) { - buffer.putShort((short) 0); - } else { - buffer.putShort((short) tangible.getCustomization().length); - buffer.put(tangible.getCustomization()); - } - buffer.putInt(tangible.getArrangementId()); - buffer.putLong(tangible.getObjectID()); - buffer.putInt(CRC.StringtoCRC(tangible.getTemplate())); - buffer.put((byte) 0); - } else if(obj instanceof WeaponObject) { - WeaponObject weapon = (WeaponObject) obj; - if(weapon.getCustomization() == null || weapon.getCustomization().length == 0) { - buffer.putShort((short) 0); - } else { - buffer.putShort((short) weapon.getCustomization().length); - buffer.put(weapon.getCustomization()); - } - buffer.putInt(weapon.getArrangementId()); - buffer.putLong(weapon.getObjectID()); - buffer.putInt(CRC.StringtoCRC(weapon.getTemplate())); - - buffer.put((byte) 1); - buffer.put(weapon.getMessageBuilder().buildBaseline3()); - buffer.put(weapon.getMessageBuilder().buildBaseline6()); - } else { - System.out.println("Bad equipment object"); - } - - } - - } - - buffer.putShort((short) 0); // costume - //buffer.put(getAsciiString("appearance/gungan_m.sat")); - buffer.put((byte) (creature.isInStealth() ? 0 : 1)); - - if(creature.getBuffList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(creature.getBuffListCounter()); - } else { - buffer.putInt(creature.getBuffList().size() + 1); - buffer.putInt(creature.getBuffListCounter()); - - buffer.put((byte) 0); - //buffer.putInt(0x2098793D); - buffer.putInt(0); - buffer.putInt(-1); - buffer.putInt(0); - buffer.putInt(0); - buffer.putLong(creature.getObjectID()); - - PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - - for(Buff buff : creature.getBuffList().get()) { - - if(player != null) - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); - else - buff.setTotalPlayTime(0); - buffer.put((byte) 1); - buffer.putInt(0); - buffer.putInt(CRC.StringtoCRC(buff.getBuffName().toLowerCase())); - if(buff.getDuration() > 0) { - buffer.putInt((int) (buff.getTotalPlayTime() + buff.getRemainingDuration())); - buffer.putInt(0); - buffer.putInt((int) buff.getDuration()); - } else { - buffer.putInt(-1); - buffer.putInt(0); - buffer.putInt(0); - } - - buffer.putLong(creature.getObjectID()); - - } - - buffer.putInt(1); - - } - - buffer.put((byte) (creature.isStationary() ? 1 : 0)); // if the server accepts transforms from the object - buffer.put(creature.getDifficulty()); - - if(creature.isHologram()) - buffer.putInt(0); - else - buffer.putInt(0xFFFFFFFF); - - buffer.put((byte) (creature.isRadarVisible() ? 1 : 0)); - buffer.put((byte) 1); // occupyingVehicle (hoth speeder, atat) - buffer.put((byte) 0); // no effect for 1? - - - if(creature.getAppearanceEquipmentList().isEmpty()) { - buffer.putInt(0); - buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - } else { - int size = 0; - - for (Long objId : creature.getEquipmentList().get()) { - size += ((NGECore.getInstance().objectService.getObject(objId) == null) ? 0 : 1); - } - - buffer.putInt(size); - buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - - for(Long objId : creature.getAppearanceEquipmentList().get()) { - - SWGObject obj = NGECore.getInstance().objectService.getObject(objId); - - if(obj == null) { - System.err.println("Cant find obj for obj id in equip list!!!"); - continue; - } - - if(obj instanceof TangibleObject) { - TangibleObject tangible = (TangibleObject) obj; - if(tangible.getCustomization() == null || tangible.getCustomization().length == 0) { - buffer.putShort((short) 0); - } else { - buffer.putShort((short) tangible.getCustomization().length); - buffer.put(tangible.getCustomization()); - } - buffer.putInt(tangible.getArrangementId()); - buffer.putLong(tangible.getObjectID()); - buffer.putInt(CRC.StringtoCRC(tangible.getTemplate())); - buffer.put((byte) 0); - } else { - System.out.println("Bad appearance equipment object"); - } - - } - } - - buffer.putLong(0); // unk long - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - - - buffer.flip(); - buffer = createBaseline("CREO", (byte) 6, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline8() { - - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer.flip(); - buffer = createBaseline("CREO", (byte) 8, buffer, size); - - return buffer; - - } - - public IoBuffer buildBaseline9() { - - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 0); - int size = buffer.position(); - buffer.flip(); - buffer = createBaseline("CREO", (byte) 9, buffer, size); - - return buffer; - - } - - public IoBuffer buildCashCreditsDelta(int credits) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(credits); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 1, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildBankCreditsDelta(int credits) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(credits); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 0, buffer, size + 4); - - return buffer; - - } - - - public IoBuffer buildPostureDelta(byte posture) { - - IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(posture); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0D, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildFactionDelta(String faction) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(CRC.StringtoCRC(faction)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x04, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildFactionStatusDelta(int factionStatus) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(factionStatus); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x05, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildOptionMaskDelta(int optionMask) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(optionMask); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x08, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildHeightDelta(float height) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(height); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x10, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildStateDelta(long state) { - - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(state); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x12, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildSpeedModBaseDelta(float speed) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(speed); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 4, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildSpeedModDelta(float speedModifier) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(speedModifier); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 5, buffer, size + 4); - - return buffer; - - } - - - public IoBuffer buildTurnRadiusDelta(float turnRadius) { - - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(turnRadius); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0A, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildCombatFlagDelta(byte combatFlag) { - - IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(combatFlag); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x02, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildGrantedHealthDelta(int grantedHealth) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(grantedHealth); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 9, buffer, size + 4); - return buffer; - } - - public IoBuffer buildCurrentAnimationDelta(String currentAnimation) { - IoBuffer buffer = bufferPool.allocate(getAsciiString(currentAnimation).length, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(currentAnimation)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 10, buffer, size + 4); - return buffer; - } - - public IoBuffer buildLevelDelta(short level) { - - IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort(level); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x08, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildWeaponIdDelta(long weaponId) { - - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(weaponId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0C, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildGroupIdDelta(long groupId) { - - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(groupId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0D, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildGuildIdDelta(int guildId) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(guildId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0F, buffer, size + 4); - - return buffer; - } - - public IoBuffer buildGroupInviteDelta(long inviteSenderId, String inviteSenderName, long inviteCounter) { - - IoBuffer buffer = bufferPool.allocate(18 + inviteSenderName.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(inviteSenderId); - buffer.put(getAsciiString(inviteSenderName)); - buffer.putLong(inviteCounter); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0E, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildLookAtTargetDelta(long targetId) { - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(targetId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x10, buffer, size + 4); - return buffer; - } - - public IoBuffer buildIntendedTargetDelta(long targetId) { - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(targetId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x11, buffer, size + 4); - return buffer; - } - - public IoBuffer buildHealthDelta(int health) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getHamListCounter()); - //System.out.println("HAM list counter: " + creature.getHamListCounter()); - buffer.put((byte) 2); - buffer.putShort((short) 0); - buffer.putInt(health); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x15, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildActionDelta(int action) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getHamListCounter()); - //System.out.println("HAM list counter: " + creature.getHamListCounter()); - buffer.put((byte) 2); - buffer.putShort((short) 2); - buffer.putInt(action); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x15, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildMaxHealthDelta(int health) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getMaxHAMListCounter()); - buffer.put((byte) 2); - buffer.putShort((short) 0); - buffer.putInt(health); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x16, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildMaxActionDelta(int action) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(15, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getMaxHAMListCounter()); - buffer.put((byte) 2); - buffer.putShort((short) 2); - buffer.putInt(action); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x16, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildAddBuffDelta(Buff buff) { - - CreatureObject creature = (CreatureObject) object; - PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - - IoBuffer buffer = bufferPool.allocate(37, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getBuffListCounter()); - if(player != null) - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); - else - buff.setTotalPlayTime(0); - buffer.put((byte) 0); - buffer.put(buff.getBytes()); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1A, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveBuffDelta(Buff buff) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(37, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getBuffListCounter()); - buffer.put((byte) 1); - buffer.put(buff.getBytes()); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1A, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildUpdateBuffDelta(Buff buff) { - - CreatureObject creature = (CreatureObject) object; - PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - - IoBuffer buffer = bufferPool.allocate(37, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getBuffListCounter()); - if(player != null) - buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); - else - buff.setTotalPlayTime(0); - buffer.put((byte) 2); - buffer.put(buff.getBytes()); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1A, buffer, size + 4); - - return buffer; - - } - - - public IoBuffer buildGroupInviteDelta(long inviteSenderId, long inviteCounter, String leaderName) { - - IoBuffer buffer = bufferPool.allocate(18 + leaderName.length(), false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putLong(inviteSenderId); - buffer.put(getAsciiString(leaderName)); - buffer.putLong(inviteCounter); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0E, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildAddSkillDelta(String name) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(11 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getSkillsUpdateCounter()); - buffer.put((byte) 1); - buffer.put(getAsciiString(name)); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveSkillDelta(String name) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(11 + name.length(), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getSkillsUpdateCounter()); - buffer.put((byte) 0); - buffer.put(getAsciiString(name)); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 1, (short) 1, (short) 3, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildResetHAMListDelta() { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(35, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(1); - buffer.putInt(creature.getHamListCounter()); - buffer.put((byte) 3); - buffer.putShort((short) 6); - buffer.putInt(creature.getHealth()); - buffer.putInt(0); - buffer.putInt(creature.getAction()); - buffer.putInt(0); - buffer.putInt(0x2C01); - buffer.putInt(0); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x15, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildUpdateHAMListDelta() { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(22, false).order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(2); - buffer.putInt(creature.getHamListCounter()); - buffer.put((byte) 2); - buffer.putShort((short) 0); - buffer.putInt(creature.getHealth()); - buffer.put((byte) 2); - buffer.putShort((short) 2); - buffer.putInt(creature.getAction()); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x15, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildCustomNameDelta(String customName) { - IoBuffer buffer = bufferPool.allocate(getUnicodeString(customName).length, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getUnicodeString(customName)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 2, buffer, size + 4); - return buffer; - - } - - public IoBuffer buildMoodAnimationDelta(String moodAnimation) { - IoBuffer buffer = bufferPool.allocate(getAsciiString(moodAnimation).length, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(moodAnimation)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x0B, buffer, size + 4); - return buffer; - - } - - public IoBuffer buildListenToId(long creatureObjectId) { - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(creatureObjectId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x09, buffer, size + 4); - return buffer; - } - - public IoBuffer buildPerformanceId(int performanceId) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(performanceId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x14, buffer, size + 4); - return buffer; - } - - public IoBuffer buildPerformanceCounter(int performanceCounter) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(performanceCounter); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x13, buffer, size + 4); - return buffer; - } - - public IoBuffer buildStartPerformance(boolean doStart) { - IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put((byte) ((doStart) ? 1 : 0)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1B, buffer, size + 4); - return buffer; - } - - - public IoBuffer buildDifficultyDelta(byte difficulty) { - IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(difficulty); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1C, buffer, size + 4); - return buffer; - } - - public IoBuffer buildAddEquipmentDelta(TangibleObject item) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(496, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getEquipmentListUpdateCounter()); - buffer.put((byte) 1); - buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); - if(item.getCustomization() == null || item.getCustomization().length == 0) { - buffer.putShort((short) 0); - } else { - buffer.putShort((short) item.getCustomization().length); - buffer.put(item.getCustomization()); - } - buffer.putInt(item.getArrangementId()); - buffer.putLong(item.getObjectID()); - buffer.putInt(CRC.StringtoCRC(item.getTemplate())); - if(item instanceof WeaponObject) { - WeaponObject weapon = (WeaponObject) item; - buffer.put((byte) 1); - buffer.put(weapon.getMessageBuilder().buildBaseline3()); - buffer.put(weapon.getMessageBuilder().buildBaseline6()); - } else { - buffer.put((byte) 0); - } - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveEquipmentDelta(TangibleObject item) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getEquipmentListUpdateCounter()); - buffer.put((byte) 0); - buffer.putShort((short) creature.getEquipmentList().indexOf(item.getObjectId())); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x17, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildAddAppearanceEquipmentDelta(TangibleObject item) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - buffer.put((byte) 1); - buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); - if(item.getCustomization() == null || item.getCustomization().length == 0) { - buffer.putShort((short) 0); - } else { - buffer.putShort((short) item.getCustomization().length); - buffer.put(item.getCustomization()); - } - buffer.putInt(item.getArrangementId()); - buffer.putLong(item.getObjectID()); - buffer.putInt(CRC.StringtoCRC(item.getTemplate())); - buffer.put((byte) 0); - - int size = buffer.position(); - buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildRemoveAppearanceEquipmentDelta(TangibleObject item) { - - CreatureObject creature = (CreatureObject) object; - - IoBuffer buffer = bufferPool.allocate(11, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(1); - buffer.putInt(creature.getAppearanceEquipmentListUpdateCounter()); - buffer.put((byte) 0); - buffer.putShort((short) creature.getAppearanceEquipmentList().indexOf(item)); - - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x21, buffer, size + 4); - - return buffer; - - } - - public IoBuffer buildXPBarDelta(int xpBarValue) { - IoBuffer buffer = bufferPool.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(xpBarValue); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 4, (short) 1, (short) 0x0F, buffer, size + 4); - return buffer; - } - - // TODO: This seems to be somehow related to chairs as well. - public IoBuffer buildOwnerIdDelta(long ownerId) { - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putLong(ownerId); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 3, (short) 1, (short) 0x0F, buffer, size + 4); // This is the correct one - return buffer; - } - - public IoBuffer buildStealthFlagDelta(boolean flag) { - IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put((byte) (flag ? 0 : 1)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x19, buffer, size + 4); - return buffer; - } - - public IoBuffer buildRadarVisibleFlagDelta(boolean flag) { - IoBuffer buffer = bufferPool.allocate(1, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put((byte) (flag ? 1 : 0)); - int size = buffer.position(); - buffer.flip(); - buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1E, buffer, size + 4); - return buffer; - } - @Override public void buildBaseline1(Map baselineBuilders, Map deltaBuilders) { super.buildBaseline1(baselineBuilders, deltaBuilders); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index b61a7f72..51fe4b04 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -21,655 +21,461 @@ ******************************************************************************/ package resources.objects.creature; -import java.io.Serializable; -import java.lang.System; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Vector; +import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.atomic.LongAdder; +import main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; +import protocol.swg.chat.ChatSystemMessage; import protocol.swg.ObjControllerMessage; import protocol.swg.PlayMusicMessage; -import protocol.swg.UpdatePostureMessage; import protocol.swg.UpdatePVPStatusMessage; -import protocol.swg.chat.ChatSystemMessage; +import protocol.swg.UpdatePostureMessage; import protocol.swg.objectControllerObjects.Animation; import protocol.swg.objectControllerObjects.Posture; import protocol.swg.objectControllerObjects.StartTask; - -import com.sleepycat.persist.model.Entity; -import com.sleepycat.persist.model.NotPersistent; - -import main.NGECore; import engine.clients.Client; -import resources.buffs.Buff; -import resources.buffs.DamageOverTime; -import resources.common.OutOfBand; -import resources.objects.ObjectMessageBuilder; +import engine.resources.objects.Baseline; import resources.objects.SWGList; import resources.objects.SWGMap; import resources.objects.SWGSet; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import resources.skills.SkillMod; +import resources.buffs.Buff; +import resources.buffs.BuffList; +import resources.buffs.DamageOverTime; +import resources.common.OutOfBand; +import resources.datatables.Difficulty; +import resources.equipment.Equipment; +import resources.group.GroupInviteInfo; +import services.command.BaseSWGCommand; import engine.resources.common.CRC; +import engine.resources.objects.IPersistent; import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -import resources.objects.player.PlayerObject; -import resources.objects.tangible.TangibleObject; -import resources.skills.SkillMod; -import services.command.BaseSWGCommand; -@Entity(version=9) -public class CreatureObject extends TangibleObject implements Serializable { +public class CreatureObject extends TangibleObject implements IPersistent { private static final long serialVersionUID = 1L; - // CREO 1 - private int bankCredits = 0; - private int cashCredits = 0; - private SWGSet skills; - @NotPersistent - private transient int skillsUpdateCounter = 0; - - // CREO 3 - private byte posture = 0; - private float height; - private int battleFatigue = 0; - private long stateBitmask = 0; - private long ownerId = 0; - - // CREO 4 - private float accelerationMultiplierBase = 1; - private float accelerationMultiplierMod = 1; - private SWGMap skillMods; - private float speedMultiplierBase = 1; - private float speedMultiplierMod = 1; - private float runSpeed = (float) 7.3; - private float slopeModAngle = 1; - private float slopeModPercent = 1; - private float turnRadius = 1; - private float walkSpeed = (float) 1.549; - private float waterModPercent = (float) 0.75; - private SWGMap abilities; - private int xpBarValue = 0; - - private SWGMap missionCriticalObjects; - @NotPersistent - private transient int missionCriticalObjectsUpdateCounter = 0; - - // CREO6 - private short level = -1; - private int grantedHealth = 0; - private String currentAnimation; - private String moodAnimation; - private long weaponId = 0; - private long groupId = 0; - private long inviteSenderId = 0; - private String inviteSenderName; - private long inviteCounter = 0; - private int guildId = 0; - private long lookAtTarget = 0; - private long targetId = 0; - private byte moodId = 0; - private int performanceCounter = 0; - private int performanceId = 0; - private boolean hologram = false; - private boolean performanceType = false; - private boolean acceptBandflourishes = true; - private boolean groupDance = true; - @NotPersistent - private transient CreatureObject performanceWatchee; - @NotPersistent - private transient CreatureObject performanceListenee; - @NotPersistent - private transient Vector performanceAudience = new Vector(); - private int health = 1000; - private int action = 300; - @NotPersistent - private transient int HAMListCounter = 0; - private int maxHealth = 1000; - private int maxAction = 300; - @NotPersistent - private transient int maxHAMListCounter = 0; - - private SWGList equipmentList; - @NotPersistent - private transient int equipmentListUpdateCounter = 0; - private SWGList buffList = new SWGList(); - @NotPersistent - private transient int buffListUpdateCounter = 0; - private byte difficulty = 0; - private SWGList appearanceEquipmentList; - @NotPersistent - private transient int appearanceEquipmentListUpdateCounter = 0; - - private boolean inStealth = false; - private boolean radarVisible = true; // radar - private boolean stationary = false; - - // non-baseline vars - @NotPersistent - private transient List duelList = Collections.synchronizedList(new ArrayList()); - @NotPersistent private transient CreatureMessageBuilder messageBuilder; - private SWGList dotList = new SWGList(); - @NotPersistent + + private transient List duelList = Collections.synchronizedList(new ArrayList()); private transient ScheduledFuture incapTask; - @NotPersistent private transient ScheduledFuture entertainerExperience; - @NotPersistent private transient ScheduledFuture inspirationTick; - - @NotPersistent + private transient CreatureObject performanceWatchee; + private transient CreatureObject performanceListenee; + private transient List performanceAudience = new ArrayList(); private transient ScheduledFuture spectatorTask; - - @NotPersistent private transient int flourishCount = 0; - @NotPersistent private transient boolean performingEffect; - @NotPersistent private transient boolean performingFlourish; - private int coverCharge; - @NotPersistent private transient TangibleObject conversingNpc; - @NotPersistent private transient ConcurrentHashMap cooldowns = new ConcurrentHashMap(); - @NotPersistent private transient long tefTime = 0; - @NotPersistent private transient SWGObject useTarget; - @NotPersistent - private transient CreatureObject calledPet; - - private byte locomotion = 0; public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, position, orientation, Template); - messageBuilder = new CreatureMessageBuilder(this); - loadTemplateData(); - skills = new SWGSet(this, 1, 4, false); - skillMods = new SWGMap(this, 4, 3, true); - abilities = new SWGMap(this, 4, 14, true); - missionCriticalObjects = new SWGMap(this, 4, 13, false); - equipmentList = new SWGList(this, 6, 23, false); - buffList = new SWGList(this, 6, 26, false); - appearanceEquipmentList = new SWGList(this, 6, 31, false); + setMaximumCondition(1000); + setStaticObject(true); + getAttribs().add(1000); + getAttribs().add(0); + getAttribs().add(300); + getAttribs().add(0); + getAttribs().add(300); + getAttribs().add(0); + getMaxAttribs().add(1000); + getMaxAttribs().add(0); + getMaxAttribs().add(300); + getMaxAttribs().add(0); + getMaxAttribs().add(300); + getMaxAttribs().add(0); + getBuffList().put(0, new Buff("", getObjectID())); // Initial Default Buff } public CreatureObject() { super(); - messageBuilder = new CreatureMessageBuilder(this); } - @Override public void initAfterDBLoad() { super.init(); - defendersList = new Vector(); - duelList = Collections.synchronizedList(new ArrayList()); - cooldowns = new ConcurrentHashMap(); - performanceAudience = new Vector(); - messageBuilder = new CreatureMessageBuilder(this); - dotList.init(this); - buffList.init(this); - equipmentList.init(this); - appearanceEquipmentList.init(this); - missionCriticalObjects.init(this); - abilities.init(this); - skillMods.init(this); - } - - private void loadTemplateData() { - - /*if(getTemplateData().getAttribute("scale") != null) - setHeight((float) getTemplateData().getAttribute("scale")); - if(getTemplateData().getAttribute("speed") != null) { - //System.out.println(getTemplateData().getAttribute("speed")); - setRunSpeed((float) getTemplateData().getAttribute("speed")); - } - if(getTemplateData().getAttribute("turnRate") != null) - setTurnRadius((float) getTemplateData().getAttribute("turnRate"));*/ - + System.out.println("Name: " + getCustomName()); + System.out.println(" Cash Credits: " + getCashCredits()); + System.out.println(" Bank Credits: " + getBankCredits()); } - public int getBankCredits() { - synchronized(objectMutex) { - return bankCredits; - } + public Baseline getOtherVariables() { + Baseline baseline = super.getOtherVariables(); + baseline.put("locomotion", (byte) 0); + baseline.put("performanceType", ""); + baseline.put("coverCharge", 0); + baseline.put("dotList", new ArrayList()); + return baseline; + } + + public Baseline getBaseline1() { + Baseline baseline = super.getBaseline1(); + baseline.put("bankCredits", 0); + baseline.put("cashCredits", 0); + baseline.put("baseAttributes", new SWGList(this, 1, 2, false)); + baseline.put("skills", new SWGSet(this, 1, 3, false)); + return baseline; + } + + public Baseline getBaseline3() { + Baseline baseline = super.getBaseline3(); + baseline.put("posture", (byte) 0); + baseline.put("factionRank", (byte) 0); + baseline.put("ownerId", (long) 0); + baseline.put("height", (float) 1); + baseline.put("battleFatigue", 0); + baseline.put("stateBitmask", (long) 0); + return baseline; + } + + public Baseline getBaseline4() { + Baseline baseline = super.getBaseline4(); + baseline.put("accelerationMultiplierBase", (float) 1); + baseline.put("accelerationMultiplierMod", (float) 1); + baseline.put("hamEncumberanceList", new SWGList(this, 4, 2, false)); + baseline.put("skillMods", new SWGMap(this, 4, 3, true)); + baseline.put("speedMultiplierBase", (float) 1); + baseline.put("speedMultiplierMod", (float) 1); + baseline.put("listenToId", (long) 0); + baseline.put("runSpeed", (float) 7.3); + baseline.put("slopeModAngle", (float) 1); + baseline.put("slopeModPercent", (float) 1); + baseline.put("turnRadius", (float) 1); + baseline.put("walkSpeed", (float) 1.549); + baseline.put("waterModPercent", (float) 0.75); + baseline.put("missionCriticalObjects", new SWGMap(this, 4, 13, false)); + baseline.put("abilities", new SWGMap(this, 4, 14, true)); + baseline.put("displayXp", 0); + return baseline; + } + + public Baseline getBaseline6() { + Baseline baseline = super.getBaseline6(); + baseline.put("level", (short) -1); + baseline.put("grantedHealth", 0); + baseline.put("currentAnimation", ""); + baseline.put("moodAnimation", "neutral"); + baseline.put("weaponId", (long) 0); + baseline.put("groupId", (long) 0); + baseline.put("groupInviteInfo", new GroupInviteInfo((long) 0, "")); + baseline.put("guildId", 0); + baseline.put("lookAtTarget", (long) 0); + baseline.put("intendedTarget", (long) 0); + baseline.put("moodId", (byte) 0); + baseline.put("performanceCounter", 0); + baseline.put("performanceId", 0); + baseline.put("attributes", new SWGList(this, 6, 21, false)); + baseline.put("maxAttributes", new SWGList(this, 6, 22, false)); + baseline.put("equipmentList", new SWGList(this, 6, 23, false)); + baseline.put("appearance", ""); + baseline.put("visible", true); + baseline.put("buffList", new BuffList(new SWGMap(this, 6, 26, false))); + baseline.put("performing", false); + baseline.put("difficulty", Difficulty.NORMAL); + baseline.put("hologramColor", -1); + baseline.put("visibleOnRadar", true); + baseline.put("isPet", false); + baseline.put("32", (byte) 0); + baseline.put("appearanceEquipmentList", new SWGList(this, 6, 31, false)); + baseline.put("34", (long) 0); + return baseline; + } + + public Baseline getBaseline8() { + Baseline baseline = super.getBaseline8(); + return baseline; + } + + public Baseline getBaseline9() { + Baseline baseline = super.getBaseline9(); + return baseline; } public boolean isPlayer() { synchronized(objectMutex) { - return ( getSlottedObject("ghost") != null ); + return (getSlottedObject("ghost") != null); } } - + + public PlayerObject getPlayerObject() { + return (PlayerObject) getSlottedObject("ghost"); + } + + public int getBankCredits() { + return (int) getBaseline(1).get("bankCredits"); + } + public void setBankCredits(int bankCredits) { - synchronized(objectMutex) { - this.bankCredits = bankCredits; - } - if(getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(1).set("bankCredits", bankCredits)); } } - public void addBankCredits(int amountToAdd) { + public void addBankCredits(int bankCredits) { synchronized(objectMutex) { - this.bankCredits += amountToAdd; - } - if(getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); + setBankCredits(getBankCredits() + bankCredits); } } - + + public void deductBankCredits(int bankCredits) { + synchronized(objectMutex) { + setBankCredits(getBankCredits() - bankCredits); + } + } + public int getCashCredits() { - synchronized(objectMutex) { - return cashCredits; - } - } - - public void addCashCredits(int amountToAdd) { - synchronized(objectMutex) { - this.cashCredits += amountToAdd; - } - if(getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); - } - } - - public void deductCashCredits(int amountToDeduct) { - synchronized(objectMutex) { - this.cashCredits -= amountToDeduct; - } - if(getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); - } + return (int) getBaseline(1).get("cashCredits"); } public void setCashCredits(int cashCredits) { - synchronized(objectMutex) { - this.cashCredits = cashCredits; - } - if(getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(1).set("cashCredits", cashCredits)); } } - + + public void addCashCredits(int cashCredits) { + synchronized(objectMutex) { + setCashCredits(getCashCredits() + cashCredits); + } + } + + public void deductCashCredits(int cashCredits) { + synchronized(objectMutex) { + setCashCredits(getCashCredits() - cashCredits); + } + } + + @SuppressWarnings("unchecked") + public SWGList getBaseAttributes() { + return (SWGList) getBaseline(1).get("baseAttributes"); + } + + @SuppressWarnings("unchecked") public SWGSet getSkills() { - return skills; + return (SWGSet) getBaseline(1).get("skills"); } public boolean hasSkill(String name) { - /*synchronized(objectMutex) { - for (String skill : skills) { - if (skill.equals(name)) { - return true; - } - } - - return false; - }*/ - return skills.contains(name); - } - - public short getSkillsUpdateCounter() { - synchronized(objectMutex) { - return (short) skillsUpdateCounter; - } - } - - public void setSkillsUpdateCounter(short skillsUpdateCounter) { - synchronized(objectMutex) { - this.skillsUpdateCounter = skillsUpdateCounter; - } + return getSkills().contains(name); } public void addSkill(String skill) { - - if(skills.contains(skill)) - return; - - skills.add(skill); - - if(getClient() != null) { - setSkillsUpdateCounter((short) (getSkillsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildAddSkillDelta(skill)); + if (!getSkills().contains(skill)) { + getSkills().add(skill); } - } public void removeSkill(String skill) { - - if(!skills.contains(skill)) - return; - - skills.remove(skill); - - if(getClient() != null) { - setSkillsUpdateCounter((short) (getSkillsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveSkillDelta(skill)); - } - - } - - public void setOptions(int options, boolean add) { - synchronized(objectMutex) { - if (options != 0) { - if (add) { - addOption(options); - } else { - removeOption(options); - } - } + if (getSkills().contains(skill)) { + getSkills().remove(skill); } } - public void addOption(int option) { - setOptionsBitmask(getOptionsBitmask() | option); + public int getIncapacityTimer() { + return (int) getBaseline(3).get("uses"); } - public void removeOption(int option) { - setOptionsBitmask(getOptionsBitmask() & ~option); + public void setIncapacityTimer(int incapacityTimer) { + notifyClients(getBaseline(3).set("uses", incapacityTimer), true); } - + public byte getPosture() { - synchronized(objectMutex) { - return posture; - } + return (byte) getBaseline(3).get("posture"); } - + public void setPosture(byte posture) { synchronized(objectMutex) { - switch (posture) { + switch (getPosture()) { case resources.datatables.Posture.Invalid: - locomotion = -1; + setLocomotion(resources.datatables.Locomotion.Invalid); break; case resources.datatables.Posture.Upright: - locomotion = 0; + setLocomotion(resources.datatables.Locomotion.Standing); break; case resources.datatables.Posture.Crouched: - locomotion = 4; + setLocomotion(resources.datatables.Locomotion.Kneeling); break; case resources.datatables.Posture.Prone: - locomotion = 7; + setLocomotion(resources.datatables.Locomotion.Prone); break; case resources.datatables.Posture.Sneaking: - locomotion = 1; + setLocomotion(resources.datatables.Locomotion.Sneaking); break; case resources.datatables.Posture.Blocking: - locomotion = 21; + setLocomotion(resources.datatables.Locomotion.Blocking); break; case resources.datatables.Posture.Climbing: - locomotion = 9; + setLocomotion(resources.datatables.Locomotion.ClimbingStationary); break; case resources.datatables.Posture.Flying: - locomotion = 12; + setLocomotion(resources.datatables.Locomotion.Flying); break; case resources.datatables.Posture.LyingDown: - locomotion = 13; + setLocomotion(resources.datatables.Locomotion.LyingDown); break; case resources.datatables.Posture.Sitting: - locomotion = 14; + setLocomotion(resources.datatables.Locomotion.Sitting); break; case resources.datatables.Posture.SkillAnimating: - locomotion = 15; + setLocomotion(resources.datatables.Locomotion.SkillAnimating); break; case resources.datatables.Posture.DrivingVehicle: - locomotion = 16; + setLocomotion(resources.datatables.Locomotion.DrivingVehicle); break; case resources.datatables.Posture.RidingCreature: - locomotion = 17; + setLocomotion(resources.datatables.Locomotion.RidingCreature); break; case resources.datatables.Posture.KnockedDown: - locomotion = 18; + setLocomotion(resources.datatables.Locomotion.KnockedDown); break; case resources.datatables.Posture.Incapacitated: - locomotion = 19; + setLocomotion(resources.datatables.Locomotion.Incapacitated); break; case resources.datatables.Posture.Dead: - locomotion = 20; + setLocomotion(resources.datatables.Locomotion.Dead); break; } } - synchronized(objectMutex) { - if (this.posture == resources.datatables.Posture.SkillAnimating) { - stopPerformance(); - } - - if (this.posture == posture) { - return; - } - - this.posture = posture; + if (getPosture() == resources.datatables.Posture.SkillAnimating) { + stopPerformance(); } - notifyObservers(messageBuilder.buildPostureDelta(posture), true); + if (getPosture() == posture) { + return; + } + + notifyObservers(getBaseline(3).set("posture", posture), true); notifyObservers(new ObjControllerMessage(0x1B, new Posture(getObjectID(), posture)), true); } public byte getLocomotion() { - return locomotion; + return (byte) otherVariables.get("locomotion"); } public void setLocomotion(byte locomotion) { - this.locomotion = locomotion; + otherVariables.set("locomotion", locomotion); } - public void startPerformance() { - setStationary(true); + public byte getFactionRank() { + return (byte) getBaseline(3).get("factionRank"); } - public void stopPerformance() { - String type = ""; - - synchronized(objectMutex) { - // Some reason this prevents the animation for playing an instrument when stopping (unless that's what "" does) - setCurrentAnimation(getCurrentAnimation()); - - setPerformanceCounter(0); - setPerformanceId(0,true); - - type = (performanceType) ? "dance" : "music"; - - if (entertainerExperience != null) { - entertainerExperience.cancel(true); - entertainerExperience = null; - } - } - - sendSystemMessage("@performance:" + type + "_stop_self",(byte)0); - stopAudience(); - setStationary(false); - } - - public void stopAudience() { - synchronized(objectMutex) { - //String type = (performanceType) ? "dance" : "music"; - if (performanceAudience == null) { - return; - } - Iterator it = performanceAudience.iterator(); - while (it.hasNext()) { - CreatureObject next = it.next(); - if ((performanceType) && (next.getPerformanceWatchee() != this)) { continue; } - if ((!performanceType) && (next.getPerformanceListenee() != this)) { continue; } - if (performanceType) { next.setPerformanceWatchee(null); } - if (!performanceType) { next.setPerformanceListenee(null); } - //this may be a bit dodgy. - boolean isEntertained = next.getPerformanceListenee() != null && next.getPerformanceWatchee() != null; - if (!isEntertained) { - next.setMoodAnimation(""); - } - if (next == this) { continue; } - if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } - else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } - next.getSpectatorTask().cancel(true); - } - } - } - public ScheduledFuture getEntertainerExperience() { - return entertainerExperience; - } - - public void setEntertainerExperience(ScheduledFuture entertainerExperience) { - this.entertainerExperience = entertainerExperience; - } - - public ScheduledFuture getInspirationTick() { - synchronized(objectMutex) { - return inspirationTick; - } - } - - public void setInspirationTick(ScheduledFuture inspirationTick) { - synchronized(objectMutex) { - this.inspirationTick = inspirationTick; - } - } - - public void setFaction(String faction) { - super.setFaction(faction); - - CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); - - if (companion != null) { - companion.setFaction(faction); - } - } - - public void setFactionStatus(int factionStatus) { - super.setFactionStatus(factionStatus); - - CreatureObject companion = NGECore.getInstance().mountService.getCompanion(this); - - if (companion != null) { - companion.setFactionStatus(factionStatus); - } - } - - public float getHeight() { - synchronized(objectMutex) { - return height; - } - } - - public void setHeight(float height) { - synchronized(objectMutex) { - this.height = height; - } - - IoBuffer heightDelta = messageBuilder.buildHeightDelta(height); - - notifyObservers(heightDelta, true); - - } - - public int getBattleFatigue() { - synchronized(objectMutex) { - return battleFatigue; - } - } - - public void setBattleFatigue(int battleFatigue) { - synchronized(objectMutex) { - this.battleFatigue = battleFatigue; - } - } - - public long getStateBitmask() { - synchronized(objectMutex) { - return stateBitmask; - } - } - - public void setStateBitmask(long stateBitmask) { - synchronized(objectMutex) { - this.stateBitmask = stateBitmask; - } - - IoBuffer stateDelta = messageBuilder.buildStateDelta(stateBitmask); - - notifyObservers(stateDelta, true); - - } - - public void setState(long state, boolean add) { - synchronized(objectMutex) { - if (state != 0) { - if (add) { - state = (stateBitmask | state); - } else { - state = (stateBitmask & ~state); - } - } - } - - notifyObservers(messageBuilder.buildStateDelta(state), true); - } - - public boolean getState(long state) { - synchronized(objectMutex) { - return ((stateBitmask & state) == state); - } + public void setFactionRank(byte factionRank) { + notifyObservers(getBaseline(3).set("factionRank", factionRank), true); } public long getOwnerId() { - synchronized(objectMutex) { - return ownerId; - } + return (long) getBaseline(3).get("ownerId"); } - + public void setOwnerId(long ownerId) { - synchronized(objectMutex) { - this.ownerId = ownerId; - } - setStringAttribute("owner", NGECore.getInstance().objectService.getObject(ownerId).getCustomName()); + notifyObservers(getBaseline(3).set("ownerId", ownerId), true); + } + + public float getHeight() { + return (float) getBaseline(3).get("height"); + } + + public void setHeight(float height) { + height = (((height < 0.7) || (height > 1.5)) ? 1 : height); + notifyObservers(getBaseline(3).set("height", height), true); + } + + public int getBattleFatigue() { + return (int) getBaseline(3).get("battleFatigue"); + } + + public void setBattleFatigue(int battleFatigue) { + notifyObservers(getBaseline(3).set("battleFatigue", battleFatigue), true); + } + + public long getStateBitmask() { + return (long) getBaseline(3).get("stateBitmask"); + } + + public void setStateBitmask(long stateBitmask) { + notifyObservers(getBaseline(3).set("stateBitmask", stateBitmask), true); + } + + public void setState(long state, boolean add) { + if (state != 0) { + if (add) { + state = (getStateBitmask() | state); + } else { + state = (getStateBitmask() & ~state); + } + } - notifyObservers(messageBuilder.buildOwnerIdDelta(ownerId), true); + setStateBitmask(state); } - + + public boolean getState(long state) { + return ((getStateBitmask() & state) == state); + } + public float getAccelerationMultiplierBase() { - synchronized(objectMutex) { - return accelerationMultiplierBase; - } + return (float) getBaseline(4).get("accelerationMultiplierBase"); } - + public void setAccelerationMultiplierBase(float accelerationMultiplierBase) { - synchronized(objectMutex) { - this.accelerationMultiplierBase = accelerationMultiplierBase; - } - } - - public float getAccelerationMultiplierMod() { - synchronized(objectMutex) { - return accelerationMultiplierMod; - } - } - - public void setAccelerationMultiplierMod(float accelerationMultiplierMod) { - synchronized(objectMutex) { - this.accelerationMultiplierMod = accelerationMultiplierMod; + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("accelerationMultiplierBase", accelerationMultiplierBase)); } } + public float getAccelerationMultiplierMod() { + return (float) getBaseline(4).get("accelerationMultiplierMod"); + } + + public void setAccelerationMultiplierMod(float accelerationMultiplierMod) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("accelerationMultiplierMod", accelerationMultiplierMod)); + } + } + + @SuppressWarnings("unchecked") + public SWGList getHamEncumberanceList() { + return (SWGList) getBaseline(4).get("hamEncumberanceList"); + } + + @SuppressWarnings("unchecked") public SWGMap getSkillMods() { - return skillMods; + return (SWGMap) getBaseline(4).get("skillMods"); } public SkillMod getSkillMod(String name) { - return skillMods.get(name); + synchronized(objectMutex) { + if (getSkillMods().containsKey(name) && getSkillMods().get(name) != null) { + return getSkillMods().get(name); + } + + return null; + } } public int getSkillModBase(String name) { SkillMod skillMod = getSkillMod(name); - return ((skillMod == null) ? 0 : skillMod.getBase() + skillMod.getModifier()); + return ((skillMod == null) ? 0 : skillMod.getBase()); } public int getSkillModModifier(String name) { @@ -682,492 +488,30 @@ public class CreatureObject extends TangibleObject implements Serializable { return ((skillMod == null) ? 0.0f : skillMod.getValue(divisor, percent)); } - public float getSpeedMultiplierBase() { - synchronized(objectMutex) { - return speedMultiplierBase; - } - } - - public void setSpeedMultiplierBase(float speedMultiplierBase) { - synchronized(objectMutex) { - this.speedMultiplierBase = speedMultiplierBase; - } - IoBuffer speedDelta = messageBuilder.buildSpeedModBaseDelta(speedMultiplierBase); - - notifyObservers(speedDelta, true); - - } - - public float getSpeedMultiplierMod() { - synchronized(objectMutex) { - return speedMultiplierMod; - } - } - - public void setSpeedMultiplierMod(float speedMultiplierMod) { - synchronized(objectMutex) { - this.speedMultiplierMod = speedMultiplierMod; - } - IoBuffer speedDelta = messageBuilder.buildSpeedModDelta(speedMultiplierMod); - - notifyObservers(speedDelta, true); - } - - public float getRunSpeed() { - synchronized(objectMutex) { - return runSpeed; - } - } - - public void setRunSpeed(float runSpeed) { - synchronized(objectMutex) { - this.runSpeed = runSpeed; - } - } - - public float getSlopeModAngle() { - synchronized(objectMutex) { - return slopeModAngle; - } - } - - public void setSlopeModAngle(float slopeModAngle) { - synchronized(objectMutex) { - this.slopeModAngle = slopeModAngle; - } - } - - public float getSlopeModPercent() { - synchronized(objectMutex) { - return slopeModPercent; - } - } - - public void setSlopeModPercent(float slopeModPercent) { - synchronized(objectMutex) { - this.slopeModPercent = slopeModPercent; - } - } - - public float getTurnRadius() { - synchronized(objectMutex) { - return turnRadius; - } - } - - public void setTurnRadius(float turnRadius) { - synchronized(objectMutex) { - this.turnRadius = turnRadius; - } - IoBuffer turnDelta = messageBuilder.buildTurnRadiusDelta(turnRadius); - - notifyObservers(turnDelta, true); - - } - - public float getWalkSpeed() { - synchronized(objectMutex) { - return walkSpeed; - } - } - - public void setWalkSpeed(float walkSpeed) { - synchronized(objectMutex) { - this.walkSpeed = walkSpeed; - } - } - - public float getWaterModPercent() { - synchronized(objectMutex) { - return waterModPercent; - } - } - - public void setWaterModPercent(float waterModPercent) { - synchronized(objectMutex) { - this.waterModPercent = waterModPercent; + public void addSkillMod(String name, int base) { + if (!getSkillMods().containsKey(name)) { + getSkillMods().put(name, new SkillMod(base, 0)); + } else { + SkillMod mod = getSkillMods().get(name); + getSkillMods().put(name, new SkillMod(mod.getBase() + base, mod.getModifier())); } } - public SWGMap getAbilities() { - return abilities; - } - - public boolean hasAbility(String name) { - return abilities.containsKey(name); - } - - public void addAbility(String abilityName) { - if (abilities.containsKey(abilityName)) { - return; - } - - abilities.put(abilityName, 1); - } - - public void removeAbility(String abilityName) { - if (!abilities.containsKey(abilityName)) { - return; - } - - abilities.remove(abilityName); - } - - public SWGMap getMissionCriticalObjects() { - return missionCriticalObjects; - } - - public short getLevel() { - synchronized(objectMutex) { - return level; - } - } - - public void setLevel(short level) { - synchronized(objectMutex) { - this.level = level; - } - - IoBuffer levelDelta = messageBuilder.buildLevelDelta(level); - - notifyObservers(levelDelta, true); - - } - - public int getGrantedHealth() { - synchronized(objectMutex) { - return grantedHealth; + public void deductSkillMod(String name, int base) { + if (getSkillMods().containsKey(name)) { + SkillMod mod = getSkillMods().get(name); + mod = new SkillMod(mod.getBase() - base, mod.getModifier()); + + if (mod.getBase() - base <= 0) { + removeSkillMod(name); + } else { + getSkillMods().put(name, mod); + } } } - public void setGrantedHealth(int grantedHealth) { - synchronized(objectMutex) { - this.grantedHealth = grantedHealth; - } - - notifyObservers(messageBuilder.buildGrantedHealthDelta(grantedHealth), true); - } - - public String getCurrentAnimation() { - synchronized(objectMutex) { - return currentAnimation; - } - } - - public void setCurrentAnimation(String currentAnimation) { - synchronized(objectMutex) { - this.currentAnimation = currentAnimation; - } - Animation animation = new Animation(getObjectId(), currentAnimation); - ObjControllerMessage objController = new ObjControllerMessage(0x1B, animation); - - notifyObservers(objController, true); - - notifyObservers(messageBuilder.buildCurrentAnimationDelta(currentAnimation), true); - - } - - public void doSkillAnimation(String skillAnimation) { - Animation animation = new Animation(getObjectId(), skillAnimation); - ObjControllerMessage objController = new ObjControllerMessage(0x1B, animation); - - notifyObservers(objController, true); - - } - - public String getMoodAnimation() { - synchronized(objectMutex) { - return moodAnimation; - } - } - - public void setMoodAnimation(String moodAnimation) { - synchronized(objectMutex) { - this.moodAnimation = moodAnimation; - } - //IoBuffer moodAnimationDelta = messageBuilder.buildMoodAnimationDelta(moodAnimation); - //notifyObservers(moodAnimationDelta, true); - } - - public long getWeaponId() { - synchronized(objectMutex) { - return weaponId; - } - } - - public void setWeaponId(long weaponId) { - synchronized(objectMutex) { - this.weaponId = weaponId; - } - - IoBuffer weaponIdDelta = messageBuilder.buildWeaponIdDelta(weaponId); - - notifyObservers(weaponIdDelta, true); - - } - - public long getGroupId() { - synchronized(objectMutex) { - return groupId; - } - } - - public void setGroupId(long groupId) { - synchronized(objectMutex) { - this.groupId = groupId; - } - - IoBuffer groupIdDelta = messageBuilder.buildGroupIdDelta(groupId); - - notifyObservers(groupIdDelta, true); - - } - - public long getInviteSenderId() { - synchronized(objectMutex) { - return inviteSenderId; - } - } - - public void setInviteSenderId(long inviteSenderId) { - synchronized(objectMutex) { - this.inviteSenderId = inviteSenderId; - } - } - - public String getInviteSenderName() { - synchronized(objectMutex) { - return inviteSenderName; - } - } - - public void setInviteSenderName(String inviteSenderName) { - synchronized(objectMutex) { - this.inviteSenderName = inviteSenderName; - } - } - - public int getGuildId() { - synchronized(objectMutex) { - return guildId; - } - } - - public void setGuildId(int guildId) { - synchronized(objectMutex) { - this.guildId = guildId; - } - - IoBuffer guildIdDelta = messageBuilder.buildGuildIdDelta(guildId); - - notifyObservers(guildIdDelta, true); - } - - public long getLookAtTarget() { - synchronized(objectMutex) { - return lookAtTarget; - } - } - - public void setLookAtTarget(long lookAtTarget) { - synchronized(objectMutex) { - this.lookAtTarget = lookAtTarget; - } - - notifyObservers(messageBuilder.buildLookAtTargetDelta(lookAtTarget), true); - } - - public long getIntendedTarget() { - synchronized(objectMutex) { - return targetId; - } - } - - public void setIntendedTarget(long intendedTarget) { - synchronized(objectMutex) { - this.targetId = intendedTarget; - } - - notifyObservers(messageBuilder.buildIntendedTargetDelta(intendedTarget), true); - } - - public SWGObject getUseTarget() { - synchronized(objectMutex) { - return useTarget; - } - } - - public void setUseTarget(SWGObject useTarget) { - synchronized(objectMutex) { - this.useTarget = useTarget; - } - } - - public long getTargetId() { - return getIntendedTarget(); - } - - public void setTargetId(long targetId) { - setIntendedTarget(targetId); - } - - public long getInviteCounter() { - synchronized(objectMutex) { - return inviteCounter; - } - } - - public void setInviteCounter(long inviteCounter) { - synchronized(objectMutex) { - this.inviteCounter = inviteCounter; - } - } - - public byte getMoodId() { - synchronized(objectMutex) { - return moodId; - } - } - - public void setMoodId(byte moodId) { - synchronized(objectMutex) { - this.moodId = moodId; - } - } - - public int getPerformanceCounter() { - synchronized(objectMutex) { - return performanceCounter; - } - } - - public void setPerformanceCounter(int performanceCounter) { - synchronized(objectMutex) { - this.performanceCounter = performanceCounter; - } - if (getClient() == null) System.err.println("setPerformanceCounter: client is null"); - else if (getClient().getSession() == null) System.err.println("setPerformanceCounter: session is null"); - else getClient().getSession().write(messageBuilder.buildPerformanceCounter(performanceCounter)); - if (getClient() == null || getClient().getSession() == null) { - System.out.println("setPerformanceCounter: " + getTemplate()); - } - } - - public int getPerformanceId() { - synchronized(objectMutex) { - return performanceId; - } - } - - public void setPerformanceId(int performanceId, boolean isDance) { - synchronized(objectMutex) { - this.performanceId = performanceId; - } - getClient().getSession().write(messageBuilder.buildPerformanceId((isDance) ? 0 : performanceId)); - } - - public boolean getAcceptBandflourishes() { - return acceptBandflourishes; - } - - public void setAcceptBandflourishes(boolean acceptBandflourishes) { - this.acceptBandflourishes = acceptBandflourishes; - } - - public SWGList getEquipmentList() { - return equipmentList; - } - - public SWGList getBuffList() { - return buffList; - } - - public SWGList getAppearanceEquipmentList() { - return appearanceEquipmentList; - } - - public List getDuelList() { - return duelList; - } - - public boolean isInDuelList(long objectId) { - if(duelList.contains(objectId)) - return true; - return false; - } - - public void addObjectToEquipList(SWGObject object) { - if(object instanceof TangibleObject) { - equipmentList.get().add(object.getObjectID()); - setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); - notifyObservers(messageBuilder.buildAddEquipmentDelta((TangibleObject) object), true); - } - } - - public void removeObjectFromEquipList(SWGObject object) { - if(object instanceof TangibleObject && equipmentList.contains(object.getObjectID())) { - setEquipmentListUpdateCounter(getEquipmentListUpdateCounter() + 1); - notifyObservers(messageBuilder.buildRemoveEquipmentDelta((TangibleObject) object), true); - equipmentList.get().remove(object.getObjectID()); - } - } - - public void addObjectToAppearanceEquipList(SWGObject object) { - if(object instanceof TangibleObject) { - appearanceEquipmentList.get().add(object.getObjectID()); - setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); - notifyObservers(messageBuilder.buildAddAppearanceEquipmentDelta((TangibleObject) object), true); - } - } - - public void removeObjectFromAppearanceEquipList(SWGObject object) { - if(object instanceof TangibleObject && appearanceEquipmentList.contains(object.getObjectID())) { - setAppearanceEquipmentListUpdateCounter(getAppearanceEquipmentListUpdateCounter() + 1); - notifyObservers(messageBuilder.buildRemoveAppearanceEquipmentDelta((TangibleObject) object), true); - appearanceEquipmentList.get().remove(object.getObjectID()); - } - } - - @Override - public void sendBaselines(Client destination) { - - if(destination == null || destination.getSession() == null) { - //System.out.println("NULL session"); - return; - } - - destination.getSession().write(messageBuilder.buildBaseline3()); - destination.getSession().write(messageBuilder.buildBaseline6()); - if(destination == getClient()) { - destination.getSession().write(messageBuilder.buildBaseline1()); - destination.getSession().write(messageBuilder.buildBaseline4()); - } - //destination.getSession().write(messageBuilder.buildBaseline8()); - //destination.getSession().write(messageBuilder.buildBaseline9()); - - if(destination != getClient()) { - UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID(), NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this), getFaction()); - destination.getSession().write(upvpm.serialize()); - UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), getPosture()); - destination.getSession().write(upm.serialize()); - } - } - - public void sendSystemMessage(String message, byte displayType) { - sendSystemMessage(message, new OutOfBand(), displayType); - } - - public void sendSystemMessage(OutOfBand outOfBand, byte displayType) { - sendSystemMessage("", outOfBand, displayType); - } - - public void sendSystemMessage(String message, OutOfBand outOfBand, byte displayType) { - - if(getClient() != null && getClient().getSession() != null) { - ChatSystemMessage systemMsg = new ChatSystemMessage(message, outOfBand, displayType); - getClient().getSession().write(systemMsg.serialize()); - } - + public void removeSkillMod(String name) { + getSkillMods().remove(name); } public int getLuck() { @@ -1194,320 +538,695 @@ public class CreatureObject extends TangibleObject implements Serializable { return (getSkillModBase("agility") + getSkillModBase("agility_modified")); } + public float getSpeedMultiplierBase() { + return (float) getBaseline(4).get("speedMultiplierBase"); + } + + public void setSpeedMultiplierBase(float speedMultiplierBase) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("speedMultiplierBase", speedMultiplierBase)); + } + } + + public float getSpeedMultiplierMod() { + return (float) getBaseline(4).get("speedMultiplierMod"); + } + + public void setSpeedMultiplierMod(float speedMultiplierMod) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("speedMultiplierMod", speedMultiplierMod)); + } + } + + public long getListenToId() { + return (long) getBaseline(4).get("listenToId"); + } + + public void setListenToId(long listenToId) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("listenToId", listenToId)); + } + } + + public float getRunSpeed() { + return (float) getBaseline(4).get("runSpeed"); + } + + public void setRunSpeed(float runSpeed) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("runSpeed", runSpeed)); + } + } + + public float getSlopeModAngle() { + return (float) getBaseline(4).get("slopeModAngle"); + } + + public void setSlopeModAngle(float slopeModAngle) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("slopeModAngle", slopeModAngle)); + } + } + + public float getSlopeModPercent() { + return (float) getBaseline(4).get("slopeModPercent"); + } + + public void setSlopeModPercent(float slopeModPercent) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("slopeModPercent", slopeModPercent)); + } + } + + public float getTurnRadius() { + return (float) getBaseline(4).get("turnRadius"); + } + + public void setTurnRadius(float turnRadius) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("turnRadius", turnRadius)); + } + } + + public float getWalkSpeed() { + return (float) getBaseline(4).get("walkSpeed"); + } + + public void setWalkSpeed(float walkSpeed) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("walkSpeed", walkSpeed)); + } + } + + public float getWaterModPercent() { + return (float) getBaseline(4).get("waterModPercent"); + } + + public void setWaterModPercent(float waterModPercent) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("waterModPercent", waterModPercent)); + } + } + + @SuppressWarnings("unchecked") + public SWGMap getMissionCriticalObjects() { + return (SWGMap) getBaseline(4).get("missionCriticalObjects"); + } + + @SuppressWarnings("unchecked") + public SWGMap getAbilities() { + return (SWGMap) getBaseline(4).get("abilities"); + } + + public boolean hasAbility(String name) { + for (String ability : getAbilities().keySet()) { + if (ability.equals(name)) { + return true; + } + } + + return false; + } + + public void addAbility(String abilityName) { + if (!getAbilities().containsKey(abilityName)) { + getAbilities().put(abilityName, 1); + } + } + + public void removeAbility(String abilityName) { + if (getAbilities().containsKey(abilityName)) { + getAbilities().remove(abilityName); + } + } + + public int getDisplayXp() { + return (int) getBaseline(4).get("displayXp"); + } + + public void setDisplayXp(int displayXp) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(4).set("displayXp", displayXp)); + } + } + + public short getLevel() { + return (short) getBaseline(6).get("level"); + } + + public void setLevel(short level) { + notifyObservers(getBaseline(6).set("level", level), true); + } + + public int getGrantedHealth() { + return (int) getBaseline(6).get("grantedHealth"); + } + + public void setGrantedHealth(int grantedHealth) { + notifyObservers(getBaseline(6).set("grantedHealth", grantedHealth), true); + } + + public String getCurrentAnimation() { + return (String) getBaseline(6).get("currentAnimation"); + } + + public void setCurrentAnimation(String currentAnimation) { + notifyObservers(new ObjControllerMessage(0x1B, new Animation(getObjectId(), currentAnimation)), true); + notifyObservers(getBaseline(6).set("currentAnimation", currentAnimation), true); + } + + public void doSkillAnimation(String skillAnimation) { + notifyObservers(new ObjControllerMessage(0x1B, new Animation(getObjectId(), skillAnimation)), true); + } + + public String getMoodAnimation() { + return (String) getBaseline(6).get("moodAnimation"); + } + + public void setMoodAnimation(String moodAnimation) { + notifyObservers(getBaseline(6).set("moodAnimation", moodAnimation), true); + } + + public long getWeaponId() { + return (long) getBaseline(6).get("weaponId"); + } + + public void setWeaponId(long weaponId) { + notifyObservers(getBaseline(6).set("weaponId", weaponId), true); + } + + public long getGroupId() { + return (long) getBaseline(6).get("groupId"); + } + + public void setGroupId(long groupId) { + notifyObservers(getBaseline(6).set("groupId", groupId), true); + } + + public GroupInviteInfo getGroupInviteInfo() { + return (GroupInviteInfo) getBaseline(6).get("groupInviteInfo"); + } + + public long getInviteSenderId() { + return getGroupInviteInfo().getSenderId(); + } + + public void setInviteSenderId(long inviteSenderId) { + getGroupInviteInfo().setSender(inviteSenderId, getInviteSenderName()); + } + + public String getInviteSenderName() { + return getGroupInviteInfo().getSenderName(); + } + + public void setInviteSenderName(String inviteSenderName) { + getGroupInviteInfo().setSender(getInviteSenderId(), inviteSenderName); + } + + public long getInviteCounter() { + return 0; + } + + public void setInviteCounter(long inviteCounter) { + + } + + public void updateGroupInviteInfo() { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(getBaseline(6).set("groupInviteInfo", getGroupInviteInfo())); + } + } + + public int getGuildId() { + return (int) getBaseline(6).get("guildId"); + } + + public void setGuildId(int guildId) { + notifyObservers(getBaseline(6).set("guildId", guildId), true); + } + + public long getLookAtTarget() { + return (long) getBaseline(6).get("lookAtTarget"); + } + + public void setLookAtTarget(long lookAtTarget) { + notifyObservers(getBaseline(6).set("lookAtTarget", lookAtTarget), true); + } + + public long getIntendedTarget() { + return (long) getBaseline(6).get("intendedTarget"); + } + + public void setIntendedTarget(long intendedTarget) { + notifyObservers(getBaseline(6).set("intendedTarget", intendedTarget), true); + } + + public SWGObject getUseTarget() { + synchronized(objectMutex) { + return useTarget; + } + } + + public void setUseTarget(SWGObject useTarget) { + synchronized(objectMutex) { + this.useTarget = useTarget; + } + } + + public byte getMoodId() { + return (byte) getBaseline(6).get("moodId"); + } + + public void setMoodId(byte moodId) { + notifyObservers(getBaseline(6).set("moodId", moodId), true); + } + + public int getPerformanceCounter() { + return (int) getBaseline(6).get("performanceCounter"); + } + + public void setPerformanceCounter(int performanceCounter) { + notifyObservers(getBaseline(6).set("performanceCounter", performanceCounter), true); + } + + public int getPerformanceId() { + return (int) getBaseline(6).get("performanceId"); + } + + public void setPerformanceId(int performanceId) { + notifyObservers(getBaseline(6).set("performanceId", performanceId), true); + } + + public boolean getGroupDance() { + return ((getGroupId() == 0) ? false : true); + } + + @SuppressWarnings("unchecked") + public SWGList getAttribs() { + return (SWGList) getBaseline(6).get("attribs"); + } + + public void resetAttribs() { + // TODO: Fix this, if it's really needed + } + public int getHealth() { synchronized(objectMutex) { - return health; + return getAttribs().get(0); } } - + public void setHealth(int health) { + if (health > getMaxHealth()) { + health = getMaxHealth(); + } - synchronized(objectMutex) { - if(getPosture() == 13) { - if(health > maxHealth) - health = maxHealth; - stopIncapTask(); - setIncapTask(null); - this.health = health; - notifyObservers(messageBuilder.buildUpdateHAMListDelta(), true); - setPosture((byte) 0); - setTurnRadius(1); - setSpeedMultiplierBase(1); - return; + if (getPosture() == 13) { + synchronized(objectMutex) { + stopIncapTask(); + setIncapTask(null); + getAttribs().set(0, health); } - } - - IoBuffer delta; - synchronized(objectMutex) { - if (this.health == health) return; - if(health > maxHealth) - { - setHealth(maxHealth); - return; - } - setHamListCounter(getHamListCounter() + 1); - delta = messageBuilder.buildHealthDelta(health); - this.health = health; + setPosture((byte) 0); + setTurnRadius(1); + setSpeedMultiplierBase(1); + } else { + synchronized(objectMutex) { + getAttribs().set(0, health); + } } - notifyObservers(delta, true); - } - + public int getAction() { synchronized(objectMutex) { - return action; + return getAttribs().get(2); } } - + public void setAction(int action) { + if (action > getMaxAction()) { + action = getMaxAction(); + } - IoBuffer delta; synchronized(objectMutex) { - if (this.action == action) return; - if(action > maxAction) - { - setAction(maxAction); - return; - } - setHamListCounter(getHamListCounter() + 1); - delta = messageBuilder.buildActionDelta(action); - this.action = action; - } - notifyObservers(delta, true); - - } - - public int getHamListCounter() { - synchronized(objectMutex) { - return HAMListCounter; + getAttribs().set(2, action); } } - - public void setHamListCounter(int hamListCounter) { - synchronized(objectMutex) { - this.HAMListCounter = hamListCounter; - } + + @SuppressWarnings("unchecked") + public SWGList getMaxAttribs() { + return (SWGList) getBaseline(6).get("maxAttribs"); } - + public int getMaxHealth() { synchronized(objectMutex) { - return maxHealth; + return getMaxAttribs().get(0); } } - + public void setMaxHealth(int maxHealth) { + if (maxHealth < getHealth()) { + setHealth(maxHealth); + } + synchronized(objectMutex) { - if(this.maxHealth == maxHealth) return; - - this.maxHealth = maxHealth; - setMaxHAMListCounter(getMaxHAMListCounter() + 1); - if(maxHealth < getHealth()) - setHealth(maxHealth); - notifyObservers(messageBuilder.buildMaxHealthDelta(maxHealth), true); + getMaxAttribs().set(0, maxHealth); } } - + public int getMaxAction() { synchronized(objectMutex) { - return maxAction; + return getMaxAttribs().get(2); } } - + public void setMaxAction(int maxAction) { + if (maxAction < getAction()) { + setAction(maxAction); + } + synchronized(objectMutex) { - if(this.maxAction == maxAction) return; - - this.maxAction = maxAction; - setMaxHAMListCounter(getMaxHAMListCounter() + 1); - if(maxAction < getAction()) - setAction(maxAction); - notifyObservers(messageBuilder.buildMaxActionDelta(maxAction), true); + getMaxAttribs().set(2, maxAction); } } - - public int getMaxHAMListCounter() { - synchronized(objectMutex) { - return maxHAMListCounter; + + @SuppressWarnings("unchecked") + public SWGList getEquipmentList() { + return (SWGList) getBaseline(6).get("equipmentList"); + } + + public void addObjectToEquipList(SWGObject object) { + if (object instanceof TangibleObject) { + getEquipmentList().add(new Equipment(object)); } } - - public void setMaxHAMListCounter(int maxHAMListCounter) { - synchronized(objectMutex) { - this.maxHAMListCounter = maxHAMListCounter; + + public void removeObjectFromEquipList(SWGObject object) { + if (object instanceof TangibleObject) { + for (Equipment equipment : getEquipmentList()) { + if (equipment.getObjectId() == object.getObjectId()) { + getEquipmentList().remove(equipment); + } + } } } + public String getCostume() { + return (String) getBaseline(6).get("costume"); + } + + public void setCostume(String costume) { + notifyObservers(getBaseline(6).set("costume", costume), true); + } + + public boolean isVisible() { + return (boolean) getBaseline(6).get("visible"); + } + + public void setVisible(boolean visible) { + notifyObservers(getBaseline(6).set("visible", visible), true); + } + + public boolean isCloaked() { + return !isVisible(); + } + + public void setCloaked(boolean cloaked) { + setVisible(!cloaked); + } + + public SWGMap getBuffList() { + return ((BuffList) getBaseline(6).get("buffList")).getList(); + } + + public Buff getBuffByName(String buffName) { + for (Entry entry : getBuffList().entrySet()) { + if (entry.getKey().equals(CRC.StringtoCRC(buffName))) { + return entry.getValue(); + } + } + + return null; + } + public void addBuff(Buff buff) { synchronized(objectMutex) { - buffList.get().add(buff); - setBuffListCounter(getBuffListCounter() + 1); - + PlayerObject player = (PlayerObject) this.getSlottedObject("ghost"); + buff.setTotalPlayTime((int) (player.getTotalPlayTime() + (System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000)); + } + + getBuffList().put(CRC.StringtoCRC(buff.getBuffName()), buff); + + synchronized(objectMutex) { + buff.setStartTime(); } - buff.setStartTime(); - notifyObservers(messageBuilder.buildAddBuffDelta(buff), true); } public void removeBuff(Buff buff) { - synchronized(objectMutex) { - buffList.get().remove(buff); - setBuffListCounter(getBuffListCounter() + 1); - } - notifyObservers(messageBuilder.buildRemoveBuffDelta(buff), true); + getBuffList().remove(CRC.StringtoCRC(buff.getBuffName())); } public void updateBuff(Buff buff) { buff.updateRemovalTask(); - synchronized(objectMutex) { - setBuffListCounter(getBuffListCounter() + 1); - notifyObservers(messageBuilder.buildUpdateBuffDelta(buff), true); - } + getBuffList().put(CRC.StringtoCRC(buff.getBuffName()), buff); } - + public void updateAllBuffs() { synchronized(objectMutex) { - for(Buff buff : buffList.get()) { + for (Buff buff : getBuffList().values()) { updateBuff(buff); } } } - + public boolean hasBuff(String buffName) { return getBuffByName(buffName) != null; } - public int getBuffListCounter() { - synchronized(objectMutex) { - return buffListUpdateCounter; - } + public void setPerforming(boolean performing) { + notifyObservers(getBaseline(6).set("performing", performing), true); } - public void setBuffListCounter(int buffListCounter) { - synchronized(objectMutex) { - this.buffListUpdateCounter = buffListCounter; - } + public boolean isPerforming() { + return (boolean) getBaseline(6).get("performing"); } - public Buff getBuffByName(String buffName) { + public String getPerformanceType() { + return (((boolean) otherVariables.get("performanceType")) ? "dance" : "music"); + } + + public void setPerformanceType(String performanceType) { + otherVariables.set("performanceType", ((performanceType.equals("dance")) ? true : false)); + } + + public void setPerformanceType(boolean performanceType) { + otherVariables.set("performanceType", performanceType); + } + + public ScheduledFuture getEntertainerExperience() { + return entertainerExperience; + } + + public void setEntertainerExperience(ScheduledFuture entertainerExperience) { + this.entertainerExperience = entertainerExperience; + } + + public ScheduledFuture getInspirationTick() { + return inspirationTick; + } + + public void setInspirationTick(ScheduledFuture inspirationTick) { + this.inspirationTick = inspirationTick; + } + + public void addAudience(CreatureObject audienceMember) { synchronized(objectMutex) { - for(Buff buff : buffList.get()) { - if(buff.getBuffName().equals(buffName)) - return buff; + if (performanceAudience == null) { + performanceAudience = new ArrayList(); } + + performanceAudience.add(audienceMember); } - return null; } - public Buff getBuffByCRC(int crc) { + public void removeAudience(CreatureObject audienceMember) { synchronized(objectMutex) { - for (Buff buff : buffList.get()) { - if (buff.getBuffCRC() == crc) { - return buff; + if (performanceAudience == null) { + return; + } + + performanceAudience.remove(audienceMember); + } + } + + public CreatureObject getPerformanceWatchee() { + synchronized(objectMutex) { + return performanceWatchee; + } + } + + public void setPerformanceWatchee(CreatureObject performanceWatchee) { + synchronized(objectMutex) { + this.performanceWatchee = performanceWatchee; + } + + setListenToId(performanceWatchee.getObjectID()); + } + + public CreatureObject getPerformanceListenee() { + synchronized(objectMutex) { + return performanceListenee; + } + } + + public void setPerformanceListenee(CreatureObject performanceListenee) { + synchronized(objectMutex) { + this.performanceListenee = performanceListenee; + } + + setListenToId(performanceListenee.getObjectID()); + } + + public int getFlourishCount() { + synchronized(objectMutex) { + return this.flourishCount; + } + } + + public void setFlourishCount(int flourishCount) { + synchronized(objectMutex) { + this.flourishCount = flourishCount; + } + } + + public void incFlourishCount() { + synchronized(objectMutex) { + this.flourishCount++; + } + } + + public byte getDifficulty() { + return (byte) getBaseline(6).get("difficulty"); + } + + public void setDifficulty(byte difficulty) { + notifyObservers(getBaseline(6).set("difficulty", difficulty), true); + } + + public int getHologramColor() { + return (int) getBaseline(6).get("hologramColor"); + } + + public void setHologramColor(int hologramColor) { + getBaseline(6).set("hologramColor", hologramColor); + } + + public boolean isHologram() { + return !(getHologramColor() == -1); + } + + public void setHologram(boolean hologram) { + setHologramColor((hologram) ? 0 : -1); + } + + public boolean visibleOnRadar() { + return (boolean) getBaseline(6).get("visibleOnRadar"); + } + + public void setVisibleOnRadar(boolean visibleOnRadar) { + notifyObservers(getBaseline(6).set("visibleOnRadar", visibleOnRadar), true); + } + + @SuppressWarnings("unchecked") + public SWGList getAppearanceEquipmentList() { + return (SWGList) getBaseline(6).get("appearanceEquipmentList"); + } + + public void addObjectToAppearanceEquipList(SWGObject object) { + if (object instanceof TangibleObject) { + getAppearanceEquipmentList().add(new Equipment(object)); + } + } + + public void removeObjectFromAppearanceEquipList(SWGObject object) { + if (object instanceof TangibleObject) { + for (Equipment equipment : getAppearanceEquipmentList()) { + if (equipment.getObjectId() == object.getObjectId()) { + getAppearanceEquipmentList().remove(equipment); } } } - return null; } - public void updateGroupInviteInfo() { - - if(getClient() == null || getClient().getSession() == null) - return; - - getClient().getSession().write(messageBuilder.buildGroupInviteDelta(getInviteSenderId(), getInviteCounter(), getInviteSenderName())); - + public List getDuelList() { + return duelList; } - public void resetHAMList() { - synchronized(objectMutex) { - setHamListCounter(getHamListCounter() + 1); - notifyObservers(messageBuilder.buildResetHAMListDelta(), true); + public boolean isInDuelList(long objectId) { + if (duelList.contains(objectId)) { + return true; } + + return false; } - public void updateHAMList() { - synchronized(objectMutex) { - setHamListCounter(getHamListCounter() + 1); - notifyObservers(messageBuilder.buildUpdateHAMListDelta(), true); - } + public boolean isInDuelList(SWGObject object) { + return isInDuelList(object.getObjectId()); } - public SWGList getDotList() { - return dotList; - } - - public void setDotList(SWGList dotList) { - this.dotList = dotList; - } - - public void addDot(DamageOverTime dot) { - dotList.get().add(dot); - } - - public void removeDot(DamageOverTime dot) { - dotList.get().remove(dot); + @SuppressWarnings("unchecked") + public List getDotList() { + return ((List) otherVariables.get("dotList")); } public DamageOverTime getDotByBuff(Buff buff) { + List dots = new ArrayList(getDotList()); - List dots = new ArrayList(dotList.get()); - - for(DamageOverTime dot : dots) { - if(dot.getBuff() == buff) + for (DamageOverTime dot : dots) { + if (dot.getBuff() == buff) { return dot; + } } return null; - } public DamageOverTime getDotByName(String dotName) { + List dots = new ArrayList(getDotList()); - List dots = new ArrayList(dotList.get()); - - for(DamageOverTime dot : dots) { - if(dot.getCommandName().equalsIgnoreCase(dotName)) + for (DamageOverTime dot : dots) { + if (dot.getCommandName().equalsIgnoreCase(dotName)) { return dot; + } } return null; - } - - + + public void setDotList(List dotList) { + otherVariables.set("dotList", dotList); + } + + public void addDot(DamageOverTime dot) { + getDotList().add(dot); + } + + public void removeDot(DamageOverTime dot) { + getDotList().remove(dot); + } + public ScheduledFuture getIncapTask() { return incapTask; } - + public void setIncapTask(ScheduledFuture incapTask) { this.incapTask = incapTask; } - + public void stopIncapTask() { - if(incapTask != null) + if (incapTask != null) { incapTask.cancel(true); - } - - public void playMusic(String sndFile) { - playMusic(sndFile, 0, 1, false); - } - - public void playMusic(String sndFile, long targetId) { - playMusic(sndFile, targetId, 1, false); - } - - public void playMusic(String sndFile, int repetitions) { - playMusic(sndFile, 0, repetitions, false); - } - - public void playMusic(String sndFile, long targetId, int repetitions) { - playMusic(sndFile, targetId, repetitions, false); - } - - public void playMusic(String sndFile, long targetId, int repetitions, boolean flag) { - getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false).serialize()); - } - - public void playMusicSelf(String sndFile, long targetId, int repetitions, boolean flag) { - getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false).serialize()); - } - - public boolean getGroupDance() { - synchronized(objectMutex) { - return groupDance; - } - } - - public void setGroupDance(boolean groupDance) { - synchronized(objectMutex) { - this.groupDance = groupDance; - } - } - - public boolean toggleGroupDance() { - synchronized(objectMutex) { - groupDance = !groupDance; - return groupDance; } } @@ -1519,229 +1238,52 @@ public class CreatureObject extends TangibleObject implements Serializable { public void removeSpectator(CreatureObject audienceMember) { synchronized(objectMutex) { - if (performanceAudience == null) { return; } - if (audienceMember.getInspirationTick() != null) - audienceMember.getInspirationTick().cancel(true); + if (performanceAudience == null) { + return; + } - if(performanceAudience.contains(audienceMember)) + if (audienceMember.getInspirationTick() != null) { + audienceMember.getInspirationTick().cancel(true); + } + + if (performanceAudience.contains(audienceMember)) { performanceAudience.remove(audienceMember); + } } } - - public CreatureObject getPerformanceWatchee() { - synchronized(objectMutex) { - return performanceWatchee; - } - } - - public void setPerformanceWatchee(CreatureObject performanceWatchee) { - synchronized(objectMutex) { - this.performanceWatchee = performanceWatchee; - } - - //if(this.performanceListenee == null) - //getClient().getSession().write(messageBuilder.buildListenToId(0)); - } - - public CreatureObject getPerformanceListenee() { - synchronized(objectMutex) { - return performanceListenee; - } - } - - public void setPerformanceListenee(CreatureObject performanceListenee) { - synchronized(objectMutex) { - this.performanceListenee = performanceListenee; - } - if(getClient() != null) - getClient().getSession().write(messageBuilder.buildListenToId(performanceListenee.getObjectId())); - } - - public byte getDifficulty() { - synchronized(objectMutex) { - return difficulty; - } - } - - public void setDifficulty(byte difficulty) { - synchronized(objectMutex) { - this.difficulty = difficulty; - } - - notifyObservers(messageBuilder.buildDifficultyDelta(difficulty), true); - } - - public void setPerformanceType(boolean isDance) { - synchronized(objectMutex) { - this.performanceType = isDance; - } - } - - public boolean getPerformanceType() { - synchronized(objectMutex) { - return this.performanceType; - } - } - - public void setFlourishCount(int flourishCount) { - synchronized(objectMutex) { - this.flourishCount = flourishCount; - } - } - - public int getFlourishCount() { - synchronized(objectMutex) { - return this.flourishCount; - } - } - - public void incFlourishCount() { - synchronized(objectMutex) { - this.flourishCount++; - } - } - - public int getEquipmentListUpdateCounter() { - synchronized(objectMutex) { - return equipmentListUpdateCounter; - } - } - - public void setEquipmentListUpdateCounter(int equipmentListUpdateCounter) { - synchronized(objectMutex) { - this.equipmentListUpdateCounter = equipmentListUpdateCounter; - } - } - - public int getAppearanceEquipmentListUpdateCounter() { - synchronized(objectMutex) { - return appearanceEquipmentListUpdateCounter; - } - } - - public void setAppearanceEquipmentListUpdateCounter(int appearanceEquipmentListUpdateCounter) { - synchronized(objectMutex) { - this.appearanceEquipmentListUpdateCounter = appearanceEquipmentListUpdateCounter; - } - } - public int getXpBarValue() { - synchronized(objectMutex) { - return xpBarValue; - } - } - - public void setXpBarValue(int xpBarValue) { - synchronized(objectMutex) { - this.xpBarValue = xpBarValue; - } - getClient().getSession().write(messageBuilder.buildXPBarDelta(xpBarValue)); - } public ScheduledFuture getSpectatorTask() { synchronized(objectMutex) { return spectatorTask; } } - + public void setSpectatorTask(ScheduledFuture spectatorTask) { synchronized(objectMutex) { this.spectatorTask = spectatorTask; } } - + public boolean isPerformingEffect() { synchronized(objectMutex) { return performingEffect; } } - + public void setPerformingEffect(boolean hasEffect) { synchronized(objectMutex) { this.performingEffect = hasEffect; } } - public void setHologram(boolean isHologram) { - synchronized(objectMutex) { - this.hologram = isHologram; - } + public int getCoverCharge() { + return (int) otherVariables.get("coverCharge"); } - public boolean isHologram() { - synchronized(objectMutex) { - return hologram; - } - } - - public int getCoverCharge() { - synchronized(objectMutex) { - return coverCharge; - } - } - public void setCoverCharge(int coverCharge) { - synchronized (objectMutex) { - this.coverCharge = coverCharge; - } + otherVariables.set("coverCharge", coverCharge); } - - public boolean isPerformingFlourish() { - synchronized(objectMutex){ - return performingFlourish; - } - } - - public void setPerformingFlourish(boolean performingFlourish) { - synchronized(objectMutex) { - this.performingFlourish = performingFlourish; - } - } - - public boolean isInStealth() { - synchronized(objectMutex) { - return inStealth; - } - } - - public void setInStealth(boolean inStealth) { - synchronized(objectMutex) { - this.inStealth = inStealth; - } - - if (getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(messageBuilder.buildStealthFlagDelta(inStealth)); - } - notifyObservers(messageBuilder.buildStealthFlagDelta(inStealth), false); - - } - - public boolean isRadarVisible() { - synchronized(objectMutex) { - return radarVisible; - } - } - - public void setRadarVisible(boolean radarVisible) { - synchronized(objectMutex) { - this.radarVisible = radarVisible; - } - notifyObservers(messageBuilder.buildRadarVisibleFlagDelta(radarVisible), false); - } - - public boolean isStationary() { - synchronized(objectMutex) { - return stationary; - } - } - - public void setStationary(boolean stationary) { - synchronized(objectMutex) { - this.stationary = stationary; - } - - notifyObservers(messageBuilder.buildStartPerformance(stationary), true); - } - + public TangibleObject getConversingNpc() { synchronized(objectMutex) { return conversingNpc; @@ -1754,6 +1296,18 @@ public class CreatureObject extends TangibleObject implements Serializable { } } + public long getTefTime() { + synchronized(objectMutex) { + return (((tefTime - System.currentTimeMillis()) > 0) ? (tefTime - System.currentTimeMillis()) : 0); + } + } + + public void setTefTime(long tefTime) { + synchronized(objectMutex) { + this.tefTime = tefTime + System.currentTimeMillis(); + } + } + public void addCooldown(String cooldownGroup, float cooldownTime) { if (cooldowns.containsKey(cooldownGroup)) { cooldowns.remove(cooldownGroup); @@ -1798,89 +1352,210 @@ public class CreatureObject extends TangibleObject implements Serializable { return 0L; } - public PlayerObject getPlayerObject() - { - return (PlayerObject) this.getSlottedObject("ghost"); - } - - //public float getCooldown(String cooldownGroup) { - //return ((float) getCooldown(cooldownGroup) / (float) 1000); - //} - - public long getTefTime() { - synchronized(objectMutex) { - return (((tefTime - System.currentTimeMillis()) > 0) ? (tefTime - System.currentTimeMillis()) : 0); - } - } - - public void setTefTime(long tefTime) { - synchronized(objectMutex) { - this.tefTime = tefTime + System.currentTimeMillis(); - } - } - public int getInventoryItemCount() { - if(getSlottedObject("inventory") == null) + if (getSlottedObject("inventory") == null) { return 0; + } + LongAdder adder = new LongAdder(); getSlottedObject("inventory").viewChildren(this, true, true, (obj) -> adder.increment()); return adder.intValue(); } - public ObjectMessageBuilder getMessageBuilder() { - return messageBuilder; + public void sendSystemMessage(String message, byte displayType) { + sendSystemMessage(message, new OutOfBand(), displayType); } - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - switch (viewType) { - case 4: { - switch (updateType) { - case 3: { - buffer = messageBuilder.createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer, buffer.array().length + 4); - - if (getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(buffer); - } - - break; - } - case 14: { - buffer = messageBuilder.createDelta("CREO", (byte) 4, (short) 1, (byte) 14, buffer, buffer.array().length + 4); - - if (getClient() != null && getClient().getSession() != null) { - getClient().getSession().write(buffer); - } - - break; - } - } + public void sendSystemMessage(OutOfBand outOfBand, byte displayType) { + sendSystemMessage("", outOfBand, displayType); + } + + public void sendSystemMessage(String message, OutOfBand outOfBand, byte displayType) { + if (getClient() != null && getClient().getSession() != null) { + getClient().getSession().write((new ChatSystemMessage(message, outOfBand, displayType)).serialize()); + } + } + + public void playMusic(String sndFile) { + playMusic(sndFile, 0, 1, false); + } + + public void playMusic(String sndFile, long targetId) { + playMusic(sndFile, targetId, 1, false); + } + + public void playMusic(String sndFile, int repetitions) { + playMusic(sndFile, 0, repetitions, false); + } + + public void playMusic(String sndFile, long targetId, int repetitions) { + playMusic(sndFile, targetId, repetitions, false); + } + + public void playMusic(String sndFile, long targetId, int repetitions, boolean flag) { + getClient().getSession().write(new PlayMusicMessage(sndFile, targetId, 1, false)); + } + + public void notifyClients(IoBuffer buffer, boolean notifySelf) { + notifyObservers(buffer, notifySelf); + } + + public CreatureMessageBuilder getMessageBuilder() { + synchronized(objectMutex) { + if (messageBuilder == null) { + messageBuilder = new CreatureMessageBuilder(this); } - case 1: - case 3: - case 6: - case 8: - case 9: - default: { - return; + + return messageBuilder; + } + } + + public void sendBaselines(Client destination) { + if (destination != null && destination.getSession() != null) { + destination.getSession().write(getBaseline(3).getBaseline()); + destination.getSession().write(getBaseline(6).getBaseline()); + if (destination == getClient()) { + destination.getSession().write(getBaseline(1).getBaseline()); + destination.getSession().write(getBaseline(4).getBaseline()); + destination.getSession().write(getBaseline(8).getBaseline()); + destination.getSession().write(getBaseline(9).getBaseline()); + } + + if (destination.getParent() != this) { + UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID()); + upvpm.setFaction(CRC.StringtoCRC(getFaction())); + upvpm.setStatus(NGECore.getInstance().factionService.calculatePvpStatus((CreatureObject) destination.getParent(), this)); + destination.getSession().write(upvpm.serialize()); + UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); + destination.getSession().write(upm.serialize()); } } } - public String getFirstName() - { - return getCustomName().split(" ")[0]; + @Deprecated public CreatureObject getCalledPet() { return ((getPlayerObject() == null) ? null : (CreatureObject) NGECore.getInstance().objectService.getObject(getPlayerObject().getPet())); } + + @Deprecated public void setCalledPet(CreatureObject calledPet) { } + + @Deprecated public void playMusicSelf(String sndFile, long targetId, int repetitions, boolean flag) { playMusic(sndFile, targetId, repetitions, flag); } + + @Deprecated public void setXpBarValue(int xpBarValue) { setDisplayXp(xpBarValue); } + + @Deprecated public int getXpBarValue() { return getDisplayXp(); } + + @Deprecated public boolean isInStealth() { return isCloaked(); } + + @Deprecated public void setInStealth(boolean inStealth) { setCloaked(inStealth); } + + @Deprecated public boolean isStationary() { return isPerforming(); } + + @Deprecated public void setStationary(boolean stationary) { setPerforming(stationary); } + + @Deprecated public boolean isRadarVisible() { return visibleOnRadar(); } + + @Deprecated public void setRadarVisible(boolean radarVisible) { setVisibleOnRadar(radarVisible); } + + @Deprecated public void resetHAMList() { resetAttribs(); } + + @Deprecated public void updateHAMList() { updateAttribs(); } + + @Deprecated public long getTargetId() { return getIntendedTarget(); } + + @Deprecated public void setTargetId(long targetId) { setIntendedTarget(targetId); } + + @Deprecated public void setPerformanceId(int performanceId, boolean isDance) { setPerformanceId(isDance ? 0 : performanceId); } + + @Deprecated public boolean getAcceptBandflourishes() { return ((getGroupId() == 0) ? false : true); } + + @Deprecated public void setAcceptBandflourishes(boolean acceptBandflourishes) { } + + @Deprecated public void setGroupDance(boolean groupDance) { } + + @Deprecated public boolean toggleGroupDance() { return ((getGroupId() == 0) ? false : true); } + + @Deprecated public void updateAttribs() { } + + @Deprecated + public void startPerformance() { + if (!isPerforming()) { + setPerforming(true); + } } - public String getLastName() - { - return getCustomName().split(" ")[1]; + @Deprecated // FIXME Shouldn't be needed + public boolean isPerformingFlourish() { + synchronized(objectMutex){ + return performingFlourish; + } } + + @Deprecated // FIXME Shouldn't be needed + public void setPerformingFlourish(boolean performingFlourish) { + synchronized(objectMutex) { + this.performingFlourish = performingFlourish; + } + } + + @Deprecated // FIXME Objects aren't meant for functionality + public void stopPerformance() { + setPerformanceId(0); + setPerformanceCounter(0); + setCurrentAnimation(""); + + synchronized(objectMutex) { + if (entertainerExperience != null) { + entertainerExperience.cancel(true); + entertainerExperience = null; + } + } + + sendSystemMessage("@performance:" + getPerformanceType() + "_stop_self", (byte)0); + stopAudience(); - public CreatureObject getCalledPet() { - return calledPet; + if (isPerforming()) { + setPerforming(false); + } } - - public void setCalledPet(CreatureObject calledPet) { - this.calledPet = calledPet; + + @Deprecated // FIXME Objects aren't meant for functionality + public void stopAudience() { + synchronized(objectMutex) { + if (performanceAudience == null) { + return; + } + + String performanceType = getPerformanceType(); + Iterator it = performanceAudience.iterator(); + + while (it.hasNext()) { + CreatureObject next = it.next(); + + if (((performanceType.equals("dance")) && (next.getPerformanceWatchee() != this)) + || ((performanceType.equals("music")) && (next.getPerformanceListenee() != this))) { + continue; + } + + if (performanceType.equals("dance")) { + next.setPerformanceWatchee(null); + } else if (performanceType.equals("musci")) { + next.setPerformanceListenee(null); + } + + //this may be a bit dodgy. + boolean isEntertained = next.getPerformanceListenee() != null && next.getPerformanceWatchee() != null; + + if (!isEntertained) { + next.setMoodAnimation(""); + } + + if (next == this) { + continue; + } + + next.sendSystemMessage("@performance:" + performanceType + "_stop_other", (byte)0); + } + + performanceAudience = new ArrayList(); + } } + } diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 70a24957..64eeeb31 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -40,7 +40,6 @@ import resources.objects.player.PlayerObject; import main.NGECore; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; -import engine.resources.common.CRC; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -142,7 +141,7 @@ public class BuffService implements INetworkDispatch { - for (final Buff otherBuff : target.getBuffList()) { + for (final Buff otherBuff : target.getBuffList().values()) { if (buff.getGroup1().equals(otherBuff.getGroup1())) if (buff.getPriority() >= otherBuff.getPriority()) { if (buff.getBuffName().equals(otherBuff.getBuffName())) @@ -241,7 +240,7 @@ public class BuffService implements INetworkDispatch { @SuppressWarnings("unused") public void removeBuffFromCreature(CreatureObject creature, Buff buff) { - if(!creature.getBuffList().contains(buff)) + if(!creature.getBuffList().containsValue(buff)) { return; } @@ -342,7 +341,7 @@ public class BuffService implements INetworkDispatch { // copy to array for thread safety - for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + for(final Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) { if (buff.getRemovalTask() != null) { continue; } @@ -374,7 +373,7 @@ public class BuffService implements INetworkDispatch { public boolean hasBuff(final CreatureObject creature, String buffName) { - for(final Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + for(final Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) { if (buff.getBuffName().contains(buffName)) { return true; } } return false; @@ -423,7 +422,6 @@ public class BuffService implements INetworkDispatch { String name = (String) visitor.getObject(i, 0); buff.setBuffName(name); - buff.setBuffCRC(CRC.StringtoCRC(name)); buff.setGroup1((String) visitor.getObject(i, 1)); buff.setGroup2((String) visitor.getObject(i, 2)); buff.setPriority((int) visitor.getObject(i, 4)); diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 645dcd8d..d6d5e365 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -688,12 +688,14 @@ public class EntertainmentService implements INetworkDispatch { } public void startPerformance(CreatureObject actor, int performanceId, int performanceCounter, String skillName, boolean isDance) { - actor.setPerformanceId(performanceId, isDance); + actor.setPerformanceId((isDance) ? 0 : performanceId); actor.setPerformanceCounter(performanceCounter); actor.setCurrentAnimation(skillName); actor.setPerformanceType(isDance); - actor.startPerformance(); + if (!actor.isPerforming()) { + actor.setPerforming(true); + } } public void startPerformanceExperience(final CreatureObject entertainer) { @@ -722,13 +724,13 @@ public class EntertainmentService implements INetworkDispatch { } - public void startSpectating(final CreatureObject spectator, final CreatureObject performer, boolean spectateType) { + public void startSpectating(final CreatureObject spectator, final CreatureObject performer, String spectateType) { // visual - if (spectator.getPerformanceWatchee() == performer && spectateType) + if (spectator.getPerformanceWatchee() == performer && spectateType.equals("dance")) spectator.getPerformanceWatchee().removeSpectator(spectator); // music - else if (spectator.getPerformanceListenee() == performer && !spectateType) + else if (spectator.getPerformanceListenee() == performer && spectateType.equals("musci")) spectator.getPerformanceListenee().removeSpectator(spectator); spectator.setPerformanceWatchee(performer); @@ -739,7 +741,7 @@ public class EntertainmentService implements INetworkDispatch { try { if (spectator.getWorldPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { - if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { + if(performer.getPerformanceType().equals("dance")) { spectator.setPerformanceWatchee(null); spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + " is out of range.", (byte) 0); @@ -770,7 +772,7 @@ public class EntertainmentService implements INetworkDispatch { handleInspirationTicks(spectator, performer); } - if(spectateType) + if(spectateType.equals("dance")) spectator.sendSystemMessage("You start watching " + performer.getCustomName() + ".", (byte) 0); else spectator.sendSystemMessage("You start listening to " + performer.getCustomName() + ".", (byte) 0); @@ -778,7 +780,7 @@ public class EntertainmentService implements INetworkDispatch { } public void performFlourish(final CreatureObject performer, int flourish) { - + // FIXME There wasn't a limit on flourishes; they just queued up. if (performer.getFlourishCount() > 0 || performer.isPerformingFlourish()) { performer.sendSystemMessage("@performance:flourish_wait_self", (byte) 0); return; @@ -814,7 +816,7 @@ public class EntertainmentService implements INetworkDispatch { if(pEffect == null) return false; - String performance = (performer.getPerformanceType()) ? "dance" : "music"; + String performance = performer.getPerformanceType(); if(performer.isPerformingEffect()) { performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0); diff --git a/src/services/GroupService.java b/src/services/GroupService.java index a311d9e5..4579cbf6 100644 --- a/src/services/GroupService.java +++ b/src/services/GroupService.java @@ -209,7 +209,7 @@ public class GroupService implements INetworkDispatch { // loop until we find a member other than ourself for(SWGObject otherMember : group.getMemberList()) { if(otherMember != member) { - for(Buff buff : ((CreatureObject) otherMember).getBuffList().get()) { + for(Buff buff : ((CreatureObject) otherMember).getBuffList().values()) { if(buff.isGroupBuff() && otherMember.getPlanet() == member.getPlanet() && otherMember.getWorldPosition().getDistance2D(member.getWorldPosition()) <= 80) { core.buffService.addBuffToCreature((CreatureObject) otherMember, buff.getBuffName(), member); } @@ -221,7 +221,7 @@ public class GroupService implements INetworkDispatch { } public void removeGroupBuffs(CreatureObject member) { - for(Buff buff : new ArrayList(member.getBuffList().get())) { + for(Buff buff : new ArrayList(member.getBuffList().values())) { if(buff.isGroupBuff() && buff.getGroupBufferId() != member.getObjectID()) { core.buffService.removeBuffFromCreature(member, buff); } diff --git a/src/services/LootService.java b/src/services/LootService.java index 3ac9ee45..479be838 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -242,7 +242,7 @@ public class LootService implements INetworkDispatch { if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){ lootedObject.playEffectObject("appearance/pt_rare_chest.prt", ""); - requester.playMusicSelf("sound/rare_loot_chest.snd", requester.getObjectID(),1,false); + requester.playMusic("sound/rare_loot_chest.snd", requester.getObjectID(),1,false); } } diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index e65d989c..36af8922 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -70,6 +70,7 @@ import resources.datatables.DisplayType; import resources.datatables.Options; import resources.datatables.PlayerFlags; import resources.datatables.Professions; +import resources.equipment.Equipment; import resources.guild.Guild; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; @@ -143,7 +144,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.add(scheduler.scheduleAtFixedRate(() -> { try { - if (creature.isInStealth() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { + if (creature.isCloaked() && !creature.getOption(Options.INVULNERABLE) && ((PlayerObject) creature.getSlottedObject("ghost")).getGodLevel() == 0) { List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); for (SWGObject object : objects) { @@ -161,7 +162,7 @@ public class PlayerService implements INetworkDispatch { camoflauge -= (64 - creature.getPosition().getDistance(observer.getPosition())); if (new Random(camoflauge).nextInt() == camoflauge) { - creature.setInStealth(false); + creature.setCloaked(false); } } } @@ -594,7 +595,7 @@ public class PlayerService implements INetworkDispatch { creature.setTurnRadius(1); if(pvpDeath) { - List buffs = new ArrayList(creature.getBuffList().get()); + List buffs = new ArrayList(creature.getBuffList().values()); buffs.stream().filter(Buff::isDecayOnPvPDeath).forEach(Buff::incDecayCounter); creature.updateAllBuffs(); } @@ -686,9 +687,9 @@ public class PlayerService implements INetworkDispatch { SWGObject inventory = creature.getSlottedObject("inventory"); try { - for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { + for (Equipment equipmentObject : new ArrayList(creature.getEquipmentList())) { - SWGObject equipment = core.objectService.getObject(equipmentId); + SWGObject equipment = core.objectService.getObject(equipmentObject.getObjectId()); if (equipment == null || equipment.getTemplate().startsWith("object/tangible/hair/")) { continue; @@ -714,7 +715,7 @@ public class PlayerService implements INetworkDispatch { //core.equipmentService.unequip(creature, equipment); //} - for (Buff buff : creature.getBuffList().get().toArray(new Buff[] { })) { + for (Buff buff : creature.getBuffList().values().toArray(new Buff[] { })) { if (buff.isRemoveOnRespec()) { core.buffService.removeBuffFromCreature(creature, buff); } @@ -749,7 +750,7 @@ public class PlayerService implements INetworkDispatch { String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); player.setXp(xpType, 0); - creature.setXpBarValue(0); + creature.setDisplayXp(0); player.setProfessionWheelPosition(""); @@ -804,7 +805,7 @@ public class PlayerService implements INetworkDispatch { String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); player.setXp(xpType, experience); - creature.setXpBarValue(experience); + creature.setDisplayXp(experience); // 2. Add the relevant health/action and expertise points. @@ -989,7 +990,7 @@ public class PlayerService implements INetworkDispatch { experience += ((experience * experienceBonus) / 100); // 1. Add the experience. - if (experience > 0 && !creature.isStationary()) { + if (experience > 0 && !creature.isPerforming()) { creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); } @@ -1000,7 +1001,7 @@ public class PlayerService implements INetworkDispatch { } player.setXp(xpType, experience); - creature.setXpBarValue(experience); + creature.setDisplayXp(experience); // 2. See if they need to level up. for (int i = 0; i < experienceTable.getRowCount(); i++) { @@ -1378,8 +1379,8 @@ public class PlayerService implements INetworkDispatch { actor.sendSystemMessage("@unity:decline", (byte) 0); proposer.sendSystemMessage("@unity:declined", (byte) 0); actor.setAttachment("proposer", null); - for(Long objId : proposer.getEquipmentList()) { - SWGObject obj = core.objectService.getObject(objId); + for(Equipment equipment : proposer.getEquipmentList()) { + SWGObject obj = core.objectService.getObject(equipment.getObjectId()); if(obj != null && obj.getAttachment("unity") != null) { obj.setAttachment("unity", null); break; diff --git a/src/services/SkillService.java b/src/services/SkillService.java index fcd3ec36..0d77a24a 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -407,7 +407,7 @@ public class SkillService implements INetworkDispatch { List skills = new ArrayList(creature.getSkills()); skills.stream().filter(s -> s.contains("expertise")).forEach(s -> removeSkill(creature, s)); - creature.getBuffList().stream().forEach(buff -> creature.removeBuff(buff)); + creature.getBuffList().values().stream().forEach(buff -> creature.removeBuff(buff)); } public void sendRespecWindow(CreatureObject creature) { diff --git a/src/services/SurveyService.java b/src/services/SurveyService.java index 539af893..5bf32584 100644 --- a/src/services/SurveyService.java +++ b/src/services/SurveyService.java @@ -37,7 +37,6 @@ import resources.harvest.SurveyTool; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import resources.objects.resource.GalacticResource; -import resources.objects.resource.ResourceConcentration; import resources.objects.resource.ResourceContainerObject; import resources.objects.resource.ResourceRoot; import resources.objects.tangible.TangibleObject; diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index f17a7741..f1572af3 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -135,8 +135,8 @@ public class AIActor { if (obj instanceof CreatureObject){ CreatureObject addedObject = (CreatureObject) obj; - if (addedObject.getCalledPet()!=null){ - CreatureObject calledPet = addedObject.getCalledPet(); + if (NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet())!=null){ + CreatureObject calledPet = (CreatureObject) NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet()); if (calledPet.getPosture() != 13 && calledPet.getPosture() != 14){ addDefender(calledPet); } @@ -167,8 +167,8 @@ public class AIActor { DevLog.debugout("Charon", "CHECK isFactionEnemy", "res " + NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)); if (obj instanceof CreatureObject && NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)){ CreatureObject addedObject = (CreatureObject) obj; - if (addedObject.getCalledPet()!=null){ - CreatureObject calledPet = addedObject.getCalledPet(); + if (NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet())!=null){ + CreatureObject calledPet = (CreatureObject) NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet()); if (calledPet.getPosture() != 13 && calledPet.getPosture() != 14){ addDefender(calledPet); } @@ -191,8 +191,8 @@ public class AIActor { DevLog.debugout("Charon", "CHECK isFactionEnemy", "res " + NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)); if (obj instanceof CreatureObject && NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (TangibleObject)obj)){ CreatureObject addedObject = (CreatureObject) obj; - if (addedObject.getCalledPet()!=null){ - CreatureObject calledPet = addedObject.getCalledPet(); + if (NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet())!=null){ + CreatureObject calledPet = (CreatureObject) NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet()); if (calledPet.getPosture() != 13 && calledPet.getPosture() != 14){ addDefender(calledPet); } diff --git a/src/services/ai/LairActor.java b/src/services/ai/LairActor.java index 1bb1e4b8..82d1b760 100644 --- a/src/services/ai/LairActor.java +++ b/src/services/ai/LairActor.java @@ -121,7 +121,7 @@ public class LairActor { break; case 3: if (bossTemplate!=null && ! bossSpawned){ - CreatureObject boss = (CreatureObject)NGECore.getInstance().spawnService.spawnCreature(bossTemplate, lairObject.getPlanet().getName(), 0L, lairObject.getPosition().x + 3, lairObject.getPosition().y, lairObject.getPosition().z, lairObject.getOrientation().w, lairObject.getOrientation().x, lairObject.getOrientation().y,lairObject.getOrientation().z,-1); + //CreatureObject boss = (CreatureObject)NGECore.getInstance().spawnService.spawnCreature(bossTemplate, lairObject.getPlanet().getName(), 0L, lairObject.getPosition().x + 3, lairObject.getPosition().y, lairObject.getPosition().z, lairObject.getOrientation().w, lairObject.getOrientation().x, lairObject.getOrientation().y,lairObject.getOrientation().z,-1); bossSpawned = true; } return; diff --git a/src/services/ai/states/AttackState.java b/src/services/ai/states/AttackState.java index 98dc5b7c..649cd655 100644 --- a/src/services/ai/states/AttackState.java +++ b/src/services/ai/states/AttackState.java @@ -145,7 +145,7 @@ public class AttackState extends AIState { actor.scheduleRecovery(); return StateResult.UNFINISHED; } - if(target.getPosture() == 13 || target.getPosture() == 14 || target.isInStealth()) { + if(target.getPosture() == 13 || target.getPosture() == 14 || target.isCloaked()) { actor.setFollowObject(actor.getHighestDamageDealer()); target = actor.getFollowObject(); diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 21eec82c..e729be15 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -323,8 +323,8 @@ public class CombatService implements INetworkDispatch { if (target instanceof CreatureObject){ CreatureObject targetCreature = (CreatureObject)target; - if (targetCreature.getCalledPet()!=null) { - AIActor petActor = (AIActor) targetCreature.getCalledPet().getAttachment("AI"); + if (core.objectService.getObject(targetCreature.getPlayerObject().getPet())!=null) { + AIActor petActor = (AIActor) core.objectService.getObject(targetCreature.getPlayerObject().getPet()).getAttachment("AI"); if (petActor!=null){ petActor.addDefender(attacker); DevLog.debugout("Charon", "Pet AI", "applyDamage addDefender"); @@ -550,11 +550,11 @@ public class CombatService implements INetworkDispatch { private boolean attemptCombat(CreatureObject attacker, TangibleObject target) { - if (attacker.isInStealth()) { - attacker.setInStealth(false); + if (attacker.isCloaked()) { + attacker.setCloaked(false); if (attacker.getPlayerObject() != null && attacker.getPlayerObject().getProfession().equals("spy_1a")) { - attacker.setRadarVisible(true); + attacker.setVisibleOnRadar(true); } } @@ -912,8 +912,8 @@ public class CombatService implements INetworkDispatch { if (target instanceof CreatureObject){ CreatureObject targetCreature = (CreatureObject)target; - if (targetCreature.getCalledPet()!=null) { - AIActor petActor = (AIActor) targetCreature.getCalledPet().getAttachment("AI"); + if (core.objectService.getObject(targetCreature.getPlayerObject().getPet())!=null) { + AIActor petActor = (AIActor) core.objectService.getObject(targetCreature.getPlayerObject().getPet()).getAttachment("AI"); if (petActor!=null){ petActor.addDefender(attacker); DevLog.debugout("Charon", "Pet AI", "applyDamage addDefender"); diff --git a/src/services/equipment/BonusSetTemplate.java b/src/services/equipment/BonusSetTemplate.java index f712c290..8efb04ff 100644 --- a/src/services/equipment/BonusSetTemplate.java +++ b/src/services/equipment/BonusSetTemplate.java @@ -29,6 +29,7 @@ import org.python.core.Py; import org.python.core.PyObject; import engine.resources.objects.SWGObject; +import resources.equipment.Equipment; import resources.objects.creature.CreatureObject; public class BonusSetTemplate @@ -55,9 +56,9 @@ public class BonusSetTemplate public int getWornTemplateCount(CreatureObject creature) { int wornItems = 0; - for (Long itemId : creature.getEquipmentList().get()) + for (Equipment equipment : creature.getEquipmentList().get()) { - SWGObject item = NGECore.getInstance().objectService.getObject(itemId); + SWGObject item = NGECore.getInstance().objectService.getObject(equipment.getObjectId()); if(item == null) continue; if(requiredWornItems.contains(item.getTemplate()) || requiredWornItems.contains(item.getStfName())) wornItems++; diff --git a/src/services/equipment/EquipmentService.java b/src/services/equipment/EquipmentService.java index f5220c53..96c908c9 100644 --- a/src/services/equipment/EquipmentService.java +++ b/src/services/equipment/EquipmentService.java @@ -39,6 +39,7 @@ import org.python.core.Py; import org.python.core.PyObject; import resources.datatables.FactionStatus; +import resources.equipment.Equipment; import resources.objects.creature.CreatureObject; import main.NGECore; import engine.resources.container.Traverser; @@ -319,9 +320,9 @@ public class EquipmentService implements INetworkDispatch { int wornArmourPieces = 0, forceProtection = 0; Map protection = new TreeMap(); - for(Long itemId : new ArrayList(creature.getEquipmentList())) + for(Equipment equipment : new ArrayList(creature.getEquipmentList())) { - SWGObject item = core.objectService.getObject(itemId); + SWGObject item = core.objectService.getObject(equipment.getObjectId()); if(item == null) continue; Map attributes = new TreeMap(item.getAttributes()); diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 3d897d43..1fcf904d 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -897,8 +897,8 @@ public class HousingService implements INetworkDispatch { // possibly sending the same delta multiple times if (((CreatureObject) owner).getLookAtTarget() != itemList.get(i).getObjectID()); ((CreatureObject)owner).setLookAtTarget(itemList.get(i).getObjectID()); - if (((CreatureObject) owner).getTargetId() != itemList.get(i).getObjectID()); - ((CreatureObject)owner).setTargetId(itemList.get(i).getObjectID()); + if (((CreatureObject) owner).getIntendedTarget() != itemList.get(i).getObjectID()); + ((CreatureObject)owner).setIntendedTarget(itemList.get(i).getObjectID()); if (((CreatureObject) owner).getIntendedTarget() != itemList.get(i).getObjectID()); ((CreatureObject)owner).setIntendedTarget(itemList.get(i).getObjectID()); } diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index 0223e132..d8a21f6c 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -438,7 +438,7 @@ public class MountService implements INetworkDispatch { return; } - if (rider.isInStealth()) { + if (rider.isCloaked()) { rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast); return; } diff --git a/src/services/pet/PetService.java b/src/services/pet/PetService.java index f2845bc4..ef7cffaa 100644 --- a/src/services/pet/PetService.java +++ b/src/services/pet/PetService.java @@ -135,7 +135,7 @@ public class PetService implements INetworkDispatch { } pet.setOwnerId(actor.getObjectID()); - actor.setCalledPet(pet); + actor.getPlayerObject().setPet(pet.getObjectID()); pcd.setAttachment("companion_RefId", pet.getObjectID()); @@ -450,7 +450,7 @@ public class PetService implements INetworkDispatch { return; } - if (rider.isInStealth()) { + if (rider.isCloaked()) { rider.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:no_mount_stealth"), DisplayType.Broadcast); return; } @@ -763,7 +763,7 @@ public class PetService implements INetworkDispatch { AIActor aiActor = (AIActor) mount.getAttachment("AI"); aiActor.destroyActor(); player.setPet(0L); - owner.setCalledPet(null); + owner.getPlayerObject().setPet(0); core.objectService.destroyObject((Long) pcd.getAttachment("companion_RefId")); pcd.setAttachment("companion_RefId", null); } @@ -796,7 +796,7 @@ public class PetService implements INetworkDispatch { AIActor aiActor = (AIActor) pet.getAttachment("AI"); aiActor.destroyActor(); - actor.setCalledPet(null); + actor.getPlayerObject().setPet(0); core.objectService.destroyObject(petId); pcd.setAttachment("companion_RefId",null); @@ -919,7 +919,7 @@ public class PetService implements INetworkDispatch { public void tame(CreatureObject actor, CreatureObject target) { DevLog.debugout("Charon", "Pet AI", "Tame called."); - if (actor.getCalledPet()!=null){ + if (core.objectService.getObject(actor.getPlayerObject().getPet())!=null){ actor.sendSystemMessage(OutOfBand.ProsePackage("@pet/pet_menu:too_many"), DisplayType.Broadcast); return; } @@ -989,11 +989,11 @@ public class PetService implements INetworkDispatch { datapad.add(pcd); if (target.getOption(Options.AGGRESSIVE)) - target.removeOption(Options.AGGRESSIVE); + target.setOptions(Options.AGGRESSIVE, false); target.setAttachment("tamed", 1); - actor.setCalledPet(target); + actor.getPlayerObject().setPet(target.getObjectID()); target.setFaction(actor.getFaction()); target.setFactionStatus(actor.getFactionStatus()); target.setOwnerId(actor.getObjectID()); From 231a4764418e4d263bde553ff3624d4db35420d4 Mon Sep 17 00:00:00 2001 From: Treeku Date: Sat, 16 Aug 2014 23:02:01 +0100 Subject: [PATCH 2/9] Fixed some merge issues with creature refactor. --- src/protocol/swg/LoginClusterStatus.java | 3 --- .../objectControllerObjects/ShowLootBox.java | 2 -- .../objects/creature/CreatureObject.java | 19 ++++++++++++++----- src/services/AdminService.java | 4 ++-- src/services/BuffService.java | 3 +++ src/services/ai/AIActor.java | 8 ++++---- src/services/ai/states/TurretAttackState.java | 2 +- src/services/combat/CombatService.java | 8 ++++---- src/services/command/CommandService.java | 4 +--- src/services/pet/PetService.java | 10 +++++----- 10 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/protocol/swg/LoginClusterStatus.java b/src/protocol/swg/LoginClusterStatus.java index 05e0a0c0..d844bfb1 100644 --- a/src/protocol/swg/LoginClusterStatus.java +++ b/src/protocol/swg/LoginClusterStatus.java @@ -22,9 +22,6 @@ package protocol.swg; import java.nio.ByteOrder; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.TimeZone; import main.NGECore; diff --git a/src/protocol/swg/objectControllerObjects/ShowLootBox.java b/src/protocol/swg/objectControllerObjects/ShowLootBox.java index dc9fde15..1b8b5b3f 100644 --- a/src/protocol/swg/objectControllerObjects/ShowLootBox.java +++ b/src/protocol/swg/objectControllerObjects/ShowLootBox.java @@ -23,11 +23,9 @@ package protocol.swg.objectControllerObjects; import java.nio.ByteOrder; import java.util.ArrayList; -import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; -import engine.resources.objects.SWGObject; import protocol.swg.ObjControllerMessage; public class ShowLootBox extends ObjControllerObject { diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index f20ba8cd..2667a141 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -1384,6 +1384,20 @@ public class CreatureObject extends TangibleObject implements IPersistent { return adder.intValue(); } + public CreatureObject getCalledPet() { + if (getPlayerObject() == null) { + return null; + } + + return (CreatureObject) NGECore.getInstance().objectService.getObject(getPlayerObject().getPet()); + } + + public void setCalledPet(CreatureObject calledPet) { + if (getPlayerObject() != null) { + getPlayerObject().setPet((calledPet == null) ? 0L : calledPet.getObjectID()); + } + } + public void sendSystemMessage(String message, byte displayType) { sendSystemMessage(message, new OutOfBand(), displayType); } @@ -1454,11 +1468,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { } } - // PetId can be got from PlayerObject. Also is a duplicate of getCompanion(). - @Deprecated public CreatureObject getCalledPet() { return ((getPlayerObject() == null) ? null : (CreatureObject) NGECore.getInstance().objectService.getObject(getPlayerObject().getPet())); } - - @Deprecated public void setCalledPet(CreatureObject calledPet) { } - @Deprecated public void playMusicSelf(String sndFile, long targetId, int repetitions, boolean flag) { playMusic(sndFile, targetId, repetitions, flag); } @Deprecated public void setXpBarValue(int xpBarValue) { setDisplayXp(xpBarValue); } diff --git a/src/services/AdminService.java b/src/services/AdminService.java index eef276f7..79462bb8 100644 --- a/src/services/AdminService.java +++ b/src/services/AdminService.java @@ -44,7 +44,7 @@ public class AdminService implements INetworkDispatch { PreparedStatement preparedStatement; try { - preparedStatement = NGECore.getInstance().getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); + preparedStatement = core.getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) accessLevel = resultSet.getString("accessLevel"); @@ -60,7 +60,7 @@ public class AdminService implements INetworkDispatch { PreparedStatement preparedStatement; try { - preparedStatement = NGECore.getInstance().getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); + preparedStatement = core.getDatabase1().preparedStatement("SELECT * FROM accounts WHERE id=" + id + ""); ResultSet resultSet = preparedStatement.executeQuery(); if(resultSet.next()) accountName = resultSet.getString("user"); diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 2cf98992..b03adf00 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -113,6 +113,7 @@ public class BuffService implements INetworkDispatch { } // Here the necessary checks must be placed to prevent buffs from the same buff group (e.g. Buff D) being stacked! + // ^ These checks are already performed in doAddBuff, unless they were removed. if(buff.isGroupBuff()) { addGroupBuff(buffer, buffName, buffer); @@ -134,6 +135,8 @@ public class BuffService implements INetworkDispatch { //TODO fix this -- !! this is wrong - I can buff from 5,5 in cantina someone sitting at 20,20 in the universe/planet !!! - accross the galaxy/planet //cause get position is relative to creature system of coordinates - when one's outside and other inside //if you must use getPosition() check for isInCell first for both or something like that + // ^The above bug should be fixed in command service. The checks below shouldn't really even be in this service. + if (target.getPosition().getDistance(buffer.getPosition()) > 20) { return null; } diff --git a/src/services/ai/AIActor.java b/src/services/ai/AIActor.java index 66ea37dc..9389bb17 100644 --- a/src/services/ai/AIActor.java +++ b/src/services/ai/AIActor.java @@ -162,8 +162,8 @@ public class AIActor { if (obj instanceof CreatureObject){ CreatureObject addedObject = (CreatureObject) obj; - if (NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet())!=null){ - CreatureObject calledPet = (CreatureObject) NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet()); + if (addedObject.getCalledPet()!=null){ + CreatureObject calledPet = addedObject.getCalledPet(); if (calledPet.getPosture() != 13 && calledPet.getPosture() != 14){ addDefender(calledPet); } @@ -210,8 +210,8 @@ public class AIActor { if(new Random().nextFloat() <= 0.5 || creature.isInCombat()) { if (obj instanceof CreatureObject && NGECore.getInstance().factionService.isFactionEnemy((TangibleObject)creature, (CreatureObject)obj)){ CreatureObject addedObject = (CreatureObject) obj; - if (NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet())!=null){ - CreatureObject calledPet = (CreatureObject) NGECore.getInstance().objectService.getObject(addedObject.getPlayerObject().getPet());; + if (addedObject.getCalledPet()!=null){ + CreatureObject calledPet = addedObject.getCalledPet(); if (NGECore.getInstance().aiService.distanceSquared2D(creature.getWorldPosition(), obj.getWorldPosition()) Date: Sun, 17 Aug 2014 00:23:06 +0200 Subject: [PATCH 3/9] Fixed KBT #165 and #185 Fixed --- scripts/mobiles/corellia/worrmp.py | 2 +- scripts/mobiles/dantooine/kunga_tribesman.py | 51 +++++++++++++++++++ .../dynamicgroups/kunga_central_group_1.py | 2 +- scripts/mobiles/naboo/chuba.py | 2 +- scripts/mobiles/tatooine/harmony_worrt.py | 2 +- scripts/mobiles/tatooine/mountain_worrt.py | 2 +- scripts/mobiles/tatooine/sewer_worrt.py | 2 +- scripts/mobiles/tatooine/worrt.py | 2 +- scripts/mobiles/tatooine/worrt_gutbuster.py | 2 +- 9 files changed, 59 insertions(+), 8 deletions(-) create mode 100644 scripts/mobiles/dantooine/kunga_tribesman.py diff --git a/scripts/mobiles/corellia/worrmp.py b/scripts/mobiles/corellia/worrmp.py index 91d545d0..3854f124 100644 --- a/scripts/mobiles/corellia/worrmp.py +++ b/scripts/mobiles/corellia/worrmp.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/dantooine/kunga_tribesman.py b/scripts/mobiles/dantooine/kunga_tribesman.py new file mode 100644 index 00000000..362d095f --- /dev/null +++ b/scripts/mobiles/dantooine/kunga_tribesman.py @@ -0,0 +1,51 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from resources.datatables import WeaponType +from resources.datatables import Difficulty +from resources.datatables import Options +from java.util import Vector + + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('kunga_tribesman') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(Difficulty.NORMAL) + + mobileTemplate.setMinSpawnDistance(3) + mobileTemplate.setMaxSpawnDistance(5) + mobileTemplate.setDeathblow(True) + mobileTemplate.setSocialGroup('kunga tribe') + mobileTemplate.setAssistRange(1) + + + templates = Vector() + templates.add('object/mobile/shared_dantari_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', WeaponType.POLEARMMELEE, 1.0, 6, 'kinetic') + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 65 + mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + lootPoolNames_2 = ['random_loot_primitives'] + lootPoolChances_2 = [100] + lootGroupChance_2 = 35 + mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + + core.spawnService.addMobileTemplate('kunga_tribesman', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dynamicgroups/kunga_central_group_1.py b/scripts/mobiles/dynamicgroups/kunga_central_group_1.py index 2c59e7c3..4668a6ab 100644 --- a/scripts/mobiles/dynamicgroups/kunga_central_group_1.py +++ b/scripts/mobiles/dynamicgroups/kunga_central_group_1.py @@ -17,7 +17,7 @@ def addDynamicGroup(core): mobileTemplates.add('kunga_scout') mobileTemplates.add('kunga_shaman') mobileTemplates.add('kunga_soothsayer') - mobileTemplates.add('kunga_tribe_member') + mobileTemplates.add('kunga_tribesman') mobileTemplates.add('kunga_warrior') dynamicGroup.setMobiles(mobileTemplates) dynamicGroup.setGroupMembersNumber(-3) diff --git a/scripts/mobiles/naboo/chuba.py b/scripts/mobiles/naboo/chuba.py index 8e7af591..3ae93acb 100644 --- a/scripts/mobiles/naboo/chuba.py +++ b/scripts/mobiles/naboo/chuba.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(128) templates = Vector() - templates.add('object/mobile/shared_chuba.iff') + templates.add('object/mobile/shared_chuba_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/harmony_worrt.py b/scripts/mobiles/tatooine/harmony_worrt.py index 35ae736d..bf2571c0 100644 --- a/scripts/mobiles/tatooine/harmony_worrt.py +++ b/scripts/mobiles/tatooine/harmony_worrt.py @@ -24,7 +24,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/mountain_worrt.py b/scripts/mobiles/tatooine/mountain_worrt.py index b42c8e35..e0af86f4 100644 --- a/scripts/mobiles/tatooine/mountain_worrt.py +++ b/scripts/mobiles/tatooine/mountain_worrt.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.AGGRESSIVE | Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/sewer_worrt.py b/scripts/mobiles/tatooine/sewer_worrt.py index c78c0649..88c22203 100644 --- a/scripts/mobiles/tatooine/sewer_worrt.py +++ b/scripts/mobiles/tatooine/sewer_worrt.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/worrt.py b/scripts/mobiles/tatooine/worrt.py index 773d6f74..fd2967fb 100644 --- a/scripts/mobiles/tatooine/worrt.py +++ b/scripts/mobiles/tatooine/worrt.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() diff --git a/scripts/mobiles/tatooine/worrt_gutbuster.py b/scripts/mobiles/tatooine/worrt_gutbuster.py index 624308d7..eb1585e4 100644 --- a/scripts/mobiles/tatooine/worrt_gutbuster.py +++ b/scripts/mobiles/tatooine/worrt_gutbuster.py @@ -30,7 +30,7 @@ def addTemplate(core): mobileTemplate.setOptionsBitmask(Options.ATTACKABLE) templates = Vector() - templates.add('object/mobile/shared_worrt.iff') + templates.add('object/mobile/shared_worrt_hue.iff') mobileTemplate.setTemplates(templates) weaponTemplates = Vector() From 22d7fdadbfe9678dfcf63e259c86e58f309018fb Mon Sep 17 00:00:00 2001 From: Bronco69 Date: Sun, 17 Aug 2014 00:24:22 +0200 Subject: [PATCH 4/9] Removed wrong mobile template file name --- .../mobiles/dantooine/kunga_tribe_member.py | 51 ------------------- 1 file changed, 51 deletions(-) delete mode 100644 scripts/mobiles/dantooine/kunga_tribe_member.py diff --git a/scripts/mobiles/dantooine/kunga_tribe_member.py b/scripts/mobiles/dantooine/kunga_tribe_member.py deleted file mode 100644 index 5628ec8d..00000000 --- a/scripts/mobiles/dantooine/kunga_tribe_member.py +++ /dev/null @@ -1,51 +0,0 @@ -import sys -from services.spawn import MobileTemplate -from services.spawn import WeaponTemplate -from resources.datatables import WeaponType -from resources.datatables import Difficulty -from resources.datatables import Options -from java.util import Vector - - -def addTemplate(core): - mobileTemplate = MobileTemplate() - - mobileTemplate.setCreatureName('kunga_tribe_member') - mobileTemplate.setLevel(71) - mobileTemplate.setDifficulty(Difficulty.NORMAL) - - mobileTemplate.setMinSpawnDistance(3) - mobileTemplate.setMaxSpawnDistance(5) - mobileTemplate.setDeathblow(True) - mobileTemplate.setSocialGroup('kunga tribe') - mobileTemplate.setAssistRange(1) - - - templates = Vector() - templates.add('object/mobile/shared_dantari_male.iff') - - mobileTemplate.setTemplates(templates) - - weaponTemplates = Vector() - weapontemplate = WeaponTemplate('object/weapon/melee/knife/shared_knife_janta.iff', WeaponType.ONEHANDEDMELEE, 1.0, 5, 'kinetic') - weaponTemplates.add(weapontemplate) - weapontemplate = WeaponTemplate('object/weapon/melee/polearm/shared_lance_staff_janta.iff', WeaponType.POLEARMMELEE, 1.0, 6, 'kinetic') - weaponTemplates.add(weapontemplate) - mobileTemplate.setWeaponTemplateVector(weaponTemplates) - - attacks = Vector() - mobileTemplate.setDefaultAttack('meleehit') - mobileTemplate.setAttacks(attacks) - - lootPoolNames_1 = ['Junk'] - lootPoolChances_1 = [100] - lootGroupChance_1 = 65 - mobileTemplate.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - - lootPoolNames_2 = ['random_loot_primitives'] - lootPoolChances_2 = [100] - lootGroupChance_2 = 35 - mobileTemplate.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) - - core.spawnService.addMobileTemplate('kunga_tribe_member', mobileTemplate) - \ No newline at end of file From 02e9ddd3a56d5be1e822a5deee2436941775734d Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 16 Aug 2014 22:37:32 -0400 Subject: [PATCH 5/9] Fixed attribute names --- src/resources/objects/creature/CreatureObject.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 2667a141..86c636f7 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -825,7 +825,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { @SuppressWarnings("unchecked") public SWGList getAttribs() { - return (SWGList) getBaseline(6).get("attribs"); + return (SWGList) getBaseline(6).get("attributes"); } public void resetAttribs() { @@ -878,7 +878,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { @SuppressWarnings("unchecked") public SWGList getMaxAttribs() { - return (SWGList) getBaseline(6).get("maxAttribs"); + return (SWGList) getBaseline(6).get("maxAttributes"); } public int getMaxHealth() { From b7280cd138cf1e4de70f96d2787b549730e9c9ac Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 16 Aug 2014 22:51:40 -0400 Subject: [PATCH 6/9] Removed console print spam --- src/protocol/swg/CreateClientPathMessage.java | 2 +- src/resources/objects/player/PlayerObject.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/protocol/swg/CreateClientPathMessage.java b/src/protocol/swg/CreateClientPathMessage.java index 930f9eb2..1919ba57 100644 --- a/src/protocol/swg/CreateClientPathMessage.java +++ b/src/protocol/swg/CreateClientPathMessage.java @@ -58,7 +58,7 @@ public class CreateClientPathMessage extends SWGMessage { } buffer.flip(); - StringUtilities.printBytes(buffer.array()); + //StringUtilities.printBytes(buffer.array()); return buffer; } diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 2714bbe6..f8d49268 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -1052,7 +1052,7 @@ public class PlayerObject extends IntangibleObject implements Serializable { default: if (getContainer() != null && getContainer().getClient() != null) { getContainer().getClient().getSession().write(getBaseline(viewType).createDelta(updateType, buffer.array())); - StringUtilities.printBytes(getBaseline(viewType).createDelta(updateType, buffer.array()).array()); + //StringUtilities.printBytes(getBaseline(viewType).createDelta(updateType, buffer.array()).array()); } } } From 40ea74e03d8afed5025deccebbd687b844d5c213 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 16 Aug 2014 23:11:21 -0400 Subject: [PATCH 7/9] Changed postZoneIn scheduleList to a Map and added null checks --- src/services/PlayerService.java | 50 +++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 63c8b1be..ef02bbe2 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -112,7 +112,7 @@ public class PlayerService implements INetworkDispatch { private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private float xpMultiplier; protected final Object objectMutex = new Object(); - private ConcurrentHashMap>> schedulers = new ConcurrentHashMap>>(); + private ConcurrentHashMap>> schedulers = new ConcurrentHashMap>>(); public PlayerService(final NGECore core) { this.core = core; @@ -125,20 +125,32 @@ public class PlayerService implements INetworkDispatch { if(schedulers.get(creature.getObjectID()) != null) return; - List> scheduleList = new ArrayList>(); + Map> scheduleList = new ConcurrentHashMap>(); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("serverTime", scheduler.scheduleAtFixedRate(() -> { try { + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("serverTime").cancel(true); + return; + } + ServerTimeMessage time = new ServerTimeMessage(core.getGalacticTime() / 1000); IoBuffer packet = time.serialize(); + creature.getClient().getSession().write(packet); } catch (Exception e) { e.printStackTrace(); } }, 45, 45, TimeUnit.SECONDS)); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("gcwUpdate", scheduler.scheduleAtFixedRate(() -> { try { + + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("gcwUpdate").cancel(true); + return; + } + PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); player.setTotalPlayTime((int) (player.getTotalPlayTime() + ((System.currentTimeMillis() - player.getLastPlayTimeUpdate()) / 1000))); player.setLastPlayTimeUpdate(System.currentTimeMillis()); @@ -190,8 +202,13 @@ public class PlayerService implements INetworkDispatch { } }, 30, 30, TimeUnit.SECONDS)); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("stealthCheck", scheduler.scheduleAtFixedRate(() -> { try { + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("stealthCheck").cancel(true); + return; + } + if (creature.isCloaked() && !creature.getOption(Options.INVULNERABLE) && core.adminService.getAccessLevelFromDB(creature.getClient().getAccountId()) == null) { List objects = core.simulationService.get(creature.getPlanet(), creature.getPosition().x, creature.getPosition().z, 64); @@ -223,8 +240,13 @@ public class PlayerService implements INetworkDispatch { } }, 15, 15, TimeUnit.SECONDS)); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("action", scheduler.scheduleAtFixedRate(() -> { try { + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("action").cancel(true); + return; + } + if(creature.getAction() < creature.getMaxAction() && creature.getPosture() != 14) { if(!creature.isInCombat()) creature.setAction(creature.getAction() + (15 + creature.getLevel() * 5)); @@ -236,8 +258,13 @@ public class PlayerService implements INetworkDispatch { } }, 0, 1000, TimeUnit.MILLISECONDS)); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("health", scheduler.scheduleAtFixedRate(() -> { try { + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("health").cancel(true); + return; + } + if(creature.getHealth() < creature.getMaxHealth() && !creature.isInCombat() && creature.getPosture() != 13 && creature.getPosture() != 14) creature.setHealth(creature.getHealth() + (36 + creature.getLevel() * 4)); } catch (Exception e) { @@ -245,8 +272,13 @@ public class PlayerService implements INetworkDispatch { } }, 0, 1000, TimeUnit.MILLISECONDS)); - scheduleList.add(scheduler.scheduleAtFixedRate(() -> { + scheduleList.put("awareness", scheduler.scheduleAtFixedRate(() -> { try { + if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { + scheduleList.get("awareness").cancel(true); + return; + } + long[] ids = creature.getAwareObjects().stream().mapToLong(SWGObject::getObjectID).toArray(); for(int i = 0; i < ids.length; i++) { for(int j = 0; j < ids.length; j++) { @@ -1564,7 +1596,7 @@ public class PlayerService implements INetworkDispatch { } - public Map>> getSchedulers() { + public Map>> getSchedulers() { return schedulers; } From 810a80cc243ac6afd84c836c831deb536800eaac Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 16 Aug 2014 23:15:07 -0400 Subject: [PATCH 8/9] Forgot to add this - part of previous commit --- src/services/ConnectionService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 246501fd..15f12267 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -344,9 +344,9 @@ public class ConnectionService implements INetworkDispatch { object.setAttachment("disconnectTask", null); try { - List> schedulers = core.playerService.getSchedulers().get(object.getObjectID()); + Map> schedulers = core.playerService.getSchedulers().get(object.getObjectID()); if(schedulers != null) { - schedulers.forEach(s -> s.cancel(true)); + schedulers.forEach((s, thread) -> thread.cancel(true)); schedulers.clear(); } core.playerService.getSchedulers().remove(object.getObjectID()); From dcb9ee561c0d8fe666e6d35c2d585d8e3afa0a23 Mon Sep 17 00:00:00 2001 From: Waverunner Date: Sat, 16 Aug 2014 23:27:35 -0400 Subject: [PATCH 9/9] Removed canceling of postZoneIn threads for null obis temporarily Possible that creature object / session / client is null at some parts --- src/services/PlayerService.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index ef02bbe2..fc2de27c 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -130,7 +130,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.put("serverTime", scheduler.scheduleAtFixedRate(() -> { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("serverTime").cancel(true); + //scheduleList.get("serverTime").cancel(true); return; } @@ -147,7 +147,7 @@ public class PlayerService implements INetworkDispatch { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("gcwUpdate").cancel(true); + //scheduleList.get("gcwUpdate").cancel(true); return; } @@ -205,7 +205,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.put("stealthCheck", scheduler.scheduleAtFixedRate(() -> { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("stealthCheck").cancel(true); + //scheduleList.get("stealthCheck").cancel(true); return; } @@ -243,7 +243,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.put("action", scheduler.scheduleAtFixedRate(() -> { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("action").cancel(true); + //scheduleList.get("action").cancel(true); return; } @@ -261,7 +261,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.put("health", scheduler.scheduleAtFixedRate(() -> { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("health").cancel(true); + //scheduleList.get("health").cancel(true); return; } @@ -275,7 +275,7 @@ public class PlayerService implements INetworkDispatch { scheduleList.put("awareness", scheduler.scheduleAtFixedRate(() -> { try { if (creature == null || creature.getClient() == null || creature.getClient().getSession() == null) { - scheduleList.get("awareness").cancel(true); + //scheduleList.get("awareness").cancel(true); return; }