Arcturus-Community/src/main/java/com/eu/habbo/habbohotel/items/interactions/InteractionTeleport.java

196 lines
5.7 KiB
Java
Raw Normal View History

2018-07-06 15:30:00 +02:00
package com.eu.habbo.habbohotel.items.interactions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
2019-03-18 02:22:00 +01:00
import com.eu.habbo.habbohotel.rooms.RoomTileState;
2018-07-06 15:30:00 +02:00
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;
2019-03-18 02:22:00 +01:00
import com.eu.habbo.messages.outgoing.rooms.items.ItemIntStateComposer;
2018-07-06 15:30:00 +02:00
import com.eu.habbo.threading.runnables.teleport.TeleportActionOne;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InteractionTeleport extends HabboItem
{
private int targetId;
private int targetRoomId;
private int roomUnitID = 0;
public InteractionTeleport(ResultSet set, Item baseItem) throws SQLException
{
super(set, baseItem);
}
public InteractionTeleport(int id, int userId, Item item, String extradata, int limitedStack, int limitedSells)
{
super(id, userId, item, extradata, limitedStack, limitedSells);
}
@Override
public void serializeExtradata(ServerMessage serverMessage)
{
serverMessage.appendInt((this.isLimited() ? 256 : 0));
serverMessage.appendString(this.getExtradata());
super.serializeExtradata(serverMessage);
}
@Override
public boolean canWalkOn(RoomUnit roomUnit, Room room, Object[] objects)
{
2019-03-18 02:22:00 +01:00
return this.getBaseItem().allowWalk() || roomUnit.getId() == this.roomUnitID;
2018-07-06 15:30:00 +02:00
}
@Override
public boolean isWalkable()
{
return true;
}
@Override
public void onClick(GameClient client, Room room, Object[] objects) throws Exception
{
super.onClick(client, room, objects);
if(room != null && client != null && objects.length <= 1)
{
RoomTile tile = room.getLayout().getTileInFront(room.getLayout().getTile(this.getX(), this.getY()), this.getRotation());
2019-03-18 02:22:00 +01:00
RoomTile teleportPosition = room.getLayout().getTile(this.getX(), this.getY());
2018-07-06 15:30:00 +02:00
if (tile != null && tile.equals(client.getHabbo().getRoomUnit().getCurrentLocation()))
{
if (!room.hasHabbosAt(this.getX(), this.getY()) && this.roomUnitID == 0)
{
2019-03-18 02:22:00 +01:00
room.sendComposer(new ItemIntStateComposer(this.getId(), 1).compose());
room.scheduledTasks.add(() -> {
if (client.getHabbo().getRoomUnit().isTeleporting) return;
this.roomUnitID = client.getHabbo().getRoomUnit().getId();
room.updateTile(teleportPosition);
client.getHabbo().getRoomUnit().setGoalLocation(room.getLayout().getTile(this.getX(), this.getY()));
2018-07-06 15:30:00 +02:00
});
}
}
2019-03-18 02:22:00 +01:00
else if (teleportPosition.equals(client.getHabbo().getRoomUnit().getCurrentLocation()) && tile != null && tile.state != RoomTileState.BLOCKED && tile.state != RoomTileState.INVALID)
2018-07-06 15:30:00 +02:00
{
2019-03-18 02:22:00 +01:00
this.startTeleport(room, client.getHabbo());
2018-07-06 15:30:00 +02:00
}
}
}
@Override
public void onWalk(RoomUnit roomUnit, Room room, Object[] objects) throws Exception
{
}
@Override
public void onWalkOn(RoomUnit roomUnit, Room room, Object[] objects) throws Exception
{
super.onWalkOn(roomUnit, room, objects);
Habbo habbo = room.getHabbo(roomUnit);
if (habbo != null && habbo.getRoomUnit().getId() == this.roomUnitID)
{
if (habbo.getRoomUnit().getGoal().equals(room.getLayout().getTile(this.getX(), this.getY())))
{
2019-03-18 02:22:00 +01:00
this.startTeleport(room, habbo);
2018-07-06 15:30:00 +02:00
}
}
}
@Override
public void onWalkOff(RoomUnit roomUnit, Room room, Object[] objects) throws Exception
{
super.onWalkOff(roomUnit, room, objects);
}
@Override
public void run()
{
if(!this.getExtradata().equals("0"))
{
this.setExtradata("0");
Room room = Emulator.getGameEnvironment().getRoomManager().getRoom(this.getRoomId());
if(room != null)
{
room.updateItem(this);
}
}
super.run();
}
@Override
public void onPickUp(Room room)
{
this.targetId = 0;
this.targetRoomId = 0;
this.setExtradata("0");
}
2018-09-12 18:45:00 +02:00
protected boolean canUseTeleport(GameClient client, Room room)
2018-07-06 15:30:00 +02:00
{
if(!this.getExtradata().equals("0"))
return false;
if(client.getHabbo().getRoomUnit().isTeleporting)
return false;
if (client.getHabbo().getRoomUnit().getCurrentLocation().is(this.getX(), this.getY()))
return true;
return true;
}
public int getTargetId()
{
return this.targetId;
}
public void setTargetId(int targetId)
{
this.targetId = targetId;
}
public int getTargetRoomId()
{
return this.targetRoomId;
}
public void setTargetRoomId(int targetRoomId)
{
this.targetRoomId = targetRoomId;
}
@Override
public boolean allowWiredResetState()
{
return false;
}
public void startTeleport(Room room, Habbo habbo)
{
if (this.canUseTeleport(habbo.getClient(), room))
{
this.roomUnitID = 0;
habbo.getRoomUnit().isTeleporting = true;
//new TeleportInteraction(room, client, this).run();
this.setExtradata("1");
room.updateItem(this);
room.scheduledTasks.add(new TeleportActionOne(this, room, habbo.getClient()));
}
}
2018-10-07 00:28:00 +02:00
@Override
public boolean isUsable()
{
return true;
}
2018-07-06 15:30:00 +02:00
}