mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-18 18:05:05 +01:00
Merge branch 'development' into api
This commit is contained in:
@@ -455,8 +455,7 @@ public final class DispatchServer {
|
||||
// hk4e-sdk-os-static.hoyoverse.com
|
||||
httpServer.get("/hk4e_global/combo/granter/api/getConfig", new DispatchHttpJsonHandler("{\"retcode\":0,\"message\":\"OK\",\"data\":{\"protocol\":true,\"qr_enabled\":false,\"log_level\":\"INFO\",\"announce_url\":\"https://webstatic-sea.hoyoverse.com/hk4e/announcement/index.html?sdk_presentation_style=fullscreen\\u0026sdk_screen_transparent=true\\u0026game_biz=hk4e_global\\u0026auth_appid=announcement\\u0026game=hk4e#/\",\"push_alias_type\":2,\"disable_ysdk_guard\":false,\"enable_announce_pic_popup\":true}}"));
|
||||
// hk4e-sdk-os-static.hoyoverse.com
|
||||
httpServer.get("/hk4e_global/mdk/shield/api/loadConfig", new DispatchHttpJsonHandler( "{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":6,\"game_key\":\"hk4e_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"原神海外\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{\"tw\":\"\",\"fb\":\"\"},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}}}}"));
|
||||
|
||||
httpServer.get("/hk4e_global/mdk/shield/api/loadConfig", new DispatchHttpJsonHandler("{\"retcode\":0,\"message\":\"OK\",\"data\":{\"id\":6,\"game_key\":\"hk4e_global\",\"client\":\"PC\",\"identity\":\"I_IDENTITY\",\"guest\":false,\"ignore_versions\":\"\",\"scene\":\"S_NORMAL\",\"name\":\"原神海外\",\"disable_regist\":false,\"enable_email_captcha\":false,\"thirdparty\":[\"fb\",\"tw\"],\"disable_mmt\":false,\"server_guest\":false,\"thirdparty_ignore\":{\"tw\":\"\",\"fb\":\"\"},\"enable_ps_bind_account\":false,\"thirdparty_login_configs\":{\"tw\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800},\"fb\":{\"token_type\":\"TK_GAME_TOKEN\",\"game_token_expires_in\":604800}}}}"));
|
||||
// Test api?
|
||||
// abtest-api-data-sg.hoyoverse.com
|
||||
httpServer.post("/data_abtest_api/config/experiment/list", new DispatchHttpJsonHandler("{\"retcode\":0,\"success\":true,\"message\":\"\",\"data\":[{\"code\":1000,\"type\":2,\"config_id\":\"14\",\"period_id\":\"6036_99\",\"version\":\"1\",\"configs\":{\"cardType\":\"old\"}}]}"));
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package emu.grasscutter.server.event.game;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.server.event.types.GameEvent;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
public final class PlayerCreationEvent extends GameEvent {
|
||||
private final GameSession session;
|
||||
private Class<? extends Player> playerClass;
|
||||
|
||||
public PlayerCreationEvent(GameSession session, Class<? extends Player> playerClass) {
|
||||
this.session = session;
|
||||
this.playerClass = playerClass;
|
||||
}
|
||||
|
||||
public GameSession getSession() {
|
||||
return this.session;
|
||||
}
|
||||
|
||||
public void setPlayerClass(Class<? extends Player> playerClass) {
|
||||
this.playerClass = playerClass;
|
||||
}
|
||||
|
||||
public Class<? extends Player> getPlayerClass() {
|
||||
return this.playerClass;
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package emu.grasscutter.server.event.player;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.server.event.Cancellable;
|
||||
import emu.grasscutter.server.event.types.PlayerEvent;
|
||||
|
||||
public final class PlayerJoinEvent extends PlayerEvent implements Cancellable {
|
||||
public PlayerJoinEvent(Player player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package emu.grasscutter.server.event.player;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.server.event.types.GameEvent;
|
||||
import emu.grasscutter.server.event.types.PlayerEvent;
|
||||
|
||||
public final class PlayerQuitEvent extends PlayerEvent {
|
||||
public PlayerQuitEvent(Player player) {
|
||||
super(player);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GetFriendShowAvatarInfoReqOuterClass.GetFriendShowAvatarInfoReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketGetFriendShowAvatarInfoRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.GetFriendShowAvatarInfoReq)
|
||||
public class HandlerGetFriendShowAvatarInfoReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
GetFriendShowAvatarInfoReq req = GetFriendShowAvatarInfoReq.parseFrom(payload);
|
||||
|
||||
int targetUid = req.getUid();
|
||||
Player targetPlayer = session.getServer().getPlayerByUid(targetUid, true);
|
||||
|
||||
if (targetPlayer.isShowAvatars()) {
|
||||
session.send(new PacketGetFriendShowAvatarInfoRsp(targetUid, targetPlayer.getShowAvatarInfoList()));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,10 +13,12 @@ import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.SetPlayerBornDataReqOuterClass.SetPlayerBornDataReq;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.server.event.game.PlayerJoinEvent;
|
||||
import emu.grasscutter.server.event.game.PlayerCreationEvent;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.game.GameSession.SessionState;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@Opcodes(PacketOpcodes.SetPlayerBornDataReq)
|
||||
public class HandlerSetPlayerBornDataReq extends PacketHandler {
|
||||
|
||||
@@ -40,8 +42,10 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
|
||||
nickname = "Traveler";
|
||||
}
|
||||
|
||||
// Create character
|
||||
Player player = new Player(session);
|
||||
// Call creation event.
|
||||
PlayerCreationEvent event = new PlayerCreationEvent(session, Player.class); event.call();
|
||||
// Create player instance from event.
|
||||
Player player = event.getPlayerClass().getDeclaredConstructor(GameSession.class).newInstance(session);
|
||||
player.setNickname(nickname);
|
||||
|
||||
try {
|
||||
@@ -83,19 +87,12 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
|
||||
mailBuilder.mail.mailContent.title = String.format("W%sl%som%s to %s%s%s%s%s%s%s%s%s%s%s!", DatabaseHelper.AWJVN, u, DatabaseHelper.AWJVN, d, e, z, GameData.EJWOA, GameData.EJWOA, u, PacketOpcodes.ONLWE, s, s, DatabaseHelper.AWJVN, e);
|
||||
mailBuilder.mail.mailContent.sender = String.format("L%swnmow%s%s @ Gi%sH%sb", z, DatabaseHelper.AWJVN, e, s, PacketOpcodes.ONLWE);
|
||||
mailBuilder.mail.mailContent.content = Grasscutter.getConfig().GameServer.WelcomeMailContent;
|
||||
for (int itemId : Grasscutter.getConfig().GameServer.WelcomeMailItems) {
|
||||
mailBuilder.mail.itemList.add(new Mail.MailItem(itemId, 1, 1));
|
||||
}
|
||||
mailBuilder.mail.itemList.addAll(Arrays.asList(Grasscutter.getConfig().GameServer.WelcomeMailItems));
|
||||
mailBuilder.mail.importance = 1;
|
||||
player.sendMail(mailBuilder.mail);
|
||||
} catch (Exception e) {
|
||||
Grasscutter.getLogger().error("Error creating player object: ", e);
|
||||
session.close();
|
||||
}
|
||||
|
||||
// Call join event.
|
||||
PlayerJoinEvent event = new PlayerJoinEvent(player); event.call();
|
||||
if(event.isCanceled()) // If event is not cancelled, continue.
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,11 +17,13 @@ public class PacketDungeonEntryInfoRsp extends BasePacket {
|
||||
DungeonEntryInfoRsp.Builder proto = DungeonEntryInfoRsp.newBuilder()
|
||||
.setPointId(pointData.getId());
|
||||
|
||||
for (int dungeonId : pointData.getDungeonIds()) {
|
||||
DungeonEntryInfo info = DungeonEntryInfo.newBuilder().setDungeonId(dungeonId).build();
|
||||
proto.addDungeonEntryList(info);
|
||||
if (pointData.getDungeonIds() != null) {
|
||||
for (int dungeonId : pointData.getDungeonIds()) {
|
||||
DungeonEntryInfo info = DungeonEntryInfo.newBuilder().setDungeonId(dungeonId).build();
|
||||
proto.addDungeonEntryList(info);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GetFriendShowAvatarInfoRspOuterClass.GetFriendShowAvatarInfoRsp;
|
||||
import emu.grasscutter.net.proto.ShowAvatarInfoOuterClass.ShowAvatarInfo;
|
||||
|
||||
@Opcodes(PacketOpcodes.GetFriendShowAvatarInfoRsp)
|
||||
public class PacketGetFriendShowAvatarInfoRsp extends BasePacket {
|
||||
|
||||
public PacketGetFriendShowAvatarInfoRsp(int uid, List<ShowAvatarInfo> showAvatarInfoList) {
|
||||
super(PacketOpcodes.GetFriendShowAvatarInfoRsp);
|
||||
|
||||
GetFriendShowAvatarInfoRsp.Builder p = GetFriendShowAvatarInfoRsp.newBuilder()
|
||||
.setUid(uid)
|
||||
.addAllShowAvatarInfoList(showAvatarInfoList);
|
||||
|
||||
this.setData(p.build());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -18,36 +18,19 @@ import java.util.Objects;
|
||||
public class PacketGetOnlinePlayerListRsp extends BasePacket {
|
||||
public PacketGetOnlinePlayerListRsp(Player session){
|
||||
super(PacketOpcodes.GetOnlinePlayerListRsp);
|
||||
Map<Integer, Player> playersMap = Grasscutter.getGameServer().getPlayers();
|
||||
|
||||
List<Player> players = Grasscutter.getGameServer().getPlayers().values().stream().limit(50).toList();
|
||||
|
||||
GetOnlinePlayerListRsp.Builder proto = GetOnlinePlayerListRsp.newBuilder();
|
||||
if(playersMap.size() != 0){
|
||||
List<OnlinePlayerInfo> playerInfoList = new ArrayList<>();
|
||||
|
||||
for(Player player:playersMap.values()){
|
||||
ProfilePicture.Builder picture = ProfilePicture.newBuilder();
|
||||
OnlinePlayerInfo.Builder playerInfo = OnlinePlayerInfo.newBuilder();
|
||||
|
||||
if(player.getUid() == session.getUid())continue;
|
||||
picture.setAvatarId(player.getProfile().getAvatarId())
|
||||
.build();
|
||||
System.out.println(player.getHeadImage());
|
||||
playerInfo.setUid(player.getUid())
|
||||
.setNickname(player.getNickname())
|
||||
.setPlayerLevel(player.getLevel())
|
||||
.setMpSettingType(MpSettingTypeOuterClass.MpSettingType.MP_SETTING_ENTER_AFTER_APPLY)
|
||||
.setCurPlayerNumInWorld(player.getWorld().getPlayerCount())
|
||||
.setWorldLevel(player.getWorldLevel())
|
||||
.setNameCardId(player.getNameCardId())
|
||||
.setProfilePicture(picture);
|
||||
if(!Objects.equals(player.getSignature(), "")){
|
||||
playerInfo.setSignature(player.getSignature());
|
||||
}
|
||||
playerInfoList.add(playerInfo.build());
|
||||
}
|
||||
for (OnlinePlayerInfo onlinePlayerInfo : playerInfoList) {
|
||||
proto.addPlayerInfoList(onlinePlayerInfo).build();
|
||||
|
||||
if (players.size() != 0) {
|
||||
for(Player player : players) {
|
||||
if (player.getUid() == session.getUid()) continue;
|
||||
|
||||
proto.addPlayerInfoList(player.getOnlinePlayerInfo());
|
||||
}
|
||||
}
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,9 +18,9 @@ public class PacketGetPlayerFriendListRsp extends BasePacket {
|
||||
|
||||
FriendBrief serverFriend = FriendBrief.newBuilder()
|
||||
.setUid(GameConstants.SERVER_CONSOLE_UID)
|
||||
.setNickname("Server")
|
||||
.setNickname(GameConstants.SERVER_AVATAR_NAME)
|
||||
.setLevel(1)
|
||||
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(GameConstants.MAIN_CHARACTER_FEMALE))
|
||||
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(GameConstants.SERVER_AVATAR_ID))
|
||||
.setWorldLevel(0)
|
||||
.setSignature("")
|
||||
.setLastActiveTime((int) (System.currentTimeMillis() / 1000f))
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GetScenePointRspOuterClass.GetScenePointRsp;
|
||||
@@ -12,8 +13,12 @@ public class PacketGetScenePointRsp extends BasePacket {
|
||||
GetScenePointRsp.Builder p = GetScenePointRsp.newBuilder()
|
||||
.setSceneId(sceneId);
|
||||
|
||||
for (int i = 1; i < 1000; i++) {
|
||||
p.addUnlockedPointList(i);
|
||||
if (GameData.getScenePointIdList().size() == 0) {
|
||||
for (int i = 1; i < 1000; i++) {
|
||||
p.addUnlockedPointList(i);
|
||||
}
|
||||
} else {
|
||||
p.addAllUnlockedPointList(GameData.getScenePointIdList());
|
||||
}
|
||||
|
||||
for (int i = 1; i < 9; i++) {
|
||||
|
||||
Reference in New Issue
Block a user