Commit dc153572 authored by GanyusLeftHorn's avatar GanyusLeftHorn Committed by Luke H-W
Browse files

Fix chat welcome messages and some slight refactoring.

parent 97779fd3
package emu.grasscutter.game.managers.chat; package emu.grasscutter.game.chat;
import emu.grasscutter.GameConstants; import emu.grasscutter.GameConstants;
import emu.grasscutter.command.CommandMap; import emu.grasscutter.command.CommandMap;
...@@ -20,7 +20,7 @@ import java.util.HashMap; ...@@ -20,7 +20,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class ChatManager implements ChatManagerHandler { public class ChatSystem implements ChatSystemHandler {
static final String PREFIXES = "[/!]"; static final String PREFIXES = "[/!]";
static final Pattern RE_PREFIXES = Pattern.compile(PREFIXES); static final Pattern RE_PREFIXES = Pattern.compile(PREFIXES);
static final Pattern RE_COMMANDS = Pattern.compile("\n" + PREFIXES); static final Pattern RE_COMMANDS = Pattern.compile("\n" + PREFIXES);
...@@ -31,7 +31,7 @@ public class ChatManager implements ChatManagerHandler { ...@@ -31,7 +31,7 @@ public class ChatManager implements ChatManagerHandler {
private final GameServer server; private final GameServer server;
public ChatManager(GameServer server) { public ChatSystem(GameServer server) {
this.server = server; this.server = server;
} }
...@@ -50,15 +50,15 @@ public class ChatManager implements ChatManagerHandler { ...@@ -50,15 +50,15 @@ public class ChatManager implements ChatManagerHandler {
/******************** /********************
* Chat history handling * Chat history handling
********************/ ********************/
private void putInHistory(int uid, int targetId, ChatInfo info) { private void putInHistory(int uid, int partnerId, ChatInfo info) {
if (!this.history.containsKey(uid)) { if (!this.history.containsKey(uid)) {
this.history.put(uid, new HashMap<>()); this.history.put(uid, new HashMap<>());
} }
if (!this.history.get(uid).containsKey(targetId)) { if (!this.history.get(uid).containsKey(partnerId)) {
this.history.get(uid).put(targetId, new ArrayList<>()); this.history.get(uid).put(partnerId, new ArrayList<>());
} }
this.history.get(uid).get(targetId).add(info); this.history.get(uid).get(partnerId).add(info);
} }
public void clearHistoryOnLogout(Player player) { public void clearHistoryOnLogout(Player player) {
...@@ -67,9 +67,9 @@ public class ChatManager implements ChatManagerHandler { ...@@ -67,9 +67,9 @@ public class ChatManager implements ChatManagerHandler {
} }
} }
public void handlePullPrivateChatReq(Player player, int targetUid) { public void handlePullPrivateChatReq(Player player, int partnerId) {
if (this.history.containsKey(player.getUid()) && this.history.get(player.getUid()).containsKey(targetUid)) { if (this.history.getOrDefault(player.getUid(), Map.of()).containsKey(partnerId)) {
player.sendPacket(new PacketPullPrivateChatRsp(this.history.get(player.getUid()).get(targetUid))); player.sendPacket(new PacketPullPrivateChatRsp(this.history.get(player.getUid()).get(partnerId)));
} }
else { else {
player.sendPacket(new PacketPullPrivateChatRsp(List.of())); player.sendPacket(new PacketPullPrivateChatRsp(List.of()));
...@@ -77,17 +77,17 @@ public class ChatManager implements ChatManagerHandler { ...@@ -77,17 +77,17 @@ public class ChatManager implements ChatManagerHandler {
} }
public void handlePullRecentChatReq(Player player) { public void handlePullRecentChatReq(Player player) {
// If this user has no chat history yet, create it by sending the server welcome messages.
if (!this.history.getOrDefault(player.getUid(), Map.of()).containsKey(GameConstants.SERVER_CONSOLE_UID)) {
this.sendServerWelcomeMessages(player);
}
// For now, we send the list three messages from the server for the recent chat history. // For now, we send the list three messages from the server for the recent chat history.
// This matches the previous behavior, but ultimately, we should probably keep track of the last chat partner // This matches the previous behavior, but ultimately, we should probably keep track of the last chat partner
// for every given player and return the last messages exchanged with that partner. // for every given player and return the last messages exchanged with that partner.
if (this.history.containsKey(player.getUid()) && this.history.get(player.getUid()).containsKey(GameConstants.SERVER_CONSOLE_UID)) { int historyLength = this.history.get(player.getUid()).get(GameConstants.SERVER_CONSOLE_UID).size();
int historyLength = this.history.get(player.getUid()).get(GameConstants.SERVER_CONSOLE_UID).size(); var messages = this.history.get(player.getUid()).get(GameConstants.SERVER_CONSOLE_UID).subList(Math.max(historyLength - 3, 0), historyLength);
var messages = this.history.get(player.getUid()).get(GameConstants.SERVER_CONSOLE_UID).subList(Math.max(historyLength - 3, 0), historyLength); player.sendPacket(new PacketPullRecentChatRsp(messages));
player.sendPacket(new PacketPullRecentChatRsp(messages));
}
else {
player.sendPacket(new PacketPullRecentChatRsp(List.of()));
}
} }
/******************** /********************
...@@ -199,7 +199,7 @@ public class ChatManager implements ChatManagerHandler { ...@@ -199,7 +199,7 @@ public class ChatManager implements ChatManagerHandler {
/******************** /********************
* Welcome messages * Welcome messages
********************/ ********************/
public void sendServerWelcomeMessages(Player player) { private void sendServerWelcomeMessages(Player player) {
var joinOptions = GAME_INFO.joinOptions; var joinOptions = GAME_INFO.joinOptions;
if (joinOptions.welcomeEmotes != null && joinOptions.welcomeEmotes.length > 0) { if (joinOptions.welcomeEmotes != null && joinOptions.welcomeEmotes.length > 0) {
......
package emu.grasscutter.game.managers.chat; package emu.grasscutter.game.chat;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
public interface ChatManagerHandler { public interface ChatSystemHandler {
GameServer getServer(); GameServer getServer();
void sendPrivateMessage(Player player, int targetUid, String message); void sendPrivateMessage(Player player, int targetUid, String message);
void sendPrivateMessage(Player player, int targetUid, int emote); void sendPrivateMessage(Player player, int targetUid, int emote);
...@@ -13,6 +13,5 @@ public interface ChatManagerHandler { ...@@ -13,6 +13,5 @@ public interface ChatManagerHandler {
void sendPrivateMessageFromServer(int targetUid, int emote); void sendPrivateMessageFromServer(int targetUid, int emote);
void handlePullPrivateChatReq(Player player, int targetUid); void handlePullPrivateChatReq(Player player, int targetUid);
void clearHistoryOnLogout(Player player); void clearHistoryOnLogout(Player player);
void sendServerWelcomeMessages(Player player);
void handlePullRecentChatReq(Player player); void handlePullRecentChatReq(Player player);
} }
...@@ -51,14 +51,12 @@ import emu.grasscutter.net.proto.AbilityInvokeEntryOuterClass.AbilityInvokeEntry ...@@ -51,14 +51,12 @@ import emu.grasscutter.net.proto.AbilityInvokeEntryOuterClass.AbilityInvokeEntry
import emu.grasscutter.net.proto.AttackResultOuterClass.AttackResult; import emu.grasscutter.net.proto.AttackResultOuterClass.AttackResult;
import emu.grasscutter.net.proto.CombatInvokeEntryOuterClass.CombatInvokeEntry; import emu.grasscutter.net.proto.CombatInvokeEntryOuterClass.CombatInvokeEntry;
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
import emu.grasscutter.net.proto.MpSettingTypeOuterClass.MpSettingType; import emu.grasscutter.net.proto.MpSettingTypeOuterClass.MpSettingType;
import emu.grasscutter.net.proto.OnlinePlayerInfoOuterClass.OnlinePlayerInfo; import emu.grasscutter.net.proto.OnlinePlayerInfoOuterClass.OnlinePlayerInfo;
import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo; import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo;
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture; import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
import emu.grasscutter.net.proto.PropChangeReasonOuterClass.PropChangeReason; import emu.grasscutter.net.proto.PropChangeReasonOuterClass.PropChangeReason;
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail; import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
import emu.grasscutter.scripts.data.SceneRegion; import emu.grasscutter.scripts.data.SceneRegion;
import emu.grasscutter.server.event.player.PlayerJoinEvent; import emu.grasscutter.server.event.player.PlayerJoinEvent;
import emu.grasscutter.server.event.player.PlayerQuitEvent; import emu.grasscutter.server.event.player.PlayerQuitEvent;
...@@ -799,7 +797,6 @@ public class Player { ...@@ -799,7 +797,6 @@ public class Player {
} }
this.getServer().getChatSystem().sendPrivateMessageFromServer(getUid(), message.toString()); this.getServer().getChatSystem().sendPrivateMessageFromServer(getUid(), message.toString());
// this.sendPacket(new PacketPrivateChatNotify(GameConstants.SERVER_CONSOLE_UID, getUid(), message.toString()));
} }
/** /**
...@@ -809,7 +806,6 @@ public class Player { ...@@ -809,7 +806,6 @@ public class Player {
* @param message The message to send. * @param message The message to send.
*/ */
public void sendMessage(Player sender, Object message) { public void sendMessage(Player sender, Object message) {
// this.sendPacket(new PacketPrivateChatNotify(sender.getUid(), this.getUid(), message.toString()));
this.getServer().getChatSystem().sendPrivateMessage(sender, this.getUid(), message.toString()); this.getServer().getChatSystem().sendPrivateMessage(sender, this.getUid(), message.toString());
} }
...@@ -1194,12 +1190,8 @@ public class Player { ...@@ -1194,12 +1190,8 @@ public class Player {
session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world
session.send(new PacketPlayerLevelRewardUpdateNotify(rewardedLevels)); session.send(new PacketPlayerLevelRewardUpdateNotify(rewardedLevels));
// First notify packets sent // First notify packets sent
this.hasSentLoginPackets = true; this.hasSentLoginPackets = true;
// Send server welcome chat.
this.getServer().getChatSystem().sendServerWelcomeMessages(this);
// Set session state // Set session state
session.setState(SessionState.ACTIVE); session.setState(SessionState.ACTIVE);
......
...@@ -2,10 +2,11 @@ package emu.grasscutter.server.game; ...@@ -2,10 +2,11 @@ package emu.grasscutter.server.game;
import emu.grasscutter.GameConstants; import emu.grasscutter.GameConstants;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
import emu.grasscutter.command.CommandMap;
import emu.grasscutter.database.DatabaseHelper; import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.Account; import emu.grasscutter.game.Account;
import emu.grasscutter.game.battlepass.BattlePassSystem; import emu.grasscutter.game.battlepass.BattlePassSystem;
import emu.grasscutter.game.chat.ChatSystem;
import emu.grasscutter.game.chat.ChatSystemHandler;
import emu.grasscutter.game.combine.CombineManger; import emu.grasscutter.game.combine.CombineManger;
import emu.grasscutter.game.drop.DropSystem; import emu.grasscutter.game.drop.DropSystem;
import emu.grasscutter.game.dungeons.DungeonSystem; import emu.grasscutter.game.dungeons.DungeonSystem;
...@@ -13,8 +14,6 @@ import emu.grasscutter.game.dungeons.challenge.DungeonChallenge; ...@@ -13,8 +14,6 @@ import emu.grasscutter.game.dungeons.challenge.DungeonChallenge;
import emu.grasscutter.game.expedition.ExpeditionSystem; import emu.grasscutter.game.expedition.ExpeditionSystem;
import emu.grasscutter.game.gacha.GachaSystem; import emu.grasscutter.game.gacha.GachaSystem;
import emu.grasscutter.game.managers.CookingManager; import emu.grasscutter.game.managers.CookingManager;
import emu.grasscutter.game.managers.chat.ChatManager;
import emu.grasscutter.game.managers.chat.ChatManagerHandler;
import emu.grasscutter.game.managers.energy.EnergyManager; import emu.grasscutter.game.managers.energy.EnergyManager;
import emu.grasscutter.game.managers.stamina.StaminaManager; import emu.grasscutter.game.managers.stamina.StaminaManager;
import emu.grasscutter.game.player.Player; import emu.grasscutter.game.player.Player;
...@@ -74,7 +73,7 @@ public final class GameServer extends KcpServer { ...@@ -74,7 +73,7 @@ public final class GameServer extends KcpServer {
private final ServerTaskScheduler scheduler; private final ServerTaskScheduler scheduler;
private final TaskMap taskMap; private final TaskMap taskMap;
private ChatManagerHandler chatManager; private ChatSystemHandler chatManager;
public GameServer() { public GameServer() {
this(getAdapterInetSocketAddress()); this(getAdapterInetSocketAddress());
...@@ -124,27 +123,27 @@ public final class GameServer extends KcpServer { ...@@ -124,27 +123,27 @@ public final class GameServer extends KcpServer {
this.questSystem = new QuestSystem(this); this.questSystem = new QuestSystem(this);
// Chata manager // Chata manager
this.chatManager = new ChatManager(this); this.chatManager = new ChatSystem(this);
// Hook into shutdown event. // Hook into shutdown event.
Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown)); Runtime.getRuntime().addShutdownHook(new Thread(this::onServerShutdown));
} }
@Deprecated @Deprecated
public ChatManagerHandler getChatManager() { public ChatSystemHandler getChatManager() {
return chatManager; return chatManager;
} }
@Deprecated @Deprecated
public void setChatManager(ChatManagerHandler chatManager) { public void setChatManager(ChatSystemHandler chatManager) {
this.chatManager = chatManager; this.chatManager = chatManager;
} }
public ChatManagerHandler getChatSystem() { public ChatSystemHandler getChatSystem() {
return chatManager; return chatManager;
} }
public void setChatSystem(ChatManagerHandler chatManager) { public void setChatSystem(ChatSystemHandler chatManager) {
this.chatManager = chatManager; this.chatManager = chatManager;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment