mirror of
https://github.com/Quackster/Havana.git
synced 2025-07-04 21:57:46 +00:00
Add official Habbo release 39 flash client support
This commit is contained in:
parent
09f0b1de84
commit
4026f84c2d
93 changed files with 2975 additions and 59 deletions
|
@ -53,6 +53,38 @@ public class NavigatorDao {
|
||||||
return categories;
|
return categories;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the styles for the public rooms
|
||||||
|
*
|
||||||
|
* @return the list of recent rooms
|
||||||
|
*/
|
||||||
|
public static Map<Integer, NavigatorStyle> getNavigatorStyles() {
|
||||||
|
Map<Integer, NavigatorStyle> style = new HashMap<>();
|
||||||
|
|
||||||
|
Connection sqlConnection = null;
|
||||||
|
PreparedStatement preparedStatement = null;
|
||||||
|
ResultSet resultSet = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
sqlConnection = Storage.getStorage().getConnection();
|
||||||
|
preparedStatement = Storage.getStorage().prepare("SELECT * FROM navigator_styles", sqlConnection);
|
||||||
|
resultSet = preparedStatement.executeQuery();
|
||||||
|
|
||||||
|
while (resultSet.next()) {
|
||||||
|
style.put(resultSet.getInt("room_id"), new NavigatorStyle(resultSet.getInt("room_id"), resultSet.getString("description"), resultSet.getString("thumbnail_url"), resultSet.getInt("thumbnail_layout")));
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
Storage.logError(e);
|
||||||
|
} finally {
|
||||||
|
Storage.closeSilently(resultSet);
|
||||||
|
Storage.closeSilently(preparedStatement);
|
||||||
|
Storage.closeSilently(sqlConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the list of recent rooms from database set by limit and category id.
|
* Get the list of recent rooms from database set by limit and category id.
|
||||||
*
|
*
|
||||||
|
|
|
@ -101,6 +101,14 @@ public class Inventory {
|
||||||
private Map<Integer,Item> getCasts() {
|
private Map<Integer,Item> getCasts() {
|
||||||
LinkedHashMap<Integer, Item> casts = new LinkedHashMap<>();
|
LinkedHashMap<Integer, Item> casts = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
if (this.player.getNetwork().isFlashConnection()) {
|
||||||
|
int stripSlotId = 0;
|
||||||
|
|
||||||
|
for (Item item : this.displayedItems) {
|
||||||
|
addItemCast(casts, stripSlotId++, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (this.paginatedItems.containsKey(this.handStripPageIndex)) {
|
if (this.paginatedItems.containsKey(this.handStripPageIndex)) {
|
||||||
int stripSlotId = this.handStripPageIndex * MAX_ITEMS_PER_PAGE;
|
int stripSlotId = this.handStripPageIndex * MAX_ITEMS_PER_PAGE;
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,22 @@ public class Item {
|
||||||
* @return true, if successful.
|
* @return true, if successful.
|
||||||
*/
|
*/
|
||||||
public boolean isWalkable(Entity entity, Position selectedPosition) {
|
public boolean isWalkable(Entity entity, Position selectedPosition) {
|
||||||
|
if (entity != null) {
|
||||||
|
if (entity.getType() == EntityType.PLAYER) {
|
||||||
|
Player player = (Player) entity;
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
if (this.getDefinition().getInteractionType() == InteractionType.IDOL_SCOREBOARD) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.getDefinition().getInteractionType() == InteractionType.IDOL_VOTE_CHAIR) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (entity == null && this.hasBehaviour(ItemBehaviour.CAN_NOT_STACK_ON_TOP))
|
if (entity == null && this.hasBehaviour(ItemBehaviour.CAN_NOT_STACK_ON_TOP))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,11 @@ public class PoolInteractor {
|
||||||
|
|
||||||
// Only check these below if the user is in a pool room.
|
// Only check these below if the user is in a pool room.
|
||||||
if (room.getModel().getName().startsWith("pool_") ||
|
if (room.getModel().getName().startsWith("pool_") ||
|
||||||
room.getModel().getName().equals("md_a")) {
|
room.getModel().getName().equals("md_a")) {
|
||||||
if (fromItem != null) {
|
if (fromItem != null) {
|
||||||
// Check if they have swimmers before trying to enter pool
|
// Check if they have swimmers before trying to enter pool
|
||||||
if (fromItem.getDefinition().getSprite().equals("poolEnter") ||
|
if (fromItem.getDefinition().getSprite().equals("poolEnter") ||
|
||||||
fromItem.getDefinition().getSprite().equals("poolExit")) {
|
fromItem.getDefinition().getSprite().equals("poolExit")) {
|
||||||
return entity.getDetails().getPoolFigure().length() > 0;
|
return entity.getDetails().getPoolFigure().length() > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,21 +35,39 @@ public class PoolInteractor {
|
||||||
if (toItem != null) {
|
if (toItem != null) {
|
||||||
// Check if they have swimmers before trying to enter pool
|
// Check if they have swimmers before trying to enter pool
|
||||||
if (toItem.getDefinition().getSprite().equals("poolEnter") ||
|
if (toItem.getDefinition().getSprite().equals("poolEnter") ||
|
||||||
toItem.getDefinition().getSprite().equals("poolExit")) {
|
toItem.getDefinition().getSprite().equals("poolExit")) {
|
||||||
return entity.getDetails().getPoolFigure().length() > 0;
|
return entity.getDetails().getPoolFigure().length() > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow to "enter" the pool if they're already swimming
|
// Don't allow to "enter" the pool if they're already swimming
|
||||||
if (entity.getRoomUser().containsStatus(StatusType.SWIM) &&
|
if (entity.getRoomUser().containsStatus(StatusType.SWIM) &&
|
||||||
toItem.getDefinition().getSprite().equals("poolEnter")) {
|
toItem.getDefinition().getSprite().equals("poolEnter")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't allow to "leave" the pool if they're not swimming
|
// Don't allow to "leave" the pool if they're not swimming
|
||||||
if (!entity.getRoomUser().containsStatus(StatusType.SWIM) &&
|
if (!entity.getRoomUser().containsStatus(StatusType.SWIM) &&
|
||||||
toItem.getDefinition().getSprite().equals("poolExit")) {
|
toItem.getDefinition().getSprite().equals("poolExit")) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't allow users to cut people in queue, force them to garound
|
||||||
|
if (toItem.getDefinition().getSprite().contains("queue_tile2")) {
|
||||||
|
if (entity.getType() == EntityType.PLAYER && ((Player)entity).getNetwork().isFlashConnection()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't allow people to enter the booth if it's closed, or don't allow
|
||||||
|
// if they attempt to use the pool lift without swimmers
|
||||||
|
if (toItem.getDefinition().getSprite().equals("poolBooth") ||
|
||||||
|
toItem.getDefinition().getSprite().equals("poolLift")) {
|
||||||
|
if (entity.getType() == EntityType.PLAYER && ((Player)entity).getNetwork().isFlashConnection()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !toItem.getCurrentProgramValue().equals("close");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,24 @@ public class MessengerUser {
|
||||||
}
|
}
|
||||||
|
|
||||||
Room room = player.getRoomUser().getRoom();
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
|
// Don't allow follow into rooms that you cannot gain entry into normally
|
||||||
|
if (friend.getNetwork().isFlashConnection()) {
|
||||||
|
int roomId = room.getId();
|
||||||
|
|
||||||
|
if (WalkwaysManager.getInstance().getWalkways().stream().anyMatch(walkway -> walkway.getRoomTargetId() == room.getId())) {
|
||||||
|
var roomData = WalkwaysManager.getInstance().getWalkways().stream().filter(walkway -> walkway.getRoomTargetId() == room.getId()).findFirst().orElse(null);
|
||||||
|
|
||||||
|
if (roomData != null) {
|
||||||
|
roomId = roomData.getRoomId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (room.isPublicRoom() && NavigatorManager.getInstance().getNavigatorStyle(roomId) == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (!room.getModel().getName().startsWith("bb_") && !room.getModel().getName().equals("snowwar"));
|
return (!room.getModel().getName().startsWith("bb_") && !room.getModel().getName().equals("snowwar"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,11 @@ import java.util.*;
|
||||||
public class NavigatorManager {
|
public class NavigatorManager {
|
||||||
private static NavigatorManager instance;
|
private static NavigatorManager instance;
|
||||||
private final HashMap<Integer, NavigatorCategory> categoryMap;
|
private final HashMap<Integer, NavigatorCategory> categoryMap;
|
||||||
|
private final Map<Integer, NavigatorStyle> navigatorStyles;
|
||||||
|
|
||||||
private NavigatorManager() {
|
private NavigatorManager() {
|
||||||
this.categoryMap = NavigatorDao.getCategories();
|
this.categoryMap = NavigatorDao.getCategories();
|
||||||
|
this.navigatorStyles = NavigatorDao.getNavigatorStyles();
|
||||||
//NavigatorDao.resetBadPrivateRoomCategories();
|
//NavigatorDao.resetBadPrivateRoomCategories();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,6 +74,20 @@ public class NavigatorManager {
|
||||||
return this.categoryMap;
|
return this.categoryMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the navigator style by room id, will give default style if the room id doesn't exist.
|
||||||
|
*
|
||||||
|
* @param roomId the room id
|
||||||
|
* @return the style
|
||||||
|
*/
|
||||||
|
public NavigatorStyle getNavigatorStyle(int roomId) {
|
||||||
|
if (this.navigatorStyles.containsKey(roomId)) {
|
||||||
|
return this.navigatorStyles.get(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;//new NavigatorStyle(-1, "officialrooms_fr/percy_jackson_nav.png", 1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get instance of {@link NavigatorManager}
|
* Get instance of {@link NavigatorManager}
|
||||||
*
|
*
|
||||||
|
|
|
@ -20,7 +20,12 @@ import org.alexdev.havana.game.messenger.Messenger;
|
||||||
import org.alexdev.havana.game.player.guides.PlayerGuideManager;
|
import org.alexdev.havana.game.player.guides.PlayerGuideManager;
|
||||||
import org.alexdev.havana.game.player.statistics.PlayerStatistic;
|
import org.alexdev.havana.game.player.statistics.PlayerStatistic;
|
||||||
import org.alexdev.havana.game.player.statistics.PlayerStatisticManager;
|
import org.alexdev.havana.game.player.statistics.PlayerStatisticManager;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
import org.alexdev.havana.game.room.entities.RoomPlayer;
|
import org.alexdev.havana.game.room.entities.RoomPlayer;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.HOME_ROOM;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.modtool.FLASH_MODTOOL;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FAVOURITES;
|
||||||
|
import org.alexdev.havana.messages.incoming.navigator.ADD_FAVORITE_ROOM;
|
||||||
import org.alexdev.havana.messages.outgoing.alerts.ALERT;
|
import org.alexdev.havana.messages.outgoing.alerts.ALERT;
|
||||||
import org.alexdev.havana.messages.outgoing.alerts.HOTEL_LOGOUT;
|
import org.alexdev.havana.messages.outgoing.alerts.HOTEL_LOGOUT;
|
||||||
import org.alexdev.havana.messages.outgoing.alerts.HOTEL_LOGOUT.LogoutReason;
|
import org.alexdev.havana.messages.outgoing.alerts.HOTEL_LOGOUT.LogoutReason;
|
||||||
|
@ -188,6 +193,17 @@ public class Player extends Entity {
|
||||||
this.send(new LOGIN());
|
this.send(new LOGIN());
|
||||||
this.send(new AVATAR_EFFECTS(this.effects));
|
this.send(new AVATAR_EFFECTS(this.effects));
|
||||||
|
|
||||||
|
if (this.network.isFlashConnection()) {
|
||||||
|
int roomId = PlayerDao.getHomeRoom(this.details.getId());
|
||||||
|
|
||||||
|
if (RoomDao.getRoomById(roomId) == null) {
|
||||||
|
PlayerDao.saveHomeRoom(this.details.getId(), 0);
|
||||||
|
roomId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.send(new HOME_ROOM(roomId));
|
||||||
|
}
|
||||||
|
|
||||||
if (GameConfiguration.getInstance().getBoolean("welcome.message.enabled")) {
|
if (GameConfiguration.getInstance().getBoolean("welcome.message.enabled")) {
|
||||||
String alertMessage = GameConfiguration.getInstance().getString("welcome.message.content");
|
String alertMessage = GameConfiguration.getInstance().getString("welcome.message.content");
|
||||||
alertMessage = StringUtil.replaceAlertMessage(alertMessage, this);
|
alertMessage = StringUtil.replaceAlertMessage(alertMessage, this);
|
||||||
|
@ -264,6 +280,14 @@ public class Player extends Entity {
|
||||||
}
|
}
|
||||||
|
|
||||||
ClubSubscription.countMemberDays(this);
|
ClubSubscription.countMemberDays(this);
|
||||||
|
|
||||||
|
if (this.network.isFlashConnection()) {
|
||||||
|
this.send(new FLASH_FAVOURITES(ADD_FAVORITE_ROOM.MAX_FAVOURITES, RoomManager.getInstance().getFavouriteRooms(this.getDetails().getId(), true)));
|
||||||
|
|
||||||
|
if (this.getDetails().getRank().getRankId() >= PlayerRank.MODERATOR.getRankId()) {
|
||||||
|
this.send(new FLASH_MODTOOL());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -214,7 +214,11 @@ public class PlayerManager {
|
||||||
|
|
||||||
// Notify all users of shutdown timeout
|
// Notify all users of shutdown timeout
|
||||||
for (Player p : this.players) {
|
for (Player p : this.players) {
|
||||||
p.send(new INFO_HOTEL_CLOSING(maintenanceAt));
|
if (p.getNetwork().isFlashConnection()) {
|
||||||
|
p.send(new ALERT("The hotel is currently closing in " + Math.toIntExact(maintenanceAt.toMinutes()) + " minutes!"));
|
||||||
|
} else {
|
||||||
|
p.send(new INFO_HOTEL_CLOSING(maintenanceAt));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,6 +90,21 @@ public class Room {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends a packet to flash clients in room only.
|
||||||
|
*
|
||||||
|
* @param composer the composer to send
|
||||||
|
*/
|
||||||
|
public void sendFlashClients(MessageComposer composer) {
|
||||||
|
for (Player player : this.roomEntityManager.getPlayers()) {
|
||||||
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(composer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the user id is the owner of the room.
|
* Checks if the user id is the owner of the room.
|
||||||
*
|
*
|
||||||
|
@ -259,8 +274,10 @@ public class Room {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPublic) {
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
roomId = roomId + RoomManager.PUBLIC_ROOM_OFFSET;
|
if (isPublic) {
|
||||||
|
roomId = roomId + RoomManager.PUBLIC_ROOM_OFFSET;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player.send(new ROOMFORWARD(isPublic, roomId));
|
player.send(new ROOMFORWARD(isPublic, roomId));
|
||||||
|
|
|
@ -285,6 +285,10 @@ public class RoomPlayer extends RoomEntity {
|
||||||
// Send refresh to room if inside room
|
// Send refresh to room if inside room
|
||||||
if (this.getRoom() != null) {
|
if (this.getRoom() != null) {
|
||||||
this.getRoom().send(new FIGURE_CHANGE(this.getInstanceId(), this.player.getDetails()));
|
this.getRoom().send(new FIGURE_CHANGE(this.getInstanceId(), this.player.getDetails()));
|
||||||
|
|
||||||
|
if (this.player.getNetwork().isFlashConnection()) {
|
||||||
|
this.player.send(new FIGURE_CHANGE(-1, this.player.getDetails()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,12 @@ import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
import org.alexdev.havana.game.room.RoomManager;
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
import org.alexdev.havana.log.Log;
|
import org.alexdev.havana.log.Log;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.SET_HOME_ROOM;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.modtool.FLASH_MODTOOL_ROOMINFO;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.modtool.FLASH_MODTOOL_ROOM_CHATLOG;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.navigator.*;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.navigator.beta.FLASH_GETGUESTROOMS;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.rooms.*;
|
||||||
import org.alexdev.havana.messages.incoming.catalogue.GET_ALIAS_LIST;
|
import org.alexdev.havana.messages.incoming.catalogue.GET_ALIAS_LIST;
|
||||||
import org.alexdev.havana.messages.incoming.catalogue.GET_CATALOGUE_PAGE;
|
import org.alexdev.havana.messages.incoming.catalogue.GET_CATALOGUE_PAGE;
|
||||||
import org.alexdev.havana.messages.incoming.catalogue.GET_CATALOG_INDEX;
|
import org.alexdev.havana.messages.incoming.catalogue.GET_CATALOG_INDEX;
|
||||||
|
@ -108,6 +114,7 @@ public class MessageHandler {
|
||||||
registerJukeboxPackets();
|
registerJukeboxPackets();
|
||||||
registerPollPackets();
|
registerPollPackets();
|
||||||
registerTutorPackets();
|
registerTutorPackets();
|
||||||
|
registerFlashModTool();
|
||||||
|
|
||||||
registerEvent(230, (player, reader) -> {
|
registerEvent(230, (player, reader) -> {
|
||||||
if (player.getRoomUser().getRoom() == null) {
|
if (player.getRoomUser().getRoom() == null) {
|
||||||
|
@ -203,6 +210,7 @@ public class MessageHandler {
|
||||||
registerEvent(1817, new GET_SESSION_PARAMETERS());
|
registerEvent(1817, new GET_SESSION_PARAMETERS());
|
||||||
registerEvent(813, new UNIQUEID());
|
registerEvent(813, new UNIQUEID());
|
||||||
registerEvent(1170, new VERSIONCHECK());
|
registerEvent(1170, new VERSIONCHECK());
|
||||||
|
registerEvent(251, new GET_FURNI_VERSIONS());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -247,6 +255,24 @@ public class MessageHandler {
|
||||||
registerEvent(18, new GETFVRF());
|
registerEvent(18, new GETFVRF());
|
||||||
registerEvent(19, new ADD_FAVORITE_ROOM());
|
registerEvent(19, new ADD_FAVORITE_ROOM());
|
||||||
registerEvent(20, new DEL_FAVORITE_ROOM());
|
registerEvent(20, new DEL_FAVORITE_ROOM());
|
||||||
|
|
||||||
|
// Flash
|
||||||
|
registerEvent(434, new FLASH_USERFLATS());
|
||||||
|
registerEvent(382, new FLASH_POPULARTAGS());
|
||||||
|
registerEvent(437, new FLASH_SEARCH());
|
||||||
|
registerEvent(438, new FLASH_SEARCH_TAGS());
|
||||||
|
registerEvent(430, new FLASH_POPULARROOMS());
|
||||||
|
registerEvent(431, new FLASH_HIGHESTVOTEDROOMS());
|
||||||
|
registerEvent(380, new FLASH_PUBLICROOMS());
|
||||||
|
registerEvent(387, new FLASH_CANCREATEROOM());
|
||||||
|
registerEvent(439, new FLASH_EVENTROOMS());
|
||||||
|
registerEvent(433, new FLASH_FRIENDS_IN_ROOM());
|
||||||
|
registerEvent(432, new FLASH_ROOMS_FRIENDS_OWN());
|
||||||
|
registerEvent(436, new FLASH_ROOMS_RECENTLY_VISTED());
|
||||||
|
registerEvent(435, new FLASH_FAVOURITE_ROOMS());
|
||||||
|
|
||||||
|
// Flash r34
|
||||||
|
registerEvent(381, new FLASH_GETGUESTROOMS());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -266,6 +292,20 @@ public class MessageHandler {
|
||||||
registerEvent(63, new G_ITEMS());
|
registerEvent(63, new G_ITEMS());
|
||||||
registerEvent(98, new LETUSERIN());
|
registerEvent(98, new LETUSERIN());
|
||||||
registerEvent(261, new RATEFLAT());
|
registerEvent(261, new RATEFLAT());
|
||||||
|
|
||||||
|
// Flash
|
||||||
|
registerEvent(385, new FLASH_ROOM_INFO());
|
||||||
|
registerEvent(391, new TRYFLAT());
|
||||||
|
//registerEvent(390, new GET_ROOM_INFO());
|
||||||
|
registerEvent(390, new GETROOMAD());
|
||||||
|
registerEvent(390, new G_HMAP());
|
||||||
|
|
||||||
|
registerEvent(388, new FLASH_GETPUBLICROOMDATA());
|
||||||
|
registerEvent(400, new FLASH_ROOMEDITDATA());
|
||||||
|
registerEvent(401, new FLASH_ROOMSAVEDATA());
|
||||||
|
registerEvent(386, new FLASH_ROOMICONDATA());
|
||||||
|
registerEvent(375, new FLASH_GETWARDROBE());
|
||||||
|
registerEvent(376, new FLASH_SAVEWARDROBE());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -291,6 +331,8 @@ public class MessageHandler {
|
||||||
registerEvent(371, new RESPECT_USER());
|
registerEvent(371, new RESPECT_USER());
|
||||||
registerEvent(114, new PTM());
|
registerEvent(114, new PTM());
|
||||||
registerEvent(263, new GET_USER_TAGS());
|
registerEvent(263, new GET_USER_TAGS());
|
||||||
|
registerEvent(44, new CHANGE_LOOKS());
|
||||||
|
registerEvent(384, new SET_HOME_ROOM());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -535,6 +577,11 @@ public class MessageHandler {
|
||||||
registerEvent(249, new RESET_TUTORIAL());
|
registerEvent(249, new RESET_TUTORIAL());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void registerFlashModTool() {
|
||||||
|
registerEvent(459, new FLASH_MODTOOL_ROOMINFO());
|
||||||
|
registerEvent(456, new FLASH_MODTOOL_ROOM_CHATLOG());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register event.
|
* Register event.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.PlayerDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.HOME_ROOM;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class SET_HOME_ROOM implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.readInt();
|
||||||
|
|
||||||
|
if (roomId > 0) {
|
||||||
|
Room room = RoomDao.getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null || room.isPublicRoom() || room.getData().getOwnerId() != player.getDetails().getId()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
roomId = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayerDao.saveHomeRoom(player.getDetails().getId(), roomId);
|
||||||
|
player.send(new HOME_ROOM(roomId));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.modtool;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.player.PlayerRank;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.modtool.FLASH_MODTOOL_ROOMDATA;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_MODTOOL_ROOMINFO implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
|
if (room == null || player.getDetails().getRank().getRankId() < PlayerRank.MODERATOR.getRankId()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new FLASH_MODTOOL_ROOMDATA(room));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.modtool;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.player.PlayerRank;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.modtool.FLASH_MODTOOL_CHATLOG;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_MODTOOL_ROOM_CHATLOG implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
|
if (room == null || player.getDetails().getRank().getRankId() < PlayerRank.MODERATOR.getRankId()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new FLASH_MODTOOL_CHATLOG(room, RoomDao.getModChatlog(room.getId())));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_CANCREATEROOM implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeInt(25);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 512;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.game.events.EventsManager;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorCategory;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class FLASH_EVENTROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mode = Integer.parseInt(reader.readString());
|
||||||
|
List<Room> roomList = new ArrayList<>();
|
||||||
|
|
||||||
|
if (mode == -1) {
|
||||||
|
roomList = EventsManager.getInstance().getEventList().stream().map(event -> RoomManager.getInstance().getRoomById(event.getRoomId())).collect(Collectors.toList());
|
||||||
|
} else {
|
||||||
|
roomList = EventsManager.getInstance().getEvents(mode).stream().map(event -> RoomManager.getInstance().getRoomById(event.getRoomId())).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, mode, true));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_FAVOURITE_ROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var roomList = RoomManager.getInstance().getFavouriteRooms(player.getDetails().getId(), true);
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.messenger.MessengerUser;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.player.PlayerManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_FRIENDS_IN_ROOM implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Room> friendsInRoom = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MessengerUser messengerUser : player.getMessenger().getFriends().values()) {
|
||||||
|
if (!messengerUser.isOnline()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var friend = PlayerManager.getInstance().getPlayerById(messengerUser.getUserId());
|
||||||
|
var friendRoom = friend.getRoomUser().getRoom();
|
||||||
|
|
||||||
|
if (friendRoom != null && !friendRoom.isPublicRoom()) {
|
||||||
|
if (friendsInRoom.stream().noneMatch(room -> room.getId() == friendRoom.getId())) {
|
||||||
|
friendsInRoom.add(friendRoom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(friendsInRoom);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(friendsInRoom);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(friendsInRoom, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_HIGHESTVOTEDROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Room> roomList = RoomManager.getInstance().replaceQueryRooms(RoomDao.getHighestRatedRooms(30, 0));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorCategory;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_POPULARROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var value = reader.readString();
|
||||||
|
int mode = -1;
|
||||||
|
|
||||||
|
List<Room> roomList = new ArrayList<>();
|
||||||
|
|
||||||
|
if (StringUtils.isNumeric(value)) {
|
||||||
|
mode = Integer.parseInt(value);
|
||||||
|
|
||||||
|
NavigatorCategory navigatorCategory = NavigatorManager.getInstance().getCategoryById(mode);
|
||||||
|
|
||||||
|
if (navigatorCategory != null) {
|
||||||
|
roomList.addAll(RoomManager.getInstance().replaceQueryRooms(NavigatorDao.getRecentRooms(30, navigatorCategory.getId())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode == -1) {
|
||||||
|
roomList.addAll(RoomManager.getInstance().replaceQueryRooms(NavigatorDao.getRopularRooms(30, false)));
|
||||||
|
}
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, mode, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.TagDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
public class FLASH_POPULARTAGS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var popularTags = TagDao.getRoomTagData(50);
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(popularTags.size());
|
||||||
|
|
||||||
|
var i = new AtomicInteger(1);
|
||||||
|
|
||||||
|
for (var tagData : popularTags.entrySet()) {
|
||||||
|
response.writeString(tagData.getKey());
|
||||||
|
response.writeInt(tagData.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 452;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.navigator.beta.BETA_FLASH_PUBLICROOMS;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FRONTPAGERESULT;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_PUBLICROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
new BETA_FLASH_PUBLICROOMS().handle(player, reader);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Room> roomList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Room room : RoomManager.getInstance().replaceQueryRooms(RoomDao.getRoomsByUserId(0))) {
|
||||||
|
if (room.getData().isNavigatorHide()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
roomList.add(room);
|
||||||
|
}
|
||||||
|
|
||||||
|
roomList.removeIf(room -> NavigatorManager.getInstance().getNavigatorStyle(room.getId()) == null);
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FRONTPAGERESULT(roomList));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.game.messenger.MessengerUser;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_ROOMS_FRIENDS_OWN implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> friendsInRoom = new ArrayList<>();
|
||||||
|
|
||||||
|
for (MessengerUser messengerUser : player.getMessenger().getFriends().values()) {
|
||||||
|
friendsInRoom.add(String.valueOf(messengerUser.getUserId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
var roomList = RoomManager.getInstance().replaceQueryRooms(NavigatorDao.getFriendRooms(30, friendsInRoom));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_ROOMS_RECENTLY_VISTED implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var roomList = RoomManager.getInstance().replaceQueryRooms(NavigatorDao.getRecentlyVisited(30, player.getDetails().getId()));
|
||||||
|
//RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.PlayerDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_SEARCHRESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.util.SearchUtil;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class FLASH_SEARCH implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
String searchQuery = reader.readString();
|
||||||
|
int roomOwner = -1;
|
||||||
|
|
||||||
|
if (searchQuery.contains("owner:")) {
|
||||||
|
var ownerTag = SearchUtil.getOwnerTag(searchQuery);
|
||||||
|
|
||||||
|
if (ownerTag != null) {
|
||||||
|
roomOwner = PlayerDao.getId(ownerTag.replaceFirst("owner:", ""));
|
||||||
|
}
|
||||||
|
|
||||||
|
searchQuery = Arrays.stream(searchQuery.split(" ")).filter(s -> !s.toLowerCase().startsWith("owner:")).collect(Collectors.joining(","));
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Room> roomList = RoomManager.getInstance().replaceQueryRooms(RoomDao.searchRooms(searchQuery, roomOwner, RoomDao.FLASH_SEARCH_LIMIT));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_SEARCHRESULTS(roomList, searchQuery));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,28 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.TagDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_SEARCHRESULTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_SEARCH_TAGS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
String searchTag = reader.readString();
|
||||||
|
|
||||||
|
|
||||||
|
List<Room> roomList = RoomManager.getInstance().replaceQueryRooms(TagDao.querySearchRooms(searchTag));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_SEARCHRESULTS(roomList, searchTag));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FLAT_RESULTS;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_GET_GUEST_ROOM_RESULT;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_USERFLATS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
List<Room> roomList = RoomManager.getInstance().replaceQueryRooms(RoomDao.getRoomsByUserId(player.getDetails().getId()));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_FLAT_RESULTS(roomList, -3, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator.beta;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorCategory;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FRONTPAGERESULT;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.beta.BETA_FLASH_FRONTPAGERESULT;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class BETA_FLASH_PUBLICROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
List<Room> popularRoomList = RoomManager.getInstance().replaceQueryRooms(NavigatorDao.getRopularRooms(6, false));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(popularRoomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(popularRoomList);
|
||||||
|
|
||||||
|
Map<String, Integer> categoryList = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
for (var kvp : NavigatorDao.getPopularCategories(3).entrySet()) {
|
||||||
|
var categoryId = kvp.getKey();
|
||||||
|
var roomVisitors = kvp.getValue();
|
||||||
|
var category = NavigatorManager.getInstance().getCategoryById(categoryId);
|
||||||
|
|
||||||
|
categoryList.put(category.getName(), roomVisitors);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new BETA_FLASH_FRONTPAGERESULT(popularRoomList,
|
||||||
|
RoomManager.getInstance().getRoomsByMode(1, player).size(),
|
||||||
|
RoomManager.getInstance().getRoomsByMode(4, player).size(),
|
||||||
|
RoomManager.getInstance().getRoomsByMode(5, player).size(),
|
||||||
|
RoomManager.getInstance().getRoomsByMode(6, player).size(),
|
||||||
|
categoryList));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.navigator.beta;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.NavigatorDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.messenger.MessengerUser;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.player.PlayerManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_GET_GUEST_ROOM_RESULT;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class FLASH_GETGUESTROOMS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int forceDisplay = reader.readInt();
|
||||||
|
int mode = reader.readInt();
|
||||||
|
|
||||||
|
List<Room> roomList = RoomManager.getInstance().getRoomsByMode(mode, player);//RoomManager.getInstance().replaceQueryRooms(RoomDao.getRoomsByUserId(player.getDetails().getId()));
|
||||||
|
|
||||||
|
RoomManager.getInstance().sortRooms(roomList);
|
||||||
|
RoomManager.getInstance().ratingSantiyCheck(roomList);
|
||||||
|
|
||||||
|
player.send(new FLASH_GET_GUEST_ROOM_RESULT(forceDisplay, mode, roomList));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.rooms.FLASH_PUBLICROOMCASTS;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_GETPUBLICROOMDATA implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.remainingBytes().length > 0 ? reader.readInt() : player.getRoomUser().getRoom().getId();;/* - 1000; - WAS USED FOR RELEAS38 */
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (room.getData().isNavigatorHide()) {
|
||||||
|
roomId = room.getFollowRedirect();
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new FLASH_PUBLICROOMCASTS(roomId, room.getData().getCcts()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.WardrobeDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.rooms.WARDROBE;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_GETWARDROBE implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
player.send(new WARDROBE(WardrobeDao.getWardrobe(player.getDetails().getId())));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.rooms.FLASH_EDITDATA;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_ROOMEDITDATA implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.readInt();
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null || !room.isOwner(player.getDetails().getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new FLASH_EDITDATA(room));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,103 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.FLASH_FLATINFO;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class FLASH_ROOMICONDATA implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.readInt();
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null || !room.isOwner(player.getDetails().getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<Integer, Integer> items = new HashMap<>();
|
||||||
|
|
||||||
|
//int background = reader.readInt();
|
||||||
|
int background = reader.readInt();
|
||||||
|
int topLayer = reader.readInt();
|
||||||
|
int itemAmount = reader.readInt();
|
||||||
|
|
||||||
|
for (int i = 0; i < itemAmount; i++) {
|
||||||
|
int position = reader.readInt();
|
||||||
|
int item = reader.readInt();
|
||||||
|
|
||||||
|
if (position < 0 || position > 10)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (item < 1 || item > 27)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (items.containsKey(position)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
items.put(position, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (background < 1 || background > 24)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (topLayer < 0 || topLayer > 11)
|
||||||
|
return;
|
||||||
|
|
||||||
|
StringBuilder formattedItems = new StringBuilder();
|
||||||
|
formattedItems.append(background).append("|");
|
||||||
|
formattedItems.append(topLayer).append("|");
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (var kvp : items.entrySet()) {
|
||||||
|
i++;
|
||||||
|
|
||||||
|
formattedItems.append(kvp.getKey());
|
||||||
|
formattedItems.append(",");
|
||||||
|
formattedItems.append(kvp.getValue());
|
||||||
|
|
||||||
|
if (i != items.size()) {
|
||||||
|
formattedItems.append(" ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
room.getData().setIconData(formattedItems.toString());
|
||||||
|
RoomDao.saveIcon(room.getId(), formattedItems.toString());
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 467;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 456;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//player.send(new FLASH_FLATINFO(player, room, overrideLock, false, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,116 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.RoomDao;
|
||||||
|
import org.alexdev.havana.dao.mysql.TagDao;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
import org.alexdev.havana.util.StringUtil;
|
||||||
|
|
||||||
|
public class FLASH_ROOMSAVEDATA implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.readInt();
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null || !room.isOwner(player.getDetails().getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = StringUtil.filterInput(reader.readString(), true);
|
||||||
|
String description = StringUtil.filterInput(reader.readString(), true);
|
||||||
|
int roomState = reader.readInt();
|
||||||
|
String password = StringUtil.filterInput(reader.readString(), true);
|
||||||
|
int maxUsers = reader.readInt();
|
||||||
|
|
||||||
|
if (name.isBlank()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
reader.readBoolean();
|
||||||
|
reader.readBoolean();
|
||||||
|
reader.readBoolean();
|
||||||
|
|
||||||
|
int categoryId = reader.readInt();
|
||||||
|
int tagCount = reader.readInt();
|
||||||
|
|
||||||
|
if (maxUsers < 10 || maxUsers > 50) {
|
||||||
|
maxUsers = 25;
|
||||||
|
}
|
||||||
|
|
||||||
|
var category = NavigatorManager.getInstance().getCategoryById(categoryId);
|
||||||
|
|
||||||
|
if (category == null) {
|
||||||
|
category = NavigatorManager.getInstance().getCategoryById(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.getMinimumRoleSetFlat().getRankId() > player.getDetails().getRank().getRankId()) {
|
||||||
|
category = NavigatorManager.getInstance().getCategoryById(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (category.isNode() || category.isPublicSpaces()) {
|
||||||
|
category = NavigatorManager.getInstance().getCategoryById(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
categoryId = category.getId();
|
||||||
|
|
||||||
|
if (roomState != 0 && roomState != 1 && roomState != 2) {
|
||||||
|
roomState = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TagDao.removeTags(0, roomId, 0);
|
||||||
|
|
||||||
|
if (tagCount > 0 && tagCount < 3) {
|
||||||
|
for (int i = 0; i < tagCount; i++) {
|
||||||
|
String tag = StringUtil.isValidTag(StringUtil.filterInput(reader.readString(), true), 0, roomId, 0);
|
||||||
|
|
||||||
|
if (tag == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringUtil.addTag(tag, 0, roomId, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
room.getData().setName(name);
|
||||||
|
room.getData().setDescription(description);
|
||||||
|
room.getData().setAccessType(roomState);
|
||||||
|
room.getData().setPassword(password);
|
||||||
|
room.getData().setVisitorsMax(maxUsers);
|
||||||
|
room.getData().setCategoryId(categoryId);
|
||||||
|
RoomDao.save(room);
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 467;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 456;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// boolean overrideLock = room.isOwner(player.getDetails().getId());
|
||||||
|
//player.send(new FLASH_FLATINFO(player, room, overrideLock, false, false));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.FLASH_FLATINFO;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
public class FLASH_ROOM_INFO implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int roomId = reader.readInt();
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isLoading = reader.readBoolean();
|
||||||
|
boolean checkEntry = reader.readBoolean();
|
||||||
|
boolean overrideLock = false;
|
||||||
|
|
||||||
|
if (room.isOwner(player.getDetails().getId())) {
|
||||||
|
overrideLock = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.getRoomUser().getAuthenticateId() == roomId) {
|
||||||
|
overrideLock = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new FLASH_FLATINFO(player, room, overrideLock, isLoading, checkEntry));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.alexdev.havana.messages.flash.incoming.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.WardrobeDao;
|
||||||
|
import org.alexdev.havana.game.player.Wardrobe;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_SAVEWARDROBE implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
int slotId = reader.readInt();
|
||||||
|
String figure = reader.readString();
|
||||||
|
String sex = reader.readString().equals("M") ? "M" : "F";
|
||||||
|
|
||||||
|
if (slotId < 1 || slotId > 5) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int userId = player.getDetails().getId();
|
||||||
|
|
||||||
|
List<Wardrobe> wardrobeList = WardrobeDao.getWardrobe(userId);
|
||||||
|
Wardrobe wardrobeData = wardrobeList.stream().filter(wardrobe -> wardrobe.getSlotId() == slotId).findFirst().orElse(null);
|
||||||
|
|
||||||
|
if (wardrobeData == null) {
|
||||||
|
WardrobeDao.addWardrobe(userId, slotId, figure, sex);
|
||||||
|
} else {
|
||||||
|
WardrobeDao.updateWardrobe(userId, slotId, figure, sex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.fuserights.Fuseright;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.PlayerMessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
public class FLASH_FLATINFO extends PlayerMessageComposer {
|
||||||
|
private final Player player;
|
||||||
|
private final Room room;
|
||||||
|
private final boolean isLoading;
|
||||||
|
private final boolean checkEntry;
|
||||||
|
private final boolean overrideLock;
|
||||||
|
|
||||||
|
public FLASH_FLATINFO(Player player, Room room, boolean overrideLock, boolean isLoading, boolean checkEntry) {
|
||||||
|
this.player = player;
|
||||||
|
this.room = room;
|
||||||
|
this.overrideLock = overrideLock;
|
||||||
|
this.isLoading = isLoading;
|
||||||
|
this.checkEntry = checkEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
response.writeBool(this.isLoading);
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeBool(this.checkEntry);
|
||||||
|
|
||||||
|
response.writeString(room.getData().getName()); // Room name
|
||||||
|
response.writeString(room.getData().getOwnerName()); // Room owner name
|
||||||
|
response.writeInt(room.getData().getAccessTypeId()); // Accesstype (0 = open, 1 = closed, 2 = password)
|
||||||
|
response.writeInt(room.getData().getVisitorsNow()); // Current visitor amount
|
||||||
|
response.writeInt(room.getData().getVisitorsMax()); // Max visitor amount
|
||||||
|
response.writeString(room.getData().getDescription()); // Room description
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeBool(room.getCategory().hasAllowTrading()); // can trade
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(room.getData().getTags().size());
|
||||||
|
|
||||||
|
for (String tag : room.getData().getTags()) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Icon shit
|
||||||
|
try {
|
||||||
|
String[] iconData = room.getData().getIconData().split("\\|");
|
||||||
|
|
||||||
|
int background = StringUtils.isNumeric(iconData[0]) ? Integer.parseInt(iconData[0]) : 0;
|
||||||
|
int topLayer = StringUtils.isNumeric(iconData[1]) ? Integer.parseInt(iconData[1]) : 0;
|
||||||
|
String[] items = iconData[2].split(" ");
|
||||||
|
|
||||||
|
response.writeInt(background);
|
||||||
|
response.writeInt(topLayer);
|
||||||
|
response.writeInt(items.length);
|
||||||
|
|
||||||
|
for (String data : items) {
|
||||||
|
try {
|
||||||
|
String[] iconItems = data.split(",");
|
||||||
|
|
||||||
|
int iconPosition = StringUtils.isNumeric(iconItems[0]) ? Integer.parseInt(iconItems[0]) : 0;
|
||||||
|
int iconId = StringUtils.isNumeric(iconItems[1]) ? Integer.parseInt(iconItems[1]) : 0;
|
||||||
|
|
||||||
|
response.writeInt(iconPosition);
|
||||||
|
response.writeInt(iconId);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
response.writeBool(this.isLoading);
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeBool(this.checkEntry);
|
||||||
|
|
||||||
|
response.writeString(this.room.getData().getName());
|
||||||
|
|
||||||
|
if (this.room.isOwner(player.getDetails().getId()) || this.room.getData().showOwnerName() || this.player.hasFuse(Fuseright.SEE_ALL_ROOMOWNERS)) {
|
||||||
|
response.writeString(this.room.getData().getOwnerName());
|
||||||
|
} else {
|
||||||
|
response.writeString("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeInt(overrideLock ? 0 : this.room.getData().getAccessTypeId());
|
||||||
|
response.writeInt(this.room.getData().getVisitorsNow());
|
||||||
|
response.writeInt(this.room.getData().getVisitorsMax());
|
||||||
|
response.writeString(this.room.getData().getDescription());
|
||||||
|
response.writeBool(true);
|
||||||
|
response.writeBool(this.room.getCategory().hasAllowTrading()); // Allow trading
|
||||||
|
|
||||||
|
response.writeInt(this.room.getData().getRating()); // Is called "marker" in Lingo code
|
||||||
|
response.writeInt(this.room.getData().getCategoryId());
|
||||||
|
response.writeString("");
|
||||||
|
|
||||||
|
var tags = room.getData().getTags();
|
||||||
|
response.writeInt(tags.size());
|
||||||
|
|
||||||
|
for (String tag : tags) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
String[] iconData = room.getData().getIconData().split("\\|");
|
||||||
|
|
||||||
|
int background = StringUtils.isNumeric(iconData[0]) ? Integer.parseInt(iconData[0]) : 0;
|
||||||
|
int topLayer = StringUtils.isNumeric(iconData[1]) ? Integer.parseInt(iconData[1]) : 0;
|
||||||
|
String[] items = iconData[2].split(" ");
|
||||||
|
|
||||||
|
response.writeInt(background);
|
||||||
|
response.writeInt(topLayer);
|
||||||
|
response.writeInt(items.length);
|
||||||
|
|
||||||
|
for (String data : items) {
|
||||||
|
String[] iconItems = data.split(",");
|
||||||
|
|
||||||
|
int iconPosition = StringUtils.isNumeric(iconItems[0]) ? Integer.parseInt(iconItems[0]) : 0;
|
||||||
|
int iconId = StringUtils.isNumeric(iconItems[1]) ? Integer.parseInt(iconItems[1]) : 0;
|
||||||
|
|
||||||
|
response.writeInt(iconPosition);
|
||||||
|
response.writeInt(iconId);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeBool(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 454;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.PlayerMessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_ROOMENTRYINFO extends PlayerMessageComposer {
|
||||||
|
private final Player player;
|
||||||
|
private final Room room;
|
||||||
|
|
||||||
|
public FLASH_ROOMENTRYINFO(Player player, Room room) {
|
||||||
|
this.player = player;
|
||||||
|
this.room = room;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
if (this.player.getNetwork().isBetaConnected()) {
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeBool(this.room.isOwner(player.getDetails().getId()));
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeBool(false);
|
||||||
|
} else {
|
||||||
|
response.writeBool(!this.room.isPublicRoom());
|
||||||
|
|
||||||
|
if (this.room.isPublicRoom()) {
|
||||||
|
response.writeString(this.room.getData().getDescription());
|
||||||
|
response.writeBool(false);
|
||||||
|
} else {
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
|
||||||
|
if (this.room.isOwner(player.getDetails().getId())) {
|
||||||
|
response.writeBool(true);
|
||||||
|
} else {
|
||||||
|
response.writeBool(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 471;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class HOME_ROOM extends MessageComposer {
|
||||||
|
private final int roomId;
|
||||||
|
|
||||||
|
public HOME_ROOM(int roomId) {
|
||||||
|
this.roomId = roomId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 455;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.modtool;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_MODTOOL extends MessageComposer {
|
||||||
|
private List<String> userMessagePresets;
|
||||||
|
private List<String> roomMessagePresets;
|
||||||
|
|
||||||
|
public FLASH_MODTOOL() {
|
||||||
|
// TODO: Remove this yucky hardcoded bullshit
|
||||||
|
this.userMessagePresets = List.of("test");
|
||||||
|
this.roomMessagePresets = List.of("room preset 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(-1);
|
||||||
|
response.writeInt(this.userMessagePresets.size());
|
||||||
|
|
||||||
|
for (String preset : this.userMessagePresets) {
|
||||||
|
response.writeString(preset);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(14);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
|
||||||
|
response.writeInt(this.roomMessagePresets.size());
|
||||||
|
|
||||||
|
for (String preset : this.roomMessagePresets) {
|
||||||
|
response.writeString(preset);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeString("test");
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeString("test");
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeString("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 531;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.modtool;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.moderation.ChatMessage;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
import org.alexdev.havana.util.StringUtil;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_MODTOOL_CHATLOG extends MessageComposer {
|
||||||
|
private final List<ChatMessage> modChatlog;
|
||||||
|
private final Room room;
|
||||||
|
|
||||||
|
public FLASH_MODTOOL_CHATLOG(Room room, List<ChatMessage> modChatlog) {
|
||||||
|
this.room = room;
|
||||||
|
this.modChatlog = modChatlog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeBool(this.room.isPublicRoom());
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeString(this.room.getData().getName());
|
||||||
|
response.writeInt(this.modChatlog.size());
|
||||||
|
|
||||||
|
for (ChatMessage chatMessage : this.modChatlog) {
|
||||||
|
response.writeInt(chatMessage.getCalendar().get(Calendar.HOUR_OF_DAY));
|
||||||
|
response.writeInt(chatMessage.getCalendar().get(Calendar.MINUTE));
|
||||||
|
response.writeInt(chatMessage.getPlayerId());
|
||||||
|
response.writeString(chatMessage.getPlayerName());
|
||||||
|
response.writeString(StringUtil.filterInput(chatMessage.getMessage(), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 535;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.modtool;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.events.EventsManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_MODTOOL_ROOMDATA extends MessageComposer {
|
||||||
|
private final Room room;
|
||||||
|
|
||||||
|
public FLASH_MODTOOL_ROOMDATA(Room room) {
|
||||||
|
this.room = room;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeInt(this.room.getData().getTotalVisitorsNow()); // user count
|
||||||
|
response.writeBool(this.room.getEntityManager().getPlayers().stream().anyMatch(user -> user.getDetails().getId() == room.getData().getOwnerId()));
|
||||||
|
response.writeInt(this.room.getData().getOwnerId());
|
||||||
|
response.writeString(this.room.getData().getOwnerName());
|
||||||
|
response.writeInt(this.room.getId());
|
||||||
|
response.writeString(this.room.getData().getName());
|
||||||
|
response.writeString(this.room.getData().getDescription());
|
||||||
|
response.writeInt(this.room.getData().getTags().size());
|
||||||
|
|
||||||
|
for (String tag : this.room.getData().getTags()) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
var event = EventsManager.getInstance().getEventByRoomId(this.room.getId());
|
||||||
|
response.writeBool(event != null);
|
||||||
|
|
||||||
|
if (event != null) {
|
||||||
|
response.writeString(event.getName());
|
||||||
|
response.writeString(event.getDescription());
|
||||||
|
response.writeInt(event.getTags().size());
|
||||||
|
|
||||||
|
for (String tag : event.getTags()) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 538;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_FAVOURITES extends MessageComposer {
|
||||||
|
private final int limit;
|
||||||
|
private final List<Room> favouriteRooms;
|
||||||
|
|
||||||
|
public FLASH_FAVOURITES(int limit, List<Room> favouriteRooms) {
|
||||||
|
this.limit = limit;
|
||||||
|
this.favouriteRooms = favouriteRooms;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.limit);
|
||||||
|
response.writeInt(this.favouriteRooms.size());
|
||||||
|
|
||||||
|
for (Room room : this.favouriteRooms) {
|
||||||
|
response.writeInt(room.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 458;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_FAVOURITE_STATUS extends MessageComposer {
|
||||||
|
private int roomId;
|
||||||
|
private boolean isAdded;
|
||||||
|
|
||||||
|
public FLASH_FAVOURITE_STATUS(int roomId, boolean isAdded) {
|
||||||
|
this.roomId = roomId;
|
||||||
|
this.isAdded = isAdded;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.roomId);
|
||||||
|
response.writeBool(this.isAdded);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 459;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,119 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.events.EventsManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
import org.alexdev.havana.util.DateUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class FLASH_FLAT_RESULTS extends MessageComposer {
|
||||||
|
private final List<Room> roomList;
|
||||||
|
private final int mode;
|
||||||
|
private final boolean showEvents;
|
||||||
|
|
||||||
|
public FLASH_FLAT_RESULTS(List<Room> roomList, int mode, boolean showEvents) {
|
||||||
|
this.roomList = roomList;
|
||||||
|
this.mode = mode;
|
||||||
|
this.showEvents = showEvents;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeString("");
|
||||||
|
response.writeInt(this.roomList.size());
|
||||||
|
|
||||||
|
for (Room room : this.roomList) {
|
||||||
|
response.writeInt(room.getData().getId());
|
||||||
|
|
||||||
|
var event = EventsManager.getInstance().getEventByRoomId(room.getId());
|
||||||
|
DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.DEFAULT, Locale.US);
|
||||||
|
|
||||||
|
if (this.showEvents && event != null) {
|
||||||
|
response.writeBool(true);
|
||||||
|
response.writeString(event.getName());
|
||||||
|
response.writeString(room.getData().getOwnerName());
|
||||||
|
response.writeInt(room.getData().getAccessTypeId()); // room state
|
||||||
|
response.writeInt(room.getData().getVisitorsNow());
|
||||||
|
response.writeInt(room.getData().getVisitorsMax());
|
||||||
|
response.writeString(room.getData().getDescription());
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeBool(room.getCategory().hasAllowTrading()); // can trade?
|
||||||
|
response.writeInt(room.getData().getRating());
|
||||||
|
response.writeInt(event.getCategoryId());
|
||||||
|
response.writeString(DateUtil.getDate(event.getExpireTime() - EventsManager.getEventLifetime(), "hh:mm a").replace(".", "").toUpperCase());
|
||||||
|
|
||||||
|
var tags = room.getData().getTags();
|
||||||
|
response.writeInt(tags.size());
|
||||||
|
|
||||||
|
for (String tag : tags) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeString(room.getData().getName());
|
||||||
|
response.writeString(room.getData().getOwnerName());
|
||||||
|
response.writeInt(room.getData().getAccessTypeId()); // room state
|
||||||
|
response.writeInt(room.getData().getVisitorsNow());
|
||||||
|
response.writeInt(room.getData().getVisitorsMax());
|
||||||
|
response.writeString(room.getData().getDescription());
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeBool(room.getCategory().hasAllowTrading()); // can trade?
|
||||||
|
response.writeInt(room.getData().getRating());
|
||||||
|
response.writeInt(room.getData().getCategoryId());
|
||||||
|
response.writeString("");
|
||||||
|
|
||||||
|
var tags = room.getData().getTags();
|
||||||
|
response.writeInt(tags.size());
|
||||||
|
|
||||||
|
for (String tag : tags) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
String[] iconData = room.getData().getIconData().split("\\|");
|
||||||
|
|
||||||
|
int background = StringUtils.isNumeric(iconData[0]) ? Integer.parseInt(iconData[0]) : 0;
|
||||||
|
int topLayer = StringUtils.isNumeric(iconData[1]) ? Integer.parseInt(iconData[1]) : 0;
|
||||||
|
String[] items = iconData[2].split(" ");
|
||||||
|
|
||||||
|
response.writeInt(background);
|
||||||
|
response.writeInt(topLayer);
|
||||||
|
response.writeInt(items.length);
|
||||||
|
|
||||||
|
for (String data : items) {
|
||||||
|
try {
|
||||||
|
String[] iconItems = data.split(",");
|
||||||
|
|
||||||
|
int iconPosition = StringUtils.isNumeric(iconItems[0]) ? Integer.parseInt(iconItems[0]) : 0;
|
||||||
|
int iconId = StringUtils.isNumeric(iconItems[1]) ? Integer.parseInt(iconItems[1]) : 0;
|
||||||
|
|
||||||
|
response.writeInt(iconPosition);
|
||||||
|
response.writeInt(iconId);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//response.writeBool(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 451;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorManager;
|
||||||
|
import org.alexdev.havana.game.navigator.NavigatorStyle;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_FRONTPAGERESULT extends MessageComposer {
|
||||||
|
private final List<Room> roomList;
|
||||||
|
|
||||||
|
public FLASH_FRONTPAGERESULT(List<Room> roomList) {
|
||||||
|
this.roomList = roomList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeString("Public Rooms");
|
||||||
|
|
||||||
|
response.writeInt(this.roomList.size());
|
||||||
|
|
||||||
|
for (Room room : this.roomList) {
|
||||||
|
NavigatorStyle navigatorStyle = NavigatorManager.getInstance().getNavigatorStyle(room.getId());
|
||||||
|
response.writeString(room.getData().getName());
|
||||||
|
response.writeString(navigatorStyle.getDescription());
|
||||||
|
response.writeInt(navigatorStyle.getThumbnailLayout()); // type??
|
||||||
|
response.writeString(room.getData().getName());
|
||||||
|
response.writeString(navigatorStyle.getThumbnailUrl());
|
||||||
|
response.writeInt(room.getData().getTotalVisitorsNow()); // users now
|
||||||
|
response.writeInt(3); // public listing type
|
||||||
|
response.writeString(navigatorStyle.getThumbnailUrl());
|
||||||
|
response.writeInt(room.getData().getId());
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeString(room.getData().getCcts());
|
||||||
|
response.writeInt(room.getData().getTotalVisitorsMax()); // max users
|
||||||
|
response.writeInt(room.getId()); // room id
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 450;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,143 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.events.EventsManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
import org.alexdev.havana.util.DateUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
public class FLASH_GET_GUEST_ROOM_RESULT extends MessageComposer {
|
||||||
|
private final int forceDisplay;
|
||||||
|
private final int opCode;
|
||||||
|
private final List<Room> roomList;
|
||||||
|
|
||||||
|
public FLASH_GET_GUEST_ROOM_RESULT(int forceDisplay, int opCode, List<Room> roomList) {
|
||||||
|
this.forceDisplay = forceDisplay;
|
||||||
|
this.opCode = opCode;
|
||||||
|
this.roomList = roomList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
/*response.writeInt(0);
|
||||||
|
response.writeString("");
|
||||||
|
response.writeInt(this.roomList.size());
|
||||||
|
|
||||||
|
for (Room room : this.roomList) {*/
|
||||||
|
response.writeInt(this.forceDisplay);
|
||||||
|
response.writeInt(this.opCode);
|
||||||
|
response.writeString("");
|
||||||
|
|
||||||
|
response.writeInt(this.roomList.size());
|
||||||
|
|
||||||
|
for (Room room : this.roomList) {
|
||||||
|
serialise(response, room);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* response.writeInt(1000); // Room ID
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeString("Room 1"); // Room name
|
||||||
|
response.writeString("Alex"); // Room owner name
|
||||||
|
response.writeInt(0); // Accesstype (0 = open, 1 = closed, 2 = password)
|
||||||
|
response.writeInt(0); // Current visitor amount
|
||||||
|
response.writeInt(25); // Max visitor amount
|
||||||
|
response.writeString("Description"); // Room description
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeString("tag1");
|
||||||
|
response.writeString("tag2");
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);*/
|
||||||
|
|
||||||
|
/*response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(2); // Icon ID?
|
||||||
|
response.writeString("Category"); // Room category name
|
||||||
|
response.writeString("tag1");
|
||||||
|
response.writeString("tag2");
|
||||||
|
response.writeBool(false);
|
||||||
|
|
||||||
|
response.writeInt(1001); // Room ID
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeString("Room 1"); // Room name
|
||||||
|
response.writeString("Alex"); // Room owner name
|
||||||
|
response.writeInt(0); // Accesstype (0 = open, 1 = closed, 2 = password)
|
||||||
|
response.writeInt(0); // Current visitor amount
|
||||||
|
response.writeInt(25); // Max visitor amount
|
||||||
|
response.writeString("Description"); // Room description
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(2); // Icon ID?
|
||||||
|
response.writeString("Category"); // Room category name
|
||||||
|
response.writeString("tag1");
|
||||||
|
response.writeString("tag2");
|
||||||
|
response.writeBool(false);*/
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void serialise(NettyResponse response, Room room) {
|
||||||
|
response.writeInt(room.getId()); // Room ID
|
||||||
|
response.writeBool(false); // Is event
|
||||||
|
response.writeString(room.getData().getName()); // Room name
|
||||||
|
response.writeString(room.getData().getOwnerName()); // Room owner name
|
||||||
|
response.writeInt(room.getData().getAccessTypeId()); // Accesstype (0 = open, 1 = closed, 2 = password)
|
||||||
|
response.writeInt(room.getData().getVisitorsNow()); // Current visitor amount
|
||||||
|
response.writeInt(room.getData().getVisitorsMax()); // Max visitor amount
|
||||||
|
response.writeString(room.getData().getDescription()); // Room description
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeBool(room.getCategory().hasAllowTrading()); // can trade
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(room.getData().getTags().size());
|
||||||
|
|
||||||
|
for (String tag : room.getData().getTags()) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Icon shit
|
||||||
|
try {
|
||||||
|
String[] iconData = room.getData().getIconData().split("\\|");
|
||||||
|
|
||||||
|
int background = StringUtils.isNumeric(iconData[0]) ? Integer.parseInt(iconData[0]) : 0;
|
||||||
|
int topLayer = StringUtils.isNumeric(iconData[1]) ? Integer.parseInt(iconData[1]) : 0;
|
||||||
|
String[] items = iconData[2].split(" ");
|
||||||
|
|
||||||
|
response.writeInt(background);
|
||||||
|
response.writeInt(topLayer);
|
||||||
|
response.writeInt(items.length);
|
||||||
|
|
||||||
|
for (String data : items) {
|
||||||
|
try {
|
||||||
|
String[] iconItems = data.split(",");
|
||||||
|
|
||||||
|
int iconPosition = StringUtils.isNumeric(iconItems[0]) ? Integer.parseInt(iconItems[0]) : 0;
|
||||||
|
int iconId = StringUtils.isNumeric(iconItems[1]) ? Integer.parseInt(iconItems[1]) : 0;
|
||||||
|
|
||||||
|
response.writeInt(iconPosition);
|
||||||
|
response.writeInt(iconId);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 451;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FLASH_SEARCHRESULTS extends MessageComposer {
|
||||||
|
private final List<Room> roomList;
|
||||||
|
private final String searchQuery;
|
||||||
|
|
||||||
|
public FLASH_SEARCHRESULTS(List<Room> roomList, String searchQuery) {
|
||||||
|
this.roomList = roomList;
|
||||||
|
this.searchQuery = searchQuery;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeInt(9);
|
||||||
|
response.writeString(this.searchQuery);
|
||||||
|
|
||||||
|
response.writeInt(this.roomList.size());
|
||||||
|
|
||||||
|
for (Room room : this.roomList) {
|
||||||
|
response.writeInt(room.getData().getId());
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeString(room.getData().getName());
|
||||||
|
response.writeString(room.getData().getOwnerName());
|
||||||
|
response.writeInt(room.getData().getAccessTypeId()); // room state
|
||||||
|
response.writeInt(room.getData().getVisitorsNow());
|
||||||
|
response.writeInt(room.getData().getVisitorsMax());
|
||||||
|
response.writeString(room.getData().getDescription());
|
||||||
|
response.writeInt(1);
|
||||||
|
response.writeBool(room.getCategory().hasAllowTrading()); // can trade?
|
||||||
|
response.writeInt(room.getData().getRating());
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeString("");
|
||||||
|
|
||||||
|
var tags = room.getData().getTags();
|
||||||
|
response.writeInt(tags.size());
|
||||||
|
|
||||||
|
for (String tag : tags) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
response.writeInt(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 451;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.navigator.beta;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_GET_GUEST_ROOM_RESULT;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class BETA_FLASH_FRONTPAGERESULT extends MessageComposer {
|
||||||
|
private final List<Room> roomList;
|
||||||
|
private final int popularRoomCount;
|
||||||
|
private final int friendsInRoomCount;
|
||||||
|
private final int myRoomsCount;
|
||||||
|
private final int favouriteRoomsCount;
|
||||||
|
private final Map<String, Integer> categoryList;
|
||||||
|
|
||||||
|
public BETA_FLASH_FRONTPAGERESULT(List<Room> roomList, int popularRoomCount, int friendsInRoomCount, int myRoomsCount, int favouriteRoomsCount, Map<String, Integer> categoryList) {
|
||||||
|
this.roomList = roomList;
|
||||||
|
this.popularRoomCount = popularRoomCount;
|
||||||
|
this.friendsInRoomCount = friendsInRoomCount;
|
||||||
|
this.myRoomsCount = myRoomsCount;
|
||||||
|
this.favouriteRoomsCount = favouriteRoomsCount;
|
||||||
|
this.categoryList = categoryList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.roomList.size()); // Amount
|
||||||
|
|
||||||
|
for (var room : this.roomList) {
|
||||||
|
FLASH_GET_GUEST_ROOM_RESULT.serialise(response, room);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeInt(-1);
|
||||||
|
response.writeBool(false);
|
||||||
|
|
||||||
|
response.writeInt(4);
|
||||||
|
|
||||||
|
response.writeInt(1); // nav category id
|
||||||
|
response.writeInt(this.popularRoomCount); // room population
|
||||||
|
|
||||||
|
response.writeInt(4); // nav category id
|
||||||
|
response.writeInt(this.friendsInRoomCount); // room population
|
||||||
|
|
||||||
|
response.writeInt(5); // nav category id
|
||||||
|
response.writeInt(this.myRoomsCount); // room population
|
||||||
|
|
||||||
|
response.writeInt(6); // nav category id
|
||||||
|
response.writeInt(this.favouriteRoomsCount); // room population
|
||||||
|
|
||||||
|
response.writeInt(this.categoryList.size()); // categories
|
||||||
|
|
||||||
|
for (var kvp : this.categoryList.entrySet()) {
|
||||||
|
response.writeString(kvp.getKey());
|
||||||
|
response.writeInt(kvp.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 450;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.PlayerDetails;
|
||||||
|
import org.alexdev.havana.game.player.PlayerManager;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_EDITDATA extends MessageComposer {
|
||||||
|
private final Room room;
|
||||||
|
|
||||||
|
public FLASH_EDITDATA(Room room) {
|
||||||
|
this.room = room;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.room.getData().getId());
|
||||||
|
response.writeString(this.room.getData().getName());
|
||||||
|
response.writeString(this.room.getData().getDescription());
|
||||||
|
response.writeInt(this.room.getData().getAccessTypeId());
|
||||||
|
response.writeInt(this.room.getData().getCategoryId());
|
||||||
|
response.writeInt(this.room.getData().getVisitorsMax());
|
||||||
|
response.writeInt(this.room.getData().getVisitorsMax());
|
||||||
|
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeBool(false);
|
||||||
|
|
||||||
|
var tags = room.getData().getTags();
|
||||||
|
response.writeInt(tags.size());
|
||||||
|
|
||||||
|
for (String tag : tags) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
response.writeInt(this.room.getRights().size());
|
||||||
|
|
||||||
|
for (int userId : this.room.getRights()) {
|
||||||
|
PlayerDetails playerDetails = PlayerManager.getInstance().getPlayerData(userId);
|
||||||
|
|
||||||
|
response.writeInt(userId);
|
||||||
|
response.writeString(playerDetails.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
response.writeInt(this.room.getRights().size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 465;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class FLASH_PUBLICROOMCASTS extends MessageComposer {
|
||||||
|
private final int roomId;
|
||||||
|
private final String ccts;
|
||||||
|
|
||||||
|
public FLASH_PUBLICROOMCASTS(int roomId, String ccts) {
|
||||||
|
this.roomId = roomId;
|
||||||
|
this.ccts = ccts;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(this.roomId);
|
||||||
|
response.writeString(this.ccts);
|
||||||
|
response.writeInt(this.roomId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 453;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.alexdev.havana.messages.flash.outgoing.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.player.Wardrobe;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class WARDROBE extends MessageComposer {
|
||||||
|
private final List<Wardrobe> wardrobe;
|
||||||
|
|
||||||
|
public WARDROBE(List<Wardrobe> wardrobe) {
|
||||||
|
this.wardrobe = wardrobe;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeBool(false);
|
||||||
|
response.writeInt(this.wardrobe.size());
|
||||||
|
|
||||||
|
for (var wardrobeItem : this.wardrobe) {
|
||||||
|
response.writeInt(wardrobeItem.getSlotId());
|
||||||
|
response.writeString(wardrobeItem.getFigure());
|
||||||
|
response.writeString(wardrobeItem.getSex());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 267;
|
||||||
|
}
|
||||||
|
}
|
|
@ -210,7 +210,7 @@ public class GRPC implements MessageEvent {
|
||||||
if (items.size() == 0 && !(itemDefinition != null && (itemDefinition.hasBehaviour(ItemBehaviour.EFFECT) || itemDefinition.getSprite().equals("film"))))
|
if (items.size() == 0 && !(itemDefinition != null && (itemDefinition.hasBehaviour(ItemBehaviour.EFFECT) || itemDefinition.getSprite().equals("film"))))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
boolean showItemDelivered = player.getRoomUser().getRoom() != null;
|
boolean showItemDelivered = player.getNetwork().isFlashConnection() || player.getRoomUser().getRoom() != null;
|
||||||
|
|
||||||
// Don't send item delivered if they just buy film
|
// Don't send item delivered if they just buy film
|
||||||
if (item.getDefinition() != null && item.getDefinition().getSprite().equals("film")) {
|
if (item.getDefinition() != null && item.getDefinition().getSprite().equals("film")) {
|
||||||
|
|
|
@ -28,7 +28,21 @@ public class CREATE_ROOMEVENT implements MessageEvent {
|
||||||
String name = WordfilterManager.filterSentence(StringUtil.filterInput(reader.readString(), true));
|
String name = WordfilterManager.filterSentence(StringUtil.filterInput(reader.readString(), true));
|
||||||
String description = WordfilterManager.filterSentence(StringUtil.filterInput(reader.readString(), true));
|
String description = WordfilterManager.filterSentence(StringUtil.filterInput(reader.readString(), true));
|
||||||
|
|
||||||
Event event = EventsManager.getInstance().createEvent(player, category, name, description, new ArrayList<>());
|
List<String> tags = new ArrayList<>();
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
int amount = reader.readInt();
|
||||||
|
|
||||||
|
for (int i = 0; i < amount; i++) {
|
||||||
|
if (i > 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tags.add(StringUtil.filterInput(reader.readString(), true).replace(",", " "));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Event event = EventsManager.getInstance().createEvent(player, category, name, description, tags);
|
||||||
player.getRoomUser().getRoom().send(new ROOMEEVENT_INFO(event));
|
player.getRoomUser().getRoom().send(new ROOMEEVENT_INFO(event));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,23 @@ public class EDIT_ROOMEVENT implements MessageEvent {
|
||||||
event.setName(name);
|
event.setName(name);
|
||||||
event.setDescription(description);
|
event.setDescription(description);
|
||||||
|
|
||||||
|
List<String> tags = new ArrayList<>();
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
int amount = reader.readInt();
|
||||||
|
|
||||||
|
for (int i = 0; i < amount; i++) {
|
||||||
|
if (i > 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tags.add(StringUtil.filterInput(reader.readString(), true).replace(",", " "));
|
||||||
|
}
|
||||||
|
|
||||||
|
event.getTags().clear();
|
||||||
|
event.getTags().addAll(tags);
|
||||||
|
}
|
||||||
|
|
||||||
room.send(new ROOMEEVENT_INFO(event));
|
room.send(new ROOMEEVENT_INFO(event));
|
||||||
EventsDao.save(event);
|
EventsDao.save(event);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package org.alexdev.havana.messages.incoming.handshake;
|
||||||
|
|
||||||
|
import org.alexdev.havana.game.item.ItemVersionManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class GET_FURNI_VERSIONS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
if (player.getNetwork().isFlashConnection())
|
||||||
|
return;
|
||||||
|
|
||||||
|
var itemVersions = ItemVersionManager.getInstance().getItemVersions();
|
||||||
|
|
||||||
|
player.send(new MessageComposer() {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(itemVersions.size());
|
||||||
|
|
||||||
|
for (var kvp : itemVersions.entrySet()) {
|
||||||
|
response.writeString(kvp.getKey());
|
||||||
|
response.writeInt(kvp.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 495;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import org.alexdev.havana.game.GameScheduler;
|
||||||
import org.alexdev.havana.game.encryption.DiffieHellman;
|
import org.alexdev.havana.game.encryption.DiffieHellman;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.messages.outgoing.handshake.CRYPTO_PARAMETERS;
|
import org.alexdev.havana.messages.outgoing.handshake.CRYPTO_PARAMETERS;
|
||||||
|
import org.alexdev.havana.messages.outgoing.handshake.SESSION_PARAMETERS;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
@ -17,10 +18,23 @@ public class INIT_CRYPTO implements MessageEvent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//String prime = Util.getRSA().sign(dh.getPrime().toString());
|
||||||
|
//String generator = Util.getRSA().sign(dh.getGenerator().toString());
|
||||||
|
|
||||||
|
//player.sendObject("DAQBHIIIKHJIPAIQAdd-MM-yyyy\u0002SAHPB/client\u0002QBHIJWVVVSNKQCFUBJASMSLKUUOJCOLJQPNSBIRSVQBRXZQOTGPMNJIHLVJCRRULBLUO" + (char)1);
|
||||||
|
|
||||||
|
|
||||||
String pToken = DiffieHellman.generateRandomNumString(24);
|
String pToken = DiffieHellman.generateRandomNumString(24);
|
||||||
|
|
||||||
player.send(new CRYPTO_PARAMETERS(pToken));
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
player.getNetwork().setToken(pToken);
|
player.send(new SESSION_PARAMETERS(player.getDetails()));
|
||||||
}
|
} else {
|
||||||
|
player.send(new CRYPTO_PARAMETERS(pToken));
|
||||||
|
player.getNetwork().setToken(pToken);
|
||||||
|
|
||||||
|
// Try again
|
||||||
|
// this.retrySend(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import org.alexdev.havana.dao.mysql.RoomFavouritesDao;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
import org.alexdev.havana.game.room.RoomManager;
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FAVOURITE_STATUS;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
@ -14,25 +15,32 @@ public class ADD_FAVORITE_ROOM implements MessageEvent {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
int roomType = reader.readInt();
|
int roomId = -1;
|
||||||
int roomId = reader.readInt();
|
|
||||||
|
|
||||||
if (roomType == 1) {
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
roomId = (roomId - RoomManager.PUBLIC_ROOM_OFFSET);
|
int roomType = reader.readInt();
|
||||||
}
|
roomId = reader.readInt();
|
||||||
|
|
||||||
Room room = RoomManager.getInstance().getRoomById(roomId);
|
if (roomType == 1) {
|
||||||
|
roomId = (roomId - RoomManager.PUBLIC_ROOM_OFFSET);
|
||||||
if (room == null) {
|
|
||||||
return; // Room was null, ignore request
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Room> favouritesList = RoomManager.getInstance().getFavouriteRooms(player.getDetails().getId(), false);
|
|
||||||
|
|
||||||
for (Room favroom : favouritesList) {
|
|
||||||
if (favroom.getId() == roomId) {
|
|
||||||
return; // Room already added, ignore request
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Room room = RoomManager.getInstance().getRoomById(roomId);
|
||||||
|
|
||||||
|
if (room == null) {
|
||||||
|
return; // Room was null, ignore request
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Room> favouritesList = RoomManager.getInstance().getFavouriteRooms(player.getDetails().getId(), false);
|
||||||
|
|
||||||
|
for (Room favroom : favouritesList) {
|
||||||
|
if (favroom.getId() == roomId) {
|
||||||
|
return; // Room already added, ignore request
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reader.readInt();
|
||||||
|
roomId = reader.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RoomManager.getInstance().getRoomById(roomId) == null) {
|
if (RoomManager.getInstance().getRoomById(roomId) == null) {
|
||||||
|
@ -49,5 +57,9 @@ public class ADD_FAVORITE_ROOM implements MessageEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomFavouritesDao.addFavouriteRoom(player.getDetails().getId(), roomId);
|
RoomFavouritesDao.addFavouriteRoom(player.getDetails().getId(), roomId);
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new FLASH_FAVOURITE_STATUS(roomId, true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,19 +3,31 @@ package org.alexdev.havana.messages.incoming.navigator;
|
||||||
import org.alexdev.havana.dao.mysql.RoomFavouritesDao;
|
import org.alexdev.havana.dao.mysql.RoomFavouritesDao;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.RoomManager;
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.navigator.FLASH_FAVOURITE_STATUS;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
public class DEL_FAVORITE_ROOM implements MessageEvent {
|
public class DEL_FAVORITE_ROOM implements MessageEvent {
|
||||||
@Override
|
@Override
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
int roomType = reader.readInt();
|
int roomId = -1;
|
||||||
int roomId = reader.readInt();
|
|
||||||
|
|
||||||
if (roomType == 1) {
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
roomId = (roomId - RoomManager.PUBLIC_ROOM_OFFSET);
|
int roomType = reader.readInt();
|
||||||
|
roomId = reader.readInt();
|
||||||
|
|
||||||
|
if (roomType == 1) {
|
||||||
|
roomId = (roomId - RoomManager.PUBLIC_ROOM_OFFSET);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reader.readInt();
|
||||||
|
roomId = reader.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomFavouritesDao.removeFavouriteRoom(player.getDetails().getId(), roomId);
|
RoomFavouritesDao.removeFavouriteRoom(player.getDetails().getId(), roomId);
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new FLASH_FAVOURITE_STATUS(roomId, false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,19 @@
|
||||||
package org.alexdev.havana.messages.incoming.rooms;
|
package org.alexdev.havana.messages.incoming.rooms;
|
||||||
|
|
||||||
import org.alexdev.havana.game.ads.AdManager;
|
|
||||||
import org.alexdev.havana.game.ads.Advertisement;
|
import org.alexdev.havana.game.ads.Advertisement;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
import org.alexdev.havana.messages.outgoing.rooms.ROOMAD;
|
import org.alexdev.havana.game.ads.AdManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.FLASH_FLATINFO;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.FLASH_ROOMENTRYINFO;
|
||||||
|
import org.alexdev.havana.messages.outgoing.rooms.*;
|
||||||
|
import org.alexdev.havana.messages.outgoing.rooms.user.USER_OBJECTS;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
import org.alexdev.havana.util.config.GameConfiguration;
|
import org.alexdev.havana.util.config.GameConfiguration;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class GETROOMAD implements MessageEvent {
|
public class GETROOMAD implements MessageEvent {
|
||||||
@Override
|
@Override
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
@ -46,6 +51,35 @@ public class GETROOMAD implements MessageEvent {
|
||||||
|
|
||||||
player.send(new ROOMAD(image, url));
|
player.send(new ROOMAD(image, url));
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new OBJECTS_WORLD(room.getItemManager().getPublicItems()));
|
||||||
|
player.send(new ITEMS(room));
|
||||||
|
player.send(new ACTIVE_OBJECTS(room));
|
||||||
|
|
||||||
|
player.getMessenger().sendStatusUpdate();
|
||||||
|
|
||||||
|
player.send(new USER_OBJECTS(room.getEntities()));
|
||||||
|
room.send(new USER_OBJECTS(player));
|
||||||
|
|
||||||
|
player.send(new FLASH_ROOMENTRYINFO(player, room));
|
||||||
|
|
||||||
|
if (!room.isPublicRoom()) {
|
||||||
|
player.send(new FLASH_FLATINFO(player, room, false, true, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (player.getNetwork().isBetaConnected()) {
|
||||||
|
player.send(new HEIGHTMAP(player.getRoomUser().getRoom().getModel()));
|
||||||
|
player.send(new FLOOR_MAP(player.getRoomUser().getRoom().getModel()));
|
||||||
|
|
||||||
|
if (!player.getRoomUser().getRoom().isPublicRoom()) {
|
||||||
|
player.send(new HEIGHTMAP_UPDATE(player.getRoomUser().getRoom(), player.getRoomUser().getRoom().getModel()));
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new USER_OBJECTS(List.of()));
|
||||||
|
}
|
||||||
|
|
||||||
|
new G_STAT().handle(player, null);
|
||||||
|
}
|
||||||
|
|
||||||
/*player.send(new MessageComposer() {
|
/*player.send(new MessageComposer() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -40,5 +40,15 @@ public class G_HMAP implements MessageEvent {
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new FLOOR_MAP(player.getRoomUser().getRoom().getModel()));
|
||||||
|
|
||||||
|
if (!player.getRoomUser().getRoom().isPublicRoom()) {
|
||||||
|
player.send(new HEIGHTMAP_UPDATE(player.getRoomUser().getRoom(), player.getRoomUser().getRoom().getModel()));
|
||||||
|
}
|
||||||
|
|
||||||
|
player.send(new USER_OBJECTS(List.of()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,12 @@ public class G_STAT implements MessageEvent {
|
||||||
if (roomEntity.getRoomUser().isSleeping()) {
|
if (roomEntity.getRoomUser().isSleeping()) {
|
||||||
player.send(new USER_SLEEP(roomEntity.getRoomUser().getInstanceId(), roomEntity.getRoomUser().isSleeping()));
|
player.send(new USER_SLEEP(roomEntity.getRoomUser().getInstanceId(), roomEntity.getRoomUser().isSleeping()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
if (roomEntity.getRoomUser().isCarrying()) {
|
||||||
|
player.send(new USER_CARRY_OBJECT(roomEntity.getRoomUser().getInstanceId(), roomEntity.getRoomUser().getCarryId(), roomEntity.getRoomUser().getCarryValue()));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Item item : room.getItems()) {
|
for (Item item : room.getItems()) {
|
||||||
|
|
|
@ -176,6 +176,11 @@ public class PLACESTUFF implements MessageEvent {
|
||||||
room.getMapping().addItem(player, item);
|
room.getMapping().addItem(player, item);
|
||||||
|
|
||||||
player.getInventory().getItems().remove(item);
|
player.getInventory().getItems().remove(item);
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.getInventory().getView("new");
|
||||||
|
}
|
||||||
|
|
||||||
player.getRoomUser().getTimerManager().resetRoomTimer();
|
player.getRoomUser().getTimerManager().resetRoomTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,10 @@ public class REMOVEITEM implements MessageEvent {
|
||||||
room.getMapping().pickupItem(player, item);
|
room.getMapping().pickupItem(player, item);
|
||||||
item.delete();
|
item.delete();
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.getInventory().getView("new");
|
||||||
|
}
|
||||||
|
|
||||||
player.getRoomUser().getTimerManager().resetRoomTimer();
|
player.getRoomUser().getTimerManager().resetRoomTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,13 @@ public class ASSIGNRIGHTS implements MessageEvent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
Player target = null;
|
||||||
|
|
||||||
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
||||||
|
} else {
|
||||||
|
target = PlayerManager.getInstance().getPlayerById(reader.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -17,13 +17,18 @@ import java.util.concurrent.TimeUnit;
|
||||||
public class BANUSER implements MessageEvent {
|
public class BANUSER implements MessageEvent {
|
||||||
@Override
|
@Override
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
Player target = null;//PlayerManager.getInstance().getPlayerByName(playerName);
|
||||||
Room room = player.getRoomUser().getRoom();
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
if (room == null) {
|
if (room == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
||||||
|
} else {
|
||||||
|
target = PlayerManager.getInstance().getPlayerById(reader.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -13,13 +13,18 @@ import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
public class KICK implements MessageEvent {
|
public class KICK implements MessageEvent {
|
||||||
@Override
|
@Override
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
Player target = null;//PlayerManager.getInstance().getPlayerByName(playerName);
|
||||||
Room room = player.getRoomUser().getRoom();
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
if (room == null) {
|
if (room == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
target = PlayerManager.getInstance().getPlayerByName(reader.contents());
|
||||||
|
} else {
|
||||||
|
target = PlayerManager.getInstance().getPlayerById(reader.readInt());
|
||||||
|
}
|
||||||
|
|
||||||
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.alexdev.havana.game.fuserights.Fuseright;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
import org.alexdev.havana.game.room.RoomManager;
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.rooms.FLASH_EDITDATA;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
@ -30,5 +31,9 @@ public class REMOVEALLRIGHTS implements MessageEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
RoomRightsDao.deleteRoomRights(room.getData());
|
RoomRightsDao.deleteRoomRights(room.getData());
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new FLASH_EDITDATA(room));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,11 @@ import org.alexdev.havana.game.fuserights.Fuseright;
|
||||||
import org.alexdev.havana.game.player.Player;
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.player.PlayerManager;
|
import org.alexdev.havana.game.player.PlayerManager;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.flash.outgoing.rooms.FLASH_EDITDATA;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class REMOVERIGHTS implements MessageEvent {
|
public class REMOVERIGHTS implements MessageEvent {
|
||||||
|
@ -25,7 +27,18 @@ public class REMOVERIGHTS implements MessageEvent {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
List<Integer> targets = List.of(PlayerDao.getId(reader.contents()));
|
List<Integer> targets = null;
|
||||||
|
|
||||||
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
targets = List.of(PlayerDao.getId(reader.contents()));
|
||||||
|
} else {
|
||||||
|
targets = new ArrayList<>();// = PlayerManager.getInstance().getPlayerById(reader.readInt());
|
||||||
|
|
||||||
|
int remove = reader.readInt();
|
||||||
|
for (int i = 0; i < remove; i++) {
|
||||||
|
targets.add(reader.readInt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int targetId : targets) {
|
for (int targetId : targets) {
|
||||||
if (!room.getRights().contains(targetId)) {
|
if (!room.getRights().contains(targetId)) {
|
||||||
|
@ -35,7 +48,7 @@ public class REMOVERIGHTS implements MessageEvent {
|
||||||
var target = PlayerManager.getInstance().getPlayerById(targetId);
|
var target = PlayerManager.getInstance().getPlayerById(targetId);
|
||||||
|
|
||||||
if (target != null) {
|
if (target != null) {
|
||||||
if (target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
if (target == null || target.getRoomUser().getRoom() == null || target.getRoomUser().getRoom().getId() != room.getId()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,5 +58,9 @@ public class REMOVERIGHTS implements MessageEvent {
|
||||||
room.getRights().remove(Integer.valueOf(targetId));
|
room.getRights().remove(Integer.valueOf(targetId));
|
||||||
RoomRightsDao.removeRights(targetId, room.getData());
|
RoomRightsDao.removeRights(targetId, room.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new FLASH_EDITDATA(room));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,6 +8,7 @@ import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.game.room.Room;
|
import org.alexdev.havana.game.room.Room;
|
||||||
import org.alexdev.havana.game.room.RoomManager;
|
import org.alexdev.havana.game.room.RoomManager;
|
||||||
import org.alexdev.havana.log.Log;
|
import org.alexdev.havana.log.Log;
|
||||||
|
import org.alexdev.havana.messages.flash.incoming.navigator.FLASH_USERFLATS;
|
||||||
import org.alexdev.havana.messages.types.MessageEvent;
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
|
||||||
|
@ -20,6 +21,10 @@ public class DELETEFLAT implements MessageEvent {
|
||||||
public void handle(Player player, NettyRequest reader) throws Exception {
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
int roomId = reader.readInt();
|
int roomId = reader.readInt();
|
||||||
delete(roomId, player.getDetails().getId());
|
delete(roomId, player.getDetails().getId());
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
new FLASH_USERFLATS().handle(player, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void delete(int roomId, int userId) throws SQLException {
|
public static void delete(int roomId, int userId) throws SQLException {
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package org.alexdev.havana.messages.incoming.rooms.user;
|
||||||
|
|
||||||
|
import org.alexdev.havana.dao.mysql.PlayerDao;
|
||||||
|
import org.alexdev.havana.game.misc.figure.FigureManager;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
|
import org.alexdev.havana.game.room.Room;
|
||||||
|
import org.alexdev.havana.messages.types.MessageEvent;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyRequest;
|
||||||
|
import org.alexdev.havana.util.StringUtil;
|
||||||
|
|
||||||
|
public class CHANGE_LOOKS implements MessageEvent {
|
||||||
|
@Override
|
||||||
|
public void handle(Player player, NettyRequest reader) throws Exception {
|
||||||
|
Room room = player.getRoomUser().getRoom();
|
||||||
|
|
||||||
|
if (room == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String gender = StringUtil.filterInput(reader.readString(), true);
|
||||||
|
String figure = StringUtil.filterInput(reader.readString(), true);
|
||||||
|
|
||||||
|
if (!gender.equals("M") && !gender.equals("F")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!FigureManager.getInstance().validateFigure(figure, gender, player.getDetails().hasClubSubscription())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.getDetails().setFigure(figure);
|
||||||
|
player.getDetails().setSex(gender);
|
||||||
|
|
||||||
|
PlayerDao.saveDetails(player.getDetails().getId(),
|
||||||
|
player.getDetails().getFigure(),
|
||||||
|
player.getDetails().getPoolFigure(),
|
||||||
|
player.getDetails().getSex());
|
||||||
|
|
||||||
|
player.getRoomUser().refreshAppearance();
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,6 +15,12 @@ public class QUIT implements MessageEvent {
|
||||||
player.getRoomUser().setAuthenticateTelporterId(-1);
|
player.getRoomUser().setAuthenticateTelporterId(-1);
|
||||||
player.getRoomUser().setAuthenticateId(-1);
|
player.getRoomUser().setAuthenticateId(-1);
|
||||||
|
|
||||||
player.getRoomUser().getRoom().getEntityManager().leaveRoom(player, false);
|
boolean hotelView = false;
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
hotelView = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
player.getRoomUser().getRoom().getEntityManager().leaveRoom(player, hotelView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,13 @@ public class TRADE_CONFIRM_ACCEPT implements MessageEvent {
|
||||||
if (player.getRoomUser().isTradeConfirmed() &&
|
if (player.getRoomUser().isTradeConfirmed() &&
|
||||||
player.getRoomUser().getTradePartner().getRoomUser().isTradeConfirmed()) {
|
player.getRoomUser().getTradePartner().getRoomUser().isTradeConfirmed()) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (RoomTradeManager.isTradeBannable(player)) {
|
||||||
|
RoomTradeManager.close(player.getRoomUser(), true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
player.send(new TRADE_COMPLETED());
|
player.send(new TRADE_COMPLETED());
|
||||||
player.getRoomUser().getTradePartner().send(new TRADE_COMPLETED());
|
player.getRoomUser().getTradePartner().send(new TRADE_COMPLETED());
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,14 @@ public class GET_INFO implements MessageEvent {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (player.isProcessLoginSteps()) {
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
player.getBadgeManager().refreshBadges();
|
||||||
|
player.getAchievementManager().processAchievements(player, true);
|
||||||
|
player.setProcessLoginSteps(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
player.send(new USER_OBJECT(player.getDetails()));
|
player.send(new USER_OBJECT(player.getDetails()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,10 +33,29 @@ public class CATALOGUE_PAGE extends PlayerMessageComposer {
|
||||||
response.writeString(image);
|
response.writeString(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
response.writeInt(this.texts.size());
|
if (this.page.getLayout().equalsIgnoreCase("frontpage3") && this.getPlayer().getNetwork().isFlashConnection()) {
|
||||||
|
List<String> texts = new ArrayList<>(this.texts);
|
||||||
|
texts = texts.subList(0, texts.size() - 6);
|
||||||
|
|
||||||
for (String text : this.texts) {
|
texts.add("1. Always ask permission from the bill payer first.\r\n" +
|
||||||
response.writeString(text);
|
"2. Send HABBO in a UK SMS to 78881. You'll get an SMS back with a voucher code and will be charged £3 plus your standard UK SMS rate, normally 10p.\r\n" +
|
||||||
|
"3. Enter the code below to redeem 35 Credits.");
|
||||||
|
texts.add("Redeem a Habbo Voucher code here:");
|
||||||
|
texts.add("#FAF8CC");
|
||||||
|
texts.add("#FAF8CC");
|
||||||
|
|
||||||
|
|
||||||
|
response.writeInt(texts.size());
|
||||||
|
|
||||||
|
for (String text : texts) {
|
||||||
|
response.writeString(text);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
response.writeInt(this.texts.size());
|
||||||
|
|
||||||
|
for (String text : this.texts) {
|
||||||
|
response.writeString(text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
response.writeInt(this.catalogueItems.size());
|
response.writeInt(this.catalogueItems.size());
|
||||||
|
|
|
@ -42,7 +42,13 @@ public class AVATAR_EFFECTS extends PlayerMessageComposer {
|
||||||
for (Effect effect : this.effects) {
|
for (Effect effect : this.effects) {
|
||||||
response.writeInt(effect.getEffectId());
|
response.writeInt(effect.getEffectId());
|
||||||
response.writeInt(effect.getTimeDuration());
|
response.writeInt(effect.getTimeDuration());
|
||||||
response.writeInt((int) this.effects.stream().filter(e -> e.getEffectId() == effect.getEffectId()).count());
|
|
||||||
|
if (this.getPlayer().getNetwork().isFlashConnection()) {
|
||||||
|
response.writeBool(!effect.isActivated());
|
||||||
|
} else {
|
||||||
|
response.writeInt((int) this.effects.stream().filter(e -> e.getEffectId() == effect.getEffectId()).count());
|
||||||
|
}
|
||||||
|
|
||||||
response.writeInt(effect.isActivated() ? effect.getTimeLeft() : -1);
|
response.writeInt(effect.isActivated() ? effect.getTimeLeft() : -1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,14 @@ public class ROOMEEVENT_INFO extends PlayerMessageComposer {
|
||||||
response.writeString(this.event.getName());
|
response.writeString(this.event.getName());
|
||||||
response.writeString(this.event.getDescription());
|
response.writeString(this.event.getDescription());
|
||||||
response.writeString(this.event.getStartedDate());
|
response.writeString(this.event.getStartedDate());
|
||||||
|
|
||||||
|
if (getPlayer().getNetwork().isFlashConnection()) {
|
||||||
|
response.writeInt(this.event.getTags().size());
|
||||||
|
|
||||||
|
for (String tag : this.event.getTags()) {
|
||||||
|
response.writeString(tag);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package org.alexdev.havana.messages.outgoing.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class ROOMQUEUEDATA extends MessageComposer {
|
||||||
|
private int position;
|
||||||
|
|
||||||
|
public ROOMQUEUEDATA(int position) {
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeInt(1);
|
||||||
|
|
||||||
|
response.writeString("d"); // general_loader_text /
|
||||||
|
response.writeInt(2); // queue_current_ / queue_other_
|
||||||
|
|
||||||
|
response.writeInt(1);
|
||||||
|
|
||||||
|
response.writeString("d"); // queue_set.d.info=There are %d% Habbos in front of you in the queue.
|
||||||
|
response.writeInt(this.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 259;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package org.alexdev.havana.messages.outgoing.rooms;
|
||||||
|
|
||||||
|
import org.alexdev.havana.messages.types.MessageComposer;
|
||||||
|
import org.alexdev.havana.server.netty.streams.NettyResponse;
|
||||||
|
|
||||||
|
public class ROOM_INTEREST extends MessageComposer {
|
||||||
|
@Override
|
||||||
|
public void compose(NettyResponse response) {
|
||||||
|
response.writeString("0");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getHeader() {
|
||||||
|
return 258;//Outgoing.ROOM_INTEREST;
|
||||||
|
}
|
||||||
|
}
|
|
@ -88,7 +88,11 @@ public class USER_STATUSES extends PlayerMessageComposer {
|
||||||
|
|
||||||
if (states.getPosition().getX() == 8 &&
|
if (states.getPosition().getX() == 8 &&
|
||||||
states.getPosition().getY() == 24) {
|
states.getPosition().getY() == 24) {
|
||||||
response.writeString(StringUtil.format(7.0));
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
response.writeString(StringUtil.format(4.0));
|
||||||
|
} else {
|
||||||
|
response.writeString(StringUtil.format(7.0));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
response.write(status.getValue());
|
response.write(status.getValue());
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,12 @@ public class USERBADGE extends PlayerMessageComposer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void compose(NettyResponse response) {
|
public void compose(NettyResponse response) {
|
||||||
response.writeString(this.userId);
|
if (this.getPlayer().getNetwork().isFlashConnection()) {
|
||||||
|
response.writeInt(this.userId);
|
||||||
|
} else {
|
||||||
|
response.writeString(this.userId);
|
||||||
|
}
|
||||||
|
|
||||||
response.writeInt(this.equippedBadges.size());
|
response.writeInt(this.equippedBadges.size());
|
||||||
|
|
||||||
for (Badge badge : this.equippedBadges) {
|
for (Badge badge : this.equippedBadges) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package org.alexdev.havana.server.netty;
|
package org.alexdev.havana.server.netty;
|
||||||
|
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
|
import org.alexdev.havana.Havana;
|
||||||
|
import org.alexdev.havana.game.player.Player;
|
||||||
import org.alexdev.havana.server.netty.codec.EncryptionDecoder;
|
import org.alexdev.havana.server.netty.codec.EncryptionDecoder;
|
||||||
import org.alexdev.havana.server.netty.codec.EncryptionEncoder;
|
import org.alexdev.havana.server.netty.codec.EncryptionEncoder;
|
||||||
import org.apache.commons.validator.routines.InetAddressValidator;
|
import org.apache.commons.validator.routines.InetAddressValidator;
|
||||||
|
@ -19,10 +21,12 @@ public class NettyPlayerNetwork {
|
||||||
private String pToken;
|
private String pToken;
|
||||||
private int pTx;
|
private int pTx;
|
||||||
private int pRx;
|
private int pRx;
|
||||||
|
private final boolean isFlashConnected;
|
||||||
|
|
||||||
public NettyPlayerNetwork(Channel channel, int connectionId) {
|
public NettyPlayerNetwork(Channel channel, int connectionId) {
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.connectionId = connectionId;
|
this.connectionId = connectionId;
|
||||||
|
this.isFlashConnected = (Integer.parseInt(channel.localAddress().toString().split(":")[1]) == Havana.getServer().getFlashPort());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String removePadding(String tBody, int i) {
|
public static String removePadding(String tBody, int i) {
|
||||||
|
@ -159,9 +163,28 @@ public class NettyPlayerNetwork {
|
||||||
|
|
||||||
public void registerHandler(ServerHandlerType type, Object object) {
|
public void registerHandler(ServerHandlerType type, Object object) {
|
||||||
if (type == ServerHandlerType.RC4) {
|
if (type == ServerHandlerType.RC4) {
|
||||||
|
Player player = this.channel.attr(Player.PLAYER_KEY).get();
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.channel.pipeline().addBefore("networkDecoder", "encryptionDecoder", new EncryptionDecoder((BigInteger) object));
|
this.channel.pipeline().addBefore("networkDecoder", "encryptionDecoder", new EncryptionDecoder((BigInteger) object));
|
||||||
this.channel.pipeline().addBefore("networkEncoder", "encryptionEncoder", new EncryptionEncoder((BigInteger) object));
|
this.channel.pipeline().addBefore("networkEncoder", "encryptionEncoder", new EncryptionEncoder((BigInteger) object));
|
||||||
// this.channel.pipeline().remove("gameDecoder");
|
// this.channel.pipeline().remove("gameDecoder");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isBetaConnected() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFlashClient() {
|
||||||
|
return isFlashConnected;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isFlashConnection() {
|
||||||
|
return /*isBetaConnected || */isFlashConnected;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,14 +65,32 @@ public class NettyServer {
|
||||||
* Bind the server to its address that's been specified
|
* Bind the server to its address that's been specified
|
||||||
*/
|
*/
|
||||||
public void bind() {
|
public void bind() {
|
||||||
this.bootstrap.bind(new InetSocketAddress(this.getIp(), this.getPort())).addListener(objectFuture -> {
|
int[] ports = new int[] { this.port, this.getFlashPort() /*, this.port + 4*/}; // R34 client: deprecated
|
||||||
|
|
||||||
|
for (int gamePort : ports) {
|
||||||
|
this.bootstrap.bind(new InetSocketAddress(this.getIp(), gamePort)).addListener(objectFuture -> {
|
||||||
|
if (!objectFuture.isSuccess()) {
|
||||||
|
Log.getErrorLogger().error("Failed to start server on address: {}:{}", this.getIp(), gamePort);
|
||||||
|
Log.getErrorLogger().error("Please double check there's no programs using the same game port, and you have set the correct IP address to listen on.");
|
||||||
|
} else {
|
||||||
|
if (gamePort == this.port + 2) {
|
||||||
|
log.info("Flash game server is listening on {}:{}", this.getIp(), gamePort);
|
||||||
|
/*} else if (gamePort == this.port + 4) {
|
||||||
|
log.info("Flash R34 game server is listening on {}:{}", this.getIp(), gamePort);*/
|
||||||
|
} else {
|
||||||
|
log.info("Shockwave game server is listening on {}:{}", this.getIp(), gamePort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/*this.bootstrap.bind(new InetSocketAddress(this.getIp(), this.getPort())).addListener(objectFuture -> {
|
||||||
if (!objectFuture.isSuccess()) {
|
if (!objectFuture.isSuccess()) {
|
||||||
Log.getErrorLogger().error("Failed to start server on address: {}:{}", this.getIp(), this.port);
|
Log.getErrorLogger().error("Failed to start server on address: {}:{}", this.getIp(), this.getPort());
|
||||||
Log.getErrorLogger().error("Please double check there's no programs using the same game port, and you have set the correct IP address to listen on.");
|
Log.getErrorLogger().error("Please double check there's no programs using the same gamePort, and you have set the correct IP address to listen on.", this.getIp(), this.getPort());
|
||||||
} else {
|
} else {
|
||||||
log.info("Shockwave game server is listening on {}:{}", this.getIp(), this.getPort());
|
log.info("Shockwave game server is listening on {}:{}", this.getIp(), this.getPort());
|
||||||
}
|
}
|
||||||
});
|
});*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFlashPort() {
|
public int getFlashPort() {
|
||||||
|
|
|
@ -19,6 +19,22 @@ public class NetworkDecoder extends ByteToMessageDecoder {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Player player = ctx.channel().attr(Player.PLAYER_KEY).get();
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
buffer.markReaderIndex();
|
||||||
|
|
||||||
|
if (buffer.readByte() != 64) {
|
||||||
|
ctx.channel().writeAndFlush("<?xml version=\"1.0\"?>\r\n" +
|
||||||
|
"<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">\r\n" +
|
||||||
|
"<cross-domain-policy>\r\n" +
|
||||||
|
"<allow-access-from domain=\"*\" to-ports=\"1-31111\" />\r\n" +
|
||||||
|
"</cross-domain-policy>\0");
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer.resetReaderIndex();
|
||||||
|
}
|
||||||
|
|
||||||
buffer.markReaderIndex();
|
buffer.markReaderIndex();
|
||||||
|
|
||||||
int length = Base64Encoding.decode(new byte[]{buffer.readByte(), buffer.readByte(), buffer.readByte()});
|
int length = Base64Encoding.decode(new byte[]{buffer.readByte(), buffer.readByte(), buffer.readByte()});
|
||||||
|
|
|
@ -40,9 +40,44 @@ public class NetworkEncoder extends MessageToMessageEncoder<Object> {
|
||||||
NettyResponse response = new NettyResponse(msg.getHeader(), buffer);
|
NettyResponse response = new NettyResponse(msg.getHeader(), buffer);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if (msg instanceof ALERT) {
|
||||||
|
ALERT alert = (ALERT)msg;
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
alert.setMessage(alert.getMessage().replace("<br>", "\r"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fix "thumbs up" between Flash/Shockwave clients (ALT+7)
|
||||||
|
if (msg instanceof MESSENGER_MSG) {
|
||||||
|
MESSENGER_MSG messengerMsg = (MESSENGER_MSG)msg;
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
messengerMsg.getMessage().setMessage(messengerMsg.getMessage().getMessage().replace(Character.toString((char)149), Character.toString((char)8226)));
|
||||||
|
} else {
|
||||||
|
messengerMsg.getMessage().setMessage(messengerMsg.getMessage().getMessage().replace(Character.toString((char)8226), Character.toString((char)149)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msg instanceof CHAT_MESSAGE) {
|
||||||
|
CHAT_MESSAGE chatMsg = (CHAT_MESSAGE)msg;
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
chatMsg.setMessage(chatMsg.getMessage().replace(Character.toString((char)149), Character.toString((char)8226)));
|
||||||
|
} else {
|
||||||
|
chatMsg.setMessage(chatMsg.getMessage().replace(Character.toString((char)8226), Character.toString((char)149)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
msg.compose(response);
|
msg.compose(response);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Log.getErrorLogger().error("Error occurred when composing (" + response.getHeader() + "):", ex);
|
String name = "";
|
||||||
|
|
||||||
|
if (player != null && player.isLoggedIn()) {
|
||||||
|
name = player.getDetails().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.getErrorLogger().error("Error occurred when composing (" + response.getHeader() + ") for user (" + name + "):", ex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,9 @@ public class ConnectionHandler extends SimpleChannelInboundHandler<NettyRequest>
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.send(new HELLO());
|
if (!player.getNetwork().isFlashConnection()) {
|
||||||
|
player.send(new HELLO());
|
||||||
|
}
|
||||||
|
|
||||||
if (ServerConfiguration.getBoolean("log.connections")) {
|
if (ServerConfiguration.getBoolean("log.connections")) {
|
||||||
log.info("[{}] Connection from {} ", player.getNetwork().getConnectionId(), NettyPlayerNetwork.getIpAddress(ctx.channel()));
|
log.info("[{}] Connection from {} ", player.getNetwork().getConnectionId(), NettyPlayerNetwork.getIpAddress(ctx.channel()));
|
||||||
|
|
|
@ -204,6 +204,10 @@ public class StringUtil {
|
||||||
newString = newString.replace("\r", "<br>");
|
newString = newString.replace("\r", "<br>");
|
||||||
newString = newString.replace("\n", "<br>");
|
newString = newString.replace("\n", "<br>");
|
||||||
|
|
||||||
|
if (player.getNetwork().isFlashConnection()) {
|
||||||
|
newString = newString.replace("<br>", "\r");
|
||||||
|
}
|
||||||
|
|
||||||
newString = newString.replace("%username%", player.getDetails().getName());
|
newString = newString.replace("%username%", player.getDetails().getName());
|
||||||
return newString;
|
return newString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,11 +70,14 @@ public class Routes {
|
||||||
RouteManager.addRoute("/client", ClientController::client);
|
RouteManager.addRoute("/client", ClientController::client);
|
||||||
RouteManager.addRoute("/clientlog/update", ClientController::blank);
|
RouteManager.addRoute("/clientlog/update", ClientController::blank);
|
||||||
RouteManager.addRoute("/cacheCheck", ClientController::blank);
|
RouteManager.addRoute("/cacheCheck", ClientController::blank);
|
||||||
|
RouteManager.addRoute("/shockwave_client", ClientController::shockwaveclient);
|
||||||
|
RouteManager.addRoute("/flash_client", ClientController::flashClient);
|
||||||
//RouteManager.addRoute("/beta_client", ClientController::betaClient); // R34 client: deprecated
|
//RouteManager.addRoute("/beta_client", ClientController::betaClient); // R34 client: deprecated
|
||||||
RouteManager.addRoute("/client_popup/install_shockwave", ClientController::clientInstallShockwave);
|
RouteManager.addRoute("/client_popup/install_shockwave", ClientController::clientInstallShockwave);
|
||||||
RouteManager.addRoute("/client_error", ClientController::client_error);
|
RouteManager.addRoute("/client_error", ClientController::client_error);
|
||||||
RouteManager.addRoute("/client_connection_failed", ClientController::client_connection_failed);
|
RouteManager.addRoute("/client_connection_failed", ClientController::client_connection_failed);
|
||||||
|
|
||||||
|
|
||||||
// Account
|
// Account
|
||||||
RouteManager.addRoute("/account/banned", AccountController::banned);
|
RouteManager.addRoute("/account/banned", AccountController::banned);
|
||||||
RouteManager.addRoute("/account/logout", AccountController::logout);
|
RouteManager.addRoute("/account/logout", AccountController::logout);
|
||||||
|
|
|
@ -30,6 +30,36 @@ public class ClientController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (!VotingAPI.isVoted(webConnection)) {
|
||||||
|
VotingAPI.redirectToClientVote(webConnection);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
int userId = webConnection.session().getInt("user.id");
|
||||||
|
String getRequests = webConnection.request().uri().contains("?") ? "?" + webConnection.request().uri().split("\\?")[1] : "";
|
||||||
|
|
||||||
|
/*
|
||||||
|
ClientPreference clientPreference = SessionDao.getClientPreference(userId);
|
||||||
|
|
||||||
|
if (clientPreference == ClientPreference.SHOCKWAVE) {
|
||||||
|
webConnection.redirect("/shockwave_client" + getRequests);
|
||||||
|
} else {
|
||||||
|
webConnection.redirect("/flash_client" + getRequests);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
webConnection.redirect("/shockwave_client" + getRequests);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void shockwaveclient(WebConnection webConnection) throws SQLException {
|
||||||
|
XSSUtil.clear(webConnection);
|
||||||
|
|
||||||
|
if (!webConnection.session().getBoolean("authenticated")) {
|
||||||
|
webConnection.redirect("/login_popup");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
webConnection.session().set("clientRequest", webConnection.request().uri());
|
webConnection.session().set("clientRequest", webConnection.request().uri());
|
||||||
|
|
||||||
if (webConnection.session().getBoolean("clientAuthenticate")) {
|
if (webConnection.session().getBoolean("clientAuthenticate")) {
|
||||||
|
@ -111,7 +141,7 @@ public class ClientController {
|
||||||
var ssoTicket = playerDetails.getSsoTicket();
|
var ssoTicket = playerDetails.getSsoTicket();
|
||||||
|
|
||||||
// Update sso ticket
|
// Update sso ticket
|
||||||
if (GameConfiguration.getInstance().getBoolean("reset.sso.after.login") || ssoTicket == null || ssoTicket.isBlank()) {
|
if (GameConfiguration.getInstance().getBoolean("reset.sso.after.login") || ssoTicket.isBlank()) {
|
||||||
ssoTicket = UUID.randomUUID().toString();
|
ssoTicket = UUID.randomUUID().toString();
|
||||||
PlayerDao.setTicket(webConnection.session().getInt("user.id"), ssoTicket);
|
PlayerDao.setTicket(webConnection.session().getInt("user.id"), ssoTicket);
|
||||||
}
|
}
|
||||||
|
@ -130,6 +160,99 @@ public class ClientController {
|
||||||
template.render();
|
template.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void flashClient(WebConnection webConnection) throws SQLException {
|
||||||
|
XSSUtil.clear(webConnection);
|
||||||
|
|
||||||
|
if (!webConnection.session().getBoolean("authenticated")) {
|
||||||
|
webConnection.redirect("/login_popup");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var template = webConnection.template("client_flash");
|
||||||
|
PlayerDetails playerDetails = (PlayerDetails) template.get("playerDetails");
|
||||||
|
|
||||||
|
webConnection.session().set("clientRequest", webConnection.request().uri());
|
||||||
|
|
||||||
|
if (webConnection.session().getBoolean("clientAuthenticate")) {
|
||||||
|
webConnection.redirect("/account/reauthenticate");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean forwardRoom = false;
|
||||||
|
int forwardType = -1;
|
||||||
|
int forwardId = -1;
|
||||||
|
|
||||||
|
if (playerDetails == null) {
|
||||||
|
SessionUtil.logout(webConnection);
|
||||||
|
webConnection.redirect("/");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pair = playerDetails.isBanned();
|
||||||
|
|
||||||
|
if (pair != null) {
|
||||||
|
webConnection.redirect("/account/banned");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webConnection.get().contains("createRoom") && StringUtils.isNumeric(webConnection.get().getString("createRoom"))) {
|
||||||
|
int roomType = Integer.parseInt(webConnection.get().getString("createRoom"));
|
||||||
|
boolean setGift = false;
|
||||||
|
|
||||||
|
if (!playerDetails.canSelectRoom()) {
|
||||||
|
int roomLayout = (int) PlayerStatisticsDao.getStatisticLong(playerDetails.getId(), PlayerStatistic.NEWBIE_ROOM_LAYOUT);
|
||||||
|
|
||||||
|
if (roomLayout == 0) {
|
||||||
|
if (!(roomType < 0 || roomType > 5)) {
|
||||||
|
setGift = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setGift = RoomSelectionHandler.selectRoom(playerDetails.getId(), roomType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setGift) {
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_ROOM_LAYOUT, roomType + 1);
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_GIFT, 1);
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_GIFT_TIME, DateUtil.getCurrentTimeSeconds() + TimeUnit.DAYS.toSeconds(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
playerDetails = PlayerDao.getDetails(webConnection.session().getInt("user.id"));
|
||||||
|
forwardRoom = true;
|
||||||
|
|
||||||
|
forwardType = 2; // Private room
|
||||||
|
forwardId = playerDetails.getSelectedRoomId();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webConnection.get().contains("forwardId")) {
|
||||||
|
forwardRoom = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
forwardId = webConnection.get().getInt("roomId");
|
||||||
|
forwardType = webConnection.get().getInt("forwardId");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// template.set("preferredCountry", PlayerStatisticsDao.getStatisticString(playerDetails.getId(), PlayerStatistic.HOTEL_VIEW).toLowerCase());
|
||||||
|
template.set("forwardRoom", forwardRoom);
|
||||||
|
template.set("forwardId", forwardId);
|
||||||
|
template.set("forwardType", forwardType);
|
||||||
|
|
||||||
|
// Update sso ticket
|
||||||
|
var ssoTicket = playerDetails.getSsoTicket();
|
||||||
|
|
||||||
|
// Update sso ticket
|
||||||
|
if (GameConfiguration.getInstance().getBoolean("reset.sso.after.login") || ssoTicket == null || ssoTicket.isBlank()) {
|
||||||
|
ssoTicket = UUID.randomUUID().toString();
|
||||||
|
PlayerDao.setTicket(webConnection.session().getInt("user.id"), ssoTicket);
|
||||||
|
}
|
||||||
|
|
||||||
|
template.set("ssoTicket", ssoTicket);
|
||||||
|
template.render();
|
||||||
|
}
|
||||||
|
|
||||||
public static void clientInstallShockwave(WebConnection webConnection) {
|
public static void clientInstallShockwave(WebConnection webConnection) {
|
||||||
XSSUtil.clear(webConnection);
|
XSSUtil.clear(webConnection);
|
||||||
|
|
||||||
|
@ -206,4 +329,104 @@ public class ClientController {
|
||||||
|
|
||||||
template.render();
|
template.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void betaClient(WebConnection webConnection) throws SQLException {
|
||||||
|
XSSUtil.clear(webConnection);
|
||||||
|
|
||||||
|
if (!webConnection.session().getBoolean("authenticated")) {
|
||||||
|
webConnection.redirect("/login_popup");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var template = webConnection.template("client_beta");
|
||||||
|
PlayerDetails playerDetails = (PlayerDetails) template.get("playerDetails");
|
||||||
|
|
||||||
|
webConnection.session().set("clientRequest", webConnection.request().uri());
|
||||||
|
|
||||||
|
if (webConnection.session().getBoolean("clientAuthenticate")) {
|
||||||
|
webConnection.redirect("/account/reauthenticate");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
if (!VotingAPI.isVoted(webConnection)) {
|
||||||
|
VotingAPI.redirectToClientVote(webConnection);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
boolean forwardRoom = false;
|
||||||
|
int forwardType = -1;
|
||||||
|
int forwardId = -1;
|
||||||
|
|
||||||
|
if (playerDetails == null) {
|
||||||
|
SessionUtil.logout(webConnection);
|
||||||
|
webConnection.redirect("/");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pair = playerDetails.isBanned();
|
||||||
|
|
||||||
|
if (pair != null) {
|
||||||
|
webConnection.redirect("/account/banned");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webConnection.get().contains("createRoom") && StringUtils.isNumeric(webConnection.get().getString("createRoom"))) {
|
||||||
|
int roomType = Integer.parseInt(webConnection.get().getString("createRoom"));
|
||||||
|
boolean setGift = false;
|
||||||
|
|
||||||
|
if (!playerDetails.canSelectRoom()) {
|
||||||
|
int roomLayout = (int) PlayerStatisticsDao.getStatisticLong(playerDetails.getId(), PlayerStatistic.NEWBIE_ROOM_LAYOUT);
|
||||||
|
|
||||||
|
if (roomLayout == 0) {
|
||||||
|
if (!(roomType < 0 || roomType > 5)) {
|
||||||
|
setGift = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setGift = RoomSelectionHandler.selectRoom(playerDetails.getId(), roomType);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setGift) {
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_ROOM_LAYOUT, roomType + 1);
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_GIFT, 1);
|
||||||
|
PlayerStatisticsDao.updateStatistic(playerDetails.getId(), PlayerStatistic.NEWBIE_GIFT_TIME, DateUtil.getCurrentTimeSeconds() + TimeUnit.DAYS.toSeconds(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
playerDetails = PlayerDao.getDetails(webConnection.session().getInt("user.id"));
|
||||||
|
forwardRoom = true;
|
||||||
|
|
||||||
|
forwardType = 2; // Private room
|
||||||
|
forwardId = playerDetails.getSelectedRoomId();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (webConnection.get().contains("forwardId")) {
|
||||||
|
forwardRoom = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
forwardId = webConnection.get().getInt("roomId");
|
||||||
|
forwardType = webConnection.get().getInt("forwardId");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// template.set("preferredCountry", PlayerStatisticsDao.getStatisticString(playerDetails.getId(), PlayerStatistic.HOTEL_VIEW).toLowerCase());
|
||||||
|
template.set("forwardRoom", forwardRoom);
|
||||||
|
template.set("forwardId", forwardId);
|
||||||
|
template.set("forwardType", forwardType);
|
||||||
|
|
||||||
|
// Update sso ticket
|
||||||
|
var ssoTicket = playerDetails.getSsoTicket();
|
||||||
|
|
||||||
|
// Update sso ticket
|
||||||
|
if (GameConfiguration.getInstance().getBoolean("reset.sso.after.login") || ssoTicket.isBlank()) {
|
||||||
|
ssoTicket = UUID.randomUUID().toString();
|
||||||
|
PlayerDao.setTicket(webConnection.session().getInt("user.id"), ssoTicket);
|
||||||
|
}
|
||||||
|
|
||||||
|
template.set("ssoTicket", ssoTicket);
|
||||||
|
template.render();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package org.alexdev.http.util;
|
package org.alexdev.http.util;
|
||||||
|
|
||||||
import com.goterl.lazysodium.interfaces.PwHash;
|
|
||||||
import org.alexdev.duckhttpd.server.connection.WebConnection;
|
import org.alexdev.duckhttpd.server.connection.WebConnection;
|
||||||
import org.alexdev.havana.dao.mysql.PlayerDao;
|
import org.alexdev.havana.dao.mysql.PlayerDao;
|
||||||
import org.alexdev.havana.game.player.PlayerDetails;
|
import org.alexdev.havana.game.player.PlayerDetails;
|
||||||
|
|
|
@ -29,6 +29,12 @@ public class WebSettingsConfigWriter implements ConfigWriter {
|
||||||
config.put("loader.external.variables", "http://localhost/dcr/v31/gamedata/external_variables.txt?");
|
config.put("loader.external.variables", "http://localhost/dcr/v31/gamedata/external_variables.txt?");
|
||||||
config.put("loader.external.texts", "http://localhost/dcr/v31/gamedata/external_texts.txt?");
|
config.put("loader.external.texts", "http://localhost/dcr/v31/gamedata/external_texts.txt?");
|
||||||
|
|
||||||
|
config.put("loader.flash.base", "http://localhost/gordon/RELEASE39-22643-22891-200911110035_07c3a2a30713fd5bea8a8caf07e33438/");
|
||||||
|
config.put("loader.flash.swf", "http://localhost/gordon/RELEASE39-22643-22891-200911110035_07c3a2a30713fd5bea8a8caf07e33438/Habbo.swf");
|
||||||
|
config.put("loader.flash.external.texts", "http://localhost/flash_gamedata/external_texts.txt");
|
||||||
|
config.put("loader.flash.external.variables", "http://localhost/flash_gamedata/gamedata/external_variables.txt");
|
||||||
|
|
||||||
|
|
||||||
config.put("registration.disabled", "false");
|
config.put("registration.disabled", "false");
|
||||||
config.put("collectables.page", "51");
|
config.put("collectables.page", "51");
|
||||||
|
|
||||||
|
|
56
tools/migrations/update.1.2.sql
Normal file
56
tools/migrations/update.1.2.sql
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
-- Dumping structure for table havana.navigator_styles
|
||||||
|
DROP TABLE IF EXISTS `navigator_styles`;
|
||||||
|
CREATE TABLE IF NOT EXISTS `navigator_styles` (
|
||||||
|
`room_id` int(11) NOT NULL,
|
||||||
|
`description` text NOT NULL DEFAULT '',
|
||||||
|
`thumbnail_url` varchar(255) NOT NULL DEFAULT 'officialrooms_es/shoppingdeals_recroom.gif',
|
||||||
|
`thumbnail_layout` tinyint(1) NOT NULL DEFAULT 1,
|
||||||
|
PRIMARY KEY (`room_id`),
|
||||||
|
UNIQUE KEY `room_id` (`room_id`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
|
-- Dumping data for table havana.navigator_styles: ~40 rows (approximately)
|
||||||
|
DELETE FROM `navigator_styles`;
|
||||||
|
/*!40000 ALTER TABLE `navigator_styles` DISABLE KEYS */;
|
||||||
|
INSERT INTO `navigator_styles` (`room_id`, `description`, `thumbnail_url`, `thumbnail_layout`) VALUES
|
||||||
|
(1, 'New? Lost? Get a warm welcome here!', 'officialrooms_defaults/hh_room_nlobby.png', 4),
|
||||||
|
(2, 'Perform your latest master piece, or simply catch the latest gossip.', 'officialrooms_defaults/hh_room_theater.png', 4),
|
||||||
|
(3, 'Books! Glorious books! Fill yourself with information and lose yourself in wonderful literary worlds.', 'officialrooms_defaults/hh_room_library.png', 4),
|
||||||
|
(4, 'Will you reach the final of the biggest brains in Habbo competition?', 'officialrooms_hq/hh_room_tv_studio_m6.png', 1),
|
||||||
|
(5, 'Now Showing: The Making of Habbo Big Brother', 'officialrooms_defaults/hh_room_cinema.png', 1),
|
||||||
|
(6, 'Zac Efron owns in the 17 Again basketball court – what would you do with your second shot?', 'officialrooms_defaults/hh_room_sport.png', 1),
|
||||||
|
(7, 'Forget Beijing, check out Habbo\'s very own Olympic Stadium!', 'officialrooms_hq/official_fball.png', 1),
|
||||||
|
(8, 'Beware the flying knives!', 'officialrooms_defaults/hh_room_kitchen.png', 1),
|
||||||
|
(9, 'Grab a stool and hear Dave and Sadie talk about the good old days...', 'officialrooms_defaults/hh_room_pub.png', 1),
|
||||||
|
(10, 'Relax with friends over one of Marias specialty coffees', 'officialrooms_hq/hh_room_cafe_xms08.png', 1),
|
||||||
|
(11, 'Join Billy for a bite to eat and some office gossip in the HABprentice', 'officialrooms_defaults/hh_room_erics.png', 1),
|
||||||
|
(12, 'Star Wars The Clone Wars on Blu-Ray and DVD from December 8', 'officialrooms_defaults/hh_room_space_cafe.png', 1),
|
||||||
|
(13, 'One of the highest points in Habbo Hotel!', 'officialrooms_defaults/hh_room_rooftop.png', 1),
|
||||||
|
(15, 'Pizza; food of the hungry!', 'officialrooms_defaults/hh_room_pizza.png', 1),
|
||||||
|
(16, 'Get food here!', 'officialrooms_defaults/hh_room_habburger.png', 1),
|
||||||
|
(17, 'Old, cool, Dusty and the perfect room for the biggest brains in Habbo', 'officialrooms_defaults/hh_room_dustylounge.png', 1),
|
||||||
|
(18, 'Try the tea in this Mongol cafe - it is to die for darlings!', 'officialrooms_defaults/hh_room_tearoom.png', 1),
|
||||||
|
(19, 'A set of rooms inspired by the original and legendary Mobiles Disco, the progenitor of Habbo', 'officialrooms_defaults/hh_room_old_skool.png', 1),
|
||||||
|
(21, 'Ghetto Fabulous', 'officialrooms_defaults/hh_room_disco.png', 1),
|
||||||
|
(23, 'Strut your funky stuff', 'officialrooms_defaults/hh_room_bar.png', 1),
|
||||||
|
(25, 'Home to the Duck Island residents.', 'officialrooms_defaults/hh_room_sunsetcafe.png', 1),
|
||||||
|
(27, 'Where Ideas can flow freely', 'officialrooms_defaults/hh_room_chill.png', 1),
|
||||||
|
(28, 'Monumental and magnificient. For Habbo Club Members only.', 'officialrooms_defaults/hh_room_clubmammoth.png', 1),
|
||||||
|
(29, 'Climb the rocks, chill in the shade and watch for pirate ships!', 'officialrooms_defaults/hh_room_floatinggarden.png', 1),
|
||||||
|
(30, 'Enjoy the great outdoors, celebrate mother nature and party!', 'officialrooms_defaults/hh_room_picnic.png', 1),
|
||||||
|
(31, 'Grab a sunbed and top up that tan!', 'officialrooms_defaults/hh_room_sun_terrace.png', 1),
|
||||||
|
(32, 'Follow the path...', 'officialrooms_defaults/hh_room_gate_park.png', 1),
|
||||||
|
(34, 'Follow the path...', 'officialrooms_defaults/hh_room_park.png', 1),
|
||||||
|
(36, 'Splish, splash and have a bash in the Habbo pool!', 'officialrooms_defaults/hh_room_pool.png', 1),
|
||||||
|
(39, 'The heart of Habbo Hotel', 'officialrooms_defaults/hh_room_lobby.png', 1),
|
||||||
|
(42, 'This was the Habbo Big Brother Lounge during series 1 (2008)', 'officialrooms_defaults/hh_room_floorlobbies.png', 1),
|
||||||
|
(43, 'Grab some brain juice!', 'officialrooms_defaults/hh_room_icecafe.png', 1),
|
||||||
|
(44, 'Learn a foreign language and win Habbo Credits in our quests!', 'officialrooms_defaults/hh_room_netcafe.png', 1),
|
||||||
|
(45, 'Angus, Thongs and Perfect Snogging in cinemas July 25th', 'officialrooms_defaults/hh_room_beauty_salon_general.png', 1),
|
||||||
|
(46, 'Popular? Win a cool band and party at your school. You soon will be!', 'officialrooms_defaults/hh_room_den.png', 1),
|
||||||
|
(47, 'Connecting you to the heart of Habbo Hotel', 'officialrooms_defaults/hh_room_hallway.png', 1),
|
||||||
|
(53, 'Taking you to the far reaches of Habbo Hotel', 'officialrooms_defaults/hh_room_hallway2.png', 1),
|
||||||
|
(59, 'Celebrities favourite hangout', 'officialrooms_defaults/hh_room_starlounge.png', 1),
|
||||||
|
(60, 'Tres chic with an eastern twist. For Habbo Club Members only.', 'officialrooms_defaults/hh_room_orient.png', 1),
|
||||||
|
(68, 'Even the smallest of light... shines in the darkness', 'officialrooms_defaults/hh_room_emperors.png', 1);
|
||||||
|
/*!40000 ALTER TABLE `navigator_styles` ENABLE KEYS */;
|
|
@ -120,18 +120,17 @@ body { behavior: url({{ site.staticContentPath }}/web-gallery/js/csshover.htc);
|
||||||
{% if site.serverOnline %}
|
{% if site.serverOnline %}
|
||||||
<div class="enter-hotel-btn">
|
<div class="enter-hotel-btn">
|
||||||
<div class="open enter-btn">
|
<div class="open enter-btn">
|
||||||
<a href="{{ site.sitePath }}/client" target="client" onclick="openOrFocusHabbo(this); return false;">Enter {{ site.siteName }} Hotel<i></i></a>
|
<a href="{{ site.sitePath }}/shockwave_client" target="shockwave_client" onclick="openOrFocusHabbo(this); return false;">Enter<i></i></a>
|
||||||
<b></b>
|
<b></b>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!--
|
|
||||||
<div class="enter-beta-btn">
|
<div class="enter-beta-btn">
|
||||||
<div class="open enter-btn">
|
<div class="open enter-btn">
|
||||||
<a href="{{ site.sitePath }}/client" target="client" onclick="openOrFocusHabbo(this); return false;">Enter {{ site.siteName }} Hotel<i></i></a>
|
<a href="{{ site.sitePath }}/flash_client" target="flash_client" onclick="openOrFocusHabbo(this); return false;">Enter Flash {{ site.siteName }}<i></i></a>
|
||||||
<b></b>
|
<b></b>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
-->
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="enter-hotel-btn">
|
<div class="enter-hotel-btn">
|
||||||
<div class="closed enter-btn">
|
<div class="closed enter-btn">
|
||||||
|
|
Loading…
Add table
Reference in a new issue