diff --git a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java index 00ea3d9..e07a0eb 100644 --- a/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java +++ b/Emulator/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionCannon.java @@ -46,37 +46,42 @@ public class InteractionCannon extends HabboItem { return false; } + @Override public void onClick(GameClient client, Room room, Object[] objects) throws Exception { - if (client != null) { - super.onClick(client, room, objects); - } + super.onClick(client, room, objects); - if (room == null) - return; + if (room == null) return; RoomTile tile = room.getLayout().getTile(this.getX(), this.getY()); - RoomTile fuseTile = this.getRotation() >= 4 ? tile : room.getLayout().getTileInFront(tile, ((this.getRotation() % 2) + 2) % 8); + RoomTile fuseTile = room.getLayout().getTileInFront(tile, this.getRotation()); List tiles = room.getLayout().getTilesAround(fuseTile); - tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + (this.getRotation() >= 4 ? -1 : 0)) % 8)); - tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + (this.getRotation() >= 4 ? 5 : 4)) % 8)); - if ((client == null || (tiles.contains(client.getHabbo().getRoomUnit().getCurrentLocation())) && client.getHabbo().getRoomUnit().canWalk()) && !this.cooldown) { - if (client != null) { - client.getHabbo().getRoomUnit().setCanWalk(false); - client.getHabbo().getRoomUnit().setGoalLocation(client.getHabbo().getRoomUnit().getCurrentLocation()); - client.getHabbo().getRoomUnit().lookAtPoint(fuseTile); - client.getHabbo().getRoomUnit().statusUpdate(true); - } + tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + 7) % 8)); + tiles.remove(room.getLayout().getTileInFront(tile, (this.getRotation() + 5) % 8)); + + boolean conditionClient = (client != null); + boolean conditionTile = (tiles.contains(client != null ? client.getHabbo().getRoomUnit().getCurrentLocation() : null)); + boolean conditionWalk = (client != null && client.getHabbo().getRoomUnit().canWalk()); + + if (!this.cooldown && conditionClient && conditionTile && conditionWalk) { + + client.getHabbo().getRoomUnit().setCanWalk(false); + client.getHabbo().getRoomUnit().setGoalLocation(client.getHabbo().getRoomUnit().getCurrentLocation()); + client.getHabbo().getRoomUnit().lookAtPoint(fuseTile); + client.getHabbo().getRoomUnit().statusUpdate(true); this.cooldown = true; this.setExtradata(this.getExtradata().equals("1") ? "0" : "1"); room.updateItemState(this); + Emulator.getThreading().run(new CannonKickAction(this, room, client), 750); Emulator.getThreading().run(new CannonResetCooldownAction(this), 2000); } } + + @Override public void onWalk(RoomUnit roomUnit, Room room, Object[] objects) throws Exception { diff --git a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java index 3f3dd41..5fbb405 100644 --- a/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java +++ b/Emulator/src/main/java/com/eu/habbo/messages/incoming/rooms/items/ToggleFloorItemEvent.java @@ -1,6 +1,7 @@ package com.eu.habbo.messages.incoming.rooms.items; import com.eu.habbo.Emulator; +import com.eu.habbo.habbohotel.items.interactions.InteractionCannon; import com.eu.habbo.habbohotel.items.interactions.InteractionDice; import com.eu.habbo.habbohotel.items.interactions.InteractionWired; import com.eu.habbo.habbohotel.items.interactions.pets.InteractionMonsterPlantSeed; @@ -34,7 +35,7 @@ public class ToggleFloorItemEvent extends MessageHandler { HabboItem item = room.getHabboItem(itemId); - if (item == null || item instanceof InteractionDice) + if (item == null || (item instanceof InteractionDice && !(item instanceof InteractionCannon))) return; Event furnitureToggleEvent = new FurnitureToggleEvent(item, this.client.getHabbo(), state); diff --git a/Emulator/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java b/Emulator/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java index 7154f94..63313e1 100644 --- a/Emulator/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java +++ b/Emulator/src/main/java/com/eu/habbo/threading/runnables/CannonKickAction.java @@ -26,15 +26,16 @@ public class CannonKickAction implements Runnable { @Override public void run() { - if (this.client != null) { + if (this.client != null) this.client.getHabbo().getRoomUnit().setCanWalk(true); - } + THashMap dater = new THashMap<>(); dater.put("title", "${notification.room.kick.cannonball.title}"); dater.put("message", "${notification.room.kick.cannonball.message}"); - int rotation = this.cannon.getRotation(); - List tiles = this.room.getLayout().getTilesInFront(this.room.getLayout().getTile(this.cannon.getX(), this.cannon.getY()), rotation + 6, 3); + int rotation = ((this.cannon.getRotation() - 2) + 8) % 8; + int amount = (rotation == 2 || rotation == 4) ? 4 : 3; + List tiles = this.room.getLayout().getTilesInFront(this.room.getLayout().getTile(this.cannon.getX(), this.cannon.getY()), rotation, amount); ServerMessage message = new BubbleAlertComposer("cannon.png", dater).compose(); @@ -42,7 +43,7 @@ public class CannonKickAction implements Runnable { for (Habbo habbo : this.room.getHabbosAt(t.x, t.y)) { if (!habbo.hasPermission(Permission.ACC_UNKICKABLE) && !this.room.isOwner(habbo)) { Emulator.getGameEnvironment().getRoomManager().leaveRoom(habbo, this.room); - habbo.getClient().sendResponse(message); //kicked composer + habbo.getClient().sendResponse(message); } } } diff --git a/Latest_Compiled_Version/Habbo-3.6.0-jar-with-dependencies.jar b/Latest_Compiled_Version/Habbo-3.6.0-jar-with-dependencies.jar index b5ef745..d2f9123 100644 Binary files a/Latest_Compiled_Version/Habbo-3.6.0-jar-with-dependencies.jar and b/Latest_Compiled_Version/Habbo-3.6.0-jar-with-dependencies.jar differ