Added Apply furni to set conditions feature

This commit is contained in:
Remco 2021-01-10 20:45:44 +01:00
parent 0fc9760894
commit 35ac99b2c6
7 changed files with 180 additions and 4 deletions

View File

@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.items.interactions.wired.conditions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredCondition;
import com.eu.habbo.habbohotel.items.interactions.wired.interfaces.InteractionWiredMatchFurniSettings;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomUnit;
import com.eu.habbo.habbohotel.users.HabboItem;
@ -16,7 +17,7 @@ import gnu.trove.set.hash.THashSet;
import java.sql.ResultSet;
import java.sql.SQLException;
public class WiredConditionMatchStatePosition extends InteractionWiredCondition {
public class WiredConditionMatchStatePosition extends InteractionWiredCondition implements InteractionWiredMatchFurniSettings {
public static final WiredConditionType type = WiredConditionType.MATCH_SSHOT;
private THashSet<WiredMatchFurniSetting> settings;
@ -198,4 +199,24 @@ public class WiredConditionMatchStatePosition extends InteractionWiredCondition
}
}
}
@Override
public THashSet<WiredMatchFurniSetting> getMatchFurniSettings() {
return this.settings;
}
@Override
public boolean shouldMatchState() {
return this.state;
}
@Override
public boolean shouldMatchRotation() {
return this.direction;
}
@Override
public boolean shouldMatchPosition() {
return this.position;
}
}

View File

@ -3,6 +3,7 @@ package com.eu.habbo.habbohotel.items.interactions.wired.conditions;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredCondition;
import com.eu.habbo.habbohotel.items.interactions.wired.interfaces.InteractionWiredMatchFurniSettings;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomUnit;
import com.eu.habbo.habbohotel.users.HabboItem;
@ -16,7 +17,7 @@ import gnu.trove.set.hash.THashSet;
import java.sql.ResultSet;
import java.sql.SQLException;
public class WiredConditionNotMatchStatePosition extends InteractionWiredCondition {
public class WiredConditionNotMatchStatePosition extends InteractionWiredCondition implements InteractionWiredMatchFurniSettings {
public static final WiredConditionType type = WiredConditionType.NOT_MATCH_SSHOT;
private THashSet<WiredMatchFurniSetting> settings;
@ -189,4 +190,24 @@ public class WiredConditionNotMatchStatePosition extends InteractionWiredConditi
}
}
}
@Override
public THashSet<WiredMatchFurniSetting> getMatchFurniSettings() {
return this.settings;
}
@Override
public boolean shouldMatchState() {
return this.state;
}
@Override
public boolean shouldMatchRotation() {
return this.rotation;
}
@Override
public boolean shouldMatchPosition() {
return this.position;
}
}

View File

