Rollers and teleporting to seats fixed

This commit is contained in:
Beny 2020-10-16 05:50:57 +02:00
parent 0dee065524
commit 90918309b7
6 changed files with 61 additions and 29 deletions

View File

@ -48,15 +48,17 @@ public class InteractionDefault extends HabboItem {
public void onMove(Room room, RoomTile oldLocation, RoomTile newLocation) {
super.onMove(room, oldLocation, newLocation);
for (RoomUnit unit : room.getRoomUnits()) {
if (!oldLocation.unitIsOnFurniOnTile(unit, this.getBaseItem()))
continue; // If the unit was previously on the furni...
if (newLocation.unitIsOnFurniOnTile(unit, this.getBaseItem())) continue; // but is not anymore...
if(room.getItemsAt(oldLocation).stream().noneMatch(item -> item.getClass().isAssignableFrom(InteractionRoller.class))) {
for (RoomUnit unit : room.getRoomUnits()) {
if (!oldLocation.unitIsOnFurniOnTile(unit, this.getBaseItem()))
continue; // If the unit was previously on the furni...
if (newLocation.unitIsOnFurniOnTile(unit, this.getBaseItem())) continue; // but is not anymore...
try {
this.onWalkOff(unit, room, new Object[]{ oldLocation, newLocation }); // the unit walked off!
} catch (Exception ignored) {
try {
this.onWalkOff(unit, room, new Object[]{oldLocation, newLocation}); // the unit walked off!
} catch (Exception ignored) {
}
}
}
}

View File

@ -1462,7 +1462,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
tile.setStackHeight(ridingUnit.getZ() + zOffset);
rolledUnitIds.add(ridingUnit.getId());
updatedUnit.remove(ridingUnit);
messages.add(new RoomUnitOnRollerComposer(ridingUnit, roller, ridingUnit.getCurrentLocation(), ridingUnit.getZ(), tile, tile.getStackHeight() + (nextTileChair != null ? -1 : 0), room));
messages.add(new RoomUnitOnRollerComposer(ridingUnit, roller, ridingUnit.getCurrentLocation(), ridingUnit.getZ(), tile, tile.getStackHeight(), room));
isRiding = true;
}
}
@ -1471,7 +1471,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
usersRolledThisTile.add(unit.getId());
rolledUnitIds.add(unit.getId());
updatedUnit.remove(unit);
messages.add(new RoomUnitOnRollerComposer(unit, roller, unit.getCurrentLocation(), unit.getZ() + (isRiding ? 1 : 0), tile, tile.getStackHeight() + (isRiding ? 1 : 0) + (nextTileChair != null ? -1 : 0), room));
messages.add(new RoomUnitOnRollerComposer(unit, roller, unit.getCurrentLocation(), unit.getZ() + (isRiding ? 1 : 0), tile, tile.getStackHeight() + (isRiding ? 1 : 0), room));
if (itemsOnRoller.isEmpty()) {
HabboItem item = room.getTopItemAt(tileInFront.x, tileInFront.y);
@ -3613,7 +3613,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable {
HabboItem item = this.getTopItemAt(x, y, exclude);
if (item != null) {
canStack = item.getBaseItem().allowStack();
height = item.getZ() + Item.getCurrentHeight(item);
height = item.getZ() + (item.getBaseItem().allowSit() ? 0 : Item.getCurrentHeight(item));
}
/*HabboItem lowestChair = this.getLowestChair(x, y);

View File

@ -51,7 +51,8 @@ public class RoomUserLookAtPoint extends MessageHandler {
if (tile != null) {
roomUnit.lookAtPoint(tile);
room.sendComposer(new RoomUserStatusComposer(roomUnit).compose());
roomUnit.statusUpdate(true);
//room.sendComposer(new RoomUserStatusComposer(roomUnit).compose());
}
}
}

View File

@ -70,7 +70,7 @@ public class FloorItemOnRollerComposer extends MessageComposer {
THashSet<RoomTile> tiles = this.room.getLayout().getTilesAt(this.room.getLayout().getTile(oldX, oldY), this.item.getBaseItem().getWidth(), this.item.getBaseItem().getLength(), this.item.getRotation());
tiles.addAll(this.room.getLayout().getTilesAt(this.room.getLayout().getTile(this.item.getX(), this.item.getY()), this.item.getBaseItem().getWidth(), this.item.getBaseItem().getLength(), this.item.getRotation()));
this.room.updateTiles(tiles);
this.room.sendComposer(new UpdateStackHeightComposer(oldX, oldY, this.room.getStackHeight(oldX, oldY, true)).compose());
//this.room.sendComposer(new UpdateStackHeightComposer(oldX, oldY, this.room.getStackHeight(oldX, oldY, true)).compose());
//
//this.room.updateHabbosAt(RoomLayout.getRectangle(this.item.getX(), this.item.getY(), this.item.getBaseItem().getWidth(), this.item.getBaseItem().getLength(), this.item.getRotation()));
}

View File

@ -5,6 +5,7 @@ import com.eu.habbo.habbohotel.items.interactions.InteractionRoller;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.RoomUnit;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.habbohotel.users.HabboItem;
import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.MessageComposer;
@ -66,25 +67,53 @@ public class RoomUnitOnRollerComposer extends MessageComposer {
this.response.appendString(this.newZ + "");
if (this.roller != null && room.getLayout() != null) {
RoomTile rollerTile = room.getLayout().getTile(this.roller.getX(), this.roller.getY());
HabboItem topItem = this.room.getTopItemAt(this.roomUnit.getCurrentLocation().x, this.roomUnit.getCurrentLocation().y);
if (topItem != null && (topItem == roller || oldTopItem != topItem)) {
try {
topItem.onWalkOff(this.roomUnit, this.room, new Object[]{this});
} catch (Exception e) {
LOGGER.error("Caught exception", e);
}
}
Emulator.getThreading().run(() -> {
if (RoomUnitOnRollerComposer.this.oldLocation == rollerTile && RoomUnitOnRollerComposer.this.roomUnit.getGoal() == rollerTile) {
RoomUnitOnRollerComposer.this.roomUnit.setLocation(room.getLayout().getTile(newLocation.x, newLocation.y));
RoomUnitOnRollerComposer.this.roomUnit.setPreviousLocationZ(RoomUnitOnRollerComposer.this.newLocation.getStackHeight());
RoomUnitOnRollerComposer.this.roomUnit.setZ(RoomUnitOnRollerComposer.this.newLocation.getStackHeight());
RoomUnitOnRollerComposer.this.roomUnit.sitUpdate = true;
if(!this.roomUnit.isWalking() && this.roomUnit.getCurrentLocation() == this.oldLocation) {
HabboItem topItem = this.room.getTopItemAt(this.oldLocation.x, this.oldLocation.y);
HabboItem topItemNewLocation = this.room.getTopItemAt(this.newLocation.x, this.newLocation.y);
if (topItem != null && (oldTopItem == null || oldTopItem != topItemNewLocation)) {
try {
topItem.onWalkOff(this.roomUnit, this.room, new Object[]{this});
} catch (Exception e) {
LOGGER.error("Caught exception", e);
}
}
this.roomUnit.setLocation(this.newLocation);
this.roomUnit.setZ(this.newLocation.getStackHeight());
this.roomUnit.setPreviousLocationZ(this.newLocation.getStackHeight());
if (topItemNewLocation != null && topItemNewLocation != roller && oldTopItem != topItemNewLocation) {
try {
topItemNewLocation.onWalkOn(this.roomUnit, this.room, new Object[]{this});
} catch (Exception e) {
LOGGER.error("Caught exception", e);
}
}
}
}, this.room.getRollerSpeed() == 0 ? 250 : InteractionRoller.DELAY);
/*
RoomTile rollerTile = room.getLayout().getTile(this.roller.getX(), this.roller.getY());
Emulator.getThreading().run(() -> {
if (this.oldLocation == rollerTile && this.roomUnit.getGoal() == rollerTile) {
this.roomUnit.setLocation(newLocation);
this.roomUnit.setGoalLocation(newLocation);
this.roomUnit.setPreviousLocationZ(newLocation.getStackHeight());
this.roomUnit.setZ(newLocation.getStackHeight());
this.roomUnit.sitUpdate = true;
HabboItem topItem = this.room.getTopItemAt(this.roomUnit.getCurrentLocation().x, this.roomUnit.getCurrentLocation().y);
if (topItem != null && topItem != roller && oldTopItem != topItem) {
try {
topItem.onWalkOff(this.roomUnit, this.room, new Object[]{this});
} catch (Exception e) {
LOGGER.error("Caught exception", e);
}
}
}
}, this.room.getRollerSpeed() == 0 ? 250 : InteractionRoller.DELAY);
*/
} else {
this.roomUnit.setLocation(this.newLocation);
this.roomUnit.setZ(this.newZ);

View File

@ -54,9 +54,9 @@ public class RoomUnitTeleport implements Runnable {
this.roomUnit.setZ(this.z);
this.roomUnit.setPreviousLocationZ(this.z);
this.roomUnit.removeStatus(RoomUnitStatus.MOVE);
ServerMessage teleportMessage = new RoomUnitOnRollerComposer(this.roomUnit, newLocation, this.room).compose();
//ServerMessage teleportMessage = new RoomUnitOnRollerComposer(this.roomUnit, newLocation, this.room).compose();
this.roomUnit.setLocation(newLocation);
this.room.sendComposer(teleportMessage);
//this.room.sendComposer(teleportMessage);
roomUnit.isWiredTeleporting = false;
this.room.updateHabbosAt(newLocation.x, newLocation.y);