Player join & quit event

This commit is contained in:
KingRainbow44 2022-04-28 22:12:41 -04:00
parent dc26f9e232
commit 9d9c6566ed
4 changed files with 44 additions and 2 deletions

View File

@ -37,6 +37,7 @@ import emu.grasscutter.net.proto.PlayerWorldLocationInfoOuterClass;
import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture; import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail; import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
import emu.grasscutter.net.proto.SocialShowAvatarInfoOuterClass; import emu.grasscutter.net.proto.SocialShowAvatarInfoOuterClass;
import emu.grasscutter.server.event.game.PlayerQuitEvent;
import emu.grasscutter.server.game.GameServer; import emu.grasscutter.server.game.GameServer;
import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.*; import emu.grasscutter.server.packet.send.*;
@ -1026,6 +1027,9 @@ public class Player {
this.save(); this.save();
this.getTeamManager().saveAvatars(); this.getTeamManager().saveAvatars();
this.getFriendsList().save(); this.getFriendsList().save();
// Call quit event.
PlayerQuitEvent event = new PlayerQuitEvent(this); event.call();
} }
public enum SceneLoadState { public enum SceneLoadState {

View File

@ -0,0 +1,17 @@
package emu.grasscutter.server.event.game;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.Cancellable;
import emu.grasscutter.server.event.types.GameEvent;
public final class PlayerJoinEvent extends GameEvent implements Cancellable {
private final Player player;
public PlayerJoinEvent(Player player) {
this.player = player;
}
public Player getPlayer() {
return this.player;
}
}

View File

@ -0,0 +1,16 @@
package emu.grasscutter.server.event.game;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.server.event.types.GameEvent;
public final class PlayerQuitEvent extends GameEvent {
private final Player player;
public PlayerQuitEvent(Player player) {
this.player = player;
}
public Player getPlayer() {
return this.player;
}
}

View File

@ -13,6 +13,7 @@ import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.SetPlayerBornDataReqOuterClass.SetPlayerBornDataReq; import emu.grasscutter.net.proto.SetPlayerBornDataReqOuterClass.SetPlayerBornDataReq;
import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.server.event.game.PlayerJoinEvent;
import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.game.GameSession.SessionState; import emu.grasscutter.server.game.GameSession.SessionState;
@ -25,7 +26,7 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
// Sanity checks // Sanity checks
int avatarId = req.getAvatarId(); int avatarId = req.getAvatarId();
int startingSkillDepot = 0; int startingSkillDepot;
if (avatarId == GameConstants.MAIN_CHARACTER_MALE) { if (avatarId == GameConstants.MAIN_CHARACTER_MALE) {
startingSkillDepot = 504; startingSkillDepot = 504;
} else if (avatarId == GameConstants.MAIN_CHARACTER_FEMALE) { } else if (avatarId == GameConstants.MAIN_CHARACTER_FEMALE) {
@ -91,6 +92,10 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
Grasscutter.getLogger().error("Error creating player object: ", e); Grasscutter.getLogger().error("Error creating player object: ", e);
session.close(); session.close();
} }
}
// Call join event.
PlayerJoinEvent event = new PlayerJoinEvent(player); event.call();
if(event.isCanceled()) // If event is not cancelled, continue.
session.close();
}
} }