Merge branch 'dev' into 'subscription-revamp'

# Conflicts:
#   src/main/java/com/eu/habbo/messages/outgoing/friends/FriendsComposer.java
This commit is contained in:
Harmonic 2020-10-08 15:12:34 -04:00
commit c879a904da
11 changed files with 69 additions and 60 deletions

View File

@ -12,7 +12,7 @@ Arcturus Morningstar is released under the [GNU General Public License v3](https
## Versions ## ## Versions ##
![image](https://img.shields.io/badge/VERSION-2.4.0-success.svg?style=for-the-badge&logo=appveyor) ![image](https://img.shields.io/badge/VERSION-2.4.0-success.svg?style=for-the-badge&logo=appveyor)
![image](https://img.shields.io/badge/STATUS-UNSTABLE-red.svg?style=for-the-badge&logo=appveyor) ![image](https://img.shields.io/badge/STATUS-STABLE-blue.svg?style=for-the-badge&logo=appveyor)
Compiled Download: https://git.krews.org/morningstar/Arcturus-Community/releases Compiled Download: https://git.krews.org/morningstar/Arcturus-Community/releases

View File

@ -141,7 +141,7 @@ public final class Emulator {
Emulator.rconServer.connect(); Emulator.rconServer.connect();
Emulator.badgeImager = new BadgeImager(); Emulator.badgeImager = new BadgeImager();
LOGGER.info("Arcturus Morningstar has succesfully loaded."); LOGGER.info("Arcturus Morningstar has successfully loaded.");
LOGGER.info("System launched in: {}ms. Using {} threads!", (System.nanoTime() - startTime) / 1e6, Runtime.getRuntime().availableProcessors() * 2); LOGGER.info("System launched in: {}ms. Using {} threads!", (System.nanoTime() - startTime) / 1e6, Runtime.getRuntime().availableProcessors() * 2);
LOGGER.info("Memory: {}/{}MB", (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024), (runtime.freeMemory()) / (1024 * 1024)); LOGGER.info("Memory: {}/{}MB", (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024), (runtime.freeMemory()) / (1024 * 1024));

View File

@ -72,7 +72,7 @@ public class TextsManager {
public int getInt(String key, Integer defaultValue) { public int getInt(String key, Integer defaultValue) {
try { try {
return Integer.parseInt(this.getValue(key, defaultValue.toString())); return Integer.parseInt(this.getValue(key, defaultValue.toString()));
} catch (Exception e) { } catch (NumberFormatException e) {
LOGGER.error("Caught exception", e); LOGGER.error("Caught exception", e);
} }
return defaultValue; return defaultValue;

View File

@ -2,6 +2,9 @@ package com.eu.habbo.habbohotel.commands;
import com.eu.habbo.Emulator; import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.gameclients.GameClient; import com.eu.habbo.habbohotel.gameclients.GameClient;
import com.eu.habbo.habbohotel.rooms.RoomChatMessageBubbles;
import java.util.Arrays;
public class WordQuizCommand extends Command { public class WordQuizCommand extends Command {
public WordQuizCommand() { public WordQuizCommand() {
@ -11,21 +14,21 @@ public class WordQuizCommand extends Command {
@Override @Override
public boolean handle(GameClient gameClient, String[] params) throws Exception { public boolean handle(GameClient gameClient, String[] params) throws Exception {
if (!gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasActiveWordQuiz()) { if (!gameClient.getHabbo().getHabboInfo().getCurrentRoom().hasActiveWordQuiz()) {
if(params.length == 1) {
gameClient.getHabbo().whisper(Emulator.getTexts().getValue("commands.description.cmd_word_quiz"), RoomChatMessageBubbles.ALERT);
return true;
}
StringBuilder question = new StringBuilder(); StringBuilder question = new StringBuilder();
int duration = 60; int duration = 60;
if (params.length > 2) {
for (int i = 1; i < params.length - 1; i++) {
question.append(" ").append(params[i]);
}
try { try {
duration = Integer.valueOf(params[params.length - 1]); duration = Integer.parseInt(params[params.length-1]);
} catch (Exception e) { params = Arrays.copyOf(params, params.length-1);
question.append(" ").append(params[params.length - 1]);
} }
} else { catch (Exception e) {}
question = new StringBuilder(params[1]);
for (int i = 1; i < params.length; i++) {
question.append(" ").append(params[i]);
} }
gameClient.getHabbo().getHabboInfo().getCurrentRoom().startWordQuiz(question.toString(), duration * 1000); gameClient.getHabbo().getHabboInfo().getCurrentRoom().startWordQuiz(question.toString(), duration * 1000);

View File

@ -52,7 +52,7 @@ public class InteractionBackgroundToner extends HabboItem {
@Override @Override
public boolean isWalkable() { public boolean isWalkable() {
return false; return this.getBaseItem().allowWalk();
} }
@Override @Override

View File

@ -68,7 +68,7 @@ public class WiredEffectChangeFurniDirection extends InteractionWiredEffect {
count++; count++;
} }
if (targetTile != null && targetTile.state == RoomTileState.OPEN) { if (targetTile != null && targetTile.state != RoomTileState.INVALID) {
boolean hasHabbos = false; boolean hasHabbos = false;
for (Habbo habbo : room.getHabbosAt(targetTile)) { for (Habbo habbo : room.getHabbosAt(targetTile)) {
hasHabbos = true; hasHabbos = true;

View File

@ -11,9 +11,8 @@ public class RequestInitFriendsEvent extends MessageHandler {
@Override @Override
public void handle() throws Exception { public void handle() throws Exception {
ArrayList<ServerMessage> messages = new ArrayList<>(); ArrayList<ServerMessage> messages = new ArrayList<>();
//
messages.add(new MessengerInitComposer(this.client.getHabbo()).compose()); messages.add(new MessengerInitComposer(this.client.getHabbo()).compose());
messages.add(new FriendsComposer(this.client.getHabbo()).compose()); messages.addAll(FriendsComposer.getMessagesForBuddyList(this.client.getHabbo().getMessenger().getFriends().values()));
this.client.sendResponses(messages); this.client.sendResponses(messages);
} }
} }

View File

@ -52,7 +52,7 @@ public class SecureLoginEvent_BACKUP extends MessageHandler {
messages.add(new UserPerksComposer(habbo).compose()); messages.add(new UserPerksComposer(habbo).compose());
messages.add(new SessionRightsComposer().compose()); messages.add(new SessionRightsComposer().compose());
messages.add(new FavoriteRoomsCountComposer(habbo).compose()); messages.add(new FavoriteRoomsCountComposer(habbo).compose());
messages.add(new FriendsComposer(this.client.getHabbo()).compose()); //messages.add(new FriendsComposer(this.client.getHabbo()).compose());
//messages.add(new NewUserIdentityComposer().compose()); //messages.add(new NewUserIdentityComposer().compose());
//messages.add(new UserDataComposer(this.client.getHabbo()).compose()); //messages.add(new UserDataComposer(this.client.getHabbo()).compose());
//messages.add(new SessionRightsComposer().compose()); //messages.add(new SessionRightsComposer().compose());

View File

@ -1,24 +1,28 @@
package com.eu.habbo.messages.outgoing.friends; package com.eu.habbo.messages.outgoing.friends;
import com.eu.habbo.habbohotel.messenger.Messenger;
import com.eu.habbo.habbohotel.messenger.MessengerBuddy; import com.eu.habbo.habbohotel.messenger.MessengerBuddy;
import com.eu.habbo.habbohotel.users.Habbo;
import com.eu.habbo.habbohotel.users.HabboGender; import com.eu.habbo.habbohotel.users.HabboGender;
import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.MessageComposer;
import com.eu.habbo.messages.outgoing.Outgoing; import com.eu.habbo.messages.outgoing.Outgoing;
import gnu.trove.set.hash.THashSet;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.Map; import java.util.ArrayList;
import java.util.Collection;
public class FriendsComposer extends MessageComposer { public class FriendsComposer extends MessageComposer {
private static final Logger LOGGER = LoggerFactory.getLogger(FriendsComposer.class); private static final Logger LOGGER = LoggerFactory.getLogger(FriendsComposer.class);
private final Habbo habbo; private final int totalPages;
private final int pageIndex;
private final Collection<MessengerBuddy> friends;
public FriendsComposer(Habbo habbo) { public FriendsComposer(int totalPages, int pageIndex, Collection<MessengerBuddy> friends) {
this.habbo = habbo; this.totalPages = totalPages;
this.pageIndex = pageIndex;
this.friends = friends;
} }
@Override @Override
@ -26,52 +30,54 @@ public class FriendsComposer extends MessageComposer {
try { try {
this.response.init(Outgoing.FriendsComposer); this.response.init(Outgoing.FriendsComposer);
//this.response.appendInt(300); this.response.appendInt(this.totalPages);
//this.response.appendInt(300); this.response.appendInt(this.pageIndex);
//this.response.appendInt(3); //Club level this.response.appendInt(this.friends.size());
this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS);
this.response.appendInt(this.habbo.hasPermission("acc_infinite_friends") ? Integer.MAX_VALUE : Messenger.MAXIMUM_FRIENDS_HC);
this.response.appendInt(this.habbo.getMessenger().getFriends().size()/* + (this.habbo.hasPermission("acc_staff_chat") ? 1 : 0)*/);
for (Map.Entry<Integer, MessengerBuddy> row : this.habbo.getMessenger().getFriends().entrySet()) { for (MessengerBuddy row : this.friends) {
this.response.appendInt(row.getKey()); this.response.appendInt(row.getId());
this.response.appendString(row.getValue().getUsername()); this.response.appendString(row.getUsername());
this.response.appendInt(row.getValue().getGender().equals(HabboGender.M) ? 0 : 1); this.response.appendInt(row.getGender().equals(HabboGender.M) ? 0 : 1);
this.response.appendBoolean(row.getValue().getOnline() == 1); this.response.appendBoolean(row.getOnline() == 1);
this.response.appendBoolean(row.getValue().inRoom()); //IN ROOM this.response.appendBoolean(row.inRoom()); //IN ROOM
this.response.appendString(row.getValue().getOnline() == 1 ? row.getValue().getLook() : ""); this.response.appendString(row.getOnline() == 1 ? row.getLook() : "");
this.response.appendInt(0); this.response.appendInt(0);
this.response.appendString(row.getValue().getMotto()); this.response.appendString(row.getMotto());
this.response.appendString(""); this.response.appendString("");
this.response.appendString(""); this.response.appendString("");
this.response.appendBoolean(false); //Offline messaging. this.response.appendBoolean(false); //Offline messaging.
this.response.appendBoolean(false); this.response.appendBoolean(false);
this.response.appendBoolean(false); this.response.appendBoolean(false);
this.response.appendShort(row.getValue().getRelation()); this.response.appendShort(row.getRelation());
} }
/*if(this.habbo.hasPermission("acc_staff_chat"))
{
this.response.appendInt(-1);
this.response.appendString("Staff Chat");
this.response.appendInt(this.habbo.getHabboInfo().getGender().equals(HabboGender.M) ? 0 : 1);
this.response.appendBoolean(true);
this.response.appendBoolean(false); //IN ROOM
this.response.appendString("ADM");
this.response.appendInt(0);
this.response.appendString("");
this.response.appendString("");
this.response.appendString("");
this.response.appendBoolean(true); //Offline messaging.
this.response.appendBoolean(false);
this.response.appendBoolean(false);
this.response.appendShort(0);
}*/
return this.response; return this.response;
} catch (Exception e) { } catch (Exception e) {
LOGGER.error("Caught exception", e); LOGGER.error("Caught exception", e);
} }
return null; return null;
} }
public static ArrayList<ServerMessage> getMessagesForBuddyList(Collection<MessengerBuddy> buddies) {
ArrayList<ServerMessage> messages = new ArrayList<ServerMessage>();
THashSet<MessengerBuddy> friends = new THashSet<MessengerBuddy>();
int totalPages = (int)Math.ceil(buddies.size() / 750.0);
int page = 0;
for(MessengerBuddy buddy : buddies) {
friends.add(buddy);
if(friends.size() == 750) {
messages.add(new FriendsComposer(totalPages, page, friends).compose());
friends.clear();
page++;
}
}
if(page == 0 || friends.size() > 0) {
messages.add(new FriendsComposer(totalPages, page, friends).compose());
}
return messages;
}
} }

View File

@ -32,6 +32,7 @@ public abstract class RCONMessage<T> {
public abstract void handle(Gson gson, T json); public abstract void handle(Gson gson, T json);
public static class RCONMessageSerializer implements JsonSerializer<RCONMessage> { public static class RCONMessageSerializer implements JsonSerializer<RCONMessage> {
@Override
public JsonElement serialize(final RCONMessage rconMessage, final Type type, final JsonSerializationContext context) { public JsonElement serialize(final RCONMessage rconMessage, final Type type, final JsonSerializationContext context) {
JsonObject result = new JsonObject(); JsonObject result = new JsonObject();
result.add("status", new JsonPrimitive(rconMessage.status)); result.add("status", new JsonPrimitive(rconMessage.status));

View File

@ -41,7 +41,7 @@ public class BattleBanzaiTilesFlicker implements Runnable {
this.room.sendComposer(new ItemsDataUpdateComposer(this.items).compose()); this.room.sendComposer(new ItemsDataUpdateComposer(this.items).compose());
if (this.count == 5) { if (this.count == 9) {
for (HabboItem item : this.room.getRoomSpecialTypes().getItemsOfType(InteractionBattleBanzaiSphere.class)) { for (HabboItem item : this.room.getRoomSpecialTypes().getItemsOfType(InteractionBattleBanzaiSphere.class)) {
item.setExtradata("0"); item.setExtradata("0");
this.room.updateItemState(item); this.room.updateItemState(item);