mirror of
https://git.krews.org/morningstar/Arcturus-Community.git
synced 2025-02-17 03:02:35 +01:00
Fix bots, pets and users on rollers
This commit is contained in:
parent
3cbb9f5bd8
commit
0c21424c5a
@ -24,6 +24,7 @@ import com.eu.habbo.habbohotel.messenger.MessengerBuddy;
|
||||
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.pets.RideablePet;
|
||||
import com.eu.habbo.habbohotel.users.*;
|
||||
import com.eu.habbo.habbohotel.wired.*;
|
||||
import com.eu.habbo.messages.ISerialize;
|
||||
@ -52,6 +53,7 @@ import com.eu.habbo.plugin.events.users.UserExitRoomEvent;
|
||||
import com.eu.habbo.plugin.events.users.UserIdleEvent;
|
||||
import com.eu.habbo.plugin.events.users.UserRightsTakenEvent;
|
||||
import com.eu.habbo.plugin.events.users.UserRolledEvent;
|
||||
import com.eu.habbo.threading.runnables.RoomUnitRidePet;
|
||||
import com.eu.habbo.threading.runnables.YouAreAPirate;
|
||||
import gnu.trove.TCollections;
|
||||
import gnu.trove.iterator.TIntObjectIterator;
|
||||
@ -1570,11 +1572,13 @@ public class Room implements Comparable<Room>, ISerialize, Runnable
|
||||
|
||||
HabboItem newRoller = null;
|
||||
|
||||
THashSet<Habbo> habbosOnRoller = Room.this.getHabbosAt(roller.getX(), roller.getY());
|
||||
THashSet<Bot> botsOnRoller = Room.this.getBotsAt(Room.this.layout.getTile(roller.getX(), roller.getY()));
|
||||
RoomTile rollerTile = this.getLayout().getTile(roller.getX(), roller.getY());
|
||||
|
||||
if(rollerTile == null)
|
||||
return true;
|
||||
|
||||
THashSet<HabboItem> itemsOnRoller = new THashSet<>();
|
||||
|
||||
RoomTile rollerTile = Room.this.layout.getTile(roller.getX(), roller.getY());
|
||||
for(HabboItem item : getItemsAt(rollerTile))
|
||||
{
|
||||
if(item.getZ() >= roller.getZ() + Item.getCurrentHeight(roller)) {
|
||||
@ -1585,17 +1589,14 @@ public class Room implements Comparable<Room>, ISerialize, Runnable
|
||||
// itemsOnRoller.addAll(this.getItemsAt(rollerTile));
|
||||
itemsOnRoller.remove(roller);
|
||||
|
||||
if (habbosOnRoller.isEmpty() && itemsOnRoller.isEmpty() && botsOnRoller.isEmpty())
|
||||
{
|
||||
if (!rollerTile.hasUnits() && itemsOnRoller.isEmpty())
|
||||
return true;
|
||||
}
|
||||
|
||||
RoomTile tileInFront = Room.this.layout.getTileInFront(Room.this.layout.getTile(roller.getX(), roller.getY()), roller.getRotation());
|
||||
|
||||
if (tileInFront == null)
|
||||
return true;
|
||||
|
||||
|
||||
if (!Room.this.layout.tileExists(tileInFront.x, tileInFront.y))
|
||||
return true;
|
||||
|
||||
@ -1605,7 +1606,7 @@ public class Room implements Comparable<Room>, ISerialize, Runnable
|
||||
if (!tileInFront.getAllowStack() && !(tileInFront.isWalkable() || tileInFront.state == RoomTileState.SIT || tileInFront.state == RoomTileState.LAY))
|
||||
return true;
|
||||
|
||||
if (Room.this.hasHabbosAt(tileInFront.x, tileInFront.y))
|
||||
if (tileInFront.hasUnits())
|
||||
return true;
|
||||
|
||||
THashSet<HabboItem> itemsNewTile = new THashSet<>();
|
||||
@ -1679,92 +1680,76 @@ public class Room implements Comparable<Room>, ISerialize, Runnable
|
||||
roomUserRolledEvent = new UserRolledEvent(null, null, null);
|
||||
}
|
||||
|
||||
for (Habbo habbo : habbosOnRoller)
|
||||
{
|
||||
if (rolledUnitIds.contains(habbo.getRoomUnit().getId())) continue;
|
||||
ArrayList<RoomUnit> unitsOnTile = new ArrayList<RoomUnit>(rollerTile.getUnits());
|
||||
|
||||
rolledUnitIds.add(habbo.getRoomUnit().getId());
|
||||
|
||||
if (stackContainsRoller && !allowFurniture && !(topItem != null && topItem.isWalkable()))
|
||||
continue;
|
||||
|
||||
if (!habbo.getRoomUnit().hasStatus(RoomUnitStatus.MOVE))
|
||||
{
|
||||
RoomTile tile = tileInFront.copy();
|
||||
tile.setStackHeight(habbo.getRoomUnit().getZ() + zOffset);
|
||||
if (roomUserRolledEvent != null)
|
||||
{
|
||||
roomUserRolledEvent = new UserRolledEvent(habbo, roller, tile);
|
||||
Emulator.getPluginManager().fireEvent(roomUserRolledEvent);
|
||||
|
||||
if (roomUserRolledEvent.isCancelled())
|
||||
continue;
|
||||
}
|
||||
|
||||
updatedUnit.remove(habbo.getRoomUnit());
|
||||
messages.add(new RoomUnitOnRollerComposer(habbo.getRoomUnit(), roller, habbo.getRoomUnit().getCurrentLocation(), habbo.getRoomUnit().getZ(), tile, tile.getStackHeight(), room));
|
||||
|
||||
if (itemsOnRoller.isEmpty())
|
||||
{
|
||||
HabboItem item = room.getTopItemAt(tileInFront.x, tileInFront.y);
|
||||
|
||||
if (item != null && itemsNewTile.contains(item))
|
||||
{
|
||||
try
|
||||
{
|
||||
item.onWalkOn(habbo.getRoomUnit(), room, null);
|
||||
} catch (Exception e)
|
||||
{
|
||||
Emulator.getLogging().logErrorLine(e);
|
||||
}
|
||||
}
|
||||
for(RoomUnit unit : rollerTile.getUnits()) {
|
||||
if(unit.getRoomUnitType() == RoomUnitType.PET) {
|
||||
Pet pet = this.getPet(unit);
|
||||
if (pet instanceof RideablePet && ((RideablePet) pet).getRider() != null) {
|
||||
unitsOnTile.remove(unit);
|
||||
}
|
||||
}
|
||||
|
||||
if (habbo.getRoomUnit().hasStatus(RoomUnitStatus.SIT))
|
||||
habbo.getRoomUnit().sitUpdate = true;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
for (Bot bot: botsOnRoller)
|
||||
{
|
||||
if (rolledUnitIds.contains(bot.getRoomUnit().getId())) continue;
|
||||
|
||||
rolledUnitIds.add(bot.getRoomUnit().getId());
|
||||
for(RoomUnit unit : unitsOnTile) {
|
||||
if (rolledUnitIds.contains(unit.getId())) continue;
|
||||
|
||||
if (stackContainsRoller && !allowFurniture && !(topItem != null && topItem.isWalkable()))
|
||||
continue;
|
||||
|
||||
if (!bot.getRoomUnit().hasStatus(RoomUnitStatus.MOVE))
|
||||
if(unit.hasStatus(RoomUnitStatus.MOVE))
|
||||
continue;
|
||||
|
||||
RoomTile tile = tileInFront.copy();
|
||||
tile.setStackHeight(unit.getZ() + zOffset);
|
||||
|
||||
if (roomUserRolledEvent != null && unit.getRoomUnitType() == RoomUnitType.USER)
|
||||
{
|
||||
RoomTile tile = tileInFront.copy();
|
||||
tile.setStackHeight(bot.getRoomUnit().getZ() + zOffset);
|
||||
roomUserRolledEvent = new UserRolledEvent(getHabbo(unit), roller, tile);
|
||||
Emulator.getPluginManager().fireEvent(roomUserRolledEvent);
|
||||
|
||||
updatedUnit.remove(bot.getRoomUnit());
|
||||
messages.add(new RoomUnitOnRollerComposer(bot.getRoomUnit(), roller, bot.getRoomUnit().getCurrentLocation(), bot.getRoomUnit().getZ(), tile, tile.getStackHeight(), room));
|
||||
if (roomUserRolledEvent.isCancelled())
|
||||
continue;
|
||||
}
|
||||
|
||||
if (itemsOnRoller.isEmpty())
|
||||
// horse riding
|
||||
boolean isRiding = false;
|
||||
if(unit.getRoomUnitType() == RoomUnitType.USER) {
|
||||
Habbo rollingHabbo = this.getHabbo(unit);
|
||||
RideablePet riding = rollingHabbo.getHabboInfo().getRiding();
|
||||
if(riding != null) {
|
||||
RoomUnit ridingUnit = riding.getRoomUnit();
|
||||
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(), room));
|
||||
isRiding = true;
|
||||
}
|
||||
}
|
||||
|
||||
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), room));
|
||||
|
||||
if (itemsOnRoller.isEmpty())
|
||||
{
|
||||
HabboItem item = room.getTopItemAt(tileInFront.x, tileInFront.y);
|
||||
|
||||
if (item != null && itemsNewTile.contains(item))
|
||||
{
|
||||
HabboItem item = room.getTopItemAt(tileInFront.x, tileInFront.y);
|
||||
|
||||
if (item != null && itemsNewTile.contains(item))
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
item.onWalkOn(bot.getRoomUnit(), room, null);
|
||||
} catch (Exception e)
|
||||
{
|
||||
Emulator.getLogging().logErrorLine(e);
|
||||
}
|
||||
item.onWalkOn(unit, room, null);
|
||||
} catch (Exception e)
|
||||
{
|
||||
Emulator.getLogging().logErrorLine(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (bot.getRoomUnit().hasStatus(RoomUnitStatus.SIT))
|
||||
bot.getRoomUnit().sitUpdate = true;
|
||||
|
||||
break;
|
||||
if(unit.hasStatus(RoomUnitStatus.SIT)) {
|
||||
unit.sitUpdate = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,10 @@ package com.eu.habbo.habbohotel.rooms;
|
||||
|
||||
import gnu.trove.set.hash.THashSet;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RoomTile
|
||||
{
|
||||
public final short x;
|
||||
@ -205,6 +209,10 @@ public class RoomTile
|
||||
return this.x == x && this.y == y;
|
||||
}
|
||||
|
||||
public List<RoomUnit> getUnits() {
|
||||
return new ArrayList<RoomUnit>(this.units);
|
||||
}
|
||||
|
||||
public void addUnit(RoomUnit unit) {
|
||||
if(!this.units.contains(unit)) {
|
||||
this.units.add(unit);
|
||||
|
@ -46,14 +46,6 @@ public class RoomUnitOnRollerComposer extends MessageComposer
|
||||
if(!this.room.isLoaded())
|
||||
return null;
|
||||
|
||||
if (!this.room.isAllowWalkthrough() && this.roller != null)
|
||||
{
|
||||
if (this.room.hasHabbosAt(this.newLocation.x, this.newLocation.y))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
this.response.init(Outgoing.ObjectOnRollerComposer);
|
||||
this.response.appendInt(this.oldLocation.x);
|
||||
this.response.appendInt(this.oldLocation.y);
|
||||
|
Loading…
x
Reference in New Issue
Block a user