mirror of
https://gitlab.com/2009scape/2009scape.git
synced 2026-08-01 14:39:13 -06:00
Corrected implementation of dragon halberd special attack
This commit is contained in:
parent
efc324883b
commit
37b30d7561
2 changed files with 27 additions and 3 deletions
|
|
@ -9,6 +9,7 @@ import core.game.node.entity.combat.spell.CombatSpell;
|
|||
|
||||
/**
|
||||
* Represents an entity's current battle state.
|
||||
*
|
||||
* @author Emperor
|
||||
*/
|
||||
public final class BattleState {
|
||||
|
|
@ -99,6 +100,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Constructs a new {@code BattleState} {@Code Object}
|
||||
*
|
||||
* @param victim The victim entity.
|
||||
*/
|
||||
public BattleState(Entity entity, Entity victim) {
|
||||
|
|
@ -134,6 +136,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the estimatedHit.
|
||||
*
|
||||
* @return The estimatedHit.
|
||||
*/
|
||||
public int getEstimatedHit() {
|
||||
|
|
@ -142,6 +145,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the estimated hit.
|
||||
*
|
||||
* @param estimatedHit The estimated hit to set.
|
||||
*/
|
||||
public void setEstimatedHit(int estimatedHit) {
|
||||
|
|
@ -164,6 +168,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the recoilDamage.
|
||||
*
|
||||
* @return The recoilDamage.
|
||||
*/
|
||||
public int getRecoilDamage() {
|
||||
|
|
@ -172,6 +177,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the recoilDamage.
|
||||
*
|
||||
* @param recoilDamage The recoilDamage to set.
|
||||
*/
|
||||
public void setRecoilDamage(int recoilDamage) {
|
||||
|
|
@ -236,6 +242,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the maximumHit.
|
||||
*
|
||||
* @return The maximumHit.
|
||||
*/
|
||||
public int getMaximumHit() {
|
||||
|
|
@ -244,6 +251,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the maximumHit.
|
||||
*
|
||||
* @param maximumHit The maximumHit to set.
|
||||
*/
|
||||
public void setMaximumHit(int maximumHit) {
|
||||
|
|
@ -252,6 +260,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the rangeWeapon.
|
||||
*
|
||||
* @return The rangeWeapon.
|
||||
*/
|
||||
public RangeWeapon getRangeWeapon() {
|
||||
|
|
@ -260,6 +269,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the rangeWeapon.
|
||||
*
|
||||
* @param rangeWeapon The rangeWeapon to set.
|
||||
*/
|
||||
public void setRangeWeapon(RangeWeapon rangeWeapon) {
|
||||
|
|
@ -268,6 +278,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the ammunition.
|
||||
*
|
||||
* @return The ammunition.
|
||||
*/
|
||||
public Ammunition getAmmunition() {
|
||||
|
|
@ -276,6 +287,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the ammunition.
|
||||
*
|
||||
* @param ammunition The ammunition to set.
|
||||
*/
|
||||
public void setAmmunition(Ammunition ammunition) {
|
||||
|
|
@ -284,6 +296,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the frozen.
|
||||
*
|
||||
* @return The frozen.
|
||||
*/
|
||||
public boolean isFrozen() {
|
||||
|
|
@ -292,6 +305,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the frozen.
|
||||
*
|
||||
* @param frozen The frozen to set.
|
||||
*/
|
||||
public void setFrozen(boolean frozen) {
|
||||
|
|
@ -300,6 +314,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the style.
|
||||
*
|
||||
* @return The style.
|
||||
*/
|
||||
public CombatStyle getStyle() {
|
||||
|
|
@ -308,6 +323,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the style.
|
||||
*
|
||||
* @param style The style to set.
|
||||
*/
|
||||
public void setStyle(CombatStyle style) {
|
||||
|
|
@ -316,6 +332,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the armourEffect.
|
||||
*
|
||||
* @return The armourEffect.
|
||||
*/
|
||||
public ArmourSet getArmourEffect() {
|
||||
|
|
@ -324,6 +341,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Sets the armourEffect.
|
||||
*
|
||||
* @param armourEffect The armourEffect to set.
|
||||
*/
|
||||
public void setArmourEffect(ArmourSet armourEffect) {
|
||||
|
|
@ -332,6 +350,7 @@ public final class BattleState {
|
|||
|
||||
/**
|
||||
* Gets the attacking entity.
|
||||
*
|
||||
* @return The entity.
|
||||
*/
|
||||
public Entity getAttacker() {
|
||||
|
|
@ -340,10 +359,9 @@ public final class BattleState {
|
|||
|
||||
public int getTotalDamage() {
|
||||
int hit = Math.max(estimatedHit, 0) + Math.max(secondaryHit, 0);
|
||||
|
||||
if (targets != null) {
|
||||
for (BattleState s : targets) {
|
||||
if (s != null) {
|
||||
if (s != null && s != this) {
|
||||
hit += Math.max(s.getEstimatedHit(), 0) + Math.max(s.getSecondaryHit(), 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,9 +254,15 @@ abstract class CombatSwingHandler(var type: CombatStyle?) {
|
|||
?: return InteractionType.STILL_INTERACT //if we cannot derive a direction, it's because both tiles are the same, so hand off control to the main logic which already handles this case
|
||||
var next = closestEntityTile
|
||||
|
||||
while (next.getDistance(closestVictimTile) > 3) { //skip the initial gap in distance if it exists, because standard pathfinding would already stop us before this point if something was between us and the NPC or vice versa
|
||||
//Skip the initial gap in distance if it exists, because standard pathfinding would already stop us before this point if something was between us and the NPC or vice versa.
|
||||
//A fixed-direction walk can only arrive within its starting distance in steps; on oblique approaches it
|
||||
//passes beside the target and never converges, so the walk is hard-capped at that many steps.
|
||||
val maxSkipSteps = next.getDistance(closestVictimTile).toInt() + 1
|
||||
for (i in 0 until maxSkipSteps) {
|
||||
if (next.getDistance(closestVictimTile) <= 3) break
|
||||
next = next.transform(dir)
|
||||
}
|
||||
if (next.getDistance(closestVictimTile) > 3) return InteractionType.STILL_INTERACT //never converged (oblique approach), so defer to the range checks instead
|
||||
|
||||
var result: InteractionType = InteractionType.STILL_INTERACT
|
||||
val maxIterations = next.getDistance(closestVictimTile).toInt()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue