2018-07-06 13:30:00 +00:00
package com.eu.habbo.habbohotel.bots ;
import com.eu.habbo.Emulator ;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage ;
2018-09-12 16:45:00 +00:00
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus ;
2018-07-06 13:30:00 +00:00
import com.eu.habbo.plugin.events.bots.BotServerItemEvent ;
import com.eu.habbo.threading.runnables.RoomUnitGiveHanditem ;
import com.eu.habbo.threading.runnables.RoomUnitWalkToRoomUnit ;
import gnu.trove.map.hash.THashMap ;
import gnu.trove.set.hash.THashSet ;
2020-05-04 22:24:09 +02:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2018-07-06 13:30:00 +00:00
2018-09-28 19:25:00 +00:00
import java.sql.Connection ;
import java.sql.ResultSet ;
import java.sql.SQLException ;
import java.sql.Statement ;
2018-07-06 13:30:00 +00:00
import java.util.ArrayList ;
2019-03-18 01:22:00 +00:00
import java.util.Collections ;
2018-07-06 13:30:00 +00:00
import java.util.List ;
import java.util.Map ;
2019-05-26 21:14:53 +03:00
public class ButlerBot extends Bot {
2020-05-04 22:24:09 +02:00
private static final Logger LOGGER = LoggerFactory . getLogger ( ButlerBot . class ) ;
2018-09-28 19:25:00 +00:00
public static THashMap < THashSet < String > , Integer > serveItems = new THashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
public ButlerBot ( ResultSet set ) throws SQLException {
2018-07-06 13:30:00 +00:00
super ( set ) ;
}
2019-05-26 21:14:53 +03:00
public ButlerBot ( Bot bot ) {
2018-07-06 13:30:00 +00:00
super ( bot ) ;
}
2019-05-26 21:14:53 +03:00
public static void initialise ( ) {
if ( serveItems = = null )
2018-09-28 19:25:00 +00:00
serveItems = new THashMap < > ( ) ;
2018-07-06 13:30:00 +00:00
serveItems . 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 bot_serves " ) ) {
while ( set . next ( ) ) {
2018-07-06 13:30:00 +00:00
String [ ] keys = set . getString ( " keys " ) . split ( " ; " ) ;
2018-09-28 19:25:00 +00:00
THashSet < String > ks = new THashSet < > ( ) ;
2019-03-18 01:22:00 +00:00
Collections . addAll ( ks , keys ) ;
2018-07-06 13:30:00 +00:00
serveItems . put ( ks , set . getInt ( " item " ) ) ;
}
2019-05-26 21:14:53 +03:00
} catch ( SQLException e ) {
2020-05-04 22:24:09 +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 static void dispose ( ) {
2018-07-06 13:30:00 +00:00
serveItems . clear ( ) ;
}
@Override
2019-05-26 21:14:53 +03:00
public void onUserSay ( final RoomChatMessage message ) {
if ( this . getRoomUnit ( ) . hasStatus ( RoomUnitStatus . MOVE ) )
2018-07-06 13:30:00 +00:00
return ;
2019-05-02 23:47:30 +01:00
if ( this . getRoomUnit ( ) . getCurrentLocation ( ) . distance ( message . getHabbo ( ) . getRoomUnit ( ) . getCurrentLocation ( ) ) < = Emulator . getConfig ( ) . getInt ( " hotel.bot.butler.commanddistance " ) )
2019-05-26 21:14:53 +03:00
if ( message . getUnfilteredMessage ( ) ! = null ) {
for ( Map . Entry < THashSet < String > , Integer > set : serveItems . entrySet ( ) ) {
for ( String s : set . getKey ( ) ) {
if ( message . getUnfilteredMessage ( ) . toLowerCase ( ) . contains ( s ) ) {
2019-05-02 23:47:30 +01:00
BotServerItemEvent serveEvent = new BotServerItemEvent ( this , message . getHabbo ( ) , set . getValue ( ) ) ;
2019-05-26 21:14:53 +03:00
if ( Emulator . getPluginManager ( ) . fireEvent ( serveEvent ) . isCancelled ( ) ) {
2019-05-02 23:47:30 +01:00
return ;
}
2018-07-06 13:30:00 +00:00
2019-05-26 21:14:53 +03:00
if ( this . getRoomUnit ( ) . canWalk ( ) ) {
2019-05-02 23:47:30 +01:00
final String key = s ;
final Bot b = this ;
b . lookAt ( serveEvent . habbo ) ;
2018-07-06 13:30:00 +00:00
2019-05-02 23:47:30 +01:00
final List < Runnable > tasks = new ArrayList ( ) ;
tasks . add ( new RoomUnitGiveHanditem ( serveEvent . habbo . getRoomUnit ( ) , serveEvent . habbo . getHabboInfo ( ) . getCurrentRoom ( ) , serveEvent . itemId ) ) ;
tasks . add ( new RoomUnitGiveHanditem ( this . getRoomUnit ( ) , serveEvent . habbo . getHabboInfo ( ) . getCurrentRoom ( ) , 0 ) ) ;
2018-07-06 13:30:00 +00:00
2020-04-23 18:08:37 +01:00
tasks . add ( ( ) - > b . talk ( Emulator . getTexts ( ) . getValue ( " bots.butler.given " ) . replace ( " %key% " , key ) . replace ( " %username% " , serveEvent . habbo . getHabboInfo ( ) . getUsername ( ) ) ) ) ;
2019-05-15 17:36:41 +01:00
2019-05-02 23:47:30 +01:00
List < Runnable > failedReached = new ArrayList ( ) ;
2020-04-23 18:08:37 +01:00
failedReached . add ( ( ) - > {
if ( b . getRoomUnit ( ) . getCurrentLocation ( ) . distance ( serveEvent . habbo . getRoomUnit ( ) . getCurrentLocation ( ) ) < = Emulator . getConfig ( ) . getInt ( " hotel.bot.butler.servedistance " , 8 ) ) {
for ( Runnable t : tasks ) {
t . run ( ) ;
2019-05-02 23:47:30 +01:00
}
}
} ) ;
2019-05-15 17:36:41 +01:00
2019-05-02 23:47:30 +01:00
Emulator . getThreading ( ) . run ( new RoomUnitGiveHanditem ( this . getRoomUnit ( ) , serveEvent . habbo . getHabboInfo ( ) . getCurrentRoom ( ) , serveEvent . itemId ) ) ;
2019-05-15 17:36:41 +01:00
if ( b . getRoomUnit ( ) . getCurrentLocation ( ) . distance ( serveEvent . habbo . getRoomUnit ( ) . getCurrentLocation ( ) ) > Emulator . getConfig ( ) . getInt ( " hotel.bot.butler.reachdistance " , 3 ) ) {
Emulator . getThreading ( ) . run ( new RoomUnitWalkToRoomUnit ( this . getRoomUnit ( ) , serveEvent . habbo . getRoomUnit ( ) , serveEvent . habbo . getHabboInfo ( ) . getCurrentRoom ( ) , tasks , failedReached , Emulator . getConfig ( ) . getInt ( " hotel.bot.butler.reachdistance " , 3 ) ) ) ;
2019-05-26 21:14:53 +03:00
} else {
2019-05-15 17:36:41 +01:00
Emulator . getThreading ( ) . run ( failedReached . get ( 0 ) , 1000 ) ;
}
2019-05-26 21:14:53 +03:00
} else {
2019-05-02 23:47:30 +01:00
this . getRoom ( ) . giveHandItem ( serveEvent . habbo , serveEvent . itemId ) ;
this . talk ( Emulator . getTexts ( ) . getValue ( " bots.butler.given " ) . replace ( " %key% " , s ) . replace ( " %username% " , serveEvent . habbo . getHabboInfo ( ) . getUsername ( ) ) ) ;
}
return ;
2018-07-06 13:30:00 +00:00
}
}
}
}
}
}