mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2024-11-22 23:10:52 +01:00
Bot Placement
This commit is contained in:
parent
e11def5965
commit
71062dc2fc
@ -2,6 +2,7 @@ package com.eu.habbo.habbohotel.rooms;
|
||||
|
||||
import com.eu.habbo.Emulator;
|
||||
import com.eu.habbo.habbohotel.bots.Bot;
|
||||
import com.eu.habbo.habbohotel.permissions.Permission;
|
||||
import com.eu.habbo.habbohotel.pets.Pet;
|
||||
import com.eu.habbo.habbohotel.pets.PetManager;
|
||||
import com.eu.habbo.habbohotel.rooms.entities.RoomRotation;
|
||||
@ -14,9 +15,14 @@ import com.eu.habbo.habbohotel.rooms.entities.units.types.RoomPet;
|
||||
import com.eu.habbo.habbohotel.units.Unit;
|
||||
import com.eu.habbo.habbohotel.users.DanceType;
|
||||
import com.eu.habbo.habbohotel.users.Habbo;
|
||||
import com.eu.habbo.messages.outgoing.generic.alerts.BotErrorComposer;
|
||||
import com.eu.habbo.messages.outgoing.inventory.BotRemovedFromInventoryComposer;
|
||||
import com.eu.habbo.messages.outgoing.inventory.PetAddedToInventoryComposer;
|
||||
import com.eu.habbo.messages.outgoing.rooms.pets.RoomPetComposer;
|
||||
import com.eu.habbo.messages.outgoing.rooms.users.RoomUsersComposer;
|
||||
import com.eu.habbo.messages.outgoing.rooms.users.UserRemoveMessageComposer;
|
||||
import com.eu.habbo.plugin.Event;
|
||||
import com.eu.habbo.plugin.events.bots.BotPlacedEvent;
|
||||
import gnu.trove.set.hash.THashSet;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -218,19 +224,66 @@ public class RoomUnitManager {
|
||||
return this.currentBots.values().stream().filter(bot -> bot.getRoomUnit().getCurrentPosition().equals(tile)).collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public void placeBot(Bot bot, Habbo habbo, int x, int y) {
|
||||
synchronized (this.currentBots) {
|
||||
RoomTile spawnTile = room.getLayout().getTile((short) x, (short) y);
|
||||
|
||||
if(spawnTile == null) {
|
||||
spawnTile = room.getLayout().getDoorTile();
|
||||
}
|
||||
|
||||
if (Emulator.getPluginManager().isRegistered(BotPlacedEvent.class, false)) {
|
||||
Event event = new BotPlacedEvent(bot, spawnTile, habbo);
|
||||
Emulator.getPluginManager().fireEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.currentBots.size() >= Room.MAXIMUM_BOTS && !habbo.hasPermissionRight(Permission.ACC_UNLIMITED_BOTS)) {
|
||||
habbo.getClient().sendResponse(new BotErrorComposer(BotErrorComposer.ROOM_ERROR_MAX_BOTS));
|
||||
return;
|
||||
}
|
||||
|
||||
if((!spawnTile.isWalkable() && !this.room.canSitOrLayAt(spawnTile)) || this.areRoomUnitsAt(spawnTile)) {
|
||||
habbo.getClient().sendResponse(new BotErrorComposer(BotErrorComposer.ROOM_ERROR_BOTS_SELECTED_TILE_NOT_FREE));
|
||||
return;
|
||||
}
|
||||
|
||||
RoomBot roomBot = bot.getRoomUnit();
|
||||
|
||||
roomBot.setRoom(this.room);
|
||||
roomBot.setCurrentPosition(spawnTile);
|
||||
roomBot.setCurrentZ(spawnTile.getZ());
|
||||
roomBot.setRotation(RoomRotation.SOUTH);
|
||||
roomBot.setCanWalk(this.room.isAllowBotsWalk());
|
||||
|
||||
this.addRoomUnit(bot);
|
||||
|
||||
this.room.sendComposer(new RoomUsersComposer(bot).compose());
|
||||
|
||||
roomBot.instantUpdate();
|
||||
|
||||
habbo.getInventory().getBotsComponent().removeBot(bot);
|
||||
habbo.getClient().sendResponse(new BotRemovedFromInventoryComposer(bot));
|
||||
bot.onPlace(habbo, room);
|
||||
}
|
||||
}
|
||||
|
||||
public void placePet(Pet pet, Room room, short x, short y, double z) {
|
||||
synchronized (this.currentPets) {
|
||||
RoomTile tile = room.getLayout().getTile(x, y);
|
||||
RoomTile spawnTile = room.getLayout().getTile(x, y);
|
||||
|
||||
if (tile == null) {
|
||||
tile = room.getLayout().getDoorTile();
|
||||
if (spawnTile == null) {
|
||||
spawnTile = room.getLayout().getDoorTile();
|
||||
}
|
||||
|
||||
pet.setRoomUnit(new RoomPet());
|
||||
pet.getRoomUnit().setUnit(pet);
|
||||
pet.setRoom(room);
|
||||
pet.getRoomUnit().walkTo(tile);
|
||||
pet.getRoomUnit().setLocation(tile)
|
||||
pet.getRoomUnit().walkTo(spawnTile);
|
||||
pet.getRoomUnit().setLocation(spawnTile)
|
||||
.setRoomUnitType(RoomUnitType.PET)
|
||||
.setCanWalk(true)
|
||||
.setCurrentZ(z);
|
||||
@ -343,8 +396,8 @@ public class RoomUnitManager {
|
||||
|
||||
bot.getRoomUnit().setInRoom(false);
|
||||
bot.setRoom(null);
|
||||
bot.getRoomUnit().getRoom().sendComposer(new UserRemoveMessageComposer(bot.getRoomUnit()).compose());
|
||||
bot.setRoomUnit(null);
|
||||
|
||||
this.room.sendComposer(new UserRemoveMessageComposer(bot.getRoomUnit()).compose());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -201,8 +201,8 @@ public abstract class RoomUnit extends RoomEntity {
|
||||
}
|
||||
|
||||
if(this.nextPosition != null) {
|
||||
this.currentPosition = this.nextPosition;
|
||||
this.currentZ = this.nextZ;
|
||||
this.setCurrentPosition(this.nextPosition);
|
||||
this.setCurrentZ(this.nextZ);
|
||||
}
|
||||
|
||||
this.targetPosition = goalLocation;
|
||||
@ -212,7 +212,7 @@ public abstract class RoomUnit extends RoomEntity {
|
||||
|
||||
public RoomUnit setLocation(RoomTile location) {
|
||||
if (location != null) {
|
||||
this.currentPosition = location;
|
||||
this.setCurrentPosition(location);
|
||||
this.targetPosition = location;
|
||||
}
|
||||
return this;
|
||||
@ -492,8 +492,8 @@ public abstract class RoomUnit extends RoomEntity {
|
||||
this.statuses.entrySet().removeIf(entry -> entry.getKey().isRemoveWhenWalking());
|
||||
|
||||
if(this.getNextPosition() != null) {
|
||||
this.currentPosition = this.getNextPosition();
|
||||
this.currentZ = this.getNextZ();
|
||||
this.setCurrentPosition(this.getNextPosition());
|
||||
this.setCurrentZ(this.getNextZ());
|
||||
}
|
||||
|
||||
if(!this.path.isEmpty()) {
|
||||
@ -563,12 +563,14 @@ public abstract class RoomUnit extends RoomEntity {
|
||||
*/
|
||||
private boolean isValidTile(RoomTile tile) {
|
||||
boolean canOverrideTile = this.canOverrideTile(tile);
|
||||
|
||||
if (canOverrideTile) {
|
||||
return true;
|
||||
}
|
||||
|
||||
double heightDifference = tile.getStackHeight() - this.currentZ;
|
||||
|
||||
//TODO Why bots are not being detected?
|
||||
boolean areRoomUnitsAtTile = this.room.getRoomUnitManager().areRoomUnitsAt(tile);
|
||||
boolean isAboveMaximumStepHeight = (!RoomLayout.ALLOW_FALLING && heightDifference < -RoomLayout.MAXIMUM_STEP_HEIGHT);
|
||||
boolean isOpenTileAboveMaxHeight = (tile.getState() == RoomTileState.OPEN && heightDifference > RoomLayout.MAXIMUM_STEP_HEIGHT);
|
||||
|
@ -18,7 +18,9 @@ public class RoomPet extends RoomUnit {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cycle() {}
|
||||
public void cycle() {
|
||||
super.cycle();
|
||||
}
|
||||
|
||||
public boolean handleRider(Pet pet, Room room) {
|
||||
Habbo rider = null;
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.eu.habbo.messages.incoming.rooms.bots;
|
||||
|
||||
import com.eu.habbo.Emulator;
|
||||
import com.eu.habbo.habbohotel.bots.Bot;
|
||||
import com.eu.habbo.habbohotel.rooms.Room;
|
||||
import com.eu.habbo.messages.incoming.MessageHandler;
|
||||
@ -23,6 +22,6 @@ public class PlaceBotEvent extends MessageHandler {
|
||||
int x = this.packet.readInt();
|
||||
int y = this.packet.readInt();
|
||||
|
||||
Emulator.getGameEnvironment().getBotManager().placeBot(bot, this.client.getHabbo(), room, room.getLayout().getTile((short) x, (short) y));
|
||||
room.getRoomUnitManager().placeBot(bot, this.client.getHabbo(), x, y);
|
||||
}
|
||||
}
|
||||
|
@ -19,8 +19,6 @@ public class MoveAvatarEvent extends MessageHandler {
|
||||
int x = this.packet.readInt();
|
||||
int y = this.packet.readInt();
|
||||
|
||||
log.info("CLICKED ON TILE [x]: {} [y]: {}", x, y);
|
||||
|
||||
Habbo habbo = this.client.getHabbo();
|
||||
|
||||
if(habbo == null) {
|
||||
|
Loading…
Reference in New Issue
Block a user