Arcturus-Community/src/main/java/com/eu/habbo/habbohotel/bots/ButlerBot.java

137 lines
6.0 KiB
Java
Raw Normal View History

2018-07-06 15:30:00 +02:00
package com.eu.habbo.habbohotel.bots;
import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.rooms.RoomChatMessage;
2018-09-12 18:45:00 +02:00
import com.eu.habbo.habbohotel.rooms.RoomUnitStatus;
2018-07-06 15:30:00 +02: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;
2018-09-28 21:25:00 +02:00
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
2018-07-06 15:30:00 +02:00
import java.util.ArrayList;
2019-03-18 02:22:00 +01:00
import java.util.Collections;
2018-07-06 15:30:00 +02:00
import java.util.List;
import java.util.Map;
public class ButlerBot extends Bot
{
2018-09-28 21:25:00 +02:00
public static THashMap<THashSet<String>, Integer> serveItems = new THashMap<>();
2018-07-06 15:30:00 +02:00
public ButlerBot(ResultSet set) throws SQLException
{
super(set);
}
public ButlerBot(Bot bot)
{
super(bot);
}
public static void initialise()
{
if(serveItems == null)
2018-09-28 21:25:00 +02:00
serveItems = new THashMap<>();
2018-07-06 15:30:00 +02:00
serveItems.clear();
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); Statement statement = connection.createStatement(); ResultSet set = statement.executeQuery("SELECT * FROM bot_serves"))
{
while (set.next())
{
String[] keys = set.getString("keys").split(";");
2018-09-28 21:25:00 +02:00
THashSet<String> ks = new THashSet<>();
2019-03-18 02:22:00 +01:00
Collections.addAll(ks, keys);
2018-07-06 15:30:00 +02:00
serveItems.put(ks, set.getInt("item"));
}
}
catch (SQLException e)
{
Emulator.getLogging().logSQLException(e);
}
}
public static void dispose()
{
serveItems.clear();
}
@Override
public void onUserSay(final RoomChatMessage message)
{
2018-09-12 18:45:00 +02:00
if(this.getRoomUnit().hasStatus(RoomUnitStatus.MOVE))
2018-07-06 15:30:00 +02:00
return;
if (this.getRoomUnit().getCurrentLocation().distance(message.getHabbo().getRoomUnit().getCurrentLocation()) <= Emulator.getConfig().getInt("hotel.bot.butler.commanddistance"))
if(message.getUnfilteredMessage() != null)
2018-07-06 15:30:00 +02:00
{
for(Map.Entry<THashSet<String>, Integer> set : serveItems.entrySet())
2018-07-06 15:30:00 +02:00
{
for(String s : set.getKey())
2018-07-06 15:30:00 +02:00
{
if(message.getUnfilteredMessage().toLowerCase().contains(s))
2018-07-06 15:30:00 +02:00
{
BotServerItemEvent serveEvent = new BotServerItemEvent(this, message.getHabbo(), set.getValue());
if (Emulator.getPluginManager().fireEvent(serveEvent).isCancelled())
{
return;
}
2018-07-06 15:30:00 +02:00
if (this.getRoomUnit().canWalk())
{
final String key = s;
final Bot b = this;
b.lookAt(serveEvent.habbo);
2018-07-06 15:30:00 +02: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 15:30:00 +02:00
tasks.add(new Runnable()
2018-07-06 15:30:00 +02:00
{
@Override
public void run()
{
b.talk(Emulator.getTexts().getValue("bots.butler.given").replace("%key%", key).replace("%username%", serveEvent.habbo.getHabboInfo().getUsername()));
}
});
List<Runnable> failedReached = new ArrayList();
failedReached.add(new Runnable()
{
public void run()
{
if (b.getRoomUnit().getCurrentLocation().distance(serveEvent.habbo.getRoomUnit().getCurrentLocation()) <= Emulator.getConfig().getInt("hotel.bot.butler.servedistance", 8)) {
for (Runnable t : tasks) {
t.run();
}
}
}
});
Emulator.getThreading().run(new RoomUnitGiveHanditem(this.getRoomUnit(), serveEvent.habbo.getHabboInfo().getCurrentRoom(), serveEvent.itemId));
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)));
}
else {
Emulator.getThreading().run(failedReached.get(0), 1000);
}
}
else
{
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 15:30:00 +02:00
}
}
}
}
}
}