Add this to event.impl
DamageEvent.class
Code:
package org.apollo.game.event.impl;
import org.apollo.game.event.Event;
/**
*
* @author Arrowzftw
*/
public class DamageEvent extends Event {
private int damageDone;
private int hitType;
private int currentHp;
private int maxHp;
public DamageEvent(int damageDone, int currentHp, int maxHp) {
this.damageDone = damageDone;
this.hitType = damageDone == 0 ? 0 : 1;
this.currentHp = currentHp;
this.maxHp = maxHp;
}
public int getDamageDone() {
return damageDone;
}
public int getHitType() {
return hitType;
}
public int getHp() {
return currentHp;
}
public int getMaxHp() {
return maxHp;
}
}
Add this to sync.block
Code:
package org.apollo.game.sync.block;
import org.apollo.game.event.impl.DamageEvent;
/**
*
* @author ArrowzFtw
*/
public class HitUpdateBlock extends SynchronizationBlock {
private final DamageEvent damage;
HitUpdateBlock(DamageEvent damage) {
this.damage = damage;
}
public DamageEvent getDamage() {
return damage;
}
}
Inside PlayerSynchronizationEventEncoder Under:
Do the exact same thing in NPCSynchronizationEventEncoder mask for NPCs is ..... mask |= 0x8;
Code:
if (blockSet.contains(TurnToPositionBlock.class)) {
mask |= 0x2;
}
Add:
Code:
if (blockSet.contains(HitUpdateBlock.class)) {
mask |= 0x20;
}
Find this again:
Code:
if (blockSet.contains(TurnToPositionBlock.class)) {
Then under the whole thing add:
Code:
if (blockSet.contains(HitUpdateBlock.class)) {
putHitUpdateBlock(blockSet.get(HitUpdateBlock.class), blockBuilder);
}
Declare this:
Code:
private void putHitUpdateBlock(HitUpdateBlock block, GamePacketBuilder blockBuilder) {
DamageEvent damage = block.getDamage();
blockBuilder.put(DataType.BYTE, damage.getDamageDone());
blockBuilder.put(DataType.BYTE, DataTransformation.ADD, damage.getHitType());
blockBuilder.put(DataType.BYTE, DataTransformation.NEGATE, damage.getHp()-damage.getDamageDone());
blockBuilder.put(DataType.BYTE, damage.getMaxHp());
}
Add this to SynchronizationBlock.java
Code:
public static SynchronizationBlock createHitUpdateBlock(DamageEvent damage) {
return new HitUpdateBlock(damage);
}
Add this to Character.java
Code:
/*
* Damage Entity
*
*/
public void damageEntity(DamageEvent damage) {
blockSet.add(SynchronizationBlock.createHitUpdateBlock(damage));
}
How to use:
Code:
character.damageEntity(DamageEvent.new(DamageDoneOnPlayer,CurrentHP,MAXHP))
You still have to make the players HP drop.