RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
CannonFireAction.java
1package com.osroyale.content.combat.cannon;
2
3import com.osroyale.content.combat.cannon.CannonManager.Rotation;
4import com.osroyale.game.task.Task;
5import com.osroyale.game.world.World;
6import com.osroyale.game.world.entity.combat.hit.Hit;
7import com.osroyale.game.world.entity.combat.hit.HitIcon;
8import com.osroyale.game.world.entity.mob.npc.Npc;
9import com.osroyale.game.world.entity.mob.player.Player;
10import com.osroyale.net.packet.out.SendMessage;
11
34
35public final class CannonFireAction extends Task {
36 private final Player player;
37 private final Cannon cannon;
38
39 public CannonFireAction(Player player, Cannon cannon) {
40 super(true, 2);
41 this.player = player;
42 this.cannon = cannon;
43 }
44
45 @Override
46 public void execute() {
47 if (cannon.getAmmunition() <= 0) {
48 player.send(new SendMessage("Your cannon has run out of ammunition!"));
49 cannon.setFiring(false);
50 cancel();
51 return;
52 }
53
54 switch (cannon.getRotation()) {
55 case NORTH:
56 cannon.setRotation(Rotation.NORTH_EAST);
57 break;
58 case NORTH_EAST:
59 cannon.setRotation(Rotation.EAST);
60 break;
61 case EAST:
62 cannon.setRotation(Rotation.SOUTH_EAST);
63 break;
64 case SOUTH_EAST:
65 cannon.setRotation(Rotation.SOUTH);
66 break;
67 case SOUTH:
68 cannon.setRotation(Rotation.SOUTH_WEST);
69 break;
70 case SOUTH_WEST:
71 cannon.setRotation(Rotation.WEST);
72 break;
73 case WEST:
74 cannon.setRotation(Rotation.NORTH_WEST);
75 break;
76 case NORTH_WEST:
77 cannon.setRotation(Rotation.NORTH);
78 break;
79 }
80
81 CannonManager.rotate(cannon);
82
83 Npc[] mobs = CannonManager.getNpc(cannon);
84
85 if (mobs != null) {
86 for (Npc i : mobs) {
87 if (i != null) {
88 int lockon = i.getIndex() + 1;
89 byte offsetX = (byte) ((i.getPosition().getY() - i.getPosition().getY()) * -1);
90 byte offsetY = (byte) ((i.getPosition().getX() - i.getPosition().getX()) * -1);
91 World.sendProjectile(CannonManager.getCannonFire(), cannon.getPosition(), cannon.instance, lockon, offsetX, offsetY);
92
93 Hit hit = new Hit(3, HitIcon.CANON);
94
95 i.damage(hit);
96 cannon.setAmmunition(cannon.getAmmunition() - 1);
97 }
98 }
99 }
100 }
101}
synchronized final void cancel()
Definition Task.java:147
Task(boolean instant, int delay)
Definition Task.java:75
static void sendProjectile(Projectile projectile, Position position, int instance, int lock, byte offsetX, byte offsetY)
Definition World.java:332