Update gc to 3.3 (#1981)

* replace the deprecated api

* update proto

* delete music game

* fixed codes

* fix costume switch

* fix mail bug

* Bump version number.

* Re-add max boss chest number

Co-authored-by: GanyusLeftHorn <1244229+GanyusLeftHorn@users.noreply.github.com>
This commit is contained in:
Simplxs
2022-12-24 05:12:02 +08:00
committed by GitHub
parent 8b83dbf58c
commit 92fbaa8670
1142 changed files with 474411 additions and 169883 deletions

View File

@@ -6,7 +6,7 @@ import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.Utils;
public final class GameConstants {
public static String VERSION = "3.2.0";
public static String VERSION = "3.3.0";
public static final int DEFAULT_TEAMS = 4;
public static final int MAX_TEAMS = 10;

View File

@@ -82,7 +82,7 @@ public class ItemData extends GameResource {
private List<Integer> furnType;
private List<Integer> furnitureGadgetID;
@SerializedName(value="roomSceneId", alternate={"BMEPAMCNABE", "DANFGGLKLNO", "JFDLJGDFIGL", "OHIANNAEEAK"})
@SerializedName(value="roomSceneId", alternate={"BMEPAMCNABE", "DANFGGLKLNO", "JFDLJGDFIGL", "OHIANNAEEAK", "MFGACDIOHGF"})
private int roomSceneId;
// Custom

View File

@@ -349,6 +349,7 @@ public final class DatabaseHelper {
public static void savePlayerActivityData(PlayerActivityData playerActivityData) {
DatabaseManager.getGameDatastore().save(playerActivityData);
}
public static MusicGameBeatmap getMusicGameBeatmap(long musicShareId) {
return DatabaseManager.getGameDatastore().find(MusicGameBeatmap.class)
.filter(Filters.eq("musicShareId", musicShareId))

View File

@@ -133,7 +133,7 @@ public final class AbilityManager extends BasePlayerManager {
// Destroying rocks
if (target instanceof EntityGadget targetGadget && targetGadget.getContent() instanceof GadgetGatherObject gatherObject) {
if (data.getAction() == ModifierAction.REMOVED) {
if (data.getAction() == ModifierAction.MODIFIER_ACTION_REMOVED) {
gatherObject.dropItems(this.getPlayer());
return;
}
@@ -151,7 +151,7 @@ public final class AbilityManager extends BasePlayerManager {
}
// This is not how it works but we will keep it for now since healing abilities dont work properly anyways
if (data.getAction() == ModifierAction.ADDED && data.getParentAbilityName() != null) {
if (data.getAction() == ModifierAction.MODIFIER_ACTION_ADDED && data.getParentAbilityName() != null) {
// Handle add modifier here
String modifierString = data.getParentAbilityName().getStr();
AbilityModifierEntry modifier = GameData.getAbilityModifiers().get(modifierString);
@@ -164,7 +164,7 @@ public final class AbilityManager extends BasePlayerManager {
// Add to meta modifier list
target.getMetaModifiers().put(head.getInstancedModifierId(), modifierString);
} else if (data.getAction() == ModifierAction.REMOVED) {
} else if (data.getAction() == ModifierAction.MODIFIER_ACTION_REMOVED) {
// Handle remove modifier
String modifierString = target.getMetaModifiers().get(head.getInstancedModifierId());

View File

@@ -5,7 +5,7 @@ import emu.grasscutter.game.activity.GameActivity;
import emu.grasscutter.game.activity.PlayerActivityData;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.net.proto.ActivityInfoOuterClass;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameActivityDetailInfoOuterClass;
import emu.grasscutter.utils.JsonUtils;
@@ -29,15 +29,15 @@ public class MusicGameActivityHandler extends ActivityHandler {
.putAllMusicGameRecordMap(
musicGamePlayerData.getMusicGameRecord().values().stream()
.collect(Collectors.toMap(MusicGamePlayerData.MusicGameRecord::getMusicId, MusicGamePlayerData.MusicGameRecord::toProto)))
.addAllPersonCustomBeatmap(musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
.map(MusicGamePlayerData.CustomBeatmapRecord::toPersonalBriefProto)
.map(MusicBriefInfoOuterClass.MusicBriefInfo.Builder::build)
.toList())
.addAllOthersCustomBeatmap(musicGamePlayerData.getOthersCustomBeatmapRecord().values().stream()
.map(MusicGamePlayerData.CustomBeatmapRecord::toOthersBriefProto)
.map(MusicBriefInfoOuterClass.MusicBriefInfo.Builder::build)
.toList())
// .addAllPersonCustomBeatmap(musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
// .map(MusicGamePlayerData.CustomBeatmapRecord::toPersonalBriefProto)
// .map(UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder::build)
// .toList())
//
// .addAllOthersCustomBeatmap(musicGamePlayerData.getOthersCustomBeatmapRecord().values().stream()
// .map(MusicGamePlayerData.CustomBeatmapRecord::toOthersBriefProto)
// .map(UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder::build)
// .toList())
.build());
}

View File

@@ -3,10 +3,10 @@ package emu.grasscutter.game.activity.musicgame;
import dev.morphia.annotations.Entity;
import dev.morphia.annotations.Id;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.net.proto.MusicBeatmapListOuterClass;
import emu.grasscutter.net.proto.MusicBeatmapNoteOuterClass;
import emu.grasscutter.net.proto.MusicBeatmapOuterClass;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicRecordOuterClass;
import emu.grasscutter.net.proto.UgcMusicNoteOuterClass;
import emu.grasscutter.net.proto.UgcMusicTrackOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Data;
@@ -43,40 +43,39 @@ public class MusicGameBeatmap {
DatabaseHelper.saveMusicGameBeatmap(this);
}
public static List<List<BeatmapNote>> parse(List<MusicBeatmapListOuterClass.MusicBeatmapList> beatmapItemListList) {
public static List<List<BeatmapNote>> parse(List<UgcMusicTrackOuterClass.UgcMusicTrack> beatmapItemListList) {
return beatmapItemListList.stream()
.map(item -> item.getBeatmapNoteListList().stream()
.map(item -> item.getMusicNoteListList().stream()
.map(BeatmapNote::parse)
.toList())
.toList();
}
public MusicBeatmapOuterClass.MusicBeatmap toProto(){
return MusicBeatmapOuterClass.MusicBeatmap.newBuilder()
public UgcMusicRecordOuterClass.UgcMusicRecord toProto(){
return UgcMusicRecordOuterClass.UgcMusicRecord.newBuilder()
.setMusicId(musicId)
.addAllBeatmapItemList(beatmap.stream()
.addAllMusicTrackList(beatmap.stream()
.map(this::musicBeatmapListToProto)
.toList())
.build();
}
public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toBriefProto(){
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toBriefProto(){
var player = DatabaseHelper.getPlayerByUid(authorUid);
return MusicBriefInfoOuterClass.MusicBriefInfo.newBuilder()
return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder()
.setMusicId(musicId)
.setMusicNoteCount(musicNoteCount)
.setMusicShareId(musicShareId)
// .setMusicNoteCount(musicNoteCount)
.setUgcGuid(musicShareId)
.setMaxScore(maxScore)
.setShareTime(createTime)
.setAuthorNickname(player.getNickname())
.setVersion(1)
;
// .setShareTime(createTime)
.setCreatorNickname(player.getNickname())
.setVersion(1);
}
private MusicBeatmapListOuterClass.MusicBeatmapList musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList){
return MusicBeatmapListOuterClass.MusicBeatmapList.newBuilder()
.addAllBeatmapNoteList(beatmapNoteList.stream()
private UgcMusicTrackOuterClass.UgcMusicTrack musicBeatmapListToProto(List<BeatmapNote> beatmapNoteList){
return UgcMusicTrackOuterClass.UgcMusicTrack.newBuilder()
.addAllMusicNoteList(beatmapNoteList.stream()
.map(BeatmapNote::toProto)
.toList())
.build();
@@ -90,15 +89,15 @@ public class MusicGameBeatmap {
int startTime;
int endTime;
public static BeatmapNote parse(MusicBeatmapNoteOuterClass.MusicBeatmapNote note){
public static BeatmapNote parse(UgcMusicNoteOuterClass.UgcMusicNote note){
return BeatmapNote.of()
.startTime(note.getStartTime())
.endTime(note.getEndTime())
.build();
}
public MusicBeatmapNoteOuterClass.MusicBeatmapNote toProto(){
return MusicBeatmapNoteOuterClass.MusicBeatmapNote.newBuilder()
public UgcMusicNoteOuterClass.UgcMusicNote toProto(){
return UgcMusicNoteOuterClass.UgcMusicNote.newBuilder()
.setStartTime(startTime)
.setEndTime(endTime)
.build();

View File

@@ -2,7 +2,7 @@ package emu.grasscutter.game.activity.musicgame;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.MusicGameBasicData;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.UgcMusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameRecordOuterClass;
import lombok.AccessLevel;
import lombok.Builder;
@@ -61,25 +61,25 @@ public class MusicGamePlayerData {
int score;
boolean settle;
public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toPersonalBriefProto() {
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toPersonalBriefProto() {
var musicGameBeatmap = MusicGameBeatmap.getByShareId(musicShareId);
return MusicBriefInfoOuterClass.MusicBriefInfo.newBuilder()
.setCanShare(true)
.setCreateTime(musicGameBeatmap.getCreateTime())
return UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.newBuilder()
// .setCanShare(true)
// .setCreateTime(musicGameBeatmap.getCreateTime())
.setMusicId(musicGameBeatmap.getMusicId())
.setMaxScore(musicGameBeatmap.getMaxScore())
.setPosition(musicGameBeatmap.getSavePosition())
.setMusicNoteCount(musicGameBeatmap.getMusicNoteCount())
.setMusicShareId(musicShareId);
// .setPosition(musicGameBeatmap.getSavePosition())
// .setMusicNoteCount(musicGameBeatmap.getMusicNoteCount())
.setUgcGuid(musicShareId);
}
public MusicBriefInfoOuterClass.MusicBriefInfo.Builder toOthersBriefProto() {
public UgcMusicBriefInfoOuterClass.UgcMusicBriefInfo.Builder toOthersBriefProto() {
var musicGameBeatmap = MusicGameBeatmap.getByShareId(musicShareId);
return musicGameBeatmap.toBriefProto()
.setScore(score)
.setSettle(settle)
// .setScore(score)
// .setSettle(settle)
;
}

View File

@@ -367,7 +367,7 @@ public class BattlePassManager extends BasePlayerDataManager {
.setEndTime(2059483200)
.setIsViewed(this.isViewed())
.setUnlockStatus(this.isPaid() ? BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_PAID : BattlePassUnlockStatus.BATTLE_PASS_UNLOCK_STATUS_FREE)
.setUnk2700ODHAAHEPFAG(2) // Not bought on Playstation.
.setPaidPlatformFlags(2) // Not bought on Playstation.
.setCurCyclePoints(this.getCyclePoints())
.setCurCycle(BattlePassCycle.newBuilder()
.setBeginTime(0)

View File

@@ -54,12 +54,14 @@ public class EntityAvatar extends GameEntity {
super(scene);
this.avatar = avatar;
this.avatar.setCurrentEnergy();
if (scene != null)
if (getScene() != null)
{
this.id = getScene().getWorld().getNextEntityId(EntityIdType.AVATAR);
GameItem weapon = this.getAvatar().getWeapon();
if (weapon != null) {
weapon.setWeaponEntityId(getScene().getWorld().getNextEntityId(EntityIdType.WEAPON));
GameItem weapon = getAvatar().getWeapon();
if (weapon != null) {
weapon.setWeaponEntityId(getScene().getWorld().getNextEntityId(EntityIdType.WEAPON));
}
}
}

View File

@@ -13,19 +13,19 @@ import emu.grasscutter.net.proto.ProfilePictureOuterClass.ProfilePicture;
@Entity(value = "friendships", useDiscriminator = false)
public class Friendship {
@Id private ObjectId id;
@Transient private Player owner;
@Indexed private int ownerId;
@Indexed private int friendId;
private boolean isFriend;
private int askerId;
private PlayerProfile profile;
@Deprecated // Morphia use only
public Friendship() { }
public Friendship(Player owner, Player friend, Player asker) {
this.setOwner(owner);
this.ownerId = owner.getUid();
@@ -69,12 +69,12 @@ public class Friendship {
public PlayerProfile getFriendProfile() {
return profile;
}
public void setFriendProfile(Player character) {
if (character == null || this.friendId != character.getUid()) return;
this.profile = character.getProfile();
}
public boolean isOnline() {
return getFriendProfile().getPlayer() != null;
}
@@ -86,7 +86,7 @@ public class Friendship {
public void delete() {
DatabaseHelper.deleteFriendship(this);
}
public FriendBrief toProto() {
FriendBrief proto = FriendBrief.newBuilder()
.setUid(getFriendProfile().getUid())
@@ -95,7 +95,7 @@ public class Friendship {
.setProfilePicture(ProfilePicture.newBuilder().setAvatarId(getFriendProfile().getAvatarId()))
.setWorldLevel(getFriendProfile().getWorldLevel())
.setSignature(getFriendProfile().getSignature())
.setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE_STATE_ONLINE : FriendOnlineState.FRIEND_ONLINE_STATE_FREIEND_DISCONNECT)
.setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE_STATE_ONLINE : FriendOnlineState.FRIEND_ONLINE_STATE_DISCONNECT)
.setIsMpModeAvailable(true)
.setLastActiveTime(getFriendProfile().getLastActiveTime())
.setNameCardId(getFriendProfile().getNameCard())

View File

@@ -82,7 +82,7 @@ public class GameHome {
player.getSession().send(new PacketHomeComfortInfoNotify(player));
player.getSession().send(new PacketFurnitureCurModuleArrangeCountNotify());
player.getSession().send(new PacketHomeMarkPointNotify(player));
player.getSession().send(new PacketUnlockedHomeBgmNotify(player));
player.getSession().send(new PacketHomeAllUnlockedBgmIdListNotify(player));
}
public Player getPlayer() {
@@ -99,8 +99,8 @@ public class GameHome {
if (!getUnlockedHomeBgmList().add(homeBgmId)) return false;
var player = this.getPlayer();
player.sendPacket(new PacketUnlockHomeBgmNotify(homeBgmId));
player.sendPacket(new PacketUnlockedHomeBgmNotify(player));
player.sendPacket(new PacketHomeNewUnlockedBgmIdListNotify(homeBgmId));
player.sendPacket(new PacketHomeAllUnlockedBgmIdListNotify(player));
save();
return true;
}

View File

@@ -56,7 +56,7 @@ public class HomeSceneItem {
this.bornPos = new Position(arrangementInfo.getBornPos());
this.bornRot = new Position(arrangementInfo.getBornRot());
this.djinnPos = new Position(arrangementInfo.getDjinnPos());
this.homeBgmId = arrangementInfo.getUnk2700BJHAMKKECEI();
this.homeBgmId = arrangementInfo.getBgmId();
this.mainHouse = HomeFurnitureItem.parseFrom(arrangementInfo.getMainHouse());
this.tmpVersion = arrangementInfo.getTmpVersion();
}
@@ -84,7 +84,7 @@ public class HomeSceneItem {
.setDjinnPos(djinnPos.toProto())
.setIsSetBornPos(true)
.setSceneId(sceneId)
.setUnk2700BJHAMKKECEI(homeBgmId)
.setBgmId(homeBgmId)
.setTmpVersion(tmpVersion);
if (mainHouse != null) {

View File

@@ -22,18 +22,18 @@ import emu.grasscutter.net.proto.MotionStateOuterClass.MotionState;
import emu.grasscutter.net.proto.PlayerDieTypeOuterClass.PlayerDieType;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.server.event.player.PlayerTeamDeathEvent;
import emu.grasscutter.server.packet.send.PacketAddCustomTeamRsp;
import emu.grasscutter.server.packet.send.PacketAddBackupAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketAvatarDieAnimationEndRsp;
import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify;
import emu.grasscutter.server.packet.send.PacketAvatarLifeStateChangeNotify;
import emu.grasscutter.server.packet.send.PacketAvatarTeamAllDataNotify;
import emu.grasscutter.server.packet.send.PacketAvatarTeamUpdateNotify;
import emu.grasscutter.server.packet.send.PacketChangeAvatarRsp;
import emu.grasscutter.server.packet.send.PacketChangeMpTeamAvatarRsp;
import emu.grasscutter.server.packet.send.PacketChangeTeamNameRsp;
import emu.grasscutter.server.packet.send.PacketChooseCurAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketCustomTeamListNotify;
import emu.grasscutter.server.packet.send.PacketDelBackupAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketPlayerEnterSceneNotify;
import emu.grasscutter.server.packet.send.PacketRemoveCustomTeamRsp;
import emu.grasscutter.server.packet.send.PacketSceneTeamUpdateNotify;
import emu.grasscutter.server.packet.send.PacketSetUpAvatarTeamRsp;
import emu.grasscutter.server.packet.send.PacketWorldPlayerDieNotify;
@@ -660,7 +660,7 @@ public class TeamManager extends BasePlayerDataManager {
public synchronized void addNewCustomTeam() {
// Sanity check - max number of teams.
if (this.teams.size() == GameConstants.MAX_TEAMS) {
player.sendPacket(new PacketAddCustomTeamRsp(Retcode.RET_FAIL));
player.sendPacket(new PacketAddBackupAvatarTeamRsp(Retcode.RET_FAIL));
return;
}
@@ -677,21 +677,21 @@ public class TeamManager extends BasePlayerDataManager {
this.teams.put(id, new TeamInfo());
// Send packets.
player.sendPacket(new PacketCustomTeamListNotify(player));
player.sendPacket(new PacketAddCustomTeamRsp());
player.sendPacket(new PacketAvatarTeamAllDataNotify(player));
player.sendPacket(new PacketAddBackupAvatarTeamRsp());
}
public synchronized void removeCustomTeam(int id) {
// Check if the target id exists.
if (!this.teams.containsKey(id)) {
player.sendPacket(new PacketRemoveCustomTeamRsp(Retcode.RET_FAIL, id));
player.sendPacket(new PacketDelBackupAvatarTeamRsp(Retcode.RET_FAIL, id));
}
// Remove team.
this.teams.remove(id);
// Send packets.
player.sendPacket(new PacketCustomTeamListNotify(player));
player.sendPacket(new PacketRemoveCustomTeamRsp(id));
player.sendPacket(new PacketAvatarTeamAllDataNotify(player));
player.sendPacket(new PacketDelBackupAvatarTeamRsp(id));
}
}

View File

@@ -37,7 +37,6 @@ import javax.script.Bindings;
import javax.script.CompiledScript;
import javax.script.ScriptException;
import static emu.grasscutter.config.Configuration.SCRIPT;
@Entity(value = "quests", useDiscriminator = false)
public class GameMainQuest {
@@ -356,7 +355,7 @@ public class GameMainQuest {
.setIsFinished(isFinished());
proto.setParentQuestState(getState().getValue())
.setCutsceneEncryptionKey(QuestManager.getQuestKey(parentQuestId));
.setVideoKey(QuestManager.getQuestKey(parentQuestId));
for (GameQuest quest : this.getChildQuests().values()) {
if (quest.getState() != QuestState.QUEST_STATE_UNSTARTED) {
ChildQuest childQuest = ChildQuest.newBuilder()

View File

@@ -4,7 +4,6 @@ import emu.grasscutter.game.CoopRequest;
import emu.grasscutter.game.props.EnterReason;
import emu.grasscutter.game.world.World;
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.player.Player.SceneLoadState;
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;

View File

@@ -122,7 +122,7 @@ public class WorldDataSystem extends BaseGameSystem {
var bossChest = group.searchBossChestInGroup();
if (bossChest.isPresent()) {
builder.setResin(bossChest.get().resin);
builder.setBossChestNum(bossChest.get().take_num);
builder.setMaxBossChestNum(bossChest.get().take_num);
}
}
return builder.build();

File diff suppressed because it is too large Load Diff

View File

@@ -3,9 +3,10 @@ package emu.grasscutter.server.http.dispatch;
import com.google.protobuf.ByteString;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.Grasscutter.ServerRunMode;
import emu.grasscutter.net.proto.QueryRegionListHttpRspOuterClass.QueryRegionListHttpRsp;
import emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp;
import emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo;
import emu.grasscutter.net.proto.RegionSimpleInfoOuterClass.RegionSimpleInfo;
import emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo;
import emu.grasscutter.server.event.dispatch.QueryAllRegionsEvent;
import emu.grasscutter.server.event.dispatch.QueryCurrentRegionEvent;
import emu.grasscutter.server.http.Router;
@@ -23,7 +24,6 @@ import java.security.Signature;
import java.util.regex.Pattern;
import static emu.grasscutter.config.Configuration.*;
import static emu.grasscutter.net.proto.QueryRegionListHttpRspOuterClass.QueryRegionListHttpRsp;
/**
* Handles requests related to region queries.

View File

@@ -5,8 +5,8 @@ import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.server.game.GameSession;
@Opcodes(PacketOpcodes.AddCustomTeamReq)
public class HandlerAddCustomTeamReq extends PacketHandler {
@Opcodes(PacketOpcodes.AddBackupAvatarTeamReq)
public class HandlerAddBackupAvatarTeamReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.getPlayer().getTeamManager().addNewCustomTeam();

View File

@@ -1,26 +0,0 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.Unk2700BEDLIGJANCJClientReq;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketChangeHomeBgmNotify;
import emu.grasscutter.server.packet.send.PacketChangeHomeBgmRsp;
@Opcodes(PacketOpcodes.Unk2700_BEDLIGJANCJ_ClientReq)
public class HandlerChangeHomeBgmReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = Unk2700BEDLIGJANCJClientReq.Unk2700_BEDLIGJANCJ_ClientReq.parseFrom(payload);
int homeBgmId = req.getUnk2700BJHAMKKECEI();
var home = session.getPlayer().getHome();
home.getHomeSceneItem(session.getPlayer().getSceneId()).setHomeBgmId(homeBgmId);
home.save();
session.send(new PacketChangeHomeBgmNotify(homeBgmId));
session.send(new PacketChangeHomeBgmRsp());
}
}

View File

@@ -2,15 +2,15 @@ package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RemoveCustomTeamReqOuterClass.RemoveCustomTeamReq;
import emu.grasscutter.net.proto.DelBackupAvatarTeamReqOuterClass.DelBackupAvatarTeamReq;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.server.game.GameSession;
@Opcodes(PacketOpcodes.RemoveCustomTeamReq)
public class HandlerRemoveCustomTeamReq extends PacketHandler {
@Opcodes(PacketOpcodes.DelBackupAvatarTeamReq)
public class HandlerDelBackupAvatarTeamReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
RemoveCustomTeamReq req = RemoveCustomTeamReq.parseFrom(payload);
session.getPlayer().getTeamManager().removeCustomTeam(req.getId());
DelBackupAvatarTeamReq req = DelBackupAvatarTeamReq.parseFrom(payload);
session.getPlayer().getTeamManager().removeCustomTeam(req.getBackupAvatarTeamId());
}
}

View File

@@ -1,21 +0,0 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireWorkReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketFireworkNotify;
import emu.grasscutter.server.packet.send.PacketFireworkRsp;
@Opcodes(PacketOpcodes.FireworkReq)
public class HandlerFireWorkReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req
= FireWorkReqOuterClass.FireWorkReq.parseFrom(payload);
session.send(new PacketFireworkNotify(req.getFireWorkData()));
session.send(new PacketFireworkRsp());
}
}

View File

@@ -1,23 +0,0 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireworkSetReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketFireworkSetNotify;
import emu.grasscutter.server.packet.send.PacketFireworkSetRsp;
@Opcodes(PacketOpcodes.FireworkSetReq)
public class HandlerFireworkSetReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req
= FireworkSetReqOuterClass.FireworkSetReq.parseFrom(payload);
session.send(new PacketFireworkSetNotify(req.getData()));
session.send(new PacketFireworkSetRsp());
}
}

View File

@@ -16,6 +16,6 @@ public class HandlerGetAllMailReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
GetAllMailReqOuterClass.GetAllMailReq req = GetAllMailReqOuterClass.GetAllMailReq.parseFrom(payload);
session.send(new PacketGetAllMailRsp(session.getPlayer(), req.getUnk2700OPEHLDAGICF()));
session.send(new PacketGetAllMailRsp(session.getPlayer(), req.getIsCollected()));
}
}

View File

@@ -106,7 +106,7 @@ public class HandlerGetPlayerTokenReq extends PacketHandler {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, Crypto.CUR_SIGNING_KEY);
var client_seed_encrypted = Utils.base64Decode(req.getClientSeed());
var client_seed_encrypted = Utils.base64Decode(req.getClientRandKey());
var client_seed = ByteBuffer.wrap(cipher.doFinal(client_seed_encrypted))
.getLong();
@@ -124,7 +124,7 @@ public class HandlerGetPlayerTokenReq extends PacketHandler {
session.send(new PacketGetPlayerTokenRsp(session, Utils.base64Encode(seed_encrypted), Utils.base64Encode(privateSignature.sign())));
} catch (Exception ignore) {
// Only UA Patch users will have exception
byte[] clientBytes = Utils.base64Decode(req.getClientSeed());
byte[] clientBytes = Utils.base64Decode(req.getClientRandKey());
byte[] seed = ByteHelper.longToBytes(Crypto.ENCRYPT_SEED);
Crypto.xor(clientBytes, seed);

View File

@@ -0,0 +1,26 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeChangeBgmReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketHomeChangeBgmNotify;
import emu.grasscutter.server.packet.send.PacketHomeChangeBgmRsp;
@Opcodes(PacketOpcodes.HomeChangeBgmReq)
public class HandlerHomeChangeBgmReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = HomeChangeBgmReqOuterClass.HomeChangeBgmReq.parseFrom(payload);
int homeBgmId = req.getBgmId();
var home = session.getPlayer().getHome();
home.getHomeSceneItem(session.getPlayer().getSceneId()).setHomeBgmId(homeBgmId);
home.save();
session.send(new PacketHomeChangeBgmNotify(homeBgmId));
session.send(new PacketHomeChangeBgmRsp());
}
}

View File

@@ -9,12 +9,12 @@ import emu.grasscutter.server.packet.send.*;
@Opcodes(PacketOpcodes.HomeChangeEditModeReq)
public class HandlerHomeChangeEditModeReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = HomeChangeEditModeReqOuterClass.HomeChangeEditModeReq.parseFrom(payload);
session.send(new PacketHomeUnknown1Notify(req.getIsEnterEditMode()));
session.send(new PacketHomePreChangeEditModeNotify(req.getIsEnterEditMode()));
session.send(new PacketHomeBasicInfoNotify(session.getPlayer(), req.getIsEnterEditMode()));
session.send(new PacketHomeComfortInfoNotify(session.getPlayer()));

View File

@@ -4,17 +4,17 @@ import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketHomeUnknown2Rsp;
import emu.grasscutter.server.packet.send.PacketHomeEnterEditModeFinishRsp;
@Opcodes(PacketOpcodes.Unk2700_ACILPONNGGK_ClientReq)
public class HandlerHomeUnknown2Req extends PacketHandler {
@Opcodes(PacketOpcodes.HomeEnterEditModeFinishReq)
public class HandlerHomeEnterEditModeFinishReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
/*
* This packet is about the edit mode
*/
session.send(new PacketHomeUnknown2Rsp());
session.send(new PacketHomeEnterEditModeFinishRsp());
}
}

View File

@@ -0,0 +1,23 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.LaunchFireworksReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketFireworksLaunchDataNotify;
import emu.grasscutter.server.packet.send.PacketLaunchFireworksRsp;
@Opcodes(PacketOpcodes.LaunchFireworksReq)
public class HandlerLaunchFireworksReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req
= LaunchFireworksReqOuterClass.LaunchFireworksReq.parseFrom(payload);
session.send(new PacketFireworksLaunchDataNotify(req.getSchemeData()));
session.send(new PacketLaunchFireworksRsp());
}
}

View File

@@ -1,66 +1,66 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.database.DatabaseHelper;
import emu.grasscutter.game.activity.musicgame.MusicGameActivityHandler;
import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
import emu.grasscutter.game.activity.musicgame.MusicGamePlayerData;
import emu.grasscutter.game.props.ActivityType;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameCreateBeatmapReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketActivityInfoNotify;
import emu.grasscutter.server.packet.send.PacketMusicGameCreateBeatmapRsp;
import emu.grasscutter.utils.Utils;
import java.util.Objects;
@Opcodes(PacketOpcodes.MusicGameCreateBeatmapReq)
public class HandlerMusicGameCreateBeatmapReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameCreateBeatmapReqOuterClass.MusicGameCreateBeatmapReq.parseFrom(payload);
var musicGameBeatmap = MusicGameBeatmap.of()
.musicId(req.getMusicBriefInfo().getMusicId())
.musicNoteCount(req.getMusicBriefInfo().getMusicNoteCount())
.savePosition(req.getMusicBriefInfo().getPosition())
.maxScore(req.getMusicBriefInfo().getMaxScore())
.authorUid(session.getPlayer().getUid())
.beatmap(MusicGameBeatmap.parse(req.getMusicRecord().getBeatmapItemListList()))
.createTime(Utils.getCurrentSeconds())
.build();
musicGameBeatmap.save();
var playerData = session.getPlayer().getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_MUSIC_GAME);
if(playerData.isEmpty()){
return;
}
var handler = (MusicGameActivityHandler) playerData.get().getActivityHandler();
var musicGamePlayerData = handler.getMusicGamePlayerData(playerData.get());
var oldBeatmap = musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
.map(MusicGamePlayerData.CustomBeatmapRecord::getMusicShareId)
.map(DatabaseHelper::getMusicGameBeatmap)
.filter(Objects::nonNull)
.filter(item -> item.getAuthorUid() == session.getPlayer().getUid())
.filter(item -> item.getMusicId() == req.getMusicBriefInfo().getMusicId())
.filter(item -> item.getSavePosition() == req.getMusicBriefInfo().getPosition())
.findFirst();
// delete old beatmap for player
// the old beatmap is still in database so that others can still play.
oldBeatmap.ifPresent(i -> handler.removePersonalBeatmap(playerData.get(), i));
// link this beatmap to player's personal data
handler.addPersonalBeatmap(playerData.get(), musicGameBeatmap);
session.send(new PacketActivityInfoNotify(handler.toProto(playerData.get())));
session.send(new PacketMusicGameCreateBeatmapRsp(musicGameBeatmap.getMusicShareId(), req.getUnknownEnum1()));
}
}
//package emu.grasscutter.server.packet.recv;
//
//import emu.grasscutter.database.DatabaseHelper;
//import emu.grasscutter.game.activity.musicgame.MusicGameActivityHandler;
//import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
//import emu.grasscutter.game.activity.musicgame.MusicGamePlayerData;
//import emu.grasscutter.game.props.ActivityType;
//import emu.grasscutter.net.packet.Opcodes;
//import emu.grasscutter.net.packet.PacketHandler;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameCreateBeatmapReqOuterClass;
//import emu.grasscutter.server.game.GameSession;
//import emu.grasscutter.server.packet.send.PacketActivityInfoNotify;
//import emu.grasscutter.server.packet.send.PacketMusicGameCreateBeatmapRsp;
//import emu.grasscutter.utils.Utils;
//
//import java.util.Objects;
//
//@Opcodes(PacketOpcodes.MusicGameCreateBeatmapReq)
//public class HandlerMusicGameCreateBeatmapReq extends PacketHandler {
//
// @Override
// public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
// var req = MusicGameCreateBeatmapReqOuterClass.MusicGameCreateBeatmapReq.parseFrom(payload);
//
// var musicGameBeatmap = MusicGameBeatmap.of()
// .musicId(req.getMusicBriefInfo().getMusicId())
// .musicNoteCount(req.getMusicBriefInfo().getMusicNoteCount())
// .savePosition(req.getMusicBriefInfo().getPosition())
// .maxScore(req.getMusicBriefInfo().getMaxScore())
// .authorUid(session.getPlayer().getUid())
// .beatmap(MusicGameBeatmap.parse(req.getMusicRecord().getBeatmapItemListList()))
// .createTime(Utils.getCurrentSeconds())
// .build();
//
// musicGameBeatmap.save();
//
// var playerData = session.getPlayer().getActivityManager().getPlayerActivityDataByActivityType(ActivityType.NEW_ACTIVITY_MUSIC_GAME);
// if(playerData.isEmpty()){
// return;
// }
//
// var handler = (MusicGameActivityHandler) playerData.get().getActivityHandler();
// var musicGamePlayerData = handler.getMusicGamePlayerData(playerData.get());
//
// var oldBeatmap = musicGamePlayerData.getPersonalCustomBeatmapRecord().values().stream()
// .map(MusicGamePlayerData.CustomBeatmapRecord::getMusicShareId)
// .map(DatabaseHelper::getMusicGameBeatmap)
// .filter(Objects::nonNull)
// .filter(item -> item.getAuthorUid() == session.getPlayer().getUid())
// .filter(item -> item.getMusicId() == req.getMusicBriefInfo().getMusicId())
// .filter(item -> item.getSavePosition() == req.getMusicBriefInfo().getPosition())
// .findFirst();
//
// // delete old beatmap for player
// // the old beatmap is still in database so that others can still play.
// oldBeatmap.ifPresent(i -> handler.removePersonalBeatmap(playerData.get(), i));
//
// // link this beatmap to player's personal data
// handler.addPersonalBeatmap(playerData.get(), musicGameBeatmap);
//
// session.send(new PacketActivityInfoNotify(handler.toProto(playerData.get())));
// session.send(new PacketMusicGameCreateBeatmapRsp(musicGameBeatmap.getMusicShareId(), req.getUnknownEnum1()));
// }
//
//}

View File

@@ -1,31 +1,31 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameGetBeatmapRsp;
@Opcodes(PacketOpcodes.MusicGameGetBeatmapReq)
public class HandlerMusicGameGetBeatmapReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq.parseFrom(payload);
var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
if(musicGameBeatmap == null){
return;
}
session.send(new PacketMusicGameGetBeatmapRsp(
musicGameBeatmap.toBriefProto().build(),
musicGameBeatmap.toProto(),
req
));
}
}
//package emu.grasscutter.server.packet.recv;
//
//import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
//import emu.grasscutter.net.packet.Opcodes;
//import emu.grasscutter.net.packet.PacketHandler;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
//import emu.grasscutter.server.game.GameSession;
//import emu.grasscutter.server.packet.send.PacketMusicGameGetBeatmapRsp;
//
//@Opcodes(PacketOpcodes.MusicGameGetBeatmapReq)
//public class HandlerMusicGameGetBeatmapReq extends PacketHandler {
//
// @Override
// public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
// var req = MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq.parseFrom(payload);
//
// var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
//
// if(musicGameBeatmap == null){
// return;
// }
//
// session.send(new PacketMusicGameGetBeatmapRsp(
// musicGameBeatmap.toBriefProto().build(),
// musicGameBeatmap.toProto(),
// req
// ));
// }
//
//}

View File

@@ -1,28 +1,28 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameSearchBeatmapReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameSearchBeatmapRsp;
@Opcodes(PacketOpcodes.MusicGameSearchBeatmapReq)
public class HandlerMusicGameSearchBeatmapReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameSearchBeatmapReqOuterClass.MusicGameSearchBeatmapReq.parseFrom(payload);
var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
if(musicGameBeatmap == null){
session.send(new PacketMusicGameSearchBeatmapRsp(11153, req.getUnknownEnum1()));
return;
}
session.send(new PacketMusicGameSearchBeatmapRsp(musicGameBeatmap.toBriefProto().build(), req.getUnknownEnum1()));
}
}
//package emu.grasscutter.server.packet.recv;
//
//import emu.grasscutter.game.activity.musicgame.MusicGameBeatmap;
//import emu.grasscutter.net.packet.Opcodes;
//import emu.grasscutter.net.packet.PacketHandler;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameSearchBeatmapReqOuterClass;
//import emu.grasscutter.server.game.GameSession;
//import emu.grasscutter.server.packet.send.PacketMusicGameSearchBeatmapRsp;
//
//@Opcodes(PacketOpcodes.MusicGameSearchBeatmapReq)
//public class HandlerMusicGameSearchBeatmapReq extends PacketHandler {
//
// @Override
// public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
// var req = MusicGameSearchBeatmapReqOuterClass.MusicGameSearchBeatmapReq.parseFrom(payload);
//
// var musicGameBeatmap = MusicGameBeatmap.getByShareId(req.getMusicShareId());
//
// if(musicGameBeatmap == null){
// session.send(new PacketMusicGameSearchBeatmapRsp(11153, req.getUnknownEnum1()));
// return;
// }
//
// session.send(new PacketMusicGameSearchBeatmapRsp(musicGameBeatmap.toBriefProto().build(), req.getUnknownEnum1()));
// }
//
//}

View File

@@ -27,12 +27,7 @@ public class HandlerMusicGameSettleReq extends PacketHandler {
boolean isNewRecord = false;
// check if custom beatmap
// TODO: PROTO IS OBFUSCATED, NEED TO GET PROPER VALUES.
// Discovered: 23/08/2022.
// Probably was an issue in 2.8 but was discovered in 3.0 port.
// - Benj
/*if (req.getMusicShareId() == 0) {
if (req.getUgcGuid() == 0) {
session.getPlayer().getActivityManager().triggerWatcher(
WatcherTriggerType.TRIGGER_FLEUR_FAIR_MUSIC_GAME_REACH_SCORE,
String.valueOf(req.getMusicBasicId()),
@@ -51,14 +46,14 @@ public class HandlerMusicGameSettleReq extends PacketHandler {
}else {
handler.setMusicGameCustomBeatmapRecord(playerData.get(),
MusicGamePlayerData.CustomBeatmapRecord.of()
.musicShareId(req.getMusicShareId())
.musicShareId(req.getUgcGuid())
.score(req.getMaxCombo())
.settle(req.getSuccess())
// .settle(req.getSuccess())
.build());
}
session.send(new PacketMusicGameSettleRsp(req.getMusicBasicId(), req.getMusicShareId(), isNewRecord));*/
session.send(new PacketMusicGameSettleRsp(req.getMusicBasicId(), req.getUgcGuid(), isNewRecord));
}
}

View File

@@ -14,7 +14,7 @@ public class HandlerMusicGameStartReq extends PacketHandler {
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameStartReqOuterClass.MusicGameStartReq.parseFrom(payload);
session.send(new PacketMusicGameStartRsp(req.getMusicBasicId(), req.getMusicShareId()));
session.send(new PacketMusicGameStartRsp(req.getMusicBasicId(), req.getUgcGuid()));
}
}

View File

@@ -1,20 +1,20 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameStartToPlayOthersBeatmapReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameStartToPlayOthersBeatmapRsp;
@Opcodes(PacketOpcodes.MusicGameStartToPlayOthersBeatmapReq)
public class HandlerMusicGameStartToPlayOthersBeatmapReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameStartToPlayOthersBeatmapReqOuterClass.MusicGameStartToPlayOthersBeatmapReq.parseFrom(payload);
session.send(new PacketMusicGameStartToPlayOthersBeatmapRsp(req.getUnknownEnum1()));
}
}
//package emu.grasscutter.server.packet.recv;
//
//import emu.grasscutter.net.packet.Opcodes;
//import emu.grasscutter.net.packet.PacketHandler;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameStartToPlayOthersBeatmapReqOuterClass;
//import emu.grasscutter.server.game.GameSession;
//import emu.grasscutter.server.packet.send.PacketMusicGameStartToPlayOthersBeatmapRsp;
//
//@Opcodes(PacketOpcodes.MusicGameStartToPlayOthersBeatmapReq)
//public class HandlerMusicGameStartToPlayOthersBeatmapReq extends PacketHandler {
//
// @Override
// public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
// var req = MusicGameStartToPlayOthersBeatmapReqOuterClass.MusicGameStartToPlayOthersBeatmapReq.parseFrom(payload);
//
// session.send(new PacketMusicGameStartToPlayOthersBeatmapRsp(req.getUnknownEnum1()));
// }
//
//}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ReformFireworksReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketFireworksReformDataNotify;
import emu.grasscutter.server.packet.send.PacketReformFireworksRsp;
@Opcodes(PacketOpcodes.ReformFireworksReq)
public class HandlerReformFireworksReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req
= ReformFireworksReqOuterClass.ReformFireworksReq.parseFrom(payload);
session.send(new PacketFireworksReformDataNotify(req.getFireworksReformData()));
session.send(new PacketReformFireworksRsp());
}
}

View File

@@ -0,0 +1,22 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.AddBackupAvatarTeamRspOuterClass.AddBackupAvatarTeamRsp;
public class PacketAddBackupAvatarTeamRsp extends BasePacket {
public PacketAddBackupAvatarTeamRsp(Retcode retcode) {
super(PacketOpcodes.AddBackupAvatarTeamRsp);
AddBackupAvatarTeamRsp proto = AddBackupAvatarTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.build();
this.setData(proto);
}
public PacketAddBackupAvatarTeamRsp() {
this(Retcode.RET_SUCC);
}
}

View File

@@ -1,22 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.AddCustomTeamRspOuterClass.AddCustomTeamRsp;
public class PacketAddCustomTeamRsp extends BasePacket {
public PacketAddCustomTeamRsp(Retcode retcode) {
super(PacketOpcodes.AddCustomTeamRsp);
AddCustomTeamRsp proto = AddCustomTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.build();
this.setData(proto);
}
public PacketAddCustomTeamRsp() {
this(Retcode.RET_SUCC);
}
}

View File

@@ -23,7 +23,7 @@ public class PacketAllWidgetDataNotify extends BasePacket {
LunchBoxDataOuterClass.LunchBoxData.newBuilder().build()
)
// Maybe it's a little difficult, or it makes you upset :(
.addAllOneofGatherPointDetectorDataList(List.of())
.addAllOneoffGatherPointDetectorDataList(List.of())
// So, goodbye, and hopefully sometime in the future o(* ̄▽ ̄*)ブ
.addAllCoolDownGroupDataList(List.of())
// I'll see your PR with a title that says (・∀・(・∀・(・∀・*)

View File

@@ -13,7 +13,7 @@ public class PacketAvatarDataNotify extends BasePacket {
AvatarDataNotify.Builder proto = AvatarDataNotify.newBuilder()
.setCurAvatarTeamId(player.getTeamManager().getCurrentTeamId())
//.setChooseAvatarGuid(player.getTeamManager().getCurrentCharacterGuid())
.setChooseAvatarGuid(player.getTeamManager().getCurrentCharacterGuid())
.addAllOwnedFlycloakList(player.getFlyCloakList())
.addAllOwnedCostumeList(player.getCostumeList());
@@ -22,7 +22,7 @@ public class PacketAvatarDataNotify extends BasePacket {
player.getTeamManager().getTeams().forEach((id, teamInfo) -> {
proto.putAvatarTeamMap(id, teamInfo.toProto(player));
if (id > 4) { // Add the id list for custom teams.
proto.addCustomTeamIds(id);
proto.addBackupAvatarTeamOrderList(id);
}
});

View File

@@ -3,18 +3,18 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.CustomTeamListNotifyOuterClass.CustomTeamListNotify;
import emu.grasscutter.net.proto.AvatarTeamAllDataNotifyOuterClass.AvatarTeamAllDataNotify;
public class PacketCustomTeamListNotify extends BasePacket {
public PacketCustomTeamListNotify(Player player) {
super(PacketOpcodes.CustomTeamListNotify);
public class PacketAvatarTeamAllDataNotify extends BasePacket {
public PacketAvatarTeamAllDataNotify(Player player) {
super(PacketOpcodes.AvatarTeamAllDataNotify);
CustomTeamListNotify.Builder proto = CustomTeamListNotify.newBuilder();
AvatarTeamAllDataNotify.Builder proto = AvatarTeamAllDataNotify.newBuilder();
// Add the id list for custom teams.
for (int id : player.getTeamManager().getTeams().keySet()) {
if (id > 4) {
proto.addCustomTeamIds(id);
proto.addBackupAvatarTeamOrderList(id);
}
}

View File

@@ -1,17 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.Unk2700FJEHHCPCBLGServerNotify;
public class PacketChangeHomeBgmNotify extends BasePacket {
public PacketChangeHomeBgmNotify(int homeBgmId) {
super(PacketOpcodes.Unk2700_FJEHHCPCBLG_ServerNotify);
var notify = Unk2700FJEHHCPCBLGServerNotify.Unk2700_FJEHHCPCBLG_ServerNotify.newBuilder()
.setUnk2700BJHAMKKECEI(homeBgmId)
.build();
this.setData(notify);
}
}

View File

@@ -1,17 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.Unk2700OGHMHELMBNNServerRsp;
public class PacketChangeHomeBgmRsp extends BasePacket {
public PacketChangeHomeBgmRsp() {
super(PacketOpcodes.Unk2700_OGHMHELMBNN_ServerRsp);
var rsp = Unk2700OGHMHELMBNNServerRsp.Unk2700_OGHMHELMBNN_ServerRsp.newBuilder()
.setRetcode(0)
.build();
this.setData(rsp);
}
}

View File

@@ -14,7 +14,7 @@ public class PacketCompoundDataNotify extends BasePacket {
super(PacketOpcodes.CompoundDataNotify);
var proto= CompoundDataNotify.newBuilder()
.addAllUnlockCompoundList(unlockedCompounds)
.addAllCompoundQueDataList(compoundQueueData)
.addAllCompoundQueueDataList(compoundQueueData)
.build();
this.setData(proto);
}

View File

@@ -0,0 +1,23 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.DelBackupAvatarTeamRspOuterClass.DelBackupAvatarTeamRsp;
public class PacketDelBackupAvatarTeamRsp extends BasePacket {
public PacketDelBackupAvatarTeamRsp(Retcode retcode, int id) {
super(PacketOpcodes.DelBackupAvatarTeamRsp);
DelBackupAvatarTeamRsp proto = DelBackupAvatarTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.setBackupAvatarTeamId(id)
.build();
this.setData(proto);
}
public PacketDelBackupAvatarTeamRsp(int id) {
this(Retcode.RET_SUCC, id);
}
}

View File

@@ -12,27 +12,27 @@ import emu.grasscutter.net.proto.PropChangeReasonOuterClass.PropChangeReason;
import java.util.List;
public class PacketEntityFightPropChangeReasonNotify extends BasePacket {
public PacketEntityFightPropChangeReasonNotify(GameEntity entity, FightProperty prop, Float value, List<Integer> param, PropChangeReason reason, ChangeHpReason changeHpReason) {
super(PacketOpcodes.EntityFightPropChangeReasonNotify);
EntityFightPropChangeReasonNotify.Builder proto = EntityFightPropChangeReasonNotify.newBuilder()
.setEntityId(entity.getId())
.setPropType(prop.getId())
.setPropDelta(value)
.setReason(reason)
.setChangeHpReason(changeHpReason);
for(int p : param){
proto.addParamList(p);
}
this.setData(proto);
}
public PacketEntityFightPropChangeReasonNotify(GameEntity entity, FightProperty prop, Float value, PropChangeReason reason, ChangeHpReason changeHpReason) {
super(PacketOpcodes.EntityFightPropChangeReasonNotify);
EntityFightPropChangeReasonNotify proto = EntityFightPropChangeReasonNotify.newBuilder()
.setEntityId(entity.getId())
.setPropType(prop.getId())
@@ -40,33 +40,33 @@ public class PacketEntityFightPropChangeReasonNotify extends BasePacket {
.setReason(reason)
.setChangeHpReason(changeHpReason)
.build();
this.setData(proto);
}
public PacketEntityFightPropChangeReasonNotify(GameEntity entity, FightProperty prop, Float value, PropChangeReason reason) {
super(PacketOpcodes.EntityFightPropChangeReasonNotify);
EntityFightPropChangeReasonNotify proto = EntityFightPropChangeReasonNotify.newBuilder()
.setEntityId(entity.getId())
.setPropType(prop.getId())
.setPropDelta(value)
.setReason(reason)
.build();
this.setData(proto);
}
public PacketEntityFightPropChangeReasonNotify(GameEntity entity, FightProperty prop, Float value, ChangeEnergyReason reason) {
super(PacketOpcodes.EntityFightPropChangeReasonNotify);
EntityFightPropChangeReasonNotify proto = EntityFightPropChangeReasonNotify.newBuilder()
.setEntityId(entity.getId())
.setPropType(prop.getId())
.setPropDelta(value)
.setChangeEnergyReson(reason)
.setChangeEnergyReason(reason)
.build();
this.setData(proto);
}
}

View File

@@ -1,21 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireWorkNotifyOuterClass;
import emu.grasscutter.net.proto.FireWorkDataOuterClass;
public class PacketFireworkNotify extends BasePacket {
public PacketFireworkNotify(FireWorkDataOuterClass.FireWorkData pinfo) {
super(PacketOpcodes.FireworkNotify);
var proto
= FireWorkNotifyOuterClass.FireWorkNotify.newBuilder();
proto.addFireWorkData(pinfo);
setData(proto.build());
}
}

View File

@@ -1,12 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
public class PacketFireworkRsp extends BasePacket {
public PacketFireworkRsp() {
super(PacketOpcodes.FireworkRsp);
}
}

View File

@@ -1,21 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireworkSetNotifyOuterClass;
import emu.grasscutter.net.proto.FireworkSetDataOuterClass;
public class PacketFireworkSetNotify extends BasePacket {
public PacketFireworkSetNotify(FireworkSetDataOuterClass.FireworkSetData notify) {
super(PacketOpcodes.FireworkSetNotify);
var proto
= FireworkSetNotifyOuterClass.FireworkSetNotify.newBuilder();
proto.setCode(1).addData(notify);
setData(proto.build());
}
}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireworksLaunchDataNotifyOuterClass;
import emu.grasscutter.net.proto.FireworksLaunchSchemeDataOuterClass;
public class PacketFireworksLaunchDataNotify extends BasePacket {
public PacketFireworksLaunchDataNotify(FireworksLaunchSchemeDataOuterClass.FireworksLaunchSchemeData notify) {
super(PacketOpcodes.FireworksLaunchDataNotify);
var proto
= FireworksLaunchDataNotifyOuterClass.FireworksLaunchDataNotify.newBuilder();
proto.setLastUseSchemeId(1).addSchemeDataList(notify);
setData(proto.build());
}
}

View File

@@ -0,0 +1,21 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.FireworksReformDataNotifyOuterClass;
import emu.grasscutter.net.proto.FireworksReformDataOuterClass;
public class PacketFireworksReformDataNotify extends BasePacket {
public PacketFireworksReformDataNotify(FireworksReformDataOuterClass.FireworksReformData fireworksReformData) {
super(PacketOpcodes.FireworksReformDataNotify);
var proto
= FireworksReformDataNotifyOuterClass.FireworksReformDataNotify.newBuilder();
proto.addFireworksReformDataList(fireworksReformData);
setData(proto.build());
}
}

View File

@@ -18,14 +18,14 @@ public class PacketForgeQueueManipulateRsp extends BasePacket {
ForgeQueueManipulateRsp.Builder builder = ForgeQueueManipulateRsp.newBuilder()
.setRetcode(retcode.getNumber())
.setManipulateType(type);
for (GameItem item : output) {
ItemParam toAdd = ItemParam.newBuilder()
.setItemId(item.getItemId())
.setCount(item.getCount())
.build();
builder.addOutputItemList(toAdd);
builder.addExtraOutputItemList(toAdd);
}
for (GameItem item : refund) {
@@ -41,4 +41,4 @@ public class PacketForgeQueueManipulateRsp extends BasePacket {
this.setData(builder.build());
}
}
}

View File

@@ -24,9 +24,9 @@ public class PacketGetAllMailRsp extends BasePacket {
GetAllMailRsp.Builder proto = GetAllMailRsp.newBuilder();
if (isGiftMail) {
proto.setUnk2700OPEHLDAGICF(true);
proto.setIsCollected(true);
} else {
proto.setUnk2700OPEHLDAGICF(false);
proto.setIsCollected(false);
if (player.getAllMail().size() != 0) { // Make sure the player has mail
List<MailData> mailDataList = new ArrayList<MailData>();
@@ -61,7 +61,7 @@ public class PacketGetAllMailRsp extends BasePacket {
mailData.setImportance(message.importance);
mailData.setIsRead(message.isRead);
mailData.setIsAttachmentGot(message.isAttachmentGot);
mailData.setUnk2700NDPPGJKJOMHValue(1);
mailData.setCollectStateValue(1);
mailDataList.add(mailData.build());
}
@@ -70,7 +70,7 @@ public class PacketGetAllMailRsp extends BasePacket {
}
proto.addAllMailList(mailDataList);
proto.setIsTruncated(mailDataList.size() <= 1000 ? false : true); // When enabled this will send a notification to the user telling them their inbox is full and they should delete old messages when opening the mailbox.
proto.setIsTruncated(mailDataList.size() > 1000); // When enabled this will send a notification to the user telling them their inbox is full and they should delete old messages when opening the mailbox.
}
}
this.setData(proto.build());

View File

@@ -14,7 +14,7 @@ public class PacketGetCompoundDataRsp extends BasePacket {
super(PacketOpcodes.GetCompoundDataRsp);
var proto = GetCompoundDataRsp.newBuilder()
.addAllUnlockCompoundList(unlockedCompounds)
.addAllCompoundQueDataList(compoundQueueData)
.addAllCompoundQueueDataList(compoundQueueData)
.setRetcode(Retcode.RET_SUCC_VALUE)
.build();
setData(proto);

View File

@@ -70,8 +70,8 @@ public class PacketGetPlayerTokenRsp extends BasePacket {
.setClientVersionRandomKey("c25-314dd05b0b5f")
.setRegPlatform(3)
.setClientIpStr(session.getAddress().getAddress().getHostAddress())
.setEncryptedSeed(encryptedSeed)
.setSeedSignature(encryptedSeedSign)
.setServerRandKey(encryptedSeed)
.setSign(encryptedSeedSign)
.build();
this.setData(p.toByteArray());

View File

@@ -0,0 +1,24 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeAllUnlockedBgmIdListNotifyOuterClass;
public class PacketHomeAllUnlockedBgmIdListNotify extends BasePacket {
public PacketHomeAllUnlockedBgmIdListNotify(Player player) {
super(PacketOpcodes.HomeAllUnlockedBgmIdListNotify);
if (player.getRealmList() == null) {
return;
}
var unlocked = player.getHome().getUnlockedHomeBgmList();
var notify = HomeAllUnlockedBgmIdListNotifyOuterClass.HomeAllUnlockedBgmIdListNotify.newBuilder()
.addAllAllUnlockedBgmIdList(unlocked)
.build();
this.setData(notify);
}
}

View File

@@ -0,0 +1,17 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeChangeBgmNotifyOuterClass;
public class PacketHomeChangeBgmNotify extends BasePacket {
public PacketHomeChangeBgmNotify(int homeBgmId) {
super(PacketOpcodes.HomeChangeBgmNotify);
var notify = HomeChangeBgmNotifyOuterClass.HomeChangeBgmNotify.newBuilder()
.setBgmId(homeBgmId)
.build();
this.setData(notify);
}
}

View File

@@ -0,0 +1,17 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeChangeBgmRspOuterClass;
public class PacketHomeChangeBgmRsp extends BasePacket {
public PacketHomeChangeBgmRsp() {
super(PacketOpcodes.HomeChangeBgmRsp);
var rsp = HomeChangeBgmRspOuterClass.HomeChangeBgmRsp.newBuilder()
.setRetcode(0)
.build();
this.setData(rsp);
}
}

View File

@@ -0,0 +1,12 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
public class PacketHomeEnterEditModeFinishRsp extends BasePacket {
public PacketHomeEnterEditModeFinishRsp() {
super(PacketOpcodes.HomeEnterEditModeFinishRsp);
}
}

View File

@@ -0,0 +1,17 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeNewUnlockedBgmIdListNotifyOuterClass;
public class PacketHomeNewUnlockedBgmIdListNotify extends BasePacket {
public PacketHomeNewUnlockedBgmIdListNotify(int homeBgmId) {
super(PacketOpcodes.HomeNewUnlockedBgmIdListNotify);
var notify = HomeNewUnlockedBgmIdListNotifyOuterClass.HomeNewUnlockedBgmIdListNotify.newBuilder()
.addNewUnlockedBgmIdList(homeBgmId)
.build();
this.setData(notify);
}
}

View File

@@ -0,0 +1,18 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomePreChangeEditModeNotifyOuterClass;
public class PacketHomePreChangeEditModeNotify extends BasePacket {
public PacketHomePreChangeEditModeNotify(boolean isEnterEditMode) {
super(PacketOpcodes.HomePreChangeEditModeNotify);
var proto = HomePreChangeEditModeNotifyOuterClass.HomePreChangeEditModeNotify.newBuilder();
proto.setIsEnterEditMode(isEnterEditMode);
this.setData(proto);
}
}

View File

@@ -1,18 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.HomeUnknown1NotifyOuterClass;
public class PacketHomeUnknown1Notify extends BasePacket {
public PacketHomeUnknown1Notify(boolean isEnterEditMode) {
super(PacketOpcodes.Unk2700_JDMPECKFGIG_ServerNotify);
var proto = HomeUnknown1NotifyOuterClass.HomeUnknown1Notify.newBuilder();
proto.setIsEnterEditMode(isEnterEditMode);
this.setData(proto);
}
}

View File

@@ -1,12 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
public class PacketHomeUnknown2Rsp extends BasePacket {
public PacketHomeUnknown2Rsp() {
super(PacketOpcodes.Unk2700_KIIOGMKFNNP_ServerRsp);
}
}

View File

@@ -3,10 +3,10 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
public class PacketFireworkSetRsp extends BasePacket {
public class PacketLaunchFireworksRsp extends BasePacket {
public PacketFireworkSetRsp() {
super(PacketOpcodes.FireworkSetRsp);
public PacketLaunchFireworksRsp() {
super(PacketOpcodes.LaunchFireworksRsp);
}

View File

@@ -6,7 +6,12 @@ import emu.grasscutter.game.mail.Mail;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.*;
import emu.grasscutter.net.proto.MailChangeNotifyOuterClass.MailChangeNotify;
import emu.grasscutter.net.proto.MailTextContentOuterClass.MailTextContent;
import emu.grasscutter.net.proto.MailItemOuterClass.MailItem;
import emu.grasscutter.net.proto.MailDataOuterClass.MailData;
import emu.grasscutter.net.proto.EquipParamOuterClass.EquipParam;
import java.util.ArrayList;
import java.util.List;
@@ -24,20 +29,20 @@ public class PacketMailChangeNotify extends BasePacket {
public PacketMailChangeNotify(Player player, List<Mail> mailList, List<Integer> delMailIdList) {
super(PacketOpcodes.MailChangeNotify);
MailChangeNotifyOuterClass.MailChangeNotify.Builder proto = MailChangeNotifyOuterClass.MailChangeNotify.newBuilder();
var proto = MailChangeNotify.newBuilder();
if (mailList != null) {
for (Mail message : mailList) {
MailTextContentOuterClass.MailTextContent.Builder mailTextContent = MailTextContentOuterClass.MailTextContent.newBuilder();
var mailTextContent = MailTextContent.newBuilder();
mailTextContent.setTitle(message.mailContent.title);
mailTextContent.setContent(message.mailContent.content);
mailTextContent.setSender(message.mailContent.sender);
List<MailItemOuterClass.MailItem> mailItems = new ArrayList<MailItemOuterClass.MailItem>();
List<MailItem> mailItems = new ArrayList<>();
for (Mail.MailItem item : message.itemList) {
MailItemOuterClass.MailItem.Builder mailItem = MailItemOuterClass.MailItem.newBuilder();
EquipParamOuterClass.EquipParam.Builder itemParam = EquipParamOuterClass.EquipParam.newBuilder();
var mailItem = MailItem.newBuilder();
var itemParam = EquipParam.newBuilder();
itemParam.setItemId(item.itemId);
itemParam.setItemNum(item.itemCount);
mailItem.setEquipParam(itemParam.build());
@@ -45,7 +50,7 @@ public class PacketMailChangeNotify extends BasePacket {
mailItems.add(mailItem.build());
}
MailDataOuterClass.MailData.Builder mailData = MailDataOuterClass.MailData.newBuilder();
var mailData = MailData.newBuilder();
mailData.setMailId(player.getMailId(message));
mailData.setMailTextContent(mailTextContent.build());
mailData.addAllItemList(mailItems);
@@ -54,7 +59,7 @@ public class PacketMailChangeNotify extends BasePacket {
mailData.setImportance(message.importance);
mailData.setIsRead(message.isRead);
mailData.setIsAttachmentGot(message.isAttachmentGot);
mailData.setUnk2700NDPPGJKJOMHValue(message.stateValue);
mailData.setCollectStateValue(message.stateValue);
proto.addMailList(mailData.build());
}

View File

@@ -3,7 +3,8 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.managers.mapmark.MapMark;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.*;
import emu.grasscutter.net.proto.MarkMapRspOuterClass.MarkMapRsp;
import emu.grasscutter.net.proto.MapMarkPointOuterClass.MapMarkPoint;
import java.util.*;
@@ -12,12 +13,12 @@ public class PacketMarkMapRsp extends BasePacket {
public PacketMarkMapRsp(Map<String, MapMark> mapMarks) {
super(PacketOpcodes.MarkMapRsp);
MarkMapRspOuterClass.MarkMapRsp.Builder proto = MarkMapRspOuterClass.MarkMapRsp.newBuilder();
var proto = MarkMapRsp.newBuilder();
proto.setRetcode(0);
if (mapMarks != null) {
for (MapMark mapMark: mapMarks.values()) {
MapMarkPointOuterClass.MapMarkPoint.Builder markPoint = MapMarkPointOuterClass.MapMarkPoint.newBuilder();
var markPoint = MapMarkPoint.newBuilder();
markPoint.setSceneId(mapMark.getSceneId());
markPoint.setName(mapMark.getName());
markPoint.setPos(mapMark.getPosition().toProto());
@@ -29,8 +30,6 @@ public class PacketMarkMapRsp extends BasePacket {
proto.addMarkList(markPoint.build());
}
}
MarkMapRspOuterClass.MarkMapRsp data = proto.build();
this.setData(data);
this.setData(proto.build());
}
}

View File

@@ -1,25 +1,22 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.*;
import java.util.ArrayList;
import java.util.List;
public class PacketMarkNewNotify extends BasePacket {
public PacketMarkNewNotify(Player player, int markNewType, ArrayList<Integer> idList) {
super(PacketOpcodes.MarkNewNotify);
MarkNewNotifyOuterClass.MarkNewNotify.Builder proto = MarkNewNotifyOuterClass.MarkNewNotify.newBuilder();
proto.setMarkNewType(markNewType);
for (Integer id: idList) {
proto.addIdList(id);
}
MarkNewNotifyOuterClass.MarkNewNotify data = proto.build();
this.setData(data);
}
}
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MarkNewNotifyOuterClass.MarkNewNotify;
import java.util.ArrayList;
import java.util.List;
public class PacketMarkNewNotify extends BasePacket {
public PacketMarkNewNotify(Player player, int markNewType, ArrayList<Integer> idList) {
super(PacketOpcodes.MarkNewNotify);
var proto = MarkNewNotify.newBuilder();
proto.setMarkNewType(markNewType);
proto.addAllIdList(idList);
this.setData(proto.build());
}
}

View File

@@ -1,20 +1,20 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameCreateBeatmapRspOuterClass;
import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
public class PacketMusicGameCreateBeatmapRsp extends BasePacket {
public PacketMusicGameCreateBeatmapRsp(long musicShareId, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
super(PacketOpcodes.MusicGameCreateBeatmapRsp);
var proto = MusicGameCreateBeatmapRspOuterClass.MusicGameCreateBeatmapRsp.newBuilder();
proto.setMusicShareId(musicShareId)
.setUnknownEnum1(unknownEnum1);
this.setData(proto);
}
}
//package emu.grasscutter.server.packet.send;
//
//import emu.grasscutter.net.packet.BasePacket;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameCreateBeatmapRspOuterClass;
//import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
//
//public class PacketMusicGameCreateBeatmapRsp extends BasePacket {
//
// public PacketMusicGameCreateBeatmapRsp(long musicShareId, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
// super(PacketOpcodes.MusicGameCreateBeatmapRsp);
//
// var proto = MusicGameCreateBeatmapRspOuterClass.MusicGameCreateBeatmapRsp.newBuilder();
//
// proto.setMusicShareId(musicShareId)
// .setUnknownEnum1(unknownEnum1);
//
// this.setData(proto);
// }
//}

View File

@@ -1,27 +1,27 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicBeatmapOuterClass;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
import emu.grasscutter.net.proto.MusicGameGetBeatmapRspOuterClass;
public class PacketMusicGameGetBeatmapRsp extends BasePacket {
public PacketMusicGameGetBeatmapRsp(MusicBriefInfoOuterClass.MusicBriefInfo briefInfo, MusicBeatmapOuterClass.MusicBeatmap musicRecord, MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq req) {
super(PacketOpcodes.MusicGameGetBeatmapRsp);
var proto = MusicGameGetBeatmapRspOuterClass.MusicGameGetBeatmapRsp.newBuilder();
proto.setMusicBriefInfo(briefInfo)
.setMusicShareId(briefInfo.getMusicShareId())
.setMusicRecord(musicRecord)
.setUnknownEnum1(req.getUnknownEnum1())
.setReqType(req.getReqType())
;
this.setData(proto);
}
}
//package emu.grasscutter.server.packet.send;
//
//import emu.grasscutter.net.packet.BasePacket;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicBeatmapOuterClass;
//import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
//import emu.grasscutter.net.proto.MusicGameGetBeatmapReqOuterClass;
//import emu.grasscutter.net.proto.MusicGameGetBeatmapRspOuterClass;
//
//public class PacketMusicGameGetBeatmapRsp extends BasePacket {
//
// public PacketMusicGameGetBeatmapRsp(MusicBriefInfoOuterClass.MusicBriefInfo briefInfo, MusicBeatmapOuterClass.MusicBeatmap musicRecord, MusicGameGetBeatmapReqOuterClass.MusicGameGetBeatmapReq req) {
// super(PacketOpcodes.MusicGameGetBeatmapRsp);
//
// var proto = MusicGameGetBeatmapRspOuterClass.MusicGameGetBeatmapRsp.newBuilder();
//
// proto.setMusicBriefInfo(briefInfo)
// .setMusicShareId(briefInfo.getMusicShareId())
// .setMusicRecord(musicRecord)
// .setUnknownEnum1(req.getUnknownEnum1())
// .setReqType(req.getReqType())
// ;
//
//
// this.setData(proto);
// }
//}

View File

@@ -1,34 +1,34 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
import emu.grasscutter.net.proto.MusicGameSearchBeatmapRspOuterClass;
import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
public class PacketMusicGameSearchBeatmapRsp extends BasePacket {
public PacketMusicGameSearchBeatmapRsp(int ret, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
super(PacketOpcodes.MusicGameSearchBeatmapRsp);
var proto = MusicGameSearchBeatmapRspOuterClass.MusicGameSearchBeatmapRsp.newBuilder();
proto.setRetcode(ret)
.setUnknownEnum1(unknownEnum1);
this.setData(proto);
}
public PacketMusicGameSearchBeatmapRsp(MusicBriefInfoOuterClass.MusicBriefInfo briefInfo, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
super(PacketOpcodes.MusicGameSearchBeatmapRsp);
var proto = MusicGameSearchBeatmapRspOuterClass.MusicGameSearchBeatmapRsp.newBuilder();
proto.setMusicBriefInfo(briefInfo)
.setUnknownEnum1(unknownEnum1);
this.setData(proto);
}
}
//package emu.grasscutter.server.packet.send;
//
//import emu.grasscutter.net.packet.BasePacket;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicBriefInfoOuterClass;
//import emu.grasscutter.net.proto.MusicGameSearchBeatmapRspOuterClass;
//import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
//
//public class PacketMusicGameSearchBeatmapRsp extends BasePacket {
//
// public PacketMusicGameSearchBeatmapRsp(int ret, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
// super(PacketOpcodes.MusicGameSearchBeatmapRsp);
//
// var proto = MusicGameSearchBeatmapRspOuterClass.MusicGameSearchBeatmapRsp.newBuilder();
//
// proto.setRetcode(ret)
// .setUnknownEnum1(unknownEnum1);
//
// this.setData(proto);
// }
//
// public PacketMusicGameSearchBeatmapRsp(MusicBriefInfoOuterClass.MusicBriefInfo briefInfo, MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
// super(PacketOpcodes.MusicGameSearchBeatmapRsp);
//
// var proto = MusicGameSearchBeatmapRspOuterClass.MusicGameSearchBeatmapRsp.newBuilder();
//
// proto.setMusicBriefInfo(briefInfo)
// .setUnknownEnum1(unknownEnum1);
//
// this.setData(proto);
// }
//
//
//}

View File

@@ -12,7 +12,7 @@ public class PacketMusicGameSettleRsp extends BasePacket {
var proto = MusicGameSettleRspOuterClass.MusicGameSettleRsp.newBuilder();
proto.setMusicBasicId(musicBasicId)
.setMusicShareId(musicShareId)
.setUgcGuid(musicShareId)
.setIsNewRecord(isNewRecord);
this.setData(proto);

View File

@@ -12,7 +12,7 @@ public class PacketMusicGameStartRsp extends BasePacket {
var proto = MusicGameStartRspOuterClass.MusicGameStartRsp.newBuilder();
proto.setMusicBasicId(musicBasicId)
.setMusicShareId(musicShareId);
.setUgcGuid(musicShareId);
this.setData(proto);
}

View File

@@ -1,19 +1,19 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameStartToPlayOthersBeatmapRspOuterClass;
import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
public class PacketMusicGameStartToPlayOthersBeatmapRsp extends BasePacket {
public PacketMusicGameStartToPlayOthersBeatmapRsp(MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
super(PacketOpcodes.MusicGameStartToPlayOthersBeatmapRsp);
var proto = MusicGameStartToPlayOthersBeatmapRspOuterClass.MusicGameStartToPlayOthersBeatmapRsp.newBuilder();
proto.setUnknownEnum1(unknownEnum1);
this.setData(proto);
}
}
//package emu.grasscutter.server.packet.send;
//
//import emu.grasscutter.net.packet.BasePacket;
//import emu.grasscutter.net.packet.PacketOpcodes;
//import emu.grasscutter.net.proto.MusicGameStartToPlayOthersBeatmapRspOuterClass;
//import emu.grasscutter.net.proto.MusicGameUnknown1EnumOuterClass;
//
//public class PacketMusicGameStartToPlayOthersBeatmapRsp extends BasePacket {
//
// public PacketMusicGameStartToPlayOthersBeatmapRsp(MusicGameUnknown1EnumOuterClass.MusicGameUnknown1Enum unknownEnum1) {
// super(PacketOpcodes.MusicGameStartToPlayOthersBeatmapRsp);
//
// var proto = MusicGameStartToPlayOthersBeatmapRspOuterClass.MusicGameStartToPlayOthersBeatmapRsp.newBuilder();
//
// proto.setUnknownEnum1(unknownEnum1);
//
// this.setData(proto);
// }
//}

View File

@@ -3,12 +3,11 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify;
public class PacketPlayerApplyEnterMpResultNotify extends BasePacket {
public PacketPlayerApplyEnterMpResultNotify(Player target, boolean isAgreed, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason reason) {
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
@@ -18,10 +17,10 @@ public class PacketPlayerApplyEnterMpResultNotify extends BasePacket {
.setIsAgreed(isAgreed)
.setReason(reason)
.build();
this.setData(proto);
}
public PacketPlayerApplyEnterMpResultNotify(int targetId, String targetName, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) {
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
@@ -31,7 +30,7 @@ public class PacketPlayerApplyEnterMpResultNotify extends BasePacket {
.setIsAgreed(isAgreed)
.setReason(reason)
.build();
this.setData(proto);
}
}

View File

@@ -5,58 +5,57 @@ import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ChatInfoOuterClass.ChatInfo;
import emu.grasscutter.net.proto.PlayerChatNotifyOuterClass.PlayerChatNotify;
import emu.grasscutter.net.proto.SystemHintOuterClass.SystemHint;
public class PacketPlayerChatNotify extends BasePacket {
public PacketPlayerChatNotify(Player sender, int channelId, String message) {
super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid())
.setText(message)
.build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId)
.setChatInfo(info)
.build();
this.setData(proto);
}
public PacketPlayerChatNotify(Player sender, int channelId, int emote) {
super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid())
.setIcon(emote)
.build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId)
.setChatInfo(info)
.build();
this.setData(proto);
}
public PacketPlayerChatNotify(Player sender, int channelId, ChatInfo.SystemHint systemHint) {
super(PacketOpcodes.PlayerChatNotify);
ChatInfo info = ChatInfo.newBuilder()
.setTime((int) (System.currentTimeMillis() / 1000))
.setUid(sender.getUid())
.setSystemHint(systemHint)
.build();
PlayerChatNotify proto = PlayerChatNotify.newBuilder()
.setChannelId(channelId)
.setChatInfo(info)
.build();
this.setData(proto);
}
}

View File

@@ -15,7 +15,7 @@ public class PacketPlayerCompoundMaterialRsp extends BasePacket {
public PacketPlayerCompoundMaterialRsp(CompoundQueueData compoundQueueData) {
super(PacketOpcodes.PlayerCompoundMaterialRsp);
PlayerCompoundMaterialRsp proto = PlayerCompoundMaterialRsp.newBuilder()
.setCompoundQueData(compoundQueueData)
.setCompoundQueueData(compoundQueueData)
.setRetcode(Retcode.RET_SUCC_VALUE)
.build();
setData(proto);

View File

@@ -28,7 +28,7 @@ public class PacketPlayerCookRsp extends BasePacket {
.setRecipeData(
CookRecipeData.newBuilder()
.setRecipeId(recipeId)
.setProficiency(proficiency)
.setProficiency(proficiency)
)
.setQteQuality(quality)
.setCookCount(count);

View File

@@ -17,7 +17,7 @@ public class PacketQueryCodexMonsterBeKilledNumRsp extends BasePacket {
if (player.getCodex().getUnlockedAnimal().containsKey(animal)) {
proto.addCodexIdList(animal)
.addBeKilledNumList(player.getCodex().getUnlockedAnimal().get(animal))
.addUnk2700MKOBMGGPNMI(0);
.addBeCapturedNumList(0);
}
});

View File

@@ -0,0 +1,14 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ReformFireworksRspOuterClass;
public class PacketReformFireworksRsp extends BasePacket {
public PacketReformFireworksRsp() {
super(PacketOpcodes.ReformFireworksRsp);
var proto = ReformFireworksRspOuterClass.ReformFireworksRsp.newBuilder()
.build();
this.setData(proto);
}
}

View File

@@ -1,23 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
import emu.grasscutter.net.proto.RemoveCustomTeamRspOuterClass.RemoveCustomTeamRsp;
public class PacketRemoveCustomTeamRsp extends BasePacket {
public PacketRemoveCustomTeamRsp(Retcode retcode, int id) {
super(PacketOpcodes.RemoveCustomTeamRsp);
RemoveCustomTeamRsp proto = RemoveCustomTeamRsp.newBuilder()
.setRetcode(retcode.getNumber())
.setId(id)
.build();
this.setData(proto);
}
public PacketRemoveCustomTeamRsp(int id) {
this(Retcode.RET_SUCC, id);
}
}

View File

@@ -2,8 +2,6 @@ package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.AchievementInfoOuterClass;
import emu.grasscutter.net.proto.AchievementInfoOuterClass.AchievementInfo;
import emu.grasscutter.net.proto.TakeAchievementRewardReqOuterClass.TakeAchievementRewardReq;
import emu.grasscutter.server.game.GameSession;
@@ -20,4 +18,4 @@ public class PacketTakeAchievementRewardReq extends BasePacket {
this.setData(proto);
}
}
}

View File

@@ -17,7 +17,7 @@ public class PacketTowerCurLevelRecordChangeNotify extends BasePacket {
// TODO team info
.build())
.build();
this.setData(proto);
}
}

View File

@@ -26,7 +26,7 @@ public class PacketTowerLevelStarCondNotify extends BasePacket {
.build()
)
.build();
this.setData(proto);
}
}

View File

@@ -1,17 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.Unk2700MEBFPBDNPGOServerNotify;
public class PacketUnlockHomeBgmNotify extends BasePacket {
public PacketUnlockHomeBgmNotify(int homeBgmId) {
super(PacketOpcodes.Unk2700_MEBFPBDNPGO_ServerNotify);
var notify = Unk2700MEBFPBDNPGOServerNotify.Unk2700_MEBFPBDNPGO_ServerNotify.newBuilder()
.addUnk2700ELJPLMIHNIP(homeBgmId)
.build();
this.setData(notify);
}
}

View File

@@ -1,24 +0,0 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.Unk2700LOHBMOKOPLHServerNotify;
public class PacketUnlockedHomeBgmNotify extends BasePacket {
public PacketUnlockedHomeBgmNotify(Player player) {
super(PacketOpcodes.Unk2700_LOHBMOKOPLH_ServerNotify);
if (player.getRealmList() == null) {
return;
}
var unlocked = player.getHome().getUnlockedHomeBgmList();
var notify = Unk2700LOHBMOKOPLHServerNotify.Unk2700_LOHBMOKOPLH_ServerNotify.newBuilder()
.addAllUnk2700KMEKMNONMGE(unlocked)
.build();
this.setData(notify);
}
}