@ -5,6 +5,7 @@ import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.games.GameTeamColors;
import com.eu.habbo.habbohotel.items.Item;
import com.eu.habbo.habbohotel.items.interactions.InteractionWiredEffect;
import com.eu.habbo.habbohotel.items.interactions.wired.interfaces.InteractionWiredMatchFurniSettings;
import com.eu.habbo.habbohotel.rooms.*;
import com.eu.habbo.habbohotel.users.HabboItem;
import com.eu.habbo.habbohotel.wired.WiredEffectType;
@ -24,7 +25,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
public class WiredEffectMatchFurni extends InteractionWiredEffect {
public class WiredEffectMatchFurni extends InteractionWiredEffect implements InteractionWiredMatchFurniSettings {
private static final Logger LOGGER = LoggerFactory.getLogger(WiredEffectMatchFurni.class);
private static final WiredEffectType type = WiredEffectType.MATCH_SSHOT;
@ -241,6 +242,26 @@ public class WiredEffectMatchFurni extends InteractionWiredEffect {
}
}
@Override
public THashSet<WiredMatchFurniSetting> getMatchFurniSettings() {
return this.settings;
}
@Override
public boolean shouldMatchState() {
return this.state;
}
@Override
public boolean shouldMatchRotation() {
return this.direction;
}
@Override
public boolean shouldMatchPosition() {
return this.position;
}
static class JsonData {
boolean state;
boolean direction;

View File

@ -0,0 +1,11 @@
package com.eu.habbo.habbohotel.items.interactions.wired.interfaces;
import com.eu.habbo.habbohotel.wired.WiredMatchFurniSetting;
import gnu.trove.set.hash.THashSet;
public interface InteractionWiredMatchFurniSettings {
public THashSet<WiredMatchFurniSetting> getMatchFurniSettings();
public boolean shouldMatchState();
public boolean shouldMatchRotation();
public boolean shouldMatchPosition();
}

View File

@ -65,6 +65,7 @@ import com.eu.habbo.messages.incoming.unknown.RequestResolutionEvent;
import com.eu.habbo.messages.incoming.unknown.UnknownEvent1;
import com.eu.habbo.messages.incoming.users.*;
import com.eu.habbo.messages.incoming.wired.WiredConditionSaveDataEvent;
import com.eu.habbo.messages.incoming.wired.WiredEffectApplySetConditionsEvent;
import com.eu.habbo.messages.incoming.wired.WiredEffectSaveDataEvent;
import com.eu.habbo.messages.incoming.wired.WiredTriggerSaveDataEvent;
import com.eu.habbo.plugin.EventHandler;
@ -81,7 +82,7 @@ public class PacketManager {
private static final Logger LOGGER = LoggerFactory.getLogger(PacketManager.class);
private static final List<Integer> logList = new ArrayList<>();
public static boolean DEBUG_SHOW_PACKETS = false;
public static boolean DEBUG_SHOW_PACKETS = true;
public static boolean MULTI_THREADED_PACKET_HANDLING = false;
private final THashMap<Integer, Class<? extends MessageHandler>> incoming;
private final THashMap<Integer, List<ICallable>> callables;
@ -579,6 +580,7 @@ public class PacketManager {
this.registerHandler(Incoming.WiredTriggerSaveDataEvent, WiredTriggerSaveDataEvent.class);
this.registerHandler(Incoming.WiredEffectSaveDataEvent, WiredEffectSaveDataEvent.class);
this.registerHandler(Incoming.WiredConditionSaveDataEvent, WiredConditionSaveDataEvent.class);
this.registerHandler(Incoming.WiredEffectApplySetConditionsEvent, WiredEffectApplySetConditionsEvent.class);
}
void registerUnknown() throws Exception {

View File

@ -155,6 +155,8 @@ public class Incoming {
public static final int RequestInventoryItemsEvent = 3150;
public static final int ModToolRoomAlertEvent = 3842;
public static final int WiredEffectSaveDataEvent = 2281;
public static final int WiredEffectApplySetConditionsEvent = 3373;
// public static final int WiredEffectApplySetConditionsEvent = 495;
public static final int CheckPetNameEvent = 2109;
public static final int SecureLoginEvent = 2419;
public static final int BotSaveSettingsEvent = 2624;

View File

@ -0,0 +1,98 @@
package com.eu.habbo.messages.incoming.wired;
import com.eu.habbo.habbohotel.items.interactions.wired.interfaces.InteractionWiredMatchFurniSettings;
import com.eu.habbo.habbohotel.rooms.FurnitureMovementError;
import com.eu.habbo.habbohotel.rooms.Room;
import com.eu.habbo.habbohotel.rooms.RoomTile;
import com.eu.habbo.habbohotel.rooms.RoomTileState;
import com.eu.habbo.habbohotel.users.HabboItem;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertComposer;
import com.eu.habbo.messages.outgoing.generic.alerts.BubbleAlertKeys;
import com.eu.habbo.messages.outgoing.rooms.items.FloorItemOnRollerComposer;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class WiredEffectApplySetConditionsEvent extends MessageHandler {
@Override
public void handle() throws Exception {
int itemId = this.packet.readInt();
// Executing Habbo has to be in a Room
if (!this.client.getHabbo().getRoomUnit().isInRoom()) {
this.client.sendResponse(new BubbleAlertComposer(
BubbleAlertKeys.FURNITURE_PLACEMENT_ERROR.key,
FurnitureMovementError.NO_RIGHTS.errorCode
));
return;
}
Room room = this.client.getHabbo().getHabboInfo().getCurrentRoom();
if (room != null) {
// Executing Habbo should be able to edit wireds
if (room.hasRights(this.client.getHabbo()) || room.isOwner(this.client.getHabbo())) {
List<HabboItem> wireds = new ArrayList<>();
wireds.addAll(room.getRoomSpecialTypes().getConditions());
wireds.addAll(room.getRoomSpecialTypes().getEffects());
// Find the item with the given ID in the room
Optional<HabboItem> item = wireds.stream()
.filter(wired -> wired.getId() == itemId)
.findFirst();
// If the item exists
if (item.isPresent()) {
HabboItem wiredItem = item.get();
// The item should have settings to match furni state, position and rotation
if (wiredItem instanceof InteractionWiredMatchFurniSettings) {
InteractionWiredMatchFurniSettings wired = (InteractionWiredMatchFurniSettings) wiredItem;
// Try to apply the set settings to each item
wired.getMatchFurniSettings().forEach(setting -> {
HabboItem matchItem = room.getHabboItem(setting.item_id);
// Match state
if (wired.shouldMatchState() && matchItem.allowWiredResetState()) {
if (!setting.state.equals(" ") && !matchItem.getExtradata().equals(setting.state)) {
matchItem.setExtradata(setting.state);
room.updateItemState(matchItem);
}
}
RoomTile oldLocation = room.getLayout().getTile(matchItem.getX(), matchItem.getY());
double oldZ = matchItem.getZ();
// Match Position & Rotation
if(wired.shouldMatchRotation() && !wired.shouldMatchPosition()) {
if(matchItem.getRotation() != setting.rotation && room.furnitureFitsAt(oldLocation, matchItem, setting.rotation, false) == FurnitureMovementError.NONE) {
room.moveFurniTo(matchItem, oldLocation, setting.rotation, null, true);
}
}
else if(wired.shouldMatchPosition()) {
boolean slideAnimation = !wired.shouldMatchRotation() || matchItem.getRotation() == setting.rotation;
RoomTile newLocation = room.getLayout().getTile((short) setting.x, (short) setting.y);
int newRotation = wired.shouldMatchRotation() ? setting.rotation : matchItem.getRotation();
if(newLocation != null && newLocation.state != RoomTileState.INVALID && (newLocation != oldLocation || newRotation != matchItem.getRotation()) && room.furnitureFitsAt(newLocation, matchItem, newRotation, true) == FurnitureMovementError.NONE) {
if(room.moveFurniTo(matchItem, newLocation, newRotation, null, !slideAnimation) == FurnitureMovementError.NONE) {
if(slideAnimation) {
room.sendComposer(new FloorItemOnRollerComposer(matchItem, null, oldLocation, oldZ, newLocation, matchItem.getZ(), 0, room).compose());
}
}
}
}
});
}
}
}
}
}
}