// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ . // ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌· // ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀ // ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌ // ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀ // Magicbane Emulator Project © 2013 - 2022 // www.magicbane.com package engine.net.client.msg; import engine.net.AbstractConnection; import engine.net.ByteBufferReader; import engine.net.ByteBufferWriter; import engine.net.client.Protocol; import engine.objects.AbstractCharacter; import engine.objects.Building; public class ModifyHealthMsg extends ClientNetMsg { private int trains; private int unknownID; //effectID private int sourceType; private int sourceID; private int targetType; private int targetID; private int omitFromChat = 0; //1 heal, 0 hurt? private int unknown03 = 0; //0=normalCast, 1to4=powerFailed, 5=targetIsImmune, 6=targetResisted private int unknown04 = -1; private int unknown05 = 0; private byte unknownByte = (byte) 0; //0 private int powerID; private String powerName; private float health; private float healthMod; private float mana; private float manaMod; private float stamina; private float staminaMod; /** * This is the general purpose constructor. */ public ModifyHealthMsg(AbstractCharacter source, Building target, float healthMod, float manaMod, float staminaMod, int powerID, String powerName, int trains, int effectID) { super(Protocol.POWERACTIONDD); if (source != null) { this.sourceType = source.getObjectType().ordinal(); this.sourceID = source.getObjectUUID(); } else { this.sourceType = 0; this.sourceID = 0; } if (target != null) { this.targetType = target.getObjectType().ordinal(); this.targetID = target.getObjectUUID(); this.health = target.getCurrentHitpoints(); this.healthMod = healthMod; this.mana = 0; this.manaMod = 0; this.stamina = 0; this.staminaMod = 0; } else { this.targetType = 0; this.targetID = 0; this.health = 0; this.healthMod = 0; this.mana = 0; this.manaMod = 0; this.stamina = 0; this.staminaMod = 0; } this.unknownID = effectID; this.trains = trains; this.powerID = powerID; this.powerName = powerName; this.omitFromChat = 0; } public ModifyHealthMsg(AbstractCharacter source, AbstractCharacter target, float healthMod, float manaMod, float staminaMod, int powerID, String powerName, int trains, int effectID) { super(Protocol.POWERACTIONDD); if (source != null) { this.sourceType = source.getObjectType().ordinal(); this.sourceID = source.getObjectUUID(); } else { this.sourceType = 0; this.sourceID = 0; } if (target != null) { this.targetType = target.getObjectType().ordinal(); this.targetID = target.getObjectUUID(); this.health = target.getCurrentHitpoints(); this.healthMod = healthMod; this.mana = target.getMana(); this.manaMod = manaMod; this.stamina = target.getStamina(); this.staminaMod = staminaMod; } else { this.targetType = 0; this.targetID = 0; this.health = 0; this.healthMod = 0; this.mana = 0; this.manaMod = 0; this.stamina = 0; this.staminaMod = 0; } this.unknownID = effectID; this.trains = trains; this.powerID = powerID; this.powerName = powerName; this.omitFromChat = 0; } //called for kills public ModifyHealthMsg(AbstractCharacter source, AbstractCharacter target, int powerID, String powerName, int trains, int effectID) { super(Protocol.POWERACTIONDD); if (source != null) { this.sourceType = source.getObjectType().ordinal(); this.sourceID = source.getObjectUUID(); } else { this.sourceType = 0; this.sourceID = 0; } if (target != null) { this.targetType = target.getObjectType().ordinal(); this.targetID = target.getObjectUUID(); this.mana = target.getMana(); this.stamina = target.getStamina(); } else { this.targetType = 0; this.targetID = 0; this.mana = 0f; this.stamina = 0f; } this.health = -50f; this.healthMod = 0f; this.manaMod = 0f; this.staminaMod = 0f; this.omitFromChat = 0; this.unknownID = effectID; this.trains = trains; this.powerID = powerID; this.powerName = powerName; } /** * This constructor is used by NetMsgFactory. It attempts to deserialize the ByteBuffer into a message. If a BufferUnderflow occurs (based on reading past the limit) then this constructor Throws that Exception to the caller. */ public ModifyHealthMsg(AbstractConnection origin, ByteBufferReader reader) { super(Protocol.POWERACTIONDD, origin, reader); } /** * Serializes the subclass specific items to the supplied NetMsgWriter. */ @Override protected void _serialize(ByteBufferWriter writer) { writer.putInt(this.trains); writer.putInt(this.unknownID); writer.putInt(this.sourceType); writer.putInt(this.sourceID); writer.putInt(this.targetType); writer.putInt(this.targetID); writer.putInt(this.omitFromChat); writer.putInt(this.unknown03); writer.putInt(this.unknown04); writer.putInt(this.unknown05); writer.put(this.unknownByte); writer.putInt(this.powerID); writer.putString(this.powerName); writer.putFloat(this.health); writer.putFloat(this.healthMod); writer.putFloat(this.mana); writer.putFloat(this.manaMod); writer.putFloat(this.stamina); writer.putFloat(this.staminaMod); } /** * Deserializes the subclass specific items from the supplied NetMsgReader. */ @Override protected void _deserialize(ByteBufferReader reader) { this.trains = reader.getInt(); this.unknownID = reader.getInt(); this.sourceType = reader.getInt(); this.sourceID = reader.getInt(); this.targetType = reader.getInt(); this.targetID = reader.getInt(); this.omitFromChat = reader.getInt(); this.unknown03 = reader.getInt(); this.unknown04 = reader.getInt(); this.unknown05 = reader.getInt(); this.unknownByte = reader.get(); this.powerID = reader.getInt(); this.powerName = reader.getString(); this.health = reader.getFloat(); this.healthMod = reader.getFloat(); this.mana = reader.getFloat(); this.manaMod = reader.getFloat(); this.stamina = reader.getFloat(); this.staminaMod = reader.getFloat(); } /** * @return the sourceType */ public int getSourceType() { return sourceType; } /** * @return the sourceID */ public int getSourceID() { return sourceID; } /** * @return the targetType */ public int getTargetType() { return targetType; } public float getHealthMod() { return healthMod; } public float getManaMod() { return manaMod; } public float getStaminaMod() { return manaMod; } /** * @return the targetID */ public int getTargetID() { return targetID; } public void setSourceType(int value) { this.sourceType = value; } public void setSourceID(int value) { this.sourceID = value; } public void setTargetType(int value) { this.targetType = value; } public void setTargetID(int value) { this.targetID = value; } public void setOmitFromChat(int value) { this.omitFromChat = value; } public void setUnknown03(int value) { this.unknown03 = value; } }