2018-07-06 13:30:00 +00:00
package com.eu.habbo.habbohotel.rooms ;
import com.eu.habbo.Emulator ;
import com.eu.habbo.core.RoomUserPetComposer ;
import com.eu.habbo.habbohotel.achievements.AchievementManager ;
import com.eu.habbo.habbohotel.bots.Bot ;
2019-12-27 14:38:45 +02:00
import com.eu.habbo.habbohotel.gameclients.GameClient ;
2019-05-04 21:41:18 +01:00
import com.eu.habbo.habbohotel.games.Game ;
import com.eu.habbo.habbohotel.games.battlebanzai.BattleBanzaiGame ;
import com.eu.habbo.habbohotel.games.football.FootballGame ;
import com.eu.habbo.habbohotel.games.freeze.FreezeGame ;
import com.eu.habbo.habbohotel.games.tag.BunnyrunGame ;
import com.eu.habbo.habbohotel.games.tag.IceTagGame ;
import com.eu.habbo.habbohotel.games.tag.RollerskateGame ;
import com.eu.habbo.habbohotel.games.wired.WiredGame ;
2018-07-06 13:30:00 +00:00
import com.eu.habbo.habbohotel.guilds.Guild ;
2018-09-28 19:25:00 +00:00
import com.eu.habbo.habbohotel.items.interactions.InteractionWired ;
2018-07-06 13:30:00 +00:00
import com.eu.habbo.habbohotel.messenger.MessengerBuddy ;
import com.eu.habbo.habbohotel.navigation.NavigatorFilterComparator ;
import com.eu.habbo.habbohotel.navigation.NavigatorFilterField ;
import com.eu.habbo.habbohotel.navigation.NavigatorManager ;
2018-09-12 16:45:00 +00:00
import com.eu.habbo.habbohotel.permissions.Permission ;
import com.eu.habbo.habbohotel.pets.Pet ;
2018-07-06 13:30:00 +00:00
import com.eu.habbo.habbohotel.pets.PetData ;
import com.eu.habbo.habbohotel.pets.PetTasks ;
import com.eu.habbo.habbohotel.polls.Poll ;
import com.eu.habbo.habbohotel.polls.PollManager ;
import com.eu.habbo.habbohotel.users.* ;
import com.eu.habbo.habbohotel.wired.WiredHandler ;
import com.eu.habbo.habbohotel.wired.WiredTriggerType ;
import com.eu.habbo.messages.incoming.users.UserNuxEvent ;
import com.eu.habbo.messages.outgoing.generic.alerts.GenericErrorMessagesComposer ;
import com.eu.habbo.messages.outgoing.hotelview.HotelViewComposer ;
import com.eu.habbo.messages.outgoing.polls.PollStartComposer ;
import com.eu.habbo.messages.outgoing.polls.infobus.SimplePollAnswersComposer ;
import com.eu.habbo.messages.outgoing.polls.infobus.SimplePollStartComposer ;
import com.eu.habbo.messages.outgoing.rooms.* ;
import com.eu.habbo.messages.outgoing.rooms.items.RoomFloorItemsComposer ;
import com.eu.habbo.messages.outgoing.rooms.items.RoomWallItemsComposer ;
import com.eu.habbo.messages.outgoing.rooms.pets.RoomPetComposer ;
import com.eu.habbo.messages.outgoing.rooms.promotions.RoomPromotionMessageComposer ;
import com.eu.habbo.messages.outgoing.rooms.users.* ;
import com.eu.habbo.messages.outgoing.users.MutedWhisperComposer ;
import com.eu.habbo.plugin.events.navigator.NavigatorRoomCreatedEvent ;
import com.eu.habbo.plugin.events.rooms.RoomUncachedEvent ;
2019-08-05 19:19:47 +03:00
import com.eu.habbo.plugin.events.rooms.UserVoteRoomEvent ;
2019-05-20 18:35:20 +01:00
import com.eu.habbo.plugin.events.users.HabboAddedToRoomEvent ;
2018-07-06 13:30:00 +00:00
import com.eu.habbo.plugin.events.users.UserEnterRoomEvent ;
2018-11-17 13:28:00 +00:00
import com.eu.habbo.plugin.events.users.UserExitRoomEvent ;
2018-07-06 13:30:00 +00:00
import gnu.trove.iterator.TIntObjectIterator ;
import gnu.trove.map.hash.THashMap ;
import gnu.trove.procedure.TIntProcedure ;
import gnu.trove.procedure.TObjectProcedure ;
import gnu.trove.set.hash.THashSet ;
2020-05-03 01:46:07 +02:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2018-07-06 13:30:00 +00:00
import java.sql.* ;
import java.util.* ;
import java.util.concurrent.ConcurrentHashMap ;
2019-05-26 21:14:53 +03:00
public class RoomManager {
2020-05-03 01:46:07 +02:00
private static final Logger LOGGER = LoggerFactory . getLogger ( RoomManager . class ) ;
2019-05-26 21:14:53 +03:00
private static final int page = 0 ;
2018-07-06 13:30:00 +00:00
//Configuration. Loaded from database & updated accordingly.
public static int MAXIMUM_ROOMS_USER = 25 ;
public static int MAXIMUM_ROOMS_VIP = 35 ;
public static int HOME_ROOM_ID = 0 ;
2019-04-21 23:42:00 +00:00
public static boolean SHOW_PUBLIC_IN_POPULAR_TAB = false ;
2018-07-06 13:30:00 +00:00
private final THashMap < Integer , RoomCategory > roomCategories ;
private final List < String > mapNames ;
private final ConcurrentHashMap < Integer , Room > activeRooms ;
2019-05-04 21:41:18 +01:00
private final ArrayList < Class < ? extends Game > > gameTypes ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
public RoomManager ( ) {
2018-07-06 13:30:00 +00:00
long millis = System . currentTimeMillis ( ) ;
2018-09-28 19:25:00 +00:00
this . roomCategories = new THashMap < > ( ) ;
this . mapNames = new ArrayList < > ( ) ;
this . activeRooms = new ConcurrentHashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
this . loadRoomCategories ( ) ;
this . loadRoomModels ( ) ;
2019-05-04 21:41:18 +01:00
this . gameTypes = new ArrayList < > ( ) ;
registerGameType ( BattleBanzaiGame . class ) ;
registerGameType ( FreezeGame . class ) ;
registerGameType ( WiredGame . class ) ;
registerGameType ( FootballGame . class ) ;
registerGameType ( BunnyrunGame . class ) ;
registerGameType ( IceTagGame . class ) ;
registerGameType ( RollerskateGame . class ) ;
2020-05-03 01:46:07 +02:00
LOGGER . info ( " Room Manager -> Loaded! ( " + ( System . currentTimeMillis ( ) - millis ) + " MS) " ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public void loadRoomModels ( ) {
2018-07-06 13:30:00 +00:00
this . mapNames . clear ( ) ;
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; Statement statement = connection . createStatement ( ) ; ResultSet set = statement . executeQuery ( " SELECT * FROM room_models " ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
this . mapNames . add ( set . getString ( " name " ) ) ;
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
public CustomRoomLayout loadCustomLayout ( Room room ) {
2018-10-06 22:28:00 +00:00
CustomRoomLayout layout = null ;
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM room_models_custom WHERE id = ? LIMIT 1 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , room . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
layout = new CustomRoomLayout ( set , room ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
2018-10-06 22:28:00 +00:00
return layout ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
private void loadRoomCategories ( ) {
2018-07-06 13:30:00 +00:00
this . roomCategories . clear ( ) ;
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; Statement statement = connection . createStatement ( ) ; ResultSet set = statement . executeQuery ( " SELECT * FROM navigator_flatcats " ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
this . roomCategories . put ( set . getInt ( " id " ) , new RoomCategory ( set ) ) ;
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
public void loadPublicRooms ( ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms WHERE is_public = ? OR is_staff_picked = ? ORDER BY id DESC " ) ) {
2018-07-06 13:30:00 +00:00
statement . setString ( 1 , " 1 " ) ;
statement . setString ( 2 , " 1 " ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
Room room = new Room ( set ) ;
room . preventUncaching = true ;
this . activeRooms . put ( set . getInt ( " id " ) , room ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
public THashMap < Integer , List < Room > > findRooms ( NavigatorFilterField filterField , String value , int category , boolean showInvisible ) {
2018-09-28 19:25:00 +00:00
THashMap < Integer , List < Room > > rooms = new THashMap < > ( ) ;
2019-05-26 21:14:53 +03:00
String query = filterField . databaseQuery + " AND rooms.state NOT LIKE " + ( showInvisible ? " '' " : " 'invisible' " ) + ( category > = 0 ? " AND rooms.category = ' " + category + " ' " : " " ) + " ORDER BY rooms.users, rooms.id DESC LIMIT " + ( page * NavigatorManager . MAXIMUM_RESULTS_PER_PAGE ) + " " + ( ( page * NavigatorManager . MAXIMUM_RESULTS_PER_PAGE ) + NavigatorManager . MAXIMUM_RESULTS_PER_PAGE ) ;
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( query ) ) {
2018-07-06 13:30:00 +00:00
statement . setString ( 1 , ( filterField . comparator = = NavigatorFilterComparator . EQUALS ? value : " % " + value + " % " ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
Room room = this . activeRooms . get ( set . getInt ( " id " ) ) ;
2019-05-26 21:14:53 +03:00
if ( room = = null ) {
2018-07-06 13:30:00 +00:00
room = new Room ( set ) ;
this . activeRooms . put ( set . getInt ( " id " ) , room ) ;
}
2019-05-26 21:14:53 +03:00
if ( ! rooms . containsKey ( set . getInt ( " category " ) ) ) {
2018-09-28 19:25:00 +00:00
rooms . put ( set . getInt ( " category " ) , new ArrayList < > ( ) ) ;
2018-07-06 13:30:00 +00:00
}
rooms . get ( set . getInt ( " category " ) ) . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public RoomCategory getCategory ( int id ) {
for ( RoomCategory category : this . roomCategories . values ( ) ) {
2018-07-06 13:30:00 +00:00
if ( category . getId ( ) = = id )
return category ;
}
return null ;
}
2019-05-26 21:14:53 +03:00
public RoomCategory getCategory ( String name ) {
for ( RoomCategory category : this . roomCategories . values ( ) ) {
if ( category . getCaption ( ) . equalsIgnoreCase ( name ) ) {
2018-07-06 13:30:00 +00:00
return category ;
}
}
return null ;
}
2019-05-26 21:14:53 +03:00
public RoomCategory getCategoryBySafeCaption ( String safeCaption ) {
for ( RoomCategory category : this . roomCategories . values ( ) ) {
if ( category . getCaptionSave ( ) . equalsIgnoreCase ( safeCaption ) ) {
2018-07-06 13:30:00 +00:00
return category ;
}
}
return null ;
}
2019-05-26 21:14:53 +03:00
public List < RoomCategory > roomCategoriesForHabbo ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
List < RoomCategory > categories = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( RoomCategory category : this . roomCategories . values ( ) ) {
if ( category . getMinRank ( ) < = habbo . getHabboInfo ( ) . getRank ( ) . getId ( ) )
2018-07-06 13:30:00 +00:00
categories . add ( category ) ;
}
Collections . sort ( categories ) ;
return categories ;
}
2019-05-26 21:14:53 +03:00
public boolean hasCategory ( int categoryId , Habbo habbo ) {
for ( RoomCategory category : this . roomCategories . values ( ) ) {
if ( category . getId ( ) = = categoryId ) {
if ( category . getMinRank ( ) < = habbo . getHabboInfo ( ) . getRank ( ) . getId ( ) ) {
2018-07-06 13:30:00 +00:00
return true ;
}
}
}
return false ;
}
2019-05-26 21:14:53 +03:00
public THashMap < Integer , RoomCategory > getRoomCategories ( ) {
2018-07-06 13:30:00 +00:00
return this . roomCategories ;
}
2019-05-26 21:14:53 +03:00
public List < Room > getRoomsByScore ( ) {
2019-03-18 01:22:00 +00:00
List < Room > rooms = new ArrayList < > ( this . activeRooms . values ( ) ) ;
rooms . sort ( Room . SORT_SCORE ) ;
2018-07-06 13:30:00 +00:00
return rooms ;
}
2019-05-26 21:14:53 +03:00
public List < Room > getActiveRooms ( int categoryId ) {
2018-09-28 19:25:00 +00:00
List < Room > rooms = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
2018-07-06 13:30:00 +00:00
if ( categoryId = = room . getCategory ( ) | | categoryId = = - 1 )
rooms . add ( room ) ;
}
Collections . sort ( rooms ) ;
return rooms ;
}
//TODO Move to HabboInfo class.
2019-05-26 21:14:53 +03:00
public List < Room > getRoomsForHabbo ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
List < Room > rooms = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( room . getOwnerId ( ) = = habbo . getHabboInfo ( ) . getId ( ) )
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
}
2019-03-18 01:22:00 +00:00
rooms . sort ( Room . SORT_ID ) ;
2018-07-06 13:30:00 +00:00
return rooms ;
}
2019-05-26 21:14:53 +03:00
public List < Room > getRoomsForHabbo ( String username ) {
2018-07-06 13:30:00 +00:00
Habbo h = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( username ) ;
2019-05-26 21:14:53 +03:00
if ( h ! = null ) {
2019-03-18 01:22:00 +00:00
return this . getRoomsForHabbo ( h ) ;
2018-07-06 13:30:00 +00:00
}
2018-09-28 19:25:00 +00:00
List < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms WHERE owner_name = ? ORDER BY id DESC LIMIT 25 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setString ( 1 , username ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( this . loadRoom ( set . getInt ( " id " ) ) ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public Room loadRoom ( int id ) {
2019-04-21 23:42:00 +00:00
return loadRoom ( id , false ) ;
}
2019-05-26 21:14:53 +03:00
public Room loadRoom ( int id , boolean loadData ) {
2018-07-06 13:30:00 +00:00
Room room = null ;
2019-05-26 21:14:53 +03:00
if ( this . activeRooms . containsKey ( id ) ) {
2018-07-06 13:30:00 +00:00
room = this . activeRooms . get ( id ) ;
2019-05-26 21:14:53 +03:00
if ( loadData ) {
if ( room . isPreLoaded ( ) & & ! room . isLoaded ( ) ) {
2019-04-21 23:42:00 +00:00
room . loadData ( ) ;
}
2018-07-06 13:30:00 +00:00
}
return room ;
}
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms WHERE id = ? LIMIT 1 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , id ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
room = new Room ( set ) ;
2019-05-26 21:14:53 +03:00
if ( loadData ) {
2019-04-21 23:42:00 +00:00
room . loadData ( ) ;
}
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
if ( room ! = null ) {
2018-07-06 13:30:00 +00:00
this . activeRooms . put ( room . getId ( ) , room ) ;
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return room ;
}
2018-07-08 21:32:00 +00:00
2020-06-07 15:05:02 +03:00
public Room createRoom ( int ownerId , String ownerName , String name , String description , String modelName , int usersMax , int categoryId , int tradeType ) {
2018-07-06 13:30:00 +00:00
Room room = null ;
2020-06-07 15:05:02 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " INSERT INTO rooms (owner_id, owner_name, name, description, model, users_max, category, trade_mode) VALUES (?, ?, ?, ?, ?, ?, ?, ?) " , Statement . RETURN_GENERATED_KEYS ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , ownerId ) ;
statement . setString ( 2 , ownerName ) ;
statement . setString ( 3 , name ) ;
statement . setString ( 4 , description ) ;
statement . setString ( 5 , modelName ) ;
statement . setInt ( 6 , usersMax ) ;
statement . setInt ( 7 , categoryId ) ;
2020-06-07 15:05:02 +03:00
statement . setInt ( 8 , tradeType ) ;
2018-07-06 13:30:00 +00:00
statement . execute ( ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . getGeneratedKeys ( ) ) {
2018-07-06 13:30:00 +00:00
if ( set . next ( ) )
room = this . loadRoom ( set . getInt ( 1 ) ) ;
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return room ;
}
2018-07-08 21:32:00 +00:00
2020-06-07 15:05:02 +03:00
public Room createRoomForHabbo ( Habbo habbo , String name , String description , String modelName , int usersMax , int categoryId , int tradeType ) {
Room room = this . createRoom ( habbo . getHabboInfo ( ) . getId ( ) , habbo . getHabboInfo ( ) . getUsername ( ) , name , description , modelName , usersMax , categoryId , tradeType ) ;
2018-07-06 13:30:00 +00:00
Emulator . getPluginManager ( ) . fireEvent ( new NavigatorRoomCreatedEvent ( habbo , room ) ) ;
return room ;
}
2019-05-26 21:14:53 +03:00
public void loadRoomsForHabbo ( Habbo habbo ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms WHERE owner_id = ? " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
if ( ! this . activeRooms . containsKey ( set . getInt ( " id " ) ) )
this . activeRooms . put ( set . getInt ( " id " ) , new Room ( set ) ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
public void unloadRoomsForHabbo ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
List < Room > roomsToDispose = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( ! room . isPublicRoom ( ) & & ! room . isStaffPromotedRoom ( ) & & room . getOwnerId ( ) = = habbo . getHabboInfo ( ) . getId ( ) & & room . getUserCount ( ) = = 0 & & ! this . roomCategories . get ( room . getCategory ( ) ) . isPublic ( ) ) {
2018-07-06 13:30:00 +00:00
roomsToDispose . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
for ( Room room : roomsToDispose ) {
2018-07-06 13:30:00 +00:00
if ( Emulator . getPluginManager ( ) . fireEvent ( new RoomUncachedEvent ( room ) ) . isCancelled ( ) )
continue ;
this . activeRooms . remove ( room . getId ( ) ) ;
room . dispose ( ) ;
}
}
2019-05-26 21:14:53 +03:00
public void clearInactiveRooms ( ) {
2018-09-28 19:25:00 +00:00
THashSet < Room > roomsToDispose = new THashSet < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
2020-07-12 07:46:14 -04:00
if ( ! room . isPublicRoom ( ) & & ! room . isStaffPromotedRoom ( ) & & ! Emulator . getGameServer ( ) . getGameClientManager ( ) . containsHabbo ( room . getOwnerId ( ) ) & & room . isPreLoaded ( ) ) {
2018-07-06 13:30:00 +00:00
roomsToDispose . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
for ( Room room : roomsToDispose ) {
2018-12-22 10:39:00 +00:00
room . dispose ( ) ;
2019-05-26 21:14:53 +03:00
if ( room . getUserCount ( ) = = 0 )
2018-07-06 13:30:00 +00:00
this . activeRooms . remove ( room . getId ( ) ) ;
}
}
2019-05-26 21:14:53 +03:00
public boolean layoutExists ( String name ) {
2018-07-06 13:30:00 +00:00
return this . mapNames . contains ( name ) ;
}
2019-05-26 21:14:53 +03:00
public RoomLayout loadLayout ( String name , Room room ) {
2018-07-06 13:30:00 +00:00
RoomLayout layout = null ;
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM room_models WHERE name LIKE ? LIMIT 1 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setString ( 1 , name ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
if ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
layout = new RoomLayout ( set , room ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return layout ;
}
2019-05-26 21:14:53 +03:00
public void unloadRoom ( Room room ) {
2018-07-06 13:30:00 +00:00
room . dispose ( ) ;
}
2019-05-26 21:14:53 +03:00
public void uncacheRoom ( Room room ) {
2018-09-12 16:45:00 +00:00
this . activeRooms . remove ( room . getId ( ) ) ;
}
2019-05-26 21:14:53 +03:00
public void voteForRoom ( Habbo habbo , Room room ) {
if ( habbo . getHabboInfo ( ) . getCurrentRoom ( ) ! = null & & room ! = null & & habbo . getHabboInfo ( ) . getCurrentRoom ( ) = = room ) {
if ( this . hasVotedForRoom ( habbo , room ) )
2018-07-06 13:30:00 +00:00
return ;
2019-08-05 19:19:47 +03:00
UserVoteRoomEvent event = new UserVoteRoomEvent ( room , habbo ) ;
if ( Emulator . getPluginManager ( ) . fireEvent ( event ) . isCancelled ( ) ) return ;
2018-07-06 13:30:00 +00:00
room . setScore ( room . getScore ( ) + 1 ) ;
room . setNeedsUpdate ( true ) ;
habbo . getHabboStats ( ) . votedRooms . push ( room . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
for ( Habbo h : room . getHabbos ( ) ) {
2018-07-06 13:30:00 +00:00
h . getClient ( ) . sendResponse ( new RoomScoreComposer ( room . getScore ( ) , ! this . hasVotedForRoom ( h , room ) ) ) ;
}
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " INSERT INTO room_votes VALUES (?, ?) " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
statement . setInt ( 2 , room . getId ( ) ) ;
statement . execute ( ) ;
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
}
2019-05-26 21:14:53 +03:00
boolean hasVotedForRoom ( Habbo habbo , Room room ) {
if ( room . getOwnerId ( ) = = habbo . getHabboInfo ( ) . getId ( ) )
2018-07-06 13:30:00 +00:00
return true ;
2019-05-26 21:14:53 +03:00
for ( int i : habbo . getHabboStats ( ) . votedRooms . toArray ( ) ) {
if ( i = = room . getId ( ) )
2018-07-06 13:30:00 +00:00
return true ;
}
return false ;
}
2019-05-26 21:14:53 +03:00
public Room getRoom ( int roomId ) {
2018-07-06 13:30:00 +00:00
return this . activeRooms . get ( roomId ) ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getActiveRooms ( ) {
2018-09-28 19:25:00 +00:00
return new ArrayList < > ( this . activeRooms . values ( ) ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public int loadedRoomsCount ( ) {
2018-07-06 13:30:00 +00:00
return this . activeRooms . size ( ) ;
}
2019-05-26 21:14:53 +03:00
public void enterRoom ( Habbo habbo , int roomId , String password ) {
2018-07-06 13:30:00 +00:00
this . enterRoom ( habbo , roomId , password , false , null ) ;
}
2019-05-26 21:14:53 +03:00
public void enterRoom ( Habbo habbo , int roomId , String password , boolean overrideChecks ) {
2018-07-06 13:30:00 +00:00
this . enterRoom ( habbo , roomId , password , overrideChecks , null ) ;
}
2019-05-26 21:14:53 +03:00
public void enterRoom ( Habbo habbo , int roomId , String password , boolean overrideChecks , RoomTile doorLocation ) {
2019-04-21 23:42:00 +00:00
Room room = this . loadRoom ( roomId , true ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
if ( room = = null )
2018-07-06 13:30:00 +00:00
return ;
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getLoadingRoom ( ) ! = 0 & & room . getId ( ) ! = habbo . getHabboInfo ( ) . getLoadingRoom ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
habbo . getHabboInfo ( ) . setLoadingRoom ( 0 ) ;
return ;
}
2019-05-26 21:14:53 +03:00
if ( Emulator . getPluginManager ( ) . fireEvent ( new UserEnterRoomEvent ( habbo , room ) ) . isCancelled ( ) ) {
if ( habbo . getHabboInfo ( ) . getCurrentRoom ( ) = = null ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
habbo . getHabboInfo ( ) . setLoadingRoom ( 0 ) ;
return ;
}
}
2020-06-05 04:12:49 -04:00
if ( room . isBanned ( habbo ) & & ! habbo . hasPermission ( Permission . ACC_ANYROOMOWNER ) & & ! habbo . hasPermission ( Permission . ACC_ENTERANYROOM ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomEnterErrorComposer ( RoomEnterErrorComposer . ROOM_ERROR_BANNED ) ) ;
return ;
}
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getRoomQueueId ( ) ! = roomId ) {
2018-07-06 13:30:00 +00:00
Room queRoom = Emulator . getGameEnvironment ( ) . getRoomManager ( ) . getRoom ( roomId ) ;
2019-05-26 21:14:53 +03:00
if ( queRoom ! = null ) {
2018-07-06 13:30:00 +00:00
queRoom . removeFromQueue ( habbo ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( overrideChecks | |
room . isOwner ( habbo ) | |
room . getState ( ) = = RoomState . OPEN | |
room . getState ( ) = = RoomState . INVISIBLE | |
habbo . hasPermission ( Permission . ACC_ANYROOMOWNER ) | |
2020-06-05 04:12:49 -04:00
habbo . hasPermission ( Permission . ACC_ENTERANYROOM ) | |
2019-05-26 21:14:53 +03:00
room . hasRights ( habbo ) | |
( room . hasGuild ( ) & & room . guildRightLevel ( habbo ) > 2 ) ) {
2018-07-06 13:30:00 +00:00
this . openRoom ( habbo , room , doorLocation ) ;
2019-05-26 21:14:53 +03:00
} else if ( room . getState ( ) = = RoomState . LOCKED ) {
2018-07-06 13:30:00 +00:00
boolean rightsFound = false ;
2019-05-26 21:14:53 +03:00
synchronized ( room . roomUnitLock ) {
for ( Habbo current : room . getHabbos ( ) ) {
if ( room . hasRights ( current ) | | current . getHabboInfo ( ) . getId ( ) = = room . getOwnerId ( ) | | ( room . hasGuild ( ) & & room . guildRightLevel ( current ) > = 2 ) ) {
2018-07-06 13:30:00 +00:00
current . getClient ( ) . sendResponse ( new DoorbellAddUserComposer ( habbo . getHabboInfo ( ) . getUsername ( ) ) ) ;
rightsFound = true ;
}
}
}
2019-05-26 21:14:53 +03:00
if ( ! rightsFound ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomAccessDeniedComposer ( " " ) ) ;
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
habbo . getHabboInfo ( ) . setLoadingRoom ( 0 ) ;
return ;
}
habbo . getHabboInfo ( ) . setRoomQueueId ( roomId ) ;
habbo . getClient ( ) . sendResponse ( new DoorbellAddUserComposer ( " " ) ) ;
room . addToQueue ( habbo ) ;
2019-05-26 21:14:53 +03:00
} else if ( room . getState ( ) = = RoomState . PASSWORD ) {
if ( room . getPassword ( ) . equalsIgnoreCase ( password ) )
2018-07-06 13:30:00 +00:00
this . openRoom ( habbo , room , doorLocation ) ;
2019-05-26 21:14:53 +03:00
else {
2020-07-11 06:02:21 +02:00
habbo . getClient ( ) . sendResponse ( new GenericErrorMessagesComposer ( GenericErrorMessagesComposer . WRONG_PASSWORD_USED ) ) ;
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
habbo . getHabboInfo ( ) . setLoadingRoom ( 0 ) ;
}
}
}
2019-05-26 21:14:53 +03:00
void openRoom ( Habbo habbo , Room room , RoomTile doorLocation ) {
2018-09-28 19:25:00 +00:00
if ( room = = null | | room . getLayout ( ) = = null )
2018-07-06 13:30:00 +00:00
return ;
2019-05-26 21:14:53 +03:00
if ( Emulator . getConfig ( ) . getBoolean ( " hotel.room.enter.logs " ) ) {
2018-07-06 13:30:00 +00:00
this . logEnter ( habbo , room ) ;
}
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getRoomQueueId ( ) > 0 ) {
2018-07-06 13:30:00 +00:00
Room r = Emulator . getGameEnvironment ( ) . getRoomManager ( ) . getRoom ( habbo . getHabboInfo ( ) . getRoomQueueId ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( r ! = null ) {
2018-07-06 13:30:00 +00:00
r . removeFromQueue ( habbo ) ;
}
}
2019-05-23 15:03:40 +01:00
2018-07-06 13:30:00 +00:00
habbo . getHabboInfo ( ) . setRoomQueueId ( 0 ) ;
habbo . getClient ( ) . sendResponse ( new HideDoorbellComposer ( " " ) ) ;
2019-05-23 15:03:40 +01:00
2019-05-26 21:14:53 +03:00
if ( habbo . getRoomUnit ( ) ! = null ) {
2019-05-31 21:23:34 +03:00
Room existingRoom = habbo . getRoomUnit ( ) . getRoom ( ) ;
if ( existingRoom ! = null ) {
if ( habbo . getRoomUnit ( ) . getCurrentLocation ( ) ! = null )
habbo . getRoomUnit ( ) . getCurrentLocation ( ) . removeUnit ( habbo . getRoomUnit ( ) ) ;
habbo . getRoomUnit ( ) . getRoom ( ) . sendComposer ( new RoomUserRemoveComposer ( habbo . getRoomUnit ( ) ) . compose ( ) ) ;
}
2019-05-23 15:03:40 +01:00
habbo . getRoomUnit ( ) . setRoom ( null ) ;
}
2019-05-03 00:30:02 +01:00
habbo . setRoomUnit ( new RoomUnit ( ) ) ;
2018-07-06 13:30:00 +00:00
2018-09-12 16:45:00 +00:00
habbo . getRoomUnit ( ) . clearStatus ( ) ;
2019-05-26 21:14:53 +03:00
if ( habbo . getRoomUnit ( ) . getCurrentLocation ( ) = = null ) {
2019-05-04 10:22:20 +01:00
habbo . getRoomUnit ( ) . setLocation ( doorLocation ! = null ? doorLocation : room . getLayout ( ) . getDoorTile ( ) ) ;
2020-02-27 22:33:08 +02:00
if ( habbo . getRoomUnit ( ) . getCurrentLocation ( ) ! = null ) habbo . getRoomUnit ( ) . setZ ( habbo . getRoomUnit ( ) . getCurrentLocation ( ) . getStackHeight ( ) ) ;
2019-05-04 10:22:20 +01:00
2019-05-26 21:14:53 +03:00
if ( doorLocation = = null ) {
2019-05-04 10:22:20 +01:00
habbo . getRoomUnit ( ) . setBodyRotation ( RoomUserRotation . values ( ) [ room . getLayout ( ) . getDoorDirection ( ) ] ) ;
habbo . getRoomUnit ( ) . setHeadRotation ( RoomUserRotation . values ( ) [ room . getLayout ( ) . getDoorDirection ( ) ] ) ;
2019-05-26 21:14:53 +03:00
} else {
2019-05-15 22:54:07 +01:00
habbo . getRoomUnit ( ) . setCanLeaveRoomByDoor ( false ) ;
2019-05-04 10:22:20 +01:00
habbo . getRoomUnit ( ) . isTeleporting = true ;
HabboItem topItem = room . getTopItemAt ( doorLocation . x , doorLocation . y ) ;
2019-05-26 21:14:53 +03:00
if ( topItem ! = null ) {
2019-05-04 10:22:20 +01:00
habbo . getRoomUnit ( ) . setRotation ( RoomUserRotation . values ( ) [ topItem . getRotation ( ) ] ) ;
}
}
2018-07-06 13:30:00 +00:00
}
2019-05-04 10:22:20 +01:00
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . setRoomUnitType ( RoomUnitType . USER ) ;
2019-05-26 21:14:53 +03:00
if ( room . isBanned ( habbo ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomEnterErrorComposer ( RoomEnterErrorComposer . ROOM_ERROR_BANNED ) ) ;
return ;
}
2020-06-05 04:12:49 -04:00
if ( room . getUserCount ( ) > = room . getUsersMax ( ) & & ! habbo . hasPermission ( Permission . ACC_FULLROOMS ) & & ! room . hasRights ( habbo ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomEnterErrorComposer ( RoomEnterErrorComposer . ROOM_ERROR_GUESTROOM_FULL ) ) ;
return ;
}
2018-09-12 16:45:00 +00:00
habbo . getRoomUnit ( ) . clearStatus ( ) ;
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . cmdTeleport = false ;
habbo . getClient ( ) . sendResponse ( new RoomOpenComposer ( ) ) ;
habbo . getRoomUnit ( ) . setInRoom ( true ) ;
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getCurrentRoom ( ) ! = room & & habbo . getHabboInfo ( ) . getCurrentRoom ( ) ! = null ) {
2019-05-30 21:16:43 +03:00
habbo . getHabboInfo ( ) . getCurrentRoom ( ) . removeHabbo ( habbo , true ) ;
2019-05-26 21:14:53 +03:00
} else if ( ! habbo . getHabboStats ( ) . blockFollowing & & habbo . getHabboInfo ( ) . getCurrentRoom ( ) = = null ) {
2018-07-06 13:30:00 +00:00
habbo . getMessenger ( ) . connectionChanged ( habbo , true , true ) ;
}
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getLoadingRoom ( ) ! = 0 ) {
2018-07-06 13:30:00 +00:00
Room oldRoom = Emulator . getGameEnvironment ( ) . getRoomManager ( ) . getRoom ( habbo . getHabboInfo ( ) . getLoadingRoom ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( oldRoom ! = null ) {
2018-07-06 13:30:00 +00:00
oldRoom . removeFromQueue ( habbo ) ;
}
}
habbo . getHabboInfo ( ) . setLoadingRoom ( room . getId ( ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomModelComposer ( room ) ) ;
if ( ! room . getWallPaint ( ) . equals ( " 0.0 " ) )
habbo . getClient ( ) . sendResponse ( new RoomPaintComposer ( " wallpaper " , room . getWallPaint ( ) ) ) ;
if ( ! room . getFloorPaint ( ) . equals ( " 0.0 " ) )
habbo . getClient ( ) . sendResponse ( new RoomPaintComposer ( " floor " , room . getFloorPaint ( ) ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomPaintComposer ( " landscape " , room . getBackgroundPaint ( ) ) ) ;
room . refreshRightsForHabbo ( habbo ) ;
habbo . getClient ( ) . sendResponse ( new RoomScoreComposer ( room . getScore ( ) , ! this . hasVotedForRoom ( habbo , room ) ) ) ;
2018-11-17 13:28:00 +00:00
habbo . getRoomUnit ( ) . setFastWalk ( habbo . getRoomUnit ( ) . isFastWalk ( ) & & habbo . hasPermission ( " cmd_fastwalk " , room . hasRights ( habbo ) ) ) ;
2019-05-26 21:14:53 +03:00
if ( room . isPromoted ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomPromotionMessageComposer ( room , room . getPromotion ( ) ) ) ;
2019-05-26 21:14:53 +03:00
} else {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomPromotionMessageComposer ( null , null ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( room . getOwnerId ( ) ! = habbo . getHabboInfo ( ) . getId ( ) ) {
2018-07-06 13:30:00 +00:00
AchievementManager . progressAchievement ( habbo , Emulator . getGameEnvironment ( ) . getAchievementManager ( ) . getAchievement ( " RoomEntry " ) ) ;
}
}
2019-05-26 21:14:53 +03:00
public void enterRoom ( final Habbo habbo , final Room room ) {
if ( habbo . getHabboInfo ( ) . getLoadingRoom ( ) ! = room . getId ( ) ) {
if ( habbo . getHabboInfo ( ) . getLoadingRoom ( ) ! = 0 ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
}
return ;
}
2018-09-28 19:25:00 +00:00
habbo . getRoomUnit ( ) . removeStatus ( RoomUnitStatus . FLAT_CONTROL ) ;
2018-07-06 13:30:00 +00:00
habbo . getHabboInfo ( ) . setLoadingRoom ( 0 ) ;
habbo . getHabboInfo ( ) . setCurrentRoom ( room ) ;
habbo . getRoomUnit ( ) . setPathFinderRoom ( room ) ;
habbo . getRoomUnit ( ) . setHandItem ( 0 ) ;
habbo . getRoomUnit ( ) . setRightsLevel ( RoomRightLevels . NONE ) ;
room . refreshRightsForHabbo ( habbo ) ;
2019-05-26 21:14:53 +03:00
if ( habbo . getRoomUnit ( ) . isKicked & & ! habbo . getRoomUnit ( ) . canWalk ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . setCanWalk ( true ) ;
}
habbo . getRoomUnit ( ) . isKicked = false ;
2019-05-26 21:14:53 +03:00
if ( habbo . getRoomUnit ( ) . getCurrentLocation ( ) = = null & & ! habbo . getRoomUnit ( ) . isTeleporting ) {
2018-07-06 13:30:00 +00:00
RoomTile doorTile = room . getLayout ( ) . getTile ( room . getLayout ( ) . getDoorX ( ) , room . getLayout ( ) . getDoorY ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( doorTile ! = null ) {
2019-05-04 01:23:58 +01:00
habbo . getRoomUnit ( ) . setLocation ( doorTile ) ;
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . setZ ( doorTile . getStackHeight ( ) ) ;
}
habbo . getRoomUnit ( ) . setBodyRotation ( RoomUserRotation . values ( ) [ room . getLayout ( ) . getDoorDirection ( ) ] ) ;
habbo . getRoomUnit ( ) . setHeadRotation ( RoomUserRotation . values ( ) [ room . getLayout ( ) . getDoorDirection ( ) ] ) ;
}
2019-05-12 08:59:01 +01:00
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . setPathFinderRoom ( room ) ;
habbo . getRoomUnit ( ) . resetIdleTimer ( ) ;
2018-09-28 19:25:00 +00:00
habbo . getRoomUnit ( ) . setInvisible ( false ) ;
2018-07-06 13:30:00 +00:00
room . addHabbo ( habbo ) ;
2018-09-28 19:25:00 +00:00
List < Habbo > habbos = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
if ( ! room . getCurrentHabbos ( ) . isEmpty ( ) ) {
2018-09-28 19:25:00 +00:00
2019-12-27 14:38:45 +02:00
Collection < Habbo > habbosToSendEnter = room . getCurrentHabbos ( ) . values ( ) ;
2020-03-04 20:28:12 +02:00
Collection < Habbo > visibleHabbos = room . getHabbos ( ) ;
2018-07-06 13:30:00 +00:00
2019-12-27 14:38:45 +02:00
if ( Emulator . getPluginManager ( ) . isRegistered ( HabboAddedToRoomEvent . class , false ) ) {
2020-03-04 20:28:12 +02:00
HabboAddedToRoomEvent event = Emulator . getPluginManager ( ) . fireEvent ( new HabboAddedToRoomEvent ( habbo , room , habbosToSendEnter , visibleHabbos ) ) ;
2019-12-27 14:38:45 +02:00
habbosToSendEnter = event . habbosToSendEnter ;
2020-03-04 20:28:12 +02:00
visibleHabbos = event . visibleHabbos ;
2019-12-27 14:38:45 +02:00
}
for ( Habbo habboToSendEnter : habbosToSendEnter ) {
GameClient client = habboToSendEnter . getClient ( ) ;
if ( client ! = null ) {
client . sendResponse ( new RoomUsersComposer ( habbo ) . compose ( ) ) ;
2020-03-04 20:28:12 +02:00
client . sendResponse ( new RoomUserStatusComposer ( habbo . getRoomUnit ( ) ) . compose ( ) ) ;
2019-12-27 14:38:45 +02:00
}
}
2018-07-06 13:30:00 +00:00
2020-03-04 20:28:12 +02:00
for ( Habbo h : visibleHabbos ) {
2019-05-26 21:14:53 +03:00
if ( ! h . getRoomUnit ( ) . isInvisible ( ) ) {
2018-09-28 19:25:00 +00:00
habbos . add ( h ) ;
}
}
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
synchronized ( room . roomUnitLock ) {
2018-09-28 19:25:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUsersComposer ( habbos ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomUserStatusComposer ( habbos ) ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboStats ( ) . guild ! = 0 ) {
2018-07-06 13:30:00 +00:00
Guild guild = Emulator . getGameEnvironment ( ) . getGuildManager ( ) . getGuild ( habbo . getHabboStats ( ) . guild ) ;
2019-05-26 21:14:53 +03:00
if ( guild ! = null ) {
2018-07-06 13:30:00 +00:00
room . sendComposer ( new RoomUsersAddGuildBadgeComposer ( guild ) . compose ( ) ) ;
}
}
2019-03-18 01:22:00 +00:00
int effect = habbo . getInventory ( ) . getEffectsComponent ( ) . activatedEffect ;
room . giveEffect ( habbo . getRoomUnit ( ) , effect , - 1 ) ;
2018-07-06 13:30:00 +00:00
}
habbo . getClient ( ) . sendResponse ( new RoomUsersComposer ( room . getCurrentBots ( ) . valueCollection ( ) , true ) ) ;
2019-05-26 21:14:53 +03:00
if ( ! room . getCurrentBots ( ) . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
TIntObjectIterator < Bot > botIterator = room . getCurrentBots ( ) . iterator ( ) ;
2019-05-26 21:14:53 +03:00
for ( int i = room . getCurrentBots ( ) . size ( ) ; i - - > 0 ; ) {
try {
2018-07-06 13:30:00 +00:00
botIterator . advance ( ) ;
2019-05-26 21:14:53 +03:00
} catch ( NoSuchElementException e ) {
2018-07-06 13:30:00 +00:00
break ;
}
Bot bot = botIterator . value ( ) ;
2019-05-26 21:14:53 +03:00
if ( ! bot . getRoomUnit ( ) . getDanceType ( ) . equals ( DanceType . NONE ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserDanceComposer ( bot . getRoomUnit ( ) ) ) ;
}
2020-01-27 23:02:53 +02:00
habbo . getClient ( ) . sendResponse ( new RoomUserStatusComposer ( bot . getRoomUnit ( ) , bot . getRoomUnit ( ) . getZ ( ) ) ) ;
2018-07-06 13:30:00 +00:00
}
}
habbo . getClient ( ) . sendResponse ( new RoomPaneComposer ( room , room . isOwner ( habbo ) ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomThicknessComposer ( room ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomDataComposer ( room , habbo . getClient ( ) . getHabbo ( ) , false , true ) ) ;
habbo . getClient ( ) . sendResponse ( new RoomWallItemsComposer ( room ) ) ;
{
2018-09-28 19:25:00 +00:00
final THashSet < HabboItem > floorItems = new THashSet < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
room . getFloorItems ( ) . forEach ( new TObjectProcedure < HabboItem > ( ) {
2018-07-06 13:30:00 +00:00
@Override
2019-05-26 21:14:53 +03:00
public boolean execute ( HabboItem object ) {
2018-09-28 19:25:00 +00:00
if ( room . isHideWired ( ) & & object instanceof InteractionWired )
return true ;
2018-07-06 13:30:00 +00:00
floorItems . add ( object ) ;
2019-05-26 21:14:53 +03:00
if ( floorItems . size ( ) = = 250 ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomFloorItemsComposer ( room . getFurniOwnerNames ( ) , floorItems ) ) ;
floorItems . clear ( ) ;
}
return true ;
}
} ) ;
habbo . getClient ( ) . sendResponse ( new RoomFloorItemsComposer ( room . getFurniOwnerNames ( ) , floorItems ) ) ;
floorItems . clear ( ) ;
}
2019-05-26 21:14:53 +03:00
if ( ! room . getCurrentPets ( ) . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomPetComposer ( room . getCurrentPets ( ) ) ) ;
2019-05-26 21:14:53 +03:00
for ( Pet pet : room . getCurrentPets ( ) . valueCollection ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserStatusComposer ( pet . getRoomUnit ( ) ) ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( ! habbo . getHabboStats ( ) . allowTalk ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getHabboStats ( ) . mutedBubbleTracker = true ;
int remainingMuteTime = habbo . getHabboStats ( ) . remainingMuteTime ( ) ;
habbo . getClient ( ) . sendResponse ( new FloodCounterComposer ( remainingMuteTime ) ) ;
habbo . getClient ( ) . sendResponse ( new MutedWhisperComposer ( remainingMuteTime ) ) ;
room . sendComposer ( new RoomUserIgnoredComposer ( habbo , RoomUserIgnoredComposer . MUTED ) . compose ( ) ) ;
2019-05-26 21:14:53 +03:00
} else if ( habbo . getHabboStats ( ) . mutedBubbleTracker ) {
2018-07-06 13:30:00 +00:00
habbo . getHabboStats ( ) . mutedBubbleTracker = false ;
}
2018-09-28 19:25:00 +00:00
THashMap < Integer , String > guildBadges = new THashMap < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Habbo roomHabbo : habbos ) {
2018-07-06 13:30:00 +00:00
{
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getRoomUnit ( ) . getDanceType ( ) . getType ( ) > 0 ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserDanceComposer ( roomHabbo . getRoomUnit ( ) ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getRoomUnit ( ) . getHandItem ( ) > 0 ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserHandItemComposer ( roomHabbo . getRoomUnit ( ) ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getRoomUnit ( ) . getEffectId ( ) > 0 ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserEffectComposer ( roomHabbo . getRoomUnit ( ) ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getRoomUnit ( ) . isIdle ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUnitIdleComposer ( roomHabbo . getRoomUnit ( ) ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getHabboStats ( ) . userIgnored ( habbo . getHabboInfo ( ) . getId ( ) ) ) {
2018-07-06 13:30:00 +00:00
roomHabbo . getClient ( ) . sendResponse ( new RoomUserIgnoredComposer ( habbo , RoomUserIgnoredComposer . IGNORED ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( ! roomHabbo . getHabboStats ( ) . allowTalk ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserIgnoredComposer ( roomHabbo , RoomUserIgnoredComposer . MUTED ) ) ;
2019-05-26 21:14:53 +03:00
} else if ( habbo . getHabboStats ( ) . userIgnored ( roomHabbo . getHabboInfo ( ) . getId ( ) ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserIgnoredComposer ( roomHabbo , RoomUserIgnoredComposer . IGNORED ) ) ;
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getHabboStats ( ) . guild ! = 0 & & ! guildBadges . containsKey ( roomHabbo . getHabboStats ( ) . guild ) ) {
2018-07-06 13:30:00 +00:00
Guild guild = Emulator . getGameEnvironment ( ) . getGuildManager ( ) . getGuild ( roomHabbo . getHabboStats ( ) . guild ) ;
2019-05-26 21:14:53 +03:00
if ( guild ! = null ) {
2018-07-06 13:30:00 +00:00
guildBadges . put ( roomHabbo . getHabboStats ( ) . guild , guild . getBadge ( ) ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( roomHabbo . getRoomUnit ( ) . getRoomUnitType ( ) . equals ( RoomUnitType . PET ) ) {
try {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomUserRemoveComposer ( roomHabbo . getRoomUnit ( ) ) ) ;
2019-05-26 21:14:53 +03:00
habbo . getClient ( ) . sendResponse ( new RoomUserPetComposer ( ( ( PetData ) roomHabbo . getHabboStats ( ) . cache . get ( " pet_type " ) ) . getType ( ) , ( Integer ) roomHabbo . getHabboStats ( ) . cache . get ( " pet_race " ) , ( String ) roomHabbo . getHabboStats ( ) . cache . get ( " pet_color " ) , roomHabbo ) ) ;
} catch ( Exception e ) {
2018-07-06 13:30:00 +00:00
}
}
}
}
habbo . getClient ( ) . sendResponse ( new RoomUsersGuildBadgesComposer ( guildBadges ) ) ;
2019-05-26 21:14:53 +03:00
if ( room . hasRights ( habbo ) | | ( room . hasGuild ( ) & & room . guildRightLevel ( habbo ) > = 2 ) ) {
if ( ! room . getHabboQueue ( ) . isEmpty ( ) ) {
for ( Habbo waiting : room . getHabboQueue ( ) . valueCollection ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new DoorbellAddUserComposer ( waiting . getHabboInfo ( ) . getUsername ( ) ) ) ;
}
}
}
2019-05-26 21:14:53 +03:00
if ( room . getPollId ( ) > 0 ) {
if ( ! PollManager . donePoll ( habbo . getClient ( ) . getHabbo ( ) , room . getPollId ( ) ) ) {
2018-07-06 13:30:00 +00:00
Poll poll = Emulator . getGameEnvironment ( ) . getPollManager ( ) . getPoll ( room . getPollId ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( poll ! = null ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new PollStartComposer ( poll ) ) ;
}
}
}
2019-05-26 21:14:53 +03:00
if ( room . hasActiveWordQuiz ( ) ) {
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new SimplePollStartComposer ( ( Emulator . getIntUnixTimestamp ( ) - room . wordQuizEnd ) * 1000 , room . wordQuiz ) ) ;
2019-05-26 21:14:53 +03:00
if ( room . hasVotedInWordQuiz ( habbo ) ) {
2019-03-18 01:22:00 +00:00
habbo . getClient ( ) . sendResponse ( new SimplePollAnswersComposer ( room . noVotes , room . yesVotes ) ) ;
2018-07-06 13:30:00 +00:00
}
}
WiredHandler . handle ( WiredTriggerType . ENTER_ROOM , habbo . getRoomUnit ( ) , room , null ) ;
room . habboEntered ( habbo ) ;
2019-05-26 21:14:53 +03:00
if ( ! habbo . getHabboStats ( ) . nux & & ( room . isOwner ( habbo ) | | room . isPublicRoom ( ) ) ) {
2018-07-06 13:30:00 +00:00
UserNuxEvent . handle ( habbo ) ;
}
}
2019-05-26 21:14:53 +03:00
void logEnter ( Habbo habbo , Room room ) {
2018-07-06 13:30:00 +00:00
habbo . getHabboStats ( ) . roomEnterTimestamp = Emulator . getIntUnixTimestamp ( ) ;
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " INSERT INTO room_enter_log (room_id, user_id, timestamp) VALUES(?, ?, ?) " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , room . getId ( ) ) ;
statement . setInt ( 2 , habbo . getHabboInfo ( ) . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
statement . setInt ( 3 , ( int ) ( habbo . getHabboStats ( ) . roomEnterTimestamp ) ) ;
2018-07-06 13:30:00 +00:00
statement . execute ( ) ;
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
public void leaveRoom ( Habbo habbo , Room room ) {
2019-03-18 01:22:00 +00:00
this . leaveRoom ( habbo , room , true ) ;
2018-11-17 13:28:00 +00:00
}
2019-05-26 21:14:53 +03:00
public void leaveRoom ( Habbo habbo , Room room , boolean redirectToHotelView ) {
if ( habbo . getHabboInfo ( ) . getCurrentRoom ( ) ! = null & & habbo . getHabboInfo ( ) . getCurrentRoom ( ) = = room ) {
2018-07-06 13:30:00 +00:00
habbo . getRoomUnit ( ) . setPathFinderRoom ( null ) ;
this . logExit ( habbo ) ;
2019-05-12 08:59:01 +01:00
room . removeHabbo ( habbo , true ) ;
2018-11-17 13:28:00 +00:00
2019-05-26 21:14:53 +03:00
if ( redirectToHotelView ) {
2018-11-17 13:28:00 +00:00
habbo . getClient ( ) . sendResponse ( new HotelViewComposer ( ) ) ;
}
2018-07-06 13:30:00 +00:00
habbo . getHabboInfo ( ) . setCurrentRoom ( null ) ;
habbo . getRoomUnit ( ) . isKicked = false ;
2019-05-26 21:14:53 +03:00
if ( room . getOwnerId ( ) ! = habbo . getHabboInfo ( ) . getId ( ) ) {
AchievementManager . progressAchievement ( room . getOwnerId ( ) , Emulator . getGameEnvironment ( ) . getAchievementManager ( ) . getAchievement ( " RoomDecoHosting " ) , ( int ) Math . floor ( ( Emulator . getIntUnixTimestamp ( ) - habbo . getHabboStats ( ) . roomEnterTimestamp ) / 60000 ) ) ;
2018-07-06 13:30:00 +00:00
}
}
}
2019-05-26 21:14:53 +03:00
public void logExit ( Habbo habbo ) {
2018-11-17 13:28:00 +00:00
Emulator . getPluginManager ( ) . fireEvent ( new UserExitRoomEvent ( habbo , UserExitRoomEvent . UserExitRoomReason . DOOR ) ) ;
2019-05-26 21:14:53 +03:00
if ( habbo . getRoomUnit ( ) . getCacheable ( ) . containsKey ( " control " ) ) {
Habbo control = ( Habbo ) habbo . getRoomUnit ( ) . getCacheable ( ) . remove ( " control " ) ;
2018-07-06 13:30:00 +00:00
control . getRoomUnit ( ) . getCacheable ( ) . remove ( " controller " ) ;
}
2019-05-26 21:14:53 +03:00
if ( habbo . getHabboInfo ( ) . getRiding ( ) ! = null ) {
if ( habbo . getHabboInfo ( ) . getRiding ( ) . getRoomUnit ( ) ! = null ) {
2019-05-01 00:59:25 +01:00
habbo . getHabboInfo ( ) . getRiding ( ) . getRoomUnit ( ) . setGoalLocation ( habbo . getHabboInfo ( ) . getRiding ( ) . getRoomUnit ( ) . getCurrentLocation ( ) ) ;
}
habbo . getHabboInfo ( ) . getRiding ( ) . setTask ( PetTasks . FREE ) ;
habbo . getHabboInfo ( ) . getRiding ( ) . setRider ( null ) ;
habbo . getHabboInfo ( ) . setRiding ( null ) ;
}
2018-07-06 13:30:00 +00:00
Room room = habbo . getHabboInfo ( ) . getCurrentRoom ( ) ;
2019-05-26 21:14:53 +03:00
if ( room ! = null ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " UPDATE room_enter_log SET exit_timestamp = ? WHERE user_id = ? AND room_id = ? ORDER BY timestamp DESC LIMIT 1 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , Emulator . getIntUnixTimestamp ( ) ) ;
statement . setInt ( 2 , habbo . getHabboInfo ( ) . getId ( ) ) ;
statement . setInt ( 3 , room . getId ( ) ) ;
statement . execute ( ) ;
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
}
}
2019-05-26 21:14:53 +03:00
public Set < String > getTags ( ) {
2018-09-28 19:25:00 +00:00
Map < String , Integer > tagCount = new HashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
for ( String s : room . getTags ( ) . split ( " ; " ) ) {
2018-07-06 13:30:00 +00:00
int i = 0 ;
2019-05-26 21:14:53 +03:00
if ( tagCount . get ( s ) ! = null )
2018-07-06 13:30:00 +00:00
i + + ;
tagCount . put ( s , i + + ) ;
}
}
2018-09-28 19:25:00 +00:00
return new TreeMap < > ( tagCount ) . keySet ( ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getPublicRooms ( ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( room . isPublicRoom ( ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
}
}
2020-05-29 19:43:30 -04:00
rooms . sort ( Room . SORT_ID ) ;
2018-07-06 13:30:00 +00:00
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getPopularRooms ( int count ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( room . getUserCount ( ) > 0 ) {
2019-06-16 15:14:46 +01:00
if ( ! room . isPublicRoom ( ) | | RoomManager . SHOW_PUBLIC_IN_POPULAR_TAB ) rooms . add ( room ) ;
2018-07-06 13:30:00 +00:00
}
}
2019-05-26 21:14:53 +03:00
if ( rooms . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
return rooms ;
}
Collections . sort ( rooms ) ;
2018-09-28 19:25:00 +00:00
return new ArrayList < > ( rooms . subList ( 0 , ( rooms . size ( ) < count ? rooms . size ( ) : count ) ) ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getPopularRooms ( int count , int category ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( ! room . isPublicRoom ( ) & & room . getCategory ( ) = = category ) {
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( rooms . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
return rooms ;
}
Collections . sort ( rooms ) ;
2018-09-28 19:25:00 +00:00
return new ArrayList < > ( rooms . subList ( 0 , ( rooms . size ( ) < count ? rooms . size ( ) : count ) ) ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public Map < Integer , List < Room > > getPopularRoomsByCategory ( int count ) {
2018-09-28 19:25:00 +00:00
Map < Integer , List < Room > > rooms = new HashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( ! room . isPublicRoom ( ) ) {
if ( ! rooms . containsKey ( room . getCategory ( ) ) ) {
2018-09-28 19:25:00 +00:00
rooms . put ( room . getCategory ( ) , new ArrayList < > ( ) ) ;
2018-07-06 13:30:00 +00:00
}
rooms . get ( room . getCategory ( ) ) . add ( room ) ;
}
}
2018-09-28 19:25:00 +00:00
Map < Integer , List < Room > > result = new HashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Map . Entry < Integer , List < Room > > set : rooms . entrySet ( ) ) {
2018-07-06 13:30:00 +00:00
if ( set . getValue ( ) . isEmpty ( ) )
continue ;
Collections . sort ( set . getValue ( ) ) ;
2018-09-28 19:25:00 +00:00
result . put ( set . getKey ( ) , new ArrayList < > ( set . getValue ( ) . subList ( 0 , ( set . getValue ( ) . size ( ) < count ? set . getValue ( ) . size ( ) : count ) ) ) ) ;
2018-07-06 13:30:00 +00:00
}
return result ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsWithName ( String name ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
if ( room . getName ( ) . toLowerCase ( ) . contains ( name . toLowerCase ( ) ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( rooms . size ( ) < 25 ) {
2019-03-18 01:22:00 +00:00
rooms . addAll ( this . getOfflineRoomsWithName ( name ) ) ;
2018-07-06 13:30:00 +00:00
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
private ArrayList < Room > getOfflineRoomsWithName ( String name ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username AS owner_name, rooms.* FROM rooms INNER JOIN users ON owner_id = users.id WHERE name LIKE ? ORDER BY id DESC LIMIT 25 " ) ) {
statement . setString ( 1 , " % " + name + " % " ) ;
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) )
continue ;
Room r = new Room ( set ) ;
rooms . add ( r ) ;
this . activeRooms . put ( r . getId ( ) , r ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsWithTag ( String tag ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
for ( String s : room . getTags ( ) . split ( " ; " ) ) {
if ( s . toLowerCase ( ) . equals ( tag . toLowerCase ( ) ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
break ;
}
}
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getGroupRoomsWithName ( String name ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . activeRooms . values ( ) ) {
2018-07-06 13:30:00 +00:00
if ( room . getGuildId ( ) = = 0 )
continue ;
if ( room . getName ( ) . toLowerCase ( ) . contains ( name . toLowerCase ( ) ) )
rooms . add ( room ) ;
}
2019-05-26 21:14:53 +03:00
if ( rooms . size ( ) < 25 ) {
2018-07-06 13:30:00 +00:00
rooms . addAll ( this . getOfflineGroupRoomsWithName ( name ) ) ;
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
private ArrayList < Room > getOfflineGroupRoomsWithName ( String name ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT users.username AS owner_name, rooms.* FROM rooms INNER JOIN users ON rooms.owner_id = users.id WHERE name LIKE ? AND guild_id != 0 ORDER BY id DESC LIMIT 25 " ) ) {
statement . setString ( 1 , " % " + name + " % " ) ;
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) )
continue ;
Room r = new Room ( set ) ;
rooms . add ( r ) ;
this . activeRooms . put ( r . getId ( ) , r ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsFriendsNow ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( MessengerBuddy buddy : habbo . getMessenger ( ) . getFriends ( ) . values ( ) ) {
if ( buddy . getOnline ( ) = = 0 )
2018-07-06 13:30:00 +00:00
continue ;
Habbo friend = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( buddy . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( friend = = null | | friend . getHabboInfo ( ) . getCurrentRoom ( ) = = null )
2018-07-06 13:30:00 +00:00
continue ;
rooms . add ( friend . getHabboInfo ( ) . getCurrentRoom ( ) ) ;
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsFriendsOwn ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( MessengerBuddy buddy : habbo . getMessenger ( ) . getFriends ( ) . values ( ) ) {
if ( buddy . getOnline ( ) = = 0 )
2018-07-06 13:30:00 +00:00
continue ;
Habbo friend = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( buddy . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( friend = = null )
2018-07-06 13:30:00 +00:00
continue ;
rooms . addAll ( this . getRoomsForHabbo ( friend ) ) ;
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsVisited ( Habbo habbo , boolean includeSelf , int limit ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT rooms.* FROM room_enter_log INNER JOIN rooms ON room_enter_log.room_id = rooms.id WHERE user_id = ? AND timestamp >= ? AND rooms.owner_id != ? GROUP BY rooms.id ORDER BY timestamp DESC LIMIT " + limit ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
statement . setInt ( 2 , Emulator . getIntUnixTimestamp ( ) - 259200 ) ;
statement . setInt ( 3 , ( includeSelf ? 0 : habbo . getHabboInfo ( ) . getId ( ) ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
Room room = this . activeRooms . get ( set . getInt ( " id " ) ) ;
2019-05-26 21:14:53 +03:00
if ( room = = null ) {
2018-07-06 13:30:00 +00:00
room = new Room ( set ) ;
this . activeRooms . put ( room . getId ( ) , room ) ;
}
rooms . add ( room ) ;
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsFavourite ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
final ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
habbo . getHabboStats ( ) . getFavoriteRooms ( ) . forEach ( new TIntProcedure ( ) {
2018-07-06 13:30:00 +00:00
@Override
2019-05-26 21:14:53 +03:00
public boolean execute ( int value ) {
2019-04-21 23:42:00 +00:00
Room room = RoomManager . this . getRoom ( value ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
if ( room ! = null ) {
if ( room . getState ( ) = = RoomState . INVISIBLE ) {
2019-04-21 23:42:00 +00:00
room . loadData ( ) ;
if ( ! room . hasRights ( habbo ) ) return true ;
}
2018-07-06 13:30:00 +00:00
rooms . add ( room ) ;
}
return true ;
}
} ) ;
return rooms ;
}
2019-05-26 21:14:53 +03:00
public List < Room > getGroupRooms ( Habbo habbo , int limit ) {
2018-09-28 19:25:00 +00:00
final ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-28 16:52:07 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ;
PreparedStatement statement = connection . prepareStatement ( " SELECT rooms.* FROM rooms INNER JOIN guilds_members ON guilds_members.guild_id = rooms.guild_id WHERE guilds_members.user_id = ? AND level_id != 3 " ) ) {
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) ) {
rooms . add ( this . activeRooms . get ( set . getInt ( " id " ) ) ) ;
} else {
rooms . add ( new Room ( set ) ) ;
}
2018-07-06 13:30:00 +00:00
}
}
2019-05-28 16:52:07 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
Collections . sort ( rooms ) ;
return rooms . subList ( 0 , ( rooms . size ( ) > limit ? limit : rooms . size ( ) ) ) ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsWithRights ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " SELECT rooms.* FROM rooms INNER JOIN room_rights ON room_rights.room_id = rooms.id WHERE room_rights.user_id = ? ORDER BY rooms.id DESC LIMIT 30 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( this . activeRooms . get ( set . getInt ( " id " ) ) ) ;
2019-05-26 21:14:53 +03:00
} else {
2018-07-06 13:30:00 +00:00
rooms . add ( new Room ( set ) ) ;
}
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-27 23:17:54 +03:00
public ArrayList < Room > getRoomsWithFriendsIn ( Habbo habbo , int limit ) {
final ArrayList < Room > rooms = new ArrayList < > ( ) ;
for ( MessengerBuddy buddy : habbo . getMessenger ( ) . getFriends ( ) . values ( ) ) {
Habbo friend = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( buddy . getId ( ) ) ;
if ( friend = = null | | friend . getHabboInfo ( ) = = null ) continue ;
Room room = friend . getHabboInfo ( ) . getCurrentRoom ( ) ;
if ( room ! = null ) rooms . add ( room ) ;
if ( rooms . size ( ) > = limit ) break ;
}
Collections . sort ( rooms ) ;
return rooms ;
}
2019-05-28 16:52:07 +03:00
public List < Room > getTopRatedRooms ( int limit ) {
final ArrayList < Room > rooms = new ArrayList < > ( ) ;
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ;
PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms ORDER BY score DESC LIMIT ? " ) ) {
statement . setInt ( 1 , limit ) ;
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) ) {
rooms . add ( this . activeRooms . get ( set . getInt ( " id " ) ) ) ;
} else {
rooms . add ( new Room ( set ) ) ;
}
}
}
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2019-05-28 16:52:07 +03:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsWithAdminRights ( Habbo habbo ) {
2018-07-06 13:30:00 +00:00
ArrayList < Room > rooms = new ArrayList < > ( ) ;
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ;
2019-05-26 21:14:53 +03:00
PreparedStatement statement = connection . prepareStatement ( " SELECT * FROM rooms INNER JOIN guilds_members ON guilds_members.guild_id = rooms.guild_id WHERE guilds_members.user_id = ? AND level_id = 0 " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , habbo . getHabboInfo ( ) . getId ( ) ) ;
2019-05-26 21:14:53 +03:00
try ( ResultSet set = statement . executeQuery ( ) ) {
while ( set . next ( ) ) {
if ( this . activeRooms . containsKey ( set . getInt ( " id " ) ) ) {
2018-07-06 13:30:00 +00:00
rooms . add ( this . activeRooms . get ( set . getInt ( " id " ) ) ) ;
2019-05-26 21:14:53 +03:00
} else {
2018-07-06 13:30:00 +00:00
rooms . add ( new Room ( set ) ) ;
}
}
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return rooms ;
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsInGroup ( Habbo habbo ) {
2018-09-28 19:25:00 +00:00
return new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public ArrayList < Room > getRoomsPromoted ( ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : this . getActiveRooms ( ) ) {
if ( room . isPromoted ( ) ) {
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
}
return r ;
}
2019-05-18 16:59:41 +03:00
public ArrayList < Room > getRoomsStaffPromoted ( ) {
ArrayList < Room > r = new ArrayList < > ( ) ;
2019-05-26 21:14:53 +03:00
for ( Room room : this . getActiveRooms ( ) ) {
if ( room . isStaffPromotedRoom ( ) ) {
2019-05-18 16:59:41 +03:00
r . add ( room ) ;
}
}
return r ;
}
2019-05-26 21:14:53 +03:00
public List < Room > filterRoomsByOwner ( List < Room > rooms , String filter ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : rooms ) {
if ( room . getOwnerName ( ) . equalsIgnoreCase ( filter ) )
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
return r ;
}
2019-05-26 21:14:53 +03:00
public List < Room > filterRoomsByName ( List < Room > rooms , String filter ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : rooms ) {
if ( room . getName ( ) . toLowerCase ( ) . contains ( filter . toLowerCase ( ) ) )
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
return r ;
}
2019-05-26 21:14:53 +03:00
public List < Room > filterRoomsByNameAndDescription ( List < Room > rooms , String filter ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : rooms ) {
if ( room . getName ( ) . toLowerCase ( ) . contains ( filter . toLowerCase ( ) ) | | room . getDescription ( ) . toLowerCase ( ) . contains ( filter . toLowerCase ( ) ) )
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
return r ;
}
2019-05-26 21:14:53 +03:00
public List < Room > filterRoomsByTag ( List < Room > rooms , String filter ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : rooms ) {
if ( room . getTags ( ) . split ( " ; " ) . length = = 0 )
2018-07-06 13:30:00 +00:00
continue ;
2019-05-26 21:14:53 +03:00
for ( String s : room . getTags ( ) . split ( " ; " ) ) {
if ( s . equalsIgnoreCase ( filter ) )
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
}
return r ;
}
2019-05-26 21:14:53 +03:00
public List < Room > filterRoomsByGroup ( List < Room > rooms , String filter ) {
2018-09-28 19:25:00 +00:00
ArrayList < Room > r = new ArrayList < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
for ( Room room : rooms ) {
if ( room . getGuildId ( ) = = 0 )
2018-07-06 13:30:00 +00:00
continue ;
2019-05-26 21:14:53 +03:00
if ( Emulator . getGameEnvironment ( ) . getGuildManager ( ) . getGuild ( room . getGuildId ( ) ) . getName ( ) . toLowerCase ( ) . contains ( filter . toLowerCase ( ) ) )
2018-07-06 13:30:00 +00:00
r . add ( room ) ;
}
return r ;
}
2019-05-26 21:14:53 +03:00
public synchronized void dispose ( ) {
for ( Room room : this . activeRooms . values ( ) ) {
2018-07-06 13:30:00 +00:00
room . dispose ( ) ;
}
this . activeRooms . clear ( ) ;
2020-05-03 01:46:07 +02:00
LOGGER . info ( " Room Manager -> Disposed! " ) ;
2018-07-06 13:30:00 +00:00
}
2019-05-26 21:14:53 +03:00
public CustomRoomLayout insertCustomLayout ( Room room , String map , int doorX , int doorY , int doorDirection ) {
try ( Connection connection = Emulator . getDatabase ( ) . getDataSource ( ) . getConnection ( ) ; PreparedStatement statement = connection . prepareStatement ( " INSERT INTO room_models_custom (id, name, door_x, door_y, door_dir, heightmap) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE door_x = ?, door_y = ?, door_dir = ?, heightmap = ? " ) ) {
2018-07-06 13:30:00 +00:00
statement . setInt ( 1 , room . getId ( ) ) ;
statement . setString ( 2 , " custom_ " + room . getId ( ) ) ;
statement . setInt ( 3 , doorX ) ;
statement . setInt ( 4 , doorY ) ;
statement . setInt ( 5 , doorDirection ) ;
statement . setString ( 6 , map ) ;
statement . setInt ( 7 , doorX ) ;
statement . setInt ( 8 , doorY ) ;
statement . setInt ( 9 , doorDirection ) ;
statement . setString ( 10 , map ) ;
statement . execute ( ) ;
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-03 01:46:07 +02:00
LOGGER . error ( " Caught SQL exception " , e ) ;
2018-07-06 13:30:00 +00:00
}
return this . loadCustomLayout ( room ) ;
}
2019-05-26 21:14:53 +03:00
public void banUserFromRoom ( Habbo rights , int userId , int roomId , RoomBanTypes length ) {
2018-07-06 13:30:00 +00:00
Room room = this . getRoom ( roomId ) ;
if ( room = = null )
return ;
if ( rights ! = null & & ! room . hasRights ( rights ) )
return ;
String name = " " ;
Habbo habbo = Emulator . getGameEnvironment ( ) . getHabboManager ( ) . getHabbo ( userId ) ;
2019-05-26 21:14:53 +03:00
if ( habbo ! = null ) {
if ( habbo . hasPermission ( Permission . ACC_UNKICKABLE ) ) {
2018-07-06 13:30:00 +00:00
return ;
}
name = habbo . getHabboInfo ( ) . getUsername ( ) ;
2019-05-26 21:14:53 +03:00
} else {
2018-07-06 13:30:00 +00:00
HabboInfo info = HabboManager . getOfflineHabboInfo ( userId ) ;
2019-05-26 21:14:53 +03:00
if ( info ! = null ) {
if ( info . getRank ( ) . hasPermission ( Permission . ACC_UNKICKABLE , false ) ) {
2018-07-06 13:30:00 +00:00
return ;
}
name = info . getUsername ( ) ;
}
}
2019-05-26 21:14:53 +03:00
if ( name . isEmpty ( ) ) {
2018-07-06 13:30:00 +00:00
return ;
}
RoomBan roomBan = new RoomBan ( roomId , userId , name , Emulator . getIntUnixTimestamp ( ) + length . duration ) ;
roomBan . insert ( ) ;
room . addRoomBan ( roomBan ) ;
2019-05-26 21:14:53 +03:00
if ( habbo ! = null ) {
if ( habbo . getHabboInfo ( ) . getCurrentRoom ( ) = = room ) {
2019-05-30 21:16:43 +03:00
room . removeHabbo ( habbo , true ) ;
2018-07-06 13:30:00 +00:00
habbo . getClient ( ) . sendResponse ( new RoomEnterErrorComposer ( RoomEnterErrorComposer . ROOM_ERROR_BANNED ) ) ;
}
}
}
2019-05-04 21:41:18 +01:00
public void registerGameType ( Class < ? extends Game > gameClass ) {
gameTypes . add ( gameClass ) ;
}
public void unregisterGameType ( Class < ? extends Game > gameClass ) {
gameTypes . remove ( gameClass ) ;
}
public ArrayList < Class < ? extends Game > > getGameTypes ( ) {
return gameTypes ;
}
2019-05-26 21:14:53 +03:00
public enum RoomBanTypes {
RWUAM_BAN_USER_HOUR ( 60 * 60 ) ,
RWUAM_BAN_USER_DAY ( 24 * 60 * 60 ) ,
RWUAM_BAN_USER_PERM ( 10 * 365 * 24 * 60 * 60 ) ;
public int duration ;
RoomBanTypes ( int duration ) {
this . duration = duration ;
}
}
2018-07-06 13:30:00 +00:00
}