mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-25 13:01:03 +00:00
[BREAKING CHANGE] proto auto compiled by gradle (#226)
* [BREAK] proto auto compiled by gradle * [BREAK] move proto to submodule * update gitmodules * [BREAK] move proto to submodule * move proto to submodule * fix merge conflict * fix github action after merging * fix merge conflicts and del submodule * upload the proto
This commit is contained in:
parent
627a2f1ee8
commit
addfb5eb5d
5
.gitignore
vendored
5
.gitignore
vendored
@ -56,9 +56,10 @@ resources/*
|
|||||||
logs/*
|
logs/*
|
||||||
data/AbilityEmbryos.json
|
data/AbilityEmbryos.json
|
||||||
data/OpenConfig.json
|
data/OpenConfig.json
|
||||||
proto/*
|
|
||||||
GM Handbook.txt
|
GM Handbook.txt
|
||||||
config.json
|
config.json
|
||||||
mitmdump.exe
|
mitmdump.exe
|
||||||
grasscutter.jar
|
*.jar
|
||||||
mongod.exe
|
mongod.exe
|
||||||
|
/src/generated/
|
||||||
|
/*.sh
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -1,3 +0,0 @@
|
|||||||
[submodule "Grasscutter-Protos"]
|
|
||||||
path = Grasscutter-Protos
|
|
||||||
url = https://github.com/Melledy/Grasscutter-Protos
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 0537e9cc4c7856a7c6f88bbbaa908a80c4ee677e
|
|
54
build.gradle
54
build.gradle
@ -6,10 +6,23 @@
|
|||||||
* User Manual available at https://docs.gradle.org/5.6.3/userguide/tutorial_java_projects.html
|
* User Manual available at https://docs.gradle.org/5.6.3/userguide/tutorial_java_projects.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
maven { url "https://plugins.gradle.org/m2/" }
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.18'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
// Apply the java plugin to add support for Java
|
// Apply the java plugin to add support for Java
|
||||||
id 'java'
|
id 'java'
|
||||||
|
|
||||||
|
// Apply the protobuf auto generator
|
||||||
|
id 'com.google.protobuf' version "0.8.18"
|
||||||
|
id 'idea'
|
||||||
|
|
||||||
// Apply the application plugin to add support for building a CLI application
|
// Apply the application plugin to add support for building a CLI application
|
||||||
id 'application'
|
id 'application'
|
||||||
|
|
||||||
@ -17,6 +30,10 @@ plugins {
|
|||||||
id 'signing'
|
id 'signing'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
|
|
||||||
group = 'tech.xigam'
|
group = 'tech.xigam'
|
||||||
version = '1.0.0-dev'
|
version = '1.0.0-dev'
|
||||||
|
|
||||||
@ -49,6 +66,9 @@ dependencies {
|
|||||||
|
|
||||||
implementation group: 'org.greenrobot', name: 'eventbus-java', version: '3.3.1'
|
implementation group: 'org.greenrobot', name: 'eventbus-java', version: '3.3.1'
|
||||||
implementation group: 'org.danilopianini', name: 'java-quadtree', version: '0.1.9'
|
implementation group: 'org.danilopianini', name: 'java-quadtree', version: '0.1.9'
|
||||||
|
|
||||||
|
protobuf files('proto/')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
application {
|
application {
|
||||||
@ -132,6 +152,40 @@ publishing {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clean {
|
||||||
|
delete protobuf.generatedFilesBaseDir
|
||||||
|
}
|
||||||
|
|
||||||
|
protobuf {
|
||||||
|
protoc {
|
||||||
|
// The artifact spec for the Protobuf Compiler
|
||||||
|
artifact = 'com.google.protobuf:protoc:3.18.1'
|
||||||
|
}
|
||||||
|
// generatedFilesBaseDir = "$projectDir/src/main/java/emu/grasscutter/net/proto/"
|
||||||
|
generatedFilesBaseDir = "$projectDir/src/generated/"
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main {
|
||||||
|
proto {
|
||||||
|
// In addition to the default 'src/main/proto'
|
||||||
|
srcDir 'src/generated'
|
||||||
|
}
|
||||||
|
java {
|
||||||
|
srcDir 'src/java'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
idea {
|
||||||
|
module {
|
||||||
|
// proto files and generated Java files are automatically added as
|
||||||
|
// source dirs.
|
||||||
|
// If you have additional sources, add them here:
|
||||||
|
sourceDirs += file("/proto/");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
signing {
|
signing {
|
||||||
sign publishing.publications.mavenJava
|
sign publishing.publications.mavenJava
|
||||||
}
|
}
|
||||||
|
@ -140,7 +140,7 @@ public class ResourceLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<ScenePointEntry> scenePointList = new ArrayList<>();
|
List<ScenePointEntry> scenePointList = new ArrayList<>();
|
||||||
for (File file : folder.listFiles()) {
|
for (File file : Objects.requireNonNull(folder.listFiles())) {
|
||||||
ScenePointConfig config = null;
|
ScenePointConfig config = null;
|
||||||
Integer sceneId = null;
|
Integer sceneId = null;
|
||||||
|
|
||||||
|
10
src/main/java/emu/grasscutter/data/def/CombineData.java
Normal file
10
src/main/java/emu/grasscutter/data/def/CombineData.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package emu.grasscutter.data.def;
|
||||||
|
|
||||||
|
import emu.grasscutter.data.ResourceType;
|
||||||
|
|
||||||
|
@ResourceType(name = "CombineExcelConfigData.json")
|
||||||
|
public class CombineData {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -27,9 +27,10 @@ import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
|
|||||||
import emu.grasscutter.net.proto.MpSettingTypeOuterClass.MpSettingType;
|
import emu.grasscutter.net.proto.MpSettingTypeOuterClass.MpSettingType;
|
||||||
import emu.grasscutter.net.proto.OnlinePlayerInfoOuterClass.OnlinePlayerInfo;
|
import emu.grasscutter.net.proto.OnlinePlayerInfoOuterClass.OnlinePlayerInfo;
|
||||||
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
|
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
|
||||||
|
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;
|
||||||
import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo;
|
import emu.grasscutter.net.proto.PlayerLocationInfoOuterClass.PlayerLocationInfo;
|
||||||
|
import emu.grasscutter.net.proto.PlayerWorldLocationInfoOuterClass;
|
||||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||||
import emu.grasscutter.net.proto.WorldPlayerLocationInfoOuterClass.WorldPlayerLocationInfo;
|
|
||||||
import emu.grasscutter.server.game.GameServer;
|
import emu.grasscutter.server.game.GameServer;
|
||||||
import emu.grasscutter.server.game.GameSession;
|
import emu.grasscutter.server.game.GameSession;
|
||||||
import emu.grasscutter.server.packet.send.*;
|
import emu.grasscutter.server.packet.send.*;
|
||||||
@ -70,7 +71,7 @@ public class GenshinPlayer {
|
|||||||
private TeamManager teamManager;
|
private TeamManager teamManager;
|
||||||
private PlayerGachaInfo gachaInfo;
|
private PlayerGachaInfo gachaInfo;
|
||||||
private PlayerProfile playerProfile;
|
private PlayerProfile playerProfile;
|
||||||
private MpSettingType mpSetting = MpSettingType.MpSettingEnterAfterApply;
|
private MpSettingType mpSetting = MpSettingType.MP_SETTING_ENTER_AFTER_APPLY;
|
||||||
private boolean showAvatar;
|
private boolean showAvatar;
|
||||||
private ArrayList<AvatarProfileData> shownAvatars;
|
private ArrayList<AvatarProfileData> shownAvatars;
|
||||||
private Set<Integer> rewardedLevels;
|
private Set<Integer> rewardedLevels;
|
||||||
@ -587,7 +588,7 @@ public class GenshinPlayer {
|
|||||||
// Add to inventory
|
// Add to inventory
|
||||||
boolean success = getInventory().addItem(item);
|
boolean success = getInventory().addItem(item);
|
||||||
if (success) {
|
if (success) {
|
||||||
this.sendPacket(new PacketGadgetInteractRsp(drop, InteractType.InteractPickItem));
|
this.sendPacket(new PacketGadgetInteractRsp(drop, InteractType.INTERACT_PICK_ITEM));
|
||||||
this.sendPacket(new PacketItemAddHintNotify(item, ActionReason.SubfieldDrop));
|
this.sendPacket(new PacketItemAddHintNotify(item, ActionReason.SubfieldDrop));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -617,7 +618,7 @@ public class GenshinPlayer {
|
|||||||
.setMpSettingType(this.getMpSetting())
|
.setMpSettingType(this.getMpSetting())
|
||||||
.setNameCardId(this.getNameCardId())
|
.setNameCardId(this.getNameCardId())
|
||||||
.setSignature(this.getSignature())
|
.setSignature(this.getSignature())
|
||||||
.setAvatar(HeadImage.newBuilder().setAvatarId(this.getHeadImage()));
|
.setAvatarId(HeadImage.newBuilder().setAvatarId(this.getHeadImage()).getAvatarId());
|
||||||
|
|
||||||
if (this.getWorld() != null) {
|
if (this.getWorld() != null) {
|
||||||
onlineInfo.setCurPlayerNumInWorld(this.getWorld().getPlayers().indexOf(this) + 1);
|
onlineInfo.setCurPlayerNumInWorld(this.getWorld().getPlayers().indexOf(this) + 1);
|
||||||
@ -652,21 +653,19 @@ public class GenshinPlayer {
|
|||||||
public SocialDetail.Builder getSocialDetail() {
|
public SocialDetail.Builder getSocialDetail() {
|
||||||
SocialDetail.Builder social = SocialDetail.newBuilder()
|
SocialDetail.Builder social = SocialDetail.newBuilder()
|
||||||
.setUid(this.getUid())
|
.setUid(this.getUid())
|
||||||
.setAvatar(HeadImage.newBuilder().setAvatarId(this.getHeadImage()))
|
.setAvatarId(HeadImage.newBuilder().setAvatarId(this.getHeadImage()).getAvatarId())
|
||||||
.setNickname(this.getNickname())
|
.setNickname(this.getNickname())
|
||||||
.setSignature(this.getSignature())
|
.setSignature(this.getSignature())
|
||||||
.setLevel(this.getLevel())
|
.setLevel(this.getLevel())
|
||||||
.setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty())
|
.setBirthday(this.getBirthday().getFilledProtoWhenNotEmpty())
|
||||||
.setWorldLevel(this.getWorldLevel())
|
.setWorldLevel(this.getWorldLevel())
|
||||||
.setUnk1(1)
|
|
||||||
.setUnk3(1)
|
|
||||||
.setNameCardId(this.getNameCardId())
|
.setNameCardId(this.getNameCardId())
|
||||||
.setFinishAchievementNum(0);
|
.setFinishAchievementNum(0);
|
||||||
return social;
|
return social;
|
||||||
}
|
}
|
||||||
|
|
||||||
public WorldPlayerLocationInfo getWorldPlayerLocationInfo() {
|
public PlayerWorldLocationInfoOuterClass.PlayerWorldLocationInfo getWorldPlayerLocationInfo() {
|
||||||
return WorldPlayerLocationInfo.newBuilder()
|
return PlayerWorldLocationInfoOuterClass.PlayerWorldLocationInfo.newBuilder()
|
||||||
.setSceneId(this.getSceneId())
|
.setSceneId(this.getSceneId())
|
||||||
.setPlayerLoc(this.getPlayerLocationInfo())
|
.setPlayerLoc(this.getPlayerLocationInfo())
|
||||||
.build();
|
.build();
|
||||||
@ -691,7 +690,7 @@ public class GenshinPlayer {
|
|||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
CoopRequest req = it.next();
|
CoopRequest req = it.next();
|
||||||
if (req.isExpired()) {
|
if (req.isExpired()) {
|
||||||
req.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(this, false, PlayerApplyEnterMpReason.SystemJudge));
|
req.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(this, false, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason.SYSTEM_JUDGE));
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ public class GenshinScene {
|
|||||||
private void removePlayerAvatars(GenshinPlayer player) {
|
private void removePlayerAvatars(GenshinPlayer player) {
|
||||||
Iterator<EntityAvatar> it = player.getTeamManager().getActiveTeam().iterator();
|
Iterator<EntityAvatar> it = player.getTeamManager().getActiveTeam().iterator();
|
||||||
while (it.hasNext()) {
|
while (it.hasNext()) {
|
||||||
this.removeEntity(it.next(), VisionType.VisionRemove);
|
this.removeEntity(it.next(), VisionType.VISION_REMOVE);
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -233,7 +233,7 @@ public class GenshinScene {
|
|||||||
this.addEntityDirectly(entity);
|
this.addEntityDirectly(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.broadcastPacket(new PacketSceneEntityAppearNotify(entities, VisionType.VisionBorn));
|
this.broadcastPacket(new PacketSceneEntityAppearNotify(entities, VisionType.VISION_BORN));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GenshinEntity removeEntityDirectly(GenshinEntity entity) {
|
private GenshinEntity removeEntityDirectly(GenshinEntity entity) {
|
||||||
@ -241,7 +241,7 @@ public class GenshinScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void removeEntity(GenshinEntity entity) {
|
public void removeEntity(GenshinEntity entity) {
|
||||||
this.removeEntity(entity, VisionType.VisionDie);
|
this.removeEntity(entity, VisionType.VISION_DIE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void removeEntity(GenshinEntity entity, VisionType visionType) {
|
public synchronized void removeEntity(GenshinEntity entity, VisionType visionType) {
|
||||||
@ -254,8 +254,8 @@ public class GenshinScene {
|
|||||||
public synchronized void replaceEntity(EntityAvatar oldEntity, EntityAvatar newEntity) {
|
public synchronized void replaceEntity(EntityAvatar oldEntity, EntityAvatar newEntity) {
|
||||||
this.removeEntityDirectly(oldEntity);
|
this.removeEntityDirectly(oldEntity);
|
||||||
this.addEntityDirectly(newEntity);
|
this.addEntityDirectly(newEntity);
|
||||||
this.broadcastPacket(new PacketSceneEntityDisappearNotify(oldEntity, VisionType.VisionReplace));
|
this.broadcastPacket(new PacketSceneEntityDisappearNotify(oldEntity, VisionType.VISION_REPLACE));
|
||||||
this.broadcastPacket(new PacketSceneEntityAppearNotify(newEntity, VisionType.VisionReplace, oldEntity.getId()));
|
this.broadcastPacket(new PacketSceneEntityAppearNotify(newEntity, VisionType.VISION_REPLACE, oldEntity.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void showOtherEntities(GenshinPlayer player) {
|
public void showOtherEntities(GenshinPlayer player) {
|
||||||
@ -269,7 +269,7 @@ public class GenshinScene {
|
|||||||
entities.add(entity);
|
entities.add(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.sendPacket(new PacketSceneEntityAppearNotify(entities, VisionType.VisionMeet));
|
player.sendPacket(new PacketSceneEntityAppearNotify(entities, VisionType.VISION_MEET));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleAttack(AttackResult result) {
|
public void handleAttack(AttackResult result) {
|
||||||
@ -381,11 +381,11 @@ public class GenshinScene {
|
|||||||
|
|
||||||
if (toAdd.size() > 0) {
|
if (toAdd.size() > 0) {
|
||||||
toAdd.stream().forEach(this::addEntityDirectly);
|
toAdd.stream().forEach(this::addEntityDirectly);
|
||||||
this.broadcastPacket(new PacketSceneEntityAppearNotify(toAdd, VisionType.VisionBorn));
|
this.broadcastPacket(new PacketSceneEntityAppearNotify(toAdd, VisionType.VISION_BORN));
|
||||||
}
|
}
|
||||||
if (toRemove.size() > 0) {
|
if (toRemove.size() > 0) {
|
||||||
toRemove.stream().forEach(this::removeEntityDirectly);
|
toRemove.stream().forEach(this::removeEntityDirectly);
|
||||||
this.broadcastPacket(new PacketSceneEntityDisappearNotify(toRemove, VisionType.VisionRemove));
|
this.broadcastPacket(new PacketSceneEntityDisappearNotify(toRemove, VisionType.VISION_REMOVE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -425,7 +425,7 @@ public class GenshinScene {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.broadcastPacketToOthers(gadget.getOwner(), new PacketSceneEntityDisappearNotify(gadget, VisionType.VisionDie));
|
this.broadcastPacketToOthers(gadget.getOwner(), new PacketSceneEntityDisappearNotify(gadget, VisionType.VISION_DIE));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Broadcasting
|
// Broadcasting
|
||||||
|
@ -20,18 +20,11 @@ public class InvokeHandler<T> {
|
|||||||
|
|
||||||
public synchronized void addEntry(ForwardType forward, T entry) {
|
public synchronized void addEntry(ForwardType forward, T entry) {
|
||||||
switch (forward) {
|
switch (forward) {
|
||||||
case ForwardToAll:
|
case FORWARD_TO_ALL -> entryListForwardAll.add(entry);
|
||||||
entryListForwardAll.add(entry);
|
case FORWARD_TO_ALL_EXCEPT_CUR, FORWARD_TO_ALL_EXIST_EXCEPT_CUR -> entryListForwardAllExceptCur.add(entry);
|
||||||
break;
|
case FORWARD_TO_HOST -> entryListForwardHost.add(entry);
|
||||||
case ForwardToAllExceptCur:
|
default -> {
|
||||||
case ForwardToAllExistExceptCur:
|
}
|
||||||
entryListForwardAllExceptCur.add(entry);
|
|
||||||
break;
|
|
||||||
case ForwardToHost:
|
|
||||||
entryListForwardHost.add(entry);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ public class TeamManager {
|
|||||||
this.setCurrentCharacterIndex(index);
|
this.setCurrentCharacterIndex(index);
|
||||||
|
|
||||||
// Old entity motion state
|
// Old entity motion state
|
||||||
oldEntity.setMotionState(MotionState.MotionStandby);
|
oldEntity.setMotionState(MotionState.MOTION_STANDBY);
|
||||||
|
|
||||||
// Remove and Add
|
// Remove and Add
|
||||||
getPlayer().getScene().replaceEntity(oldEntity, newEntity);
|
getPlayer().getScene().replaceEntity(oldEntity, newEntity);
|
||||||
@ -476,7 +476,7 @@ public class TeamManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Teleport player
|
// Teleport player
|
||||||
getPlayer().sendPacket(new PacketPlayerEnterSceneNotify(getPlayer(), EnterType.EnterSelf, EnterReason.Revival, 3, GenshinConstants.START_POSITION));
|
getPlayer().sendPacket(new PacketPlayerEnterSceneNotify(getPlayer(), EnterType.ENTER_SELF, EnterReason.Revival, 3, GenshinConstants.START_POSITION));
|
||||||
|
|
||||||
// Set player position
|
// Set player position
|
||||||
player.setSceneId(3);
|
player.setSceneId(3);
|
||||||
|
@ -197,7 +197,7 @@ public class World implements Iterable<GenshinPlayer> {
|
|||||||
World world = new World(victim);
|
World world = new World(victim);
|
||||||
world.addPlayer(victim);
|
world.addPlayer(victim);
|
||||||
|
|
||||||
victim.sendPacket(new PacketPlayerEnterSceneNotify(victim, EnterType.EnterSelf, EnterReason.TeamKick, victim.getSceneId(), victim.getPos()));
|
victim.sendPacket(new PacketPlayerEnterSceneNotify(victim, EnterType.ENTER_SELF, EnterReason.TeamKick, victim.getSceneId(), victim.getPos()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -238,9 +238,9 @@ public class World implements Iterable<GenshinPlayer> {
|
|||||||
|
|
||||||
// Teleport packet
|
// Teleport packet
|
||||||
if (oldScene == newScene) {
|
if (oldScene == newScene) {
|
||||||
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterGoto, EnterReason.TransPoint, sceneId, pos));
|
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.ENTER_GOTO, EnterReason.TransPoint, sceneId, pos));
|
||||||
} else {
|
} else {
|
||||||
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterJump, EnterReason.TransPoint, sceneId, pos));
|
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.ENTER_JUMP, EnterReason.TransPoint, sceneId, pos));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -778,7 +778,7 @@ public class GenshinAvatar {
|
|||||||
.setCoreProudSkillLevel(this.getCoreProudSkillLevel())
|
.setCoreProudSkillLevel(this.getCoreProudSkillLevel())
|
||||||
.putAllSkillLevelMap(this.getSkillLevelMap())
|
.putAllSkillLevelMap(this.getSkillLevelMap())
|
||||||
.addAllInherentProudSkillList(this.getProudSkillList())
|
.addAllInherentProudSkillList(this.getProudSkillList())
|
||||||
.putAllProudSkillExtraLevel(getProudSkillBonusMap())
|
.putAllProudSkillExtraLevelMap(getProudSkillBonusMap())
|
||||||
.setAvatarType(1)
|
.setAvatarType(1)
|
||||||
.setBornTime(this.getBornTime())
|
.setBornTime(this.getBornTime())
|
||||||
.setFetterInfo(avatarFetter)
|
.setFetterInfo(avatarFetter)
|
||||||
|
@ -101,13 +101,13 @@ public class EntityAvatar extends GenshinEntity {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDeath(int killerId) {
|
public void onDeath(int killerId) {
|
||||||
this.killedType = PlayerDieType.PlayerDieKillByMonster;
|
this.killedType = PlayerDieType.PLAYER_DIE_KILL_BY_MONSTER;
|
||||||
this.killedBy = killerId;
|
this.killedBy = killerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SceneAvatarInfo getSceneAvatarInfo() {
|
public SceneAvatarInfo getSceneAvatarInfo() {
|
||||||
SceneAvatarInfo.Builder avatarInfo = SceneAvatarInfo.newBuilder()
|
SceneAvatarInfo.Builder avatarInfo = SceneAvatarInfo.newBuilder()
|
||||||
.setPlayerId(this.getPlayer().getUid())
|
.setUid(this.getPlayer().getUid())
|
||||||
.setAvatarId(this.getAvatar().getAvatarId())
|
.setAvatarId(this.getAvatar().getAvatarId())
|
||||||
.setGuid(this.getAvatar().getGuid())
|
.setGuid(this.getAvatar().getGuid())
|
||||||
.setPeerId(this.getPlayer().getPeerId())
|
.setPeerId(this.getPlayer().getPeerId())
|
||||||
@ -145,7 +145,7 @@ public class EntityAvatar extends GenshinEntity {
|
|||||||
|
|
||||||
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
||||||
.setEntityId(getId())
|
.setEntityId(getId())
|
||||||
.setEntityType(ProtEntityType.ProtEntityAvatar)
|
.setEntityType(ProtEntityType.PROT_ENTITY_AVATAR)
|
||||||
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
||||||
.setEntityClientData(EntityClientData.newBuilder())
|
.setEntityClientData(EntityClientData.newBuilder())
|
||||||
.setEntityAuthorityInfo(authority)
|
.setEntityAuthorityInfo(authority)
|
||||||
@ -161,7 +161,7 @@ public class EntityAvatar extends GenshinEntity {
|
|||||||
if (entry.getIntKey() == 0) {
|
if (entry.getIntKey() == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
FightPropPair fightProp = FightPropPair.newBuilder().setType(entry.getIntKey()).setPropValue(entry.getFloatValue()).build();
|
FightPropPair fightProp = FightPropPair.newBuilder().setPropType(entry.getIntKey()).setPropValue(entry.getFloatValue()).build();
|
||||||
entityInfo.addFightPropList(fightProp);
|
entityInfo.addFightPropList(fightProp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import emu.grasscutter.game.World;
|
|||||||
import emu.grasscutter.game.props.PlayerProperty;
|
import emu.grasscutter.game.props.PlayerProperty;
|
||||||
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
||||||
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
|
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
|
||||||
|
import emu.grasscutter.net.proto.ClientGadgetInfoOuterClass;
|
||||||
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
|
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
|
||||||
import emu.grasscutter.net.proto.EntityClientDataOuterClass.EntityClientData;
|
import emu.grasscutter.net.proto.EntityClientDataOuterClass.EntityClientData;
|
||||||
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
|
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
|
||||||
@ -112,7 +113,7 @@ public class EntityClientGadget extends EntityGadget {
|
|||||||
|
|
||||||
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
||||||
.setEntityId(getId())
|
.setEntityId(getId())
|
||||||
.setEntityType(ProtEntityType.ProtEntityGadget)
|
.setEntityType(ProtEntityType.PROT_ENTITY_GADGET)
|
||||||
.setMotionInfo(MotionInfo.newBuilder().setPos(getPosition().toProto()).setRot(getRotation().toProto()).setSpeed(Vector.newBuilder()))
|
.setMotionInfo(MotionInfo.newBuilder().setPos(getPosition().toProto()).setRot(getRotation().toProto()).setSpeed(Vector.newBuilder()))
|
||||||
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
||||||
.setEntityClientData(EntityClientData.newBuilder())
|
.setEntityClientData(EntityClientData.newBuilder())
|
||||||
@ -125,7 +126,7 @@ public class EntityClientGadget extends EntityGadget {
|
|||||||
.build();
|
.build();
|
||||||
entityInfo.addPropList(pair);
|
entityInfo.addPropList(pair);
|
||||||
|
|
||||||
GadgetClientParam clientGadget = GadgetClientParam.newBuilder()
|
ClientGadgetInfoOuterClass.ClientGadgetInfo clientGadget = ClientGadgetInfoOuterClass.ClientGadgetInfo.newBuilder()
|
||||||
.setCampId(this.getCampId())
|
.setCampId(this.getCampId())
|
||||||
.setCampType(this.getCampType())
|
.setCampType(this.getCampType())
|
||||||
.setOwnerEntityId(this.getOwnerEntityId())
|
.setOwnerEntityId(this.getOwnerEntityId())
|
||||||
|
@ -92,7 +92,7 @@ public class EntityItem extends EntityGadget {
|
|||||||
|
|
||||||
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
||||||
.setEntityId(getId())
|
.setEntityId(getId())
|
||||||
.setEntityType(ProtEntityType.ProtEntityGadget)
|
.setEntityType(ProtEntityType.PROT_ENTITY_GADGET)
|
||||||
.setMotionInfo(MotionInfo.newBuilder().setPos(getPosition().toProto()).setRot(getRotation().toProto()).setSpeed(Vector.newBuilder()))
|
.setMotionInfo(MotionInfo.newBuilder().setPos(getPosition().toProto()).setRot(getRotation().toProto()).setSpeed(Vector.newBuilder()))
|
||||||
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
||||||
.setEntityClientData(EntityClientData.newBuilder())
|
.setEntityClientData(EntityClientData.newBuilder())
|
||||||
@ -108,7 +108,7 @@ public class EntityItem extends EntityGadget {
|
|||||||
SceneGadgetInfo.Builder gadgetInfo = SceneGadgetInfo.newBuilder()
|
SceneGadgetInfo.Builder gadgetInfo = SceneGadgetInfo.newBuilder()
|
||||||
.setGadgetId(this.getItemData().getGadgetId())
|
.setGadgetId(this.getItemData().getGadgetId())
|
||||||
.setTrifleItem(this.getItem().toProto())
|
.setTrifleItem(this.getItem().toProto())
|
||||||
.setBornType(GadgetBornType.GadgetBornInAir)
|
.setBornType(GadgetBornType.GADGET_BORN_IN_AIR)
|
||||||
.setAuthorityPeerId(this.getWorld().getHostPeerId())
|
.setAuthorityPeerId(this.getWorld().getHostPeerId())
|
||||||
.setIsEnableInteract(true);
|
.setIsEnableInteract(true);
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ public class EntityMonster extends GenshinEntity {
|
|||||||
|
|
||||||
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
|
||||||
.setEntityId(getId())
|
.setEntityId(getId())
|
||||||
.setEntityType(ProtEntityType.ProtEntityMonster)
|
.setEntityType(ProtEntityType.PROT_ENTITY_MONSTER)
|
||||||
.setMotionInfo(this.getMotionInfo())
|
.setMotionInfo(this.getMotionInfo())
|
||||||
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
.addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
|
||||||
.setEntityClientData(EntityClientData.newBuilder())
|
.setEntityClientData(EntityClientData.newBuilder())
|
||||||
@ -208,7 +208,7 @@ public class EntityMonster extends GenshinEntity {
|
|||||||
if (entry.getIntKey() == 0) {
|
if (entry.getIntKey() == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
FightPropPair fightProp = FightPropPair.newBuilder().setType(entry.getIntKey()).setPropValue(entry.getFloatValue()).build();
|
FightPropPair fightProp = FightPropPair.newBuilder().setPropType(entry.getIntKey()).setPropValue(entry.getFloatValue()).build();
|
||||||
entityInfo.addFightPropList(fightProp);
|
entityInfo.addFightPropList(fightProp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ public class EntityMonster extends GenshinEntity {
|
|||||||
.setAuthorityPeerId(getWorld().getHostPeerId())
|
.setAuthorityPeerId(getWorld().getHostPeerId())
|
||||||
.setPoseId(this.getPoseId())
|
.setPoseId(this.getPoseId())
|
||||||
.setBlockId(3001)
|
.setBlockId(3001)
|
||||||
.setBornType(MonsterBornType.MonsterBornDefault)
|
.setBornType(MonsterBornType.MONSTER_BORN_DEFAULT)
|
||||||
.setSpecialNameId(40);
|
.setSpecialNameId(40);
|
||||||
|
|
||||||
if (getMonsterData().getDescribeData() != null) {
|
if (getMonsterData().getDescribeData() != null) {
|
||||||
@ -240,7 +240,7 @@ public class EntityMonster extends GenshinEntity {
|
|||||||
.setAbilityInfo(AbilitySyncStateInfo.newBuilder())
|
.setAbilityInfo(AbilitySyncStateInfo.newBuilder())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
monsterInfo.setWeaponList(weaponInfo);
|
monsterInfo.addWeaponList(weaponInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
entityInfo.setMonster(monsterInfo);
|
entityInfo.setMonster(monsterInfo);
|
||||||
|
@ -23,7 +23,7 @@ public abstract class GenshinEntity {
|
|||||||
|
|
||||||
public GenshinEntity(GenshinScene scene) {
|
public GenshinEntity(GenshinScene scene) {
|
||||||
this.scene = scene;
|
this.scene = scene;
|
||||||
this.moveState = MotionState.MotionNone;
|
this.moveState = MotionState.MOTION_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
|
@ -104,7 +104,7 @@ public class FriendsList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle
|
// Handle
|
||||||
if (result == DealAddFriendResultType.DealAddFriendAccept) { // Request accepted
|
if (result == DealAddFriendResultType.DEAL_ADD_FRIEND_ACCEPT) { // Request accepted
|
||||||
myFriendship.setIsFriend(true);
|
myFriendship.setIsFriend(true);
|
||||||
theirFriendship.setIsFriend(true);
|
theirFriendship.setIsFriend(true);
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package emu.grasscutter.game.friends;
|
package emu.grasscutter.game.friends;
|
||||||
|
|
||||||
|
import emu.grasscutter.net.proto.PlatformTypeOuterClass;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
import dev.morphia.annotations.*;
|
import dev.morphia.annotations.*;
|
||||||
@ -91,16 +92,16 @@ public class Friendship {
|
|||||||
.setUid(getFriendProfile().getUid())
|
.setUid(getFriendProfile().getUid())
|
||||||
.setNickname(getFriendProfile().getName())
|
.setNickname(getFriendProfile().getName())
|
||||||
.setLevel(getFriendProfile().getPlayerLevel())
|
.setLevel(getFriendProfile().getPlayerLevel())
|
||||||
.setAvatar(HeadImage.newBuilder().setAvatarId(getFriendProfile().getAvatarId()))
|
.setAvatarId(HeadImage.newBuilder().setAvatarId(getFriendProfile().getAvatarId()).getAvatarId())
|
||||||
.setWorldLevel(getFriendProfile().getWorldLevel())
|
.setWorldLevel(getFriendProfile().getWorldLevel())
|
||||||
.setSignature(getFriendProfile().getSignature())
|
.setSignature(getFriendProfile().getSignature())
|
||||||
.setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE : FriendOnlineState.FRIEND_DISCONNECT)
|
.setOnlineState(getFriendProfile().isOnline() ? FriendOnlineState.FRIEND_ONLINE : FriendOnlineState.FREIEND_DISCONNECT)
|
||||||
.setIsMpModeAvailable(true)
|
.setIsMpModeAvailable(true)
|
||||||
.setLastActiveTime(getFriendProfile().getLastActiveTime())
|
.setLastActiveTime(getFriendProfile().getLastActiveTime())
|
||||||
.setNameCardId(getFriendProfile().getNameCard())
|
.setNameCardId(getFriendProfile().getNameCard())
|
||||||
.setParam(getFriendProfile().getDaysSinceLogin())
|
.setParam(getFriendProfile().getDaysSinceLogin())
|
||||||
.setUnk1(1)
|
.setIsGameSource(true)
|
||||||
.setUnk2(3)
|
.setPlatformType(PlatformTypeOuterClass.PlatformType.PC)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
return proto;
|
return proto;
|
||||||
|
@ -7,6 +7,7 @@ import emu.grasscutter.game.props.EnterReason;
|
|||||||
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
|
import emu.grasscutter.net.proto.EnterTypeOuterClass.EnterType;
|
||||||
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
|
import emu.grasscutter.net.proto.PlayerApplyEnterMpReasonOuterClass.PlayerApplyEnterMpReason;
|
||||||
import emu.grasscutter.game.World;
|
import emu.grasscutter.game.World;
|
||||||
|
import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass;
|
||||||
import emu.grasscutter.server.game.GameServer;
|
import emu.grasscutter.server.game.GameServer;
|
||||||
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpNotify;
|
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpResultNotify;
|
import emu.grasscutter.server.packet.send.PacketPlayerApplyEnterMpResultNotify;
|
||||||
@ -26,7 +27,7 @@ public class MultiplayerManager {
|
|||||||
public void applyEnterMp(GenshinPlayer player, int targetUid) {
|
public void applyEnterMp(GenshinPlayer player, int targetUid) {
|
||||||
GenshinPlayer target = getServer().getPlayerByUid(targetUid);
|
GenshinPlayer target = getServer().getPlayerByUid(targetUid);
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
player.sendPacket(new PacketPlayerApplyEnterMpResultNotify(targetUid, "", false, PlayerApplyEnterMpReason.PlayerCannotEnterMp));
|
player.sendPacket(new PacketPlayerApplyEnterMpResultNotify(targetUid, "", false, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason.PLAYER_CANNOT_ENTER_MP));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,12 +72,12 @@ public class MultiplayerManager {
|
|||||||
|
|
||||||
// Sanity checks - Dont let the requesting player join if they are already in multiplayer
|
// Sanity checks - Dont let the requesting player join if they are already in multiplayer
|
||||||
if (requester.getWorld().isMultiplayer()) {
|
if (requester.getWorld().isMultiplayer()) {
|
||||||
request.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(hostPlayer, false, PlayerApplyEnterMpReason.PlayerCannotEnterMp));
|
request.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(hostPlayer, false, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason.PLAYER_CANNOT_ENTER_MP));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Response packet
|
// Response packet
|
||||||
request.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(hostPlayer, isAgreed, PlayerApplyEnterMpReason.PlayerJudge));
|
request.getRequester().sendPacket(new PacketPlayerApplyEnterMpResultNotify(hostPlayer, isAgreed, PlayerApplyEnterMpResultNotifyOuterClass.PlayerApplyEnterMpResultNotify.Reason.PLAYER_JUDGE));
|
||||||
|
|
||||||
// Declined
|
// Declined
|
||||||
if (!isAgreed) {
|
if (!isAgreed) {
|
||||||
@ -92,7 +93,7 @@ public class MultiplayerManager {
|
|||||||
world.addPlayer(hostPlayer);
|
world.addPlayer(hostPlayer);
|
||||||
|
|
||||||
// Rejoin packet
|
// Rejoin packet
|
||||||
hostPlayer.sendPacket(new PacketPlayerEnterSceneNotify(hostPlayer, hostPlayer, EnterType.EnterSelf, EnterReason.HostFromSingleToMp, hostPlayer.getScene().getId(), hostPlayer.getPos()));
|
hostPlayer.sendPacket(new PacketPlayerEnterSceneNotify(hostPlayer, hostPlayer, EnterType.ENTER_SELF, EnterReason.HostFromSingleToMp, hostPlayer.getScene().getId(), hostPlayer.getPos()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set scene pos and id of requester to the host player's
|
// Set scene pos and id of requester to the host player's
|
||||||
@ -104,7 +105,7 @@ public class MultiplayerManager {
|
|||||||
hostPlayer.getWorld().addPlayer(requester);
|
hostPlayer.getWorld().addPlayer(requester);
|
||||||
|
|
||||||
// Packet
|
// Packet
|
||||||
requester.sendPacket(new PacketPlayerEnterSceneNotify(requester, hostPlayer, EnterType.EnterOther, EnterReason.TeamJoin, hostPlayer.getScene().getId(), hostPlayer.getPos()));
|
requester.sendPacket(new PacketPlayerEnterSceneNotify(requester, hostPlayer, EnterType.ENTER_OTHER, EnterReason.TeamJoin, hostPlayer.getScene().getId(), hostPlayer.getPos()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean leaveCoop(GenshinPlayer player) {
|
public boolean leaveCoop(GenshinPlayer player) {
|
||||||
@ -125,7 +126,7 @@ public class MultiplayerManager {
|
|||||||
world.addPlayer(player);
|
world.addPlayer(player);
|
||||||
|
|
||||||
// Packet
|
// Packet
|
||||||
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.EnterSelf, EnterReason.TeamBack, player.getScene().getId(), player.getPos()));
|
player.sendPacket(new PacketPlayerEnterSceneNotify(player, EnterType.ENTER_SELF, EnterReason.TeamBack, player.getScene().getId(), player.getPos()));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -152,7 +153,7 @@ public class MultiplayerManager {
|
|||||||
World world = new World(victim);
|
World world = new World(victim);
|
||||||
world.addPlayer(victim);
|
world.addPlayer(victim);
|
||||||
|
|
||||||
victim.sendPacket(new PacketPlayerEnterSceneNotify(victim, EnterType.EnterSelf, EnterReason.TeamKick, victim.getScene().getId(), victim.getPos()));
|
victim.sendPacket(new PacketPlayerEnterSceneNotify(victim, EnterType.ENTER_SELF, EnterReason.TeamKick, victim.getScene().getId(), victim.getPos()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1009,6 +1009,7 @@ public class PacketOpcodes {
|
|||||||
public static final int SetNameCardRsp = 4009;
|
public static final int SetNameCardRsp = 4009;
|
||||||
public static final int SetOpenStateReq = 162;
|
public static final int SetOpenStateReq = 162;
|
||||||
public static final int SetOpenStateRsp = 189;
|
public static final int SetOpenStateRsp = 189;
|
||||||
|
|
||||||
public static final int SetPlayerBirthdayReq = 4097;
|
public static final int SetPlayerBirthdayReq = 4097;
|
||||||
public static final int SetPlayerBirthdayRsp = 4088;
|
public static final int SetPlayerBirthdayRsp = 4088;
|
||||||
public static final int SetPlayerBornDataReq = 155;
|
public static final int SetPlayerBornDataReq = 155;
|
||||||
@ -1034,8 +1035,6 @@ public class PacketOpcodes {
|
|||||||
public static final int ShowTemplateReminderNotify = 3164;
|
public static final int ShowTemplateReminderNotify = 3164;
|
||||||
public static final int SignInInfoReq = 2510;
|
public static final int SignInInfoReq = 2510;
|
||||||
public static final int SignInInfoRsp = 2515;
|
public static final int SignInInfoRsp = 2515;
|
||||||
public static final int SitReq = 354;
|
|
||||||
public static final int SitRsp = 335;
|
|
||||||
public static final int SocialDataNotify = 4063;
|
public static final int SocialDataNotify = 4063;
|
||||||
public static final int SpringUseReq = 1720;
|
public static final int SpringUseReq = 1720;
|
||||||
public static final int SpringUseRsp = 1727;
|
public static final int SpringUseRsp = 1727;
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
package emu.grasscutter.net.packet;
|
|
||||||
|
|
||||||
public class Retcode {
|
|
||||||
public static final int SUCCESS = 0;
|
|
||||||
public static final int FAIL = 1;
|
|
||||||
}
|
|
@ -17,7 +17,7 @@ import java.util.jar.JarEntry;
|
|||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Manages the server's plugins & the event system.
|
* Manages the server's plugins and the event system.
|
||||||
*/
|
*/
|
||||||
public final class PluginManager {
|
public final class PluginManager {
|
||||||
private final Map<String, Plugin> plugins = new HashMap<>();
|
private final Map<String, Plugin> plugins = new HashMap<>();
|
||||||
|
@ -82,7 +82,7 @@ public final class PlayerHook {
|
|||||||
public void teleport(Position position) {
|
public void teleport(Position position) {
|
||||||
this.player.getPos().set(position);
|
this.player.getPos().set(position);
|
||||||
this.player.sendPacket(new PacketPlayerEnterSceneNotify(this.player,
|
this.player.sendPacket(new PacketPlayerEnterSceneNotify(this.player,
|
||||||
EnterType.EnterJump, EnterReason.TransPoint,
|
EnterType.ENTER_JUMP, EnterReason.TransPoint,
|
||||||
this.player.getSceneId(), position
|
this.player.getSceneId(), position
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
@ -126,10 +126,10 @@ public final class DispatchServer {
|
|||||||
servers.add(server);
|
servers.add(server);
|
||||||
|
|
||||||
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
||||||
.setIp((Grasscutter.getConfig().getGameServerOptions().PublicIp.isEmpty()
|
.setGateserverIp((Grasscutter.getConfig().getGameServerOptions().PublicIp.isEmpty()
|
||||||
? Grasscutter.getConfig().getGameServerOptions().Ip
|
? Grasscutter.getConfig().getGameServerOptions().Ip
|
||||||
: Grasscutter.getConfig().getGameServerOptions().PublicIp))
|
: Grasscutter.getConfig().getGameServerOptions().PublicIp))
|
||||||
.setPort(Grasscutter.getConfig().getGameServerOptions().PublicPort != 0
|
.setGateserverPort(Grasscutter.getConfig().getGameServerOptions().PublicPort != 0
|
||||||
? Grasscutter.getConfig().getGameServerOptions().PublicPort
|
? Grasscutter.getConfig().getGameServerOptions().PublicPort
|
||||||
: Grasscutter.getConfig().getGameServerOptions().Port)
|
: Grasscutter.getConfig().getGameServerOptions().Port)
|
||||||
.setSecretKey(ByteString
|
.setSecretKey(ByteString
|
||||||
@ -169,8 +169,8 @@ public final class DispatchServer {
|
|||||||
servers.add(server);
|
servers.add(server);
|
||||||
|
|
||||||
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
||||||
.setIp(regionInfo.Ip)
|
.setGateserverIp(regionInfo.Ip)
|
||||||
.setPort(regionInfo.Port)
|
.setGateserverPort(regionInfo.Port)
|
||||||
.setSecretKey(ByteString
|
.setSecretKey(ByteString
|
||||||
.copyFrom(FileUtils.read(Grasscutter.getConfig().KEY_FOLDER + "dispatchSeed.bin")))
|
.copyFrom(FileUtils.read(Grasscutter.getConfig().KEY_FOLDER + "dispatchSeed.bin")))
|
||||||
.build();
|
.build();
|
||||||
@ -181,7 +181,7 @@ public final class DispatchServer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QueryRegionListHttpRsp regionList = QueryRegionListHttpRsp.newBuilder()
|
QueryRegionListHttpRsp regionList = QueryRegionListHttpRsp.newBuilder()
|
||||||
.addAllServers(servers)
|
.addAllRegionList(servers)
|
||||||
.setClientSecretKey(rl.getClientSecretKey())
|
.setClientSecretKey(rl.getClientSecretKey())
|
||||||
.setClientCustomConfigEncrypted(rl.getClientCustomConfigEncrypted())
|
.setClientCustomConfigEncrypted(rl.getClientCustomConfigEncrypted())
|
||||||
.setEnableLoginPc(true)
|
.setEnableLoginPc(true)
|
||||||
|
@ -89,7 +89,7 @@ public class GameServerPacketHandler {
|
|||||||
|
|
||||||
// Log unhandled packets
|
// Log unhandled packets
|
||||||
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
|
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
|
||||||
//Grasscutter.getLogger().info("Unhandled packet (" + opcode + "): " + PacketOpcodesUtil.getOpcodeName(opcode));
|
Grasscutter.getLogger().info("Unhandled packet (" + opcode + "): " + emu.grasscutter.net.packet.PacketOpcodesUtil.getOpcodeName(opcode));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,14 @@ package emu.grasscutter.server.game;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
import emu.grasscutter.game.Account;
|
import emu.grasscutter.game.Account;
|
||||||
import emu.grasscutter.game.GenshinPlayer;
|
import emu.grasscutter.game.GenshinPlayer;
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodesUtil;
|
import emu.grasscutter.net.packet.PacketOpcodesUtil;
|
||||||
import emu.grasscutter.netty.MihoyoKcpChannel;
|
import emu.grasscutter.netty.MihoyoKcpChannel;
|
||||||
import emu.grasscutter.server.event.game.SendPacketEvent;
|
import emu.grasscutter.server.event.game.SendPacketEvent;
|
||||||
@ -178,10 +181,20 @@ public class GameSession extends MihoyoKcpChannel {
|
|||||||
//System.out.println(Utils.bytesToHex(genshinPacket.getData()));
|
//System.out.println(Utils.bytesToHex(genshinPacket.getData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Set<Integer> loopPacket = Set.of(
|
||||||
|
PacketOpcodes.PingReq,
|
||||||
|
PacketOpcodes.PingRsp,
|
||||||
|
PacketOpcodes.WorldPlayerRTTNotify,
|
||||||
|
PacketOpcodes.UnionCmdNotify,
|
||||||
|
PacketOpcodes.QueryPathReq
|
||||||
|
);
|
||||||
|
|
||||||
private void logPacket(GenshinPacket genshinPacket) {
|
private void logPacket(GenshinPacket genshinPacket) {
|
||||||
|
if (!loopPacket.contains(genshinPacket.getOpcode())) {
|
||||||
Grasscutter.getLogger().info("SEND: " + PacketOpcodesUtil.getOpcodeName(genshinPacket.getOpcode()) + " (" + genshinPacket.getOpcode() + ")");
|
Grasscutter.getLogger().info("SEND: " + PacketOpcodesUtil.getOpcodeName(genshinPacket.getOpcode()) + " (" + genshinPacket.getOpcode() + ")");
|
||||||
System.out.println(Utils.bytesToHex(genshinPacket.getData()));
|
System.out.println(Utils.bytesToHex(genshinPacket.getData()));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onMessage(ChannelHandlerContext ctx, ByteBuf data) {
|
public void onMessage(ChannelHandlerContext ctx, ByteBuf data) {
|
||||||
@ -226,9 +239,11 @@ public class GameSession extends MihoyoKcpChannel {
|
|||||||
|
|
||||||
// Log packet
|
// Log packet
|
||||||
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
|
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
|
||||||
|
if (!loopPacket.contains(opcode)) {
|
||||||
Grasscutter.getLogger().info("RECV: " + PacketOpcodesUtil.getOpcodeName(opcode) + " (" + opcode + ")");
|
Grasscutter.getLogger().info("RECV: " + PacketOpcodesUtil.getOpcodeName(opcode) + " (" + opcode + ")");
|
||||||
System.out.println(Utils.bytesToHex(payload));
|
System.out.println(Utils.bytesToHex(payload));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Handle
|
// Handle
|
||||||
getServer().getPacketHandler().handle(this, opcode, header, payload);
|
getServer().getPacketHandler().handle(this, opcode, header, payload);
|
||||||
|
@ -1,24 +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.SitReqOuterClass;
|
|
||||||
import emu.grasscutter.server.game.GameSession;
|
|
||||||
import emu.grasscutter.server.packet.send.PacketSitRsp;
|
|
||||||
import emu.grasscutter.utils.Position;
|
|
||||||
|
|
||||||
@Opcodes(PacketOpcodes.SitReq)
|
|
||||||
public class HandleSitReq extends PacketHandler {
|
|
||||||
@Override
|
|
||||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
|
||||||
SitReqOuterClass.SitReq req = SitReqOuterClass.SitReq.parseFrom(payload);
|
|
||||||
|
|
||||||
float x = req.getPosition().getX();
|
|
||||||
float y = req.getPosition().getY();
|
|
||||||
float z = req.getPosition().getZ();
|
|
||||||
|
|
||||||
session.send(new PacketSitRsp(req.getChairId(), new Position(x, y, z), session.getPlayer().getTeamManager().getCurrentAvatarEntity().getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -19,12 +19,12 @@ public class HandlerCombatInvocationsNotify extends PacketHandler {
|
|||||||
|
|
||||||
for (CombatInvokeEntry entry : notif.getInvokeListList()) {
|
for (CombatInvokeEntry entry : notif.getInvokeListList()) {
|
||||||
switch (entry.getArgumentType()) {
|
switch (entry.getArgumentType()) {
|
||||||
case CombatEvtBeingHit:
|
case COMBAT_EVT_BEING_HIT:
|
||||||
// Handle damage
|
// Handle damage
|
||||||
EvtBeingHitInfo hitInfo = EvtBeingHitInfo.parseFrom(entry.getCombatData());
|
EvtBeingHitInfo hitInfo = EvtBeingHitInfo.parseFrom(entry.getCombatData());
|
||||||
session.getPlayer().getScene().handleAttack(hitInfo.getAttackResult());
|
session.getPlayer().getScene().handleAttack(hitInfo.getAttackResult());
|
||||||
break;
|
break;
|
||||||
case EntityMove:
|
case ENTITY_MOVE:
|
||||||
// Handle movement
|
// Handle movement
|
||||||
EntityMoveInfo moveInfo = EntityMoveInfo.parseFrom(entry.getCombatData());
|
EntityMoveInfo moveInfo = EntityMoveInfo.parseFrom(entry.getCombatData());
|
||||||
GenshinEntity entity = session.getPlayer().getScene().getEntityById(moveInfo.getEntityId());
|
GenshinEntity entity = session.getPlayer().getScene().getEntityById(moveInfo.getEntityId());
|
||||||
|
@ -0,0 +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.CombineReqOuterClass;
|
||||||
|
import emu.grasscutter.server.game.GameSession;
|
||||||
|
|
||||||
|
@Opcodes(PacketOpcodes.CombineReq)
|
||||||
|
public class HandlerCombineReq extends PacketHandler {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||||
|
|
||||||
|
CombineReqOuterClass.CombineReq req = CombineReqOuterClass.CombineReq.parseFrom(payload);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -32,7 +32,7 @@ public class HandlerMarkMapReq extends PacketHandler {
|
|||||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||||
MarkMapReq req = MarkMapReq.parseFrom(payload);
|
MarkMapReq req = MarkMapReq.parseFrom(payload);
|
||||||
|
|
||||||
if (req.getOp() != Operation.Add) {
|
if (req.getOp() != MarkMapReq.Operation.ADD) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.recv;
|
|||||||
import emu.grasscutter.net.packet.Opcodes;
|
import emu.grasscutter.net.packet.Opcodes;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.packet.PacketHandler;
|
import emu.grasscutter.net.packet.PacketHandler;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
import emu.grasscutter.server.game.GameSession;
|
import emu.grasscutter.server.game.GameSession;
|
||||||
import emu.grasscutter.server.packet.send.PacketPlayerGetForceQuitBanInfoRsp;
|
import emu.grasscutter.server.packet.send.PacketPlayerGetForceQuitBanInfoRsp;
|
||||||
|
|
||||||
@ -14,10 +15,10 @@ public class HandlerPlayerGetForceQuitBanInfoReq extends PacketHandler {
|
|||||||
|
|
||||||
if (session.getServer().getMultiplayerManager().leaveCoop(session.getPlayer())) {
|
if (session.getServer().getMultiplayerManager().leaveCoop(session.getPlayer())) {
|
||||||
// Success
|
// Success
|
||||||
session.send(new PacketPlayerGetForceQuitBanInfoRsp(0));
|
session.send(new PacketPlayerGetForceQuitBanInfoRsp(RetcodeOuterClass.Retcode.RET_SUCC_VALUE));
|
||||||
} else {
|
} else {
|
||||||
// Fail
|
// Fail
|
||||||
session.send(new PacketPlayerGetForceQuitBanInfoRsp(1));
|
session.send(new PacketPlayerGetForceQuitBanInfoRsp(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ public class PacketAvatarChangeCostumeNotify extends GenshinPacket {
|
|||||||
super(PacketOpcodes.AvatarChangeCostumeNotify);
|
super(PacketOpcodes.AvatarChangeCostumeNotify);
|
||||||
|
|
||||||
AvatarChangeCostumeNotify proto = AvatarChangeCostumeNotify.newBuilder()
|
AvatarChangeCostumeNotify proto = AvatarChangeCostumeNotify.newBuilder()
|
||||||
.setEntity(entity.toProto())
|
.setEntityInfo(entity.toProto())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.AvatarChangeCostumeRspOuterClass.AvatarChangeCostumeRsp;
|
import emu.grasscutter.net.proto.AvatarChangeCostumeRspOuterClass.AvatarChangeCostumeRsp;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketAvatarChangeCostumeRsp extends GenshinPacket {
|
public class PacketAvatarChangeCostumeRsp extends GenshinPacket {
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ public class PacketAvatarChangeCostumeRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.AvatarChangeCostumeRsp);
|
super(PacketOpcodes.AvatarChangeCostumeRsp);
|
||||||
|
|
||||||
AvatarChangeCostumeRsp proto = AvatarChangeCostumeRsp.newBuilder()
|
AvatarChangeCostumeRsp proto = AvatarChangeCostumeRsp.newBuilder()
|
||||||
.setRetcode(1)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.AvatarWearFlycloakRspOuterClass.AvatarWearFlycloakRsp;
|
import emu.grasscutter.net.proto.AvatarWearFlycloakRspOuterClass.AvatarWearFlycloakRsp;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketAvatarWearFlycloakRsp extends GenshinPacket {
|
public class PacketAvatarWearFlycloakRsp extends GenshinPacket {
|
||||||
public PacketAvatarWearFlycloakRsp(long avatarGuid, int costumeId) {
|
public PacketAvatarWearFlycloakRsp(long avatarGuid, int costumeId) {
|
||||||
@ -20,7 +21,7 @@ public class PacketAvatarWearFlycloakRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.AvatarWearFlycloakRsp);
|
super(PacketOpcodes.AvatarWearFlycloakRsp);
|
||||||
|
|
||||||
AvatarWearFlycloakRsp proto = AvatarWearFlycloakRsp.newBuilder()
|
AvatarWearFlycloakRsp proto = AvatarWearFlycloakRsp.newBuilder()
|
||||||
.setRetcode(1)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -4,9 +4,9 @@ import java.util.List;
|
|||||||
|
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.packet.Retcode;
|
|
||||||
import emu.grasscutter.net.proto.CalcWeaponUpgradeReturnItemsRspOuterClass.CalcWeaponUpgradeReturnItemsRsp;
|
import emu.grasscutter.net.proto.CalcWeaponUpgradeReturnItemsRspOuterClass.CalcWeaponUpgradeReturnItemsRsp;
|
||||||
import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam;
|
import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketCalcWeaponUpgradeReturnItemsRsp extends GenshinPacket {
|
public class PacketCalcWeaponUpgradeReturnItemsRsp extends GenshinPacket {
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ public class PacketCalcWeaponUpgradeReturnItemsRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.CalcWeaponUpgradeReturnItemsRsp);
|
super(PacketOpcodes.CalcWeaponUpgradeReturnItemsRsp);
|
||||||
|
|
||||||
CalcWeaponUpgradeReturnItemsRsp proto = CalcWeaponUpgradeReturnItemsRsp.newBuilder()
|
CalcWeaponUpgradeReturnItemsRsp proto = CalcWeaponUpgradeReturnItemsRsp.newBuilder()
|
||||||
.setRetcode(Retcode.FAIL)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.ChangeAvatarRspOuterClass.ChangeAvatarRsp;
|
import emu.grasscutter.net.proto.ChangeAvatarRspOuterClass.ChangeAvatarRsp;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketChangeAvatarRsp extends GenshinPacket {
|
public class PacketChangeAvatarRsp extends GenshinPacket {
|
||||||
|
|
||||||
@ -10,8 +11,8 @@ public class PacketChangeAvatarRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.ChangeAvatarRsp);
|
super(PacketOpcodes.ChangeAvatarRsp);
|
||||||
|
|
||||||
ChangeAvatarRsp p = ChangeAvatarRsp.newBuilder()
|
ChangeAvatarRsp p = ChangeAvatarRsp.newBuilder()
|
||||||
.setRetcode(0)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.setCurrGuid(guid)
|
.setCurGuid(guid)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(p);
|
this.setData(p);
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.CombineReqOuterClass;
|
||||||
|
import emu.grasscutter.net.proto.CombineRspOuterClass;
|
||||||
|
import emu.grasscutter.net.proto.ItemParamOuterClass;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
|
public class PacketCombineRsp extends GenshinPacket {
|
||||||
|
|
||||||
|
public PacketCombineRsp() {
|
||||||
|
super(PacketOpcodes.CombineRsp);
|
||||||
|
|
||||||
|
CombineRspOuterClass.CombineRsp proto = CombineRspOuterClass.CombineRsp.newBuilder()
|
||||||
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE).build();
|
||||||
|
|
||||||
|
|
||||||
|
this.setData(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PacketCombineRsp(int retcode) {
|
||||||
|
super(PacketOpcodes.CombineRsp);
|
||||||
|
|
||||||
|
CombineRspOuterClass.CombineRsp proto = CombineRspOuterClass.CombineRsp.newBuilder()
|
||||||
|
.setRetcode(retcode).build();
|
||||||
|
|
||||||
|
|
||||||
|
this.setData(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PacketCombineRsp(CombineReqOuterClass.CombineReq combineReq,
|
||||||
|
Iterable<ItemParamOuterClass.ItemParam> costItemList,
|
||||||
|
Iterable<ItemParamOuterClass.ItemParam> resultItemList,
|
||||||
|
Iterable<ItemParamOuterClass.ItemParam> totalRandomItemList,
|
||||||
|
Iterable<ItemParamOuterClass.ItemParam> totalReturnItemList,
|
||||||
|
Iterable<ItemParamOuterClass.ItemParam> totalExtraItemList) {
|
||||||
|
|
||||||
|
super(PacketOpcodes.CombineRsp);
|
||||||
|
|
||||||
|
CombineRspOuterClass.CombineRsp proto = CombineRspOuterClass.CombineRsp.newBuilder()
|
||||||
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SUCC_VALUE)
|
||||||
|
.setCombineId(combineReq.getCombineId())
|
||||||
|
.setCombineCount(combineReq.getCombineCount())
|
||||||
|
.setAvatarGuid(combineReq.getAvatarGuid())
|
||||||
|
.addAllCostItemList(costItemList)
|
||||||
|
.addAllResultItemList(resultItemList)
|
||||||
|
.addAllTotalRandomItemList(totalRandomItemList)
|
||||||
|
.addAllTotalReturnItemList(totalReturnItemList)
|
||||||
|
.addAllTotalExtraItemList(totalExtraItemList)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
this.setData(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -7,6 +7,7 @@ import emu.grasscutter.net.packet.GenshinPacket;
|
|||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.DoGachaRspOuterClass.DoGachaRsp;
|
import emu.grasscutter.net.proto.DoGachaRspOuterClass.DoGachaRsp;
|
||||||
import emu.grasscutter.net.proto.GachaItemOuterClass.GachaItem;
|
import emu.grasscutter.net.proto.GachaItemOuterClass.GachaItem;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketDoGachaRsp extends GenshinPacket {
|
public class PacketDoGachaRsp extends GenshinPacket {
|
||||||
|
|
||||||
@ -33,7 +34,7 @@ public class PacketDoGachaRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.DoGachaRsp);
|
super(PacketOpcodes.DoGachaRsp);
|
||||||
|
|
||||||
DoGachaRsp p = DoGachaRsp.newBuilder()
|
DoGachaRsp p = DoGachaRsp.newBuilder()
|
||||||
.setRetcode(1)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(p);
|
this.setData(p);
|
||||||
|
@ -5,6 +5,7 @@ import emu.grasscutter.net.packet.GenshinPacket;
|
|||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.GadgetInteractRspOuterClass.GadgetInteractRsp;
|
import emu.grasscutter.net.proto.GadgetInteractRspOuterClass.GadgetInteractRsp;
|
||||||
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
|
import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketGadgetInteractRsp extends GenshinPacket {
|
public class PacketGadgetInteractRsp extends GenshinPacket {
|
||||||
public PacketGadgetInteractRsp(EntityGadget gadget, InteractType interact) {
|
public PacketGadgetInteractRsp(EntityGadget gadget, InteractType interact) {
|
||||||
@ -23,7 +24,7 @@ public class PacketGadgetInteractRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.GadgetInteractRsp);
|
super(PacketOpcodes.GadgetInteractRsp);
|
||||||
|
|
||||||
GadgetInteractRsp proto = GadgetInteractRsp.newBuilder()
|
GadgetInteractRsp proto = GadgetInteractRsp.newBuilder()
|
||||||
.setRetcode(1)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -3,13 +3,14 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.GetAuthkeyRspOuterClass.GetAuthkeyRsp;
|
import emu.grasscutter.net.proto.GetAuthkeyRspOuterClass.GetAuthkeyRsp;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
|
|
||||||
public class PacketGetAuthkeyRsp extends GenshinPacket {
|
public class PacketGetAuthkeyRsp extends GenshinPacket {
|
||||||
|
|
||||||
public PacketGetAuthkeyRsp() {
|
public PacketGetAuthkeyRsp() {
|
||||||
super(PacketOpcodes.GetAuthkeyRsp);
|
super(PacketOpcodes.GetAuthkeyRsp);
|
||||||
|
|
||||||
GetAuthkeyRsp proto = GetAuthkeyRsp.newBuilder().setRetcode(1).build();
|
GetAuthkeyRsp proto = GetAuthkeyRsp.newBuilder().setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE).build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import emu.grasscutter.net.proto.FriendBriefOuterClass.FriendBrief;
|
|||||||
import emu.grasscutter.net.proto.FriendOnlineStateOuterClass.FriendOnlineState;
|
import emu.grasscutter.net.proto.FriendOnlineStateOuterClass.FriendOnlineState;
|
||||||
import emu.grasscutter.net.proto.GetPlayerFriendListRspOuterClass.GetPlayerFriendListRsp;
|
import emu.grasscutter.net.proto.GetPlayerFriendListRspOuterClass.GetPlayerFriendListRsp;
|
||||||
import emu.grasscutter.net.proto.HeadImageOuterClass.HeadImage;
|
import emu.grasscutter.net.proto.HeadImageOuterClass.HeadImage;
|
||||||
|
import emu.grasscutter.net.proto.PlatformTypeOuterClass;
|
||||||
|
|
||||||
public class PacketGetPlayerFriendListRsp extends GenshinPacket {
|
public class PacketGetPlayerFriendListRsp extends GenshinPacket {
|
||||||
|
|
||||||
@ -19,15 +20,15 @@ public class PacketGetPlayerFriendListRsp extends GenshinPacket {
|
|||||||
.setUid(GenshinConstants.SERVER_CONSOLE_UID)
|
.setUid(GenshinConstants.SERVER_CONSOLE_UID)
|
||||||
.setNickname("Server")
|
.setNickname("Server")
|
||||||
.setLevel(1)
|
.setLevel(1)
|
||||||
.setAvatar(HeadImage.newBuilder().setAvatarId(GenshinConstants.MAIN_CHARACTER_FEMALE))
|
.setAvatarId(HeadImage.newBuilder().setAvatarId(GenshinConstants.MAIN_CHARACTER_FEMALE).getAvatarId())
|
||||||
.setWorldLevel(0)
|
.setWorldLevel(0)
|
||||||
.setSignature("")
|
.setSignature("")
|
||||||
.setLastActiveTime((int) (System.currentTimeMillis() / 1000f))
|
.setLastActiveTime((int) (System.currentTimeMillis() / 1000f))
|
||||||
.setNameCardId(210001)
|
.setNameCardId(210001)
|
||||||
.setOnlineState(FriendOnlineState.FRIEND_ONLINE)
|
.setOnlineState(FriendOnlineState.FRIEND_ONLINE)
|
||||||
.setParam(1)
|
.setParam(1)
|
||||||
.setUnk1(1)
|
.setIsGameSource(true)
|
||||||
.setUnk2(3)
|
.setPlatformType(PlatformTypeOuterClass.PlatformType.PC)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
GetPlayerFriendListRsp.Builder proto = GetPlayerFriendListRsp.newBuilder().addFriendList(serverFriend);
|
GetPlayerFriendListRsp.Builder proto = GetPlayerFriendListRsp.newBuilder().addFriendList(serverFriend);
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.GetPlayerSocialDetailRspOuterClass.GetPlayerSocialDetailRsp;
|
import emu.grasscutter.net.proto.GetPlayerSocialDetailRspOuterClass.GetPlayerSocialDetailRsp;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
import emu.grasscutter.net.proto.SocialDetailOuterClass.SocialDetail;
|
||||||
|
|
||||||
public class PacketGetPlayerSocialDetailRsp extends GenshinPacket {
|
public class PacketGetPlayerSocialDetailRsp extends GenshinPacket {
|
||||||
@ -15,7 +16,7 @@ public class PacketGetPlayerSocialDetailRsp extends GenshinPacket {
|
|||||||
if (detail != null) {
|
if (detail != null) {
|
||||||
proto.setDetailData(detail);
|
proto.setDetailData(detail);
|
||||||
} else {
|
} else {
|
||||||
proto.setRetcode(1);
|
proto.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -16,18 +16,18 @@ public class PacketGetPlayerTokenRsp extends GenshinPacket {
|
|||||||
this.setUseDispatchKey(true);
|
this.setUseDispatchKey(true);
|
||||||
|
|
||||||
GetPlayerTokenRsp p = GetPlayerTokenRsp.newBuilder()
|
GetPlayerTokenRsp p = GetPlayerTokenRsp.newBuilder()
|
||||||
.setPlayerUid(session.getAccount().getPlayerUid())
|
.setUid(session.getAccount().getPlayerUid())
|
||||||
.setAccountToken(session.getAccount().getToken())
|
.setToken(session.getAccount().getToken())
|
||||||
.setAccountType(1)
|
.setAccountType(1)
|
||||||
.setIsProficientPlayer(doesPlayerExist) // Not sure where this goes
|
.setIsProficientPlayer(doesPlayerExist) // Not sure where this goes
|
||||||
.setSecretKey(Crypto.ENCRYPT_SEED)
|
.setSecretKeySeed(Crypto.ENCRYPT_SEED)
|
||||||
.setSecretKeyBuffer(ByteString.copyFrom(Crypto.ENCRYPT_SEED_BUFFER))
|
.setSecurityCmdBuffer(ByteString.copyFrom(Crypto.ENCRYPT_SEED_BUFFER))
|
||||||
.setPlatformType(3)
|
.setPlatformType(3)
|
||||||
.setChannelId(1)
|
.setChannelId(1)
|
||||||
.setCountryCode("US")
|
.setCountryCode("US")
|
||||||
.setUnk1("c25-314dd05b0b5f")
|
.setClientVersionRandomKey("c25-314dd05b0b5f")
|
||||||
.setUnk3(3)
|
.setRegPlatform(3)
|
||||||
.setClientIp(session.getAddress().getAddress().getHostAddress())
|
.setClientIpStr(session.getAddress().getAddress().getHostAddress())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(p.toByteArray());
|
this.setData(p.toByteArray());
|
||||||
|
@ -8,7 +8,7 @@ import emu.grasscutter.net.proto.PlayerApplyEnterMpResultNotifyOuterClass.Player
|
|||||||
|
|
||||||
public class PacketPlayerApplyEnterMpResultNotify extends GenshinPacket {
|
public class PacketPlayerApplyEnterMpResultNotify extends GenshinPacket {
|
||||||
|
|
||||||
public PacketPlayerApplyEnterMpResultNotify(GenshinPlayer target, boolean isAgreed, PlayerApplyEnterMpReason reason) {
|
public PacketPlayerApplyEnterMpResultNotify(GenshinPlayer target, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) {
|
||||||
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
|
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
|
||||||
|
|
||||||
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
|
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
|
||||||
@ -21,7 +21,7 @@ public class PacketPlayerApplyEnterMpResultNotify extends GenshinPacket {
|
|||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketPlayerApplyEnterMpResultNotify(int targetId, String targetName, boolean isAgreed, PlayerApplyEnterMpReason reason) {
|
public PacketPlayerApplyEnterMpResultNotify(int targetId, String targetName, boolean isAgreed, PlayerApplyEnterMpResultNotify.Reason reason) {
|
||||||
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
|
super(PacketOpcodes.PlayerApplyEnterMpResultNotify);
|
||||||
|
|
||||||
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
|
PlayerApplyEnterMpResultNotify proto = PlayerApplyEnterMpResultNotify.newBuilder()
|
||||||
|
@ -43,7 +43,7 @@ public class PacketPlayerChatNotify extends GenshinPacket {
|
|||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PacketPlayerChatNotify(GenshinPlayer sender, int channelId, SystemHint systemHint) {
|
public PacketPlayerChatNotify(GenshinPlayer sender, int channelId, ChatInfo.SystemHint systemHint) {
|
||||||
super(PacketOpcodes.PlayerChatNotify);
|
super(PacketOpcodes.PlayerChatNotify);
|
||||||
|
|
||||||
ChatInfo info = ChatInfo.newBuilder()
|
ChatInfo info = ChatInfo.newBuilder()
|
||||||
|
@ -13,7 +13,7 @@ public class PacketPlayerDataNotify extends GenshinPacket {
|
|||||||
|
|
||||||
PlayerDataNotify.Builder p = PlayerDataNotify.newBuilder()
|
PlayerDataNotify.Builder p = PlayerDataNotify.newBuilder()
|
||||||
.setNickName(player.getNickname())
|
.setNickName(player.getNickname())
|
||||||
.setClientTime(System.currentTimeMillis())
|
.setServerTime(System.currentTimeMillis())
|
||||||
.setIsFirstLoginToday(true)
|
.setIsFirstLoginToday(true)
|
||||||
.setRegionId(player.getRegionId());
|
.setRegionId(player.getRegionId());
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import emu.grasscutter.game.entity.EntityAvatar;
|
|||||||
import emu.grasscutter.game.inventory.GenshinItem;
|
import emu.grasscutter.game.inventory.GenshinItem;
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.AbilityControlBlockOuterClass;
|
||||||
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
||||||
import emu.grasscutter.net.proto.AvatarEnterSceneInfoOuterClass.AvatarEnterSceneInfo;
|
import emu.grasscutter.net.proto.AvatarEnterSceneInfoOuterClass.AvatarEnterSceneInfo;
|
||||||
import emu.grasscutter.net.proto.MPLevelEntityInfoOuterClass.MPLevelEntityInfo;
|
import emu.grasscutter.net.proto.MPLevelEntityInfoOuterClass.MPLevelEntityInfo;
|
||||||
@ -26,7 +27,7 @@ public class PacketPlayerEnterSceneInfoNotify extends GenshinPacket {
|
|||||||
TeamEnterSceneInfo.newBuilder()
|
TeamEnterSceneInfo.newBuilder()
|
||||||
.setTeamEntityId(player.getTeamManager().getEntityId()) // 150995833
|
.setTeamEntityId(player.getTeamManager().getEntityId()) // 150995833
|
||||||
.setTeamAbilityInfo(empty)
|
.setTeamAbilityInfo(empty)
|
||||||
.setUnk(empty)
|
.setAbilityControlBlock(AbilityControlBlockOuterClass.AbilityControlBlock.newBuilder().build())
|
||||||
);
|
);
|
||||||
proto.setMpLevelEntityInfo(
|
proto.setMpLevelEntityInfo(
|
||||||
MPLevelEntityInfo.newBuilder()
|
MPLevelEntityInfo.newBuilder()
|
||||||
|
@ -23,14 +23,14 @@ public class PacketPlayerEnterSceneNotify extends GenshinPacket {
|
|||||||
.setSceneId(player.getSceneId())
|
.setSceneId(player.getSceneId())
|
||||||
.setPos(player.getPos().toProto())
|
.setPos(player.getPos().toProto())
|
||||||
.setSceneBeginTime(System.currentTimeMillis())
|
.setSceneBeginTime(System.currentTimeMillis())
|
||||||
.setType(EnterType.EnterSelf)
|
.setType(EnterType.ENTER_SELF)
|
||||||
.setTargetUid(player.getUid())
|
.setTargetUid(player.getUid())
|
||||||
.setEnterSceneToken(player.getEnterSceneToken())
|
.setEnterSceneToken(player.getEnterSceneToken())
|
||||||
.setWorldLevel(player.getWorldLevel())
|
.setWorldLevel(player.getWorldLevel())
|
||||||
.setEnterReason(EnterReason.Login.getValue())
|
.setEnterReason(EnterReason.Login.getValue())
|
||||||
.setIsFirstLoginEnterScene(player.isFirstLoginEnterScene())
|
.setIsFirstLoginEnterScene(player.isFirstLoginEnterScene())
|
||||||
.setUnk1(1)
|
.setWorldType(1)
|
||||||
.setUnk2("3-" + player.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402)
|
.setSceneTransaction("3-" + player.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
@ -62,8 +62,8 @@ public class PacketPlayerEnterSceneNotify extends GenshinPacket {
|
|||||||
.addSceneTagIdList(109)
|
.addSceneTagIdList(109)
|
||||||
.addSceneTagIdList(113)
|
.addSceneTagIdList(113)
|
||||||
.addSceneTagIdList(117)
|
.addSceneTagIdList(117)
|
||||||
.setUnk1(1)
|
.setWorldType(1)
|
||||||
.setUnk2(newScene + "-" + target.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402)
|
.setSceneTransaction(newScene + "-" + target.getUid() + "-" + (int) (System.currentTimeMillis() / 1000) + "-" + 18402)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -40,8 +40,8 @@ public class PacketPlayerLoginRsp extends GenshinPacket {
|
|||||||
QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp regionQuery = QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp.parseFrom(decodedCurRegion);
|
QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp regionQuery = QueryCurrRegionHttpRspOuterClass.QueryCurrRegionHttpRsp.parseFrom(decodedCurRegion);
|
||||||
|
|
||||||
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
RegionInfo serverRegion = regionQuery.getRegionInfo().toBuilder()
|
||||||
.setIp((Grasscutter.getConfig().getGameServerOptions().PublicIp.isEmpty() ? Grasscutter.getConfig().getGameServerOptions().Ip : Grasscutter.getConfig().getGameServerOptions().PublicIp))
|
.setGateserverIp((Grasscutter.getConfig().getGameServerOptions().PublicIp.isEmpty() ? Grasscutter.getConfig().getGameServerOptions().Ip : Grasscutter.getConfig().getGameServerOptions().PublicIp))
|
||||||
.setPort(Grasscutter.getConfig().getGameServerOptions().PublicPort != 0 ? Grasscutter.getConfig().getGameServerOptions().PublicPort : Grasscutter.getConfig().getGameServerOptions().Port)
|
.setGateserverPort(Grasscutter.getConfig().getGameServerOptions().PublicPort != 0 ? Grasscutter.getConfig().getGameServerOptions().PublicPort : Grasscutter.getConfig().getGameServerOptions().Port)
|
||||||
.setSecretKey(ByteString.copyFrom(FileUtils.read(Grasscutter.getConfig().KEY_FOLDER + "dispatchSeed.bin")))
|
.setSecretKey(ByteString.copyFrom(FileUtils.read(Grasscutter.getConfig().KEY_FOLDER + "dispatchSeed.bin")))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ public class PacketPlayerLoginRsp extends GenshinPacket {
|
|||||||
.setClientSilenceDataVersion(info.getClientSilenceDataVersion())
|
.setClientSilenceDataVersion(info.getClientSilenceDataVersion())
|
||||||
.setClientMd5(info.getClientDataMd5())
|
.setClientMd5(info.getClientDataMd5())
|
||||||
.setClientSilenceMd5(info.getClientSilenceDataMd5())
|
.setClientSilenceMd5(info.getClientSilenceDataMd5())
|
||||||
.setResVersionConfig(info.getConfig())
|
.setResVersionConfig(info.getResVersionConfig())
|
||||||
.setClientVersionSuffix(info.getClientVersionSuffix())
|
.setClientVersionSuffix(info.getClientVersionSuffix())
|
||||||
.setClientSilenceVersionSuffix(info.getClientSilenceVersionSuffix())
|
.setClientSilenceVersionSuffix(info.getClientSilenceVersionSuffix())
|
||||||
.setIsScOpen(false)
|
.setIsScOpen(false)
|
||||||
|
@ -18,7 +18,7 @@ public class PacketPlayerStoreNotify extends GenshinPacket {
|
|||||||
this.buildHeader(2);
|
this.buildHeader(2);
|
||||||
|
|
||||||
PlayerStoreNotify.Builder p = PlayerStoreNotify.newBuilder()
|
PlayerStoreNotify.Builder p = PlayerStoreNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack)
|
.setStoreType(StoreType.STORE_PACK)
|
||||||
.setWeightLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitAll);
|
.setWeightLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitAll);
|
||||||
|
|
||||||
for (GenshinItem item : player.getInventory()) {
|
for (GenshinItem item : player.getInventory()) {
|
||||||
|
@ -15,7 +15,7 @@ public class PacketSceneEntityAppearNotify extends GenshinPacket {
|
|||||||
super(PacketOpcodes.SceneEntityAppearNotify, true);
|
super(PacketOpcodes.SceneEntityAppearNotify, true);
|
||||||
|
|
||||||
SceneEntityAppearNotify.Builder proto = SceneEntityAppearNotify.newBuilder()
|
SceneEntityAppearNotify.Builder proto = SceneEntityAppearNotify.newBuilder()
|
||||||
.setAppearType(VisionType.VisionBorn)
|
.setAppearType(VisionType.VISION_BORN)
|
||||||
.addEntityList(entity.toProto());
|
.addEntityList(entity.toProto());
|
||||||
|
|
||||||
this.setData(proto.build());
|
this.setData(proto.build());
|
||||||
|
@ -2,6 +2,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
|
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
import emu.grasscutter.net.proto.SceneKickPlayerRspOuterClass.SceneKickPlayerRsp;
|
import emu.grasscutter.net.proto.SceneKickPlayerRspOuterClass.SceneKickPlayerRsp;
|
||||||
|
|
||||||
public class PacketSceneKickPlayerRsp extends GenshinPacket {
|
public class PacketSceneKickPlayerRsp extends GenshinPacket {
|
||||||
@ -20,7 +21,7 @@ public class PacketSceneKickPlayerRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.SceneKickPlayerRsp);
|
super(PacketOpcodes.SceneKickPlayerRsp);
|
||||||
|
|
||||||
SceneKickPlayerRsp proto = SceneKickPlayerRsp.newBuilder()
|
SceneKickPlayerRsp proto = SceneKickPlayerRsp.newBuilder()
|
||||||
.setRetcode(1)
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -19,7 +19,7 @@ public class PacketSceneTeamUpdateNotify extends GenshinPacket {
|
|||||||
for (GenshinPlayer p : player.getWorld().getPlayers()) {
|
for (GenshinPlayer p : player.getWorld().getPlayers()) {
|
||||||
for (EntityAvatar entityAvatar : p.getTeamManager().getActiveTeam()) {
|
for (EntityAvatar entityAvatar : p.getTeamManager().getActiveTeam()) {
|
||||||
SceneTeamAvatar.Builder avatarProto = SceneTeamAvatar.newBuilder()
|
SceneTeamAvatar.Builder avatarProto = SceneTeamAvatar.newBuilder()
|
||||||
.setPlayerId(p.getUid())
|
.setPlayerUid(p.getUid())
|
||||||
.setAvatarGuid(entityAvatar.getAvatar().getGuid())
|
.setAvatarGuid(entityAvatar.getAvatar().getGuid())
|
||||||
.setSceneId(p.getSceneId())
|
.setSceneId(p.getSceneId())
|
||||||
.setEntityId(entityAvatar.getId())
|
.setEntityId(entityAvatar.getId())
|
||||||
|
@ -5,6 +5,7 @@ import emu.grasscutter.data.custom.ScenePointEntry;
|
|||||||
import emu.grasscutter.game.GenshinPlayer;
|
import emu.grasscutter.game.GenshinPlayer;
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
import emu.grasscutter.net.proto.SceneTransToPointRspOuterClass.SceneTransToPointRsp;
|
import emu.grasscutter.net.proto.SceneTransToPointRspOuterClass.SceneTransToPointRsp;
|
||||||
import emu.grasscutter.utils.Position;
|
import emu.grasscutter.utils.Position;
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ public class PacketSceneTransToPointRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.SceneTransToPointRsp);
|
super(PacketOpcodes.SceneTransToPointRsp);
|
||||||
|
|
||||||
SceneTransToPointRsp proto = SceneTransToPointRsp.newBuilder()
|
SceneTransToPointRsp proto = SceneTransToPointRsp.newBuilder()
|
||||||
.setRetcode(1) // Internal server error
|
.setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE) // Internal server error
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -4,6 +4,7 @@ import emu.grasscutter.game.GenshinPlayer;
|
|||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
import emu.grasscutter.net.proto.SetPlayerBirthdayRspOuterClass.SetPlayerBirthdayRsp;
|
import emu.grasscutter.net.proto.SetPlayerBirthdayRspOuterClass.SetPlayerBirthdayRsp;
|
||||||
|
import emu.grasscutter.net.proto.SetPlayerBornDataReqOuterClass;
|
||||||
|
|
||||||
public class PacketSetPlayerBirthdayRsp extends GenshinPacket {
|
public class PacketSetPlayerBirthdayRsp extends GenshinPacket {
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ public class PacketSetPlayerHeadImageRsp extends GenshinPacket {
|
|||||||
super(PacketOpcodes.SetPlayerHeadImageRsp);
|
super(PacketOpcodes.SetPlayerHeadImageRsp);
|
||||||
|
|
||||||
SetPlayerHeadImageRsp proto = SetPlayerHeadImageRsp.newBuilder()
|
SetPlayerHeadImageRsp proto = SetPlayerHeadImageRsp.newBuilder()
|
||||||
.setAvatar(HeadImage.newBuilder().setAvatarId(player.getHeadImage()))
|
.setAvatarId(HeadImage.newBuilder().setAvatarId(player.getHeadImage()).getAvatarId())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
package emu.grasscutter.server.packet.send;
|
|
||||||
|
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
|
||||||
import emu.grasscutter.net.proto.SitRspOuterClass.SitRsp;
|
|
||||||
import emu.grasscutter.utils.Position;
|
|
||||||
|
|
||||||
public class PacketSitRsp extends GenshinPacket {
|
|
||||||
|
|
||||||
public PacketSitRsp(long chairId, Position pos, int EntityId) {
|
|
||||||
super(PacketOpcodes.SitRsp);
|
|
||||||
|
|
||||||
SitRsp proto = SitRsp.newBuilder()
|
|
||||||
.setEntityId(EntityId)
|
|
||||||
.setPosition(pos.toProto())
|
|
||||||
.setChairId(chairId)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
this.setData(proto);
|
|
||||||
}
|
|
||||||
}
|
|
@ -18,7 +18,7 @@ public class PacketStoreItemChangeNotify extends GenshinPacket {
|
|||||||
this();
|
this();
|
||||||
|
|
||||||
StoreItemChangeNotify.Builder proto = StoreItemChangeNotify.newBuilder()
|
StoreItemChangeNotify.Builder proto = StoreItemChangeNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack)
|
.setStoreType(StoreType.STORE_PACK)
|
||||||
.addItemList(item.toProto());
|
.addItemList(item.toProto());
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
@ -28,9 +28,9 @@ public class PacketStoreItemChangeNotify extends GenshinPacket {
|
|||||||
this();
|
this();
|
||||||
|
|
||||||
StoreItemChangeNotify.Builder proto = StoreItemChangeNotify.newBuilder()
|
StoreItemChangeNotify.Builder proto = StoreItemChangeNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack);
|
.setStoreType(StoreType.STORE_PACK);
|
||||||
|
|
||||||
items.stream().forEach(item -> proto.addItemList(item.toProto()));
|
items.forEach(item -> proto.addItemList(item.toProto()));
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ public class PacketStoreItemDelNotify extends GenshinPacket {
|
|||||||
this();
|
this();
|
||||||
|
|
||||||
StoreItemDelNotify.Builder proto = StoreItemDelNotify.newBuilder()
|
StoreItemDelNotify.Builder proto = StoreItemDelNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack)
|
.setStoreType(StoreType.STORE_PACK)
|
||||||
.addGuidList(item.getGuid());
|
.addGuidList(item.getGuid());
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
@ -28,7 +28,7 @@ public class PacketStoreItemDelNotify extends GenshinPacket {
|
|||||||
this();
|
this();
|
||||||
|
|
||||||
StoreItemDelNotify.Builder proto = StoreItemDelNotify.newBuilder()
|
StoreItemDelNotify.Builder proto = StoreItemDelNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack);
|
.setStoreType(StoreType.STORE_PACK);
|
||||||
|
|
||||||
items.stream().forEach(item -> proto.addGuidList(item.getGuid()));
|
items.stream().forEach(item -> proto.addGuidList(item.getGuid()));
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ public class PacketStoreWeightLimitNotify extends GenshinPacket {
|
|||||||
super(PacketOpcodes.StoreWeightLimitNotify);
|
super(PacketOpcodes.StoreWeightLimitNotify);
|
||||||
|
|
||||||
StoreWeightLimitNotify p = StoreWeightLimitNotify.newBuilder()
|
StoreWeightLimitNotify p = StoreWeightLimitNotify.newBuilder()
|
||||||
.setStoreType(StoreType.StorePack)
|
.setStoreType(StoreType.STORE_PACK)
|
||||||
.setWeightLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitAll)
|
.setWeightLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitAll)
|
||||||
.setWeaponCountLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitWeapon)
|
.setWeaponCountLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitWeapon)
|
||||||
.setReliquaryCountLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitRelic)
|
.setReliquaryCountLimit(Grasscutter.getConfig().getGameServerOptions().InventoryLimitRelic)
|
||||||
|
@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
|
|||||||
import emu.grasscutter.game.inventory.GenshinItem;
|
import emu.grasscutter.game.inventory.GenshinItem;
|
||||||
import emu.grasscutter.net.packet.GenshinPacket;
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.RetcodeOuterClass;
|
||||||
import emu.grasscutter.net.proto.UseItemRspOuterClass.UseItemRsp;
|
import emu.grasscutter.net.proto.UseItemRspOuterClass.UseItemRsp;
|
||||||
|
|
||||||
public class PacketUseItemRsp extends GenshinPacket {
|
public class PacketUseItemRsp extends GenshinPacket {
|
||||||
@ -22,7 +23,7 @@ public class PacketUseItemRsp extends GenshinPacket {
|
|||||||
public PacketUseItemRsp() {
|
public PacketUseItemRsp() {
|
||||||
super(PacketOpcodes.UseItemRsp);
|
super(PacketOpcodes.UseItemRsp);
|
||||||
|
|
||||||
UseItemRsp proto = UseItemRsp.newBuilder().setRetcode(1).build();
|
UseItemRsp proto = UseItemRsp.newBuilder().setRetcode(RetcodeOuterClass.Retcode.RET_SVR_ERROR_VALUE).build();
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ public class PacketWorldPlayerLocationNotify extends GenshinPacket {
|
|||||||
WorldPlayerLocationNotify.Builder proto = WorldPlayerLocationNotify.newBuilder();
|
WorldPlayerLocationNotify.Builder proto = WorldPlayerLocationNotify.newBuilder();
|
||||||
|
|
||||||
for (GenshinPlayer p : world.getPlayers()) {
|
for (GenshinPlayer p : world.getPlayers()) {
|
||||||
proto.addPlayerLocList(p.getWorldPlayerLocationInfo());
|
proto.addPlayerWorldLocList(p.getWorldPlayerLocationInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setData(proto);
|
this.setData(proto);
|
||||||
|
@ -34,7 +34,7 @@ public final class Crypto {
|
|||||||
public static void extractSecretKeyBuffer(byte[] data) {
|
public static void extractSecretKeyBuffer(byte[] data) {
|
||||||
try {
|
try {
|
||||||
GetPlayerTokenRsp p = GetPlayerTokenRsp.parseFrom(data);
|
GetPlayerTokenRsp p = GetPlayerTokenRsp.parseFrom(data);
|
||||||
FileUtils.write(Grasscutter.getConfig().KEY_FOLDER + "secretKeyBuffer.bin", p.getSecretKeyBuffer().toByteArray());
|
FileUtils.write(Grasscutter.getConfig().KEY_FOLDER + "secretKeyBuffer.bin", p.getSecretKeyBytes().toByteArray());
|
||||||
Grasscutter.getLogger().info("Secret Key: " + p.getSecretKey());
|
Grasscutter.getLogger().info("Secret Key: " + p.getSecretKey());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Grasscutter.getLogger().error("Crypto error.", e);
|
Grasscutter.getLogger().error("Crypto error.", e);
|
||||||
|
Loading…
Reference in New Issue
Block a user