Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
ziqian zhang
Grasscutter
Commits
716380a0
Commit
716380a0
authored
Apr 22, 2022
by
Melledy
Browse files
Merge branch 'development' into java-16
parents
09c8ed34
627d3dda
Changes
69
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/server/dispatch/json/ComboTokenReqJson.java
View file @
716380a0
...
...
@@ -7,7 +7,7 @@ public class ComboTokenReqJson {
public
String
device
;
public
String
sign
;
public
class
LoginTokenData
{
public
static
class
LoginTokenData
{
public
String
uid
;
public
String
token
;
public
boolean
guest
;
...
...
src/main/java/emu/grasscutter/server/dispatch/json/ComboTokenResJson.java
View file @
716380a0
...
...
@@ -5,7 +5,7 @@ public class ComboTokenResJson {
public
int
retcode
;
public
LoginData
data
=
new
LoginData
();
public
class
LoginData
{
public
static
class
LoginData
{
public
int
account_type
=
1
;
public
boolean
heartbeat
;
public
String
combo_id
;
...
...
src/main/java/emu/grasscutter/server/dispatch/json/LoginResultJson.java
View file @
716380a0
...
...
@@ -5,7 +5,7 @@ public class LoginResultJson {
public
int
retcode
;
public
VerifyData
data
=
new
VerifyData
();
public
class
VerifyData
{
public
static
class
VerifyData
{
public
VerifyAccountData
account
=
new
VerifyAccountData
();
public
boolean
device_grant_required
=
false
;
public
String
realname_operation
=
"NONE"
;
...
...
@@ -13,7 +13,7 @@ public class LoginResultJson {
public
boolean
safe_mobile_required
=
false
;
}
public
class
VerifyAccountData
{
public
static
class
VerifyAccountData
{
public
String
uid
;
public
String
name
=
""
;
public
String
email
;
...
...
src/main/java/emu/grasscutter/server/game/GameServerPacketHandler.java
View file @
716380a0
...
...
@@ -87,7 +87,7 @@ public class GameServerPacketHandler {
}
// Log unhandled packets
if
(
Grasscutter
.
getConfig
().
LOG_PACKETS
)
{
if
(
Grasscutter
.
getConfig
().
getGameServerOptions
().
LOG_PACKETS
)
{
//Grasscutter.getLogger().info("Unhandled packet (" + opcode + "): " + PacketOpcodesUtil.getOpcodeName(opcode));
}
}
...
...
src/main/java/emu/grasscutter/server/game/GameSession.java
View file @
716380a0
...
...
@@ -165,7 +165,7 @@ public class GameSession extends MihoyoKcpChannel {
byte
[]
data
=
genshinPacket
.
build
();
// Log
if
(
Grasscutter
.
getConfig
().
LOG_PACKETS
)
{
if
(
Grasscutter
.
getConfig
().
getGameServerOptions
().
LOG_PACKETS
)
{
logPacket
(
genshinPacket
);
}
...
...
@@ -225,7 +225,7 @@ public class GameSession extends MihoyoKcpChannel {
}
// Log packet
if
(
Grasscutter
.
getConfig
().
LOG_PACKETS
)
{
if
(
Grasscutter
.
getConfig
().
getGameServerOptions
().
LOG_PACKETS
)
{
Grasscutter
.
getLogger
().
info
(
"RECV: "
+
PacketOpcodesUtil
.
getOpcodeName
(
opcode
)
+
" ("
+
opcode
+
")"
);
System
.
out
.
println
(
Utils
.
bytesToHex
(
payload
));
}
...
...
src/main/java/emu/grasscutter/server/packet/recv/HandlerEnterSceneDoneReq.java
View file @
716380a0
...
...
@@ -31,8 +31,11 @@ public class HandlerEnterSceneDoneReq extends PacketHandler {
// Locations
session
.
send
(
new
PacketWorldPlayerLocationNotify
(
session
.
getPlayer
().
getWorld
()));
session
.
send
(
new
PacketScenePlayerLocationNotify
(
session
.
getPlayer
()));
session
.
send
(
new
PacketScenePlayerLocationNotify
(
session
.
getPlayer
()
.
getScene
()
));
session
.
send
(
new
PacketWorldPlayerRTTNotify
(
session
.
getPlayer
().
getWorld
()));
// Reset timer for sending player locations
session
.
getPlayer
().
resetSendPlayerLocTime
();
}
}
src/main/java/emu/grasscutter/server/packet/recv/HandlerGetPlayerTokenReq.java
View file @
716380a0
...
...
@@ -35,15 +35,15 @@ public class HandlerGetPlayerTokenReq extends PacketHandler {
// Has character
boolean
doesPlayerExist
=
false
;
if
(
account
.
getPlayer
I
d
()
>
0
)
{
if
(
account
.
getPlayer
Ui
d
()
>
0
)
{
// Set flag for player existing
doesPlayerExist
=
DatabaseHelper
.
checkPlayerExists
(
account
.
getPlayer
I
d
());
doesPlayerExist
=
DatabaseHelper
.
checkPlayerExists
(
account
.
getPlayer
Ui
d
());
}
// Set reserve player id if account doesnt exist
if
(!
doesPlayerExist
)
{
int
id
=
DatabaseHelper
.
getNextPlayerId
(
session
.
getAccount
().
getPlayer
I
d
());
if
(
id
!=
session
.
getAccount
().
getPlayer
I
d
())
{
int
id
=
DatabaseHelper
.
getNextPlayerId
(
session
.
getAccount
().
getPlayer
Ui
d
());
if
(
id
!=
session
.
getAccount
().
getPlayer
Ui
d
())
{
session
.
getAccount
().
setPlayerId
(
id
);
session
.
getAccount
().
save
();
}
...
...
src/main/java/emu/grasscutter/server/packet/recv/HandlerPlayerLoginReq.java
View file @
716380a0
...
...
@@ -30,7 +30,7 @@ public class HandlerPlayerLoginReq extends PacketHandler {
}
// Load character from db
GenshinPlayer
player
=
DatabaseHelper
.
getPlayerById
(
session
.
getAccount
().
getPlayer
I
d
());
GenshinPlayer
player
=
DatabaseHelper
.
getPlayerById
(
session
.
getAccount
().
getPlayer
Ui
d
());
if
(
player
==
null
)
{
// Send packets
...
...
src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneTransToPointReq.java
View file @
716380a0
package
emu.grasscutter.server.packet.recv
;
import
emu.grasscutter.data.GenshinData
;
import
emu.grasscutter.data.custom.ScenePointEntry
;
import
emu.grasscutter.net.packet.Opcodes
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.SceneTransToPointReqOuterClass.SceneTransToPointReq
;
import
emu.grasscutter.net.proto.SceneTransToPointRspOuterClass.SceneTransToPointRsp
;
import
emu.grasscutter.net.packet.PacketHandler
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketSceneTransToPointRsp
;
import
emu.grasscutter.utils.Position
;
@Opcodes
(
PacketOpcodes
.
SceneTransToPointReq
)
public
class
HandlerSceneTransToPointReq
extends
PacketHandler
{
...
...
@@ -13,7 +17,20 @@ public class HandlerSceneTransToPointReq extends PacketHandler {
@Override
public
void
handle
(
GameSession
session
,
byte
[]
header
,
byte
[]
payload
)
throws
Exception
{
SceneTransToPointReq
req
=
SceneTransToPointReq
.
parseFrom
(
payload
);
String
code
=
req
.
getSceneId
()
+
"_"
+
req
.
getPointId
();
ScenePointEntry
scenePointEntry
=
GenshinData
.
getScenePointEntries
().
get
(
code
);
if
(
scenePointEntry
!=
null
)
{
float
x
=
scenePointEntry
.
getPointData
().
getTranPos
().
getX
();
float
y
=
scenePointEntry
.
getPointData
().
getTranPos
().
getY
();
float
z
=
scenePointEntry
.
getPointData
().
getTranPos
().
getZ
();
session
.
getPlayer
().
getWorld
().
transferPlayerToScene
(
session
.
getPlayer
(),
req
.
getSceneId
(),
new
Position
(
x
,
y
,
z
));
session
.
send
(
new
PacketSceneTransToPointRsp
(
session
.
getPlayer
(),
req
.
getPointId
(),
req
.
getSceneId
()));
}
else
{
session
.
send
(
new
PacketSceneTransToPointRsp
());
}
}
}
src/main/java/emu/grasscutter/server/packet/recv/HandlerSetEntityClientDataNotify.java
View file @
716380a0
...
...
@@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.recv;
import
emu.grasscutter.net.packet.GenshinPacket
;
import
emu.grasscutter.net.packet.Opcodes
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.SetEntityClientDataNotifyOuterClass.SetEntityClientDataNotify
;
import
emu.grasscutter.net.packet.PacketHandler
;
import
emu.grasscutter.server.game.GameSession
;
...
...
@@ -16,8 +17,11 @@ public class HandlerSetEntityClientDataNotify extends PacketHandler {
return
;
}
// Make sure packet is a valid proto before replaying it to the other players
SetEntityClientDataNotify
notif
=
SetEntityClientDataNotify
.
parseFrom
(
payload
);
GenshinPacket
packet
=
new
GenshinPacket
(
PacketOpcodes
.
SetEntityClientDataNotify
,
true
);
packet
.
setData
(
payload
);
packet
.
setData
(
notif
);
session
.
getPlayer
().
getScene
().
broadcastPacketToOthers
(
session
.
getPlayer
(),
packet
);
}
...
...
src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerBornDataReq.java
View file @
716380a0
...
...
@@ -43,7 +43,7 @@ public class HandlerSetPlayerBornDataReq extends PacketHandler {
try
{
// Save to db
DatabaseHelper
.
createPlayer
(
player
,
session
.
getAccount
().
getPlayer
I
d
());
DatabaseHelper
.
createPlayer
(
player
,
session
.
getAccount
().
getPlayer
Ui
d
());
// Create avatar
if
(
player
.
getAvatars
().
getAvatarCount
()
==
0
)
{
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketAbilityChangeNotify.java
View file @
716380a0
...
...
@@ -8,7 +8,7 @@ import emu.grasscutter.net.proto.AbilityChangeNotifyOuterClass.AbilityChangeNoti
public
class
PacketAbilityChangeNotify
extends
GenshinPacket
{
public
PacketAbilityChangeNotify
(
EntityAvatar
entity
)
{
super
(
PacketOpcodes
.
AbilityChangeNotify
);
super
(
PacketOpcodes
.
AbilityChangeNotify
,
true
);
AbilityChangeNotify
proto
=
AbilityChangeNotify
.
newBuilder
()
.
setEntityId
(
entity
.
getId
())
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketGetPlayerFriendListRsp.java
View file @
716380a0
...
...
@@ -23,7 +23,6 @@ public class PacketGetPlayerFriendListRsp extends GenshinPacket {
.
setWorldLevel
(
0
)
.
setSignature
(
""
)
.
setLastActiveTime
((
int
)
(
System
.
currentTimeMillis
()
/
1000
f
))
.
setIsMpModeAvailable
(
true
)
.
setNameCardId
(
210001
)
.
setOnlineState
(
FriendOnlineState
.
FRIEND_ONLINE
)
.
setParam
(
1
)
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketGetPlayerTokenRsp.java
View file @
716380a0
...
...
@@ -16,7 +16,7 @@ public class PacketGetPlayerTokenRsp extends GenshinPacket {
this
.
setUseDispatchKey
(
true
);
GetPlayerTokenRsp
p
=
GetPlayerTokenRsp
.
newBuilder
()
.
setPlayerUid
(
session
.
getAccount
().
getPlayer
I
d
())
.
setPlayerUid
(
session
.
getAccount
().
getPlayer
Ui
d
())
.
setAccountToken
(
session
.
getAccount
().
getToken
())
.
setAccountType
(
1
)
.
setIsProficientPlayer
(
doesPlayerExist
)
// Not sure where this goes
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketPlayerEnterSceneNotify.java
View file @
716380a0
...
...
@@ -52,7 +52,7 @@ public class PacketPlayerEnterSceneNotify extends GenshinPacket {
.
setSceneId
(
newScene
)
.
setPos
(
newPos
.
toProto
())
.
setSceneBeginTime
(
System
.
currentTimeMillis
())
.
setType
(
EnterType
.
EnterSelf
)
.
setType
(
type
)
.
setTargetUid
(
target
.
getUid
())
.
setEnterSceneToken
(
player
.
getEnterSceneToken
())
.
setWorldLevel
(
target
.
getWorld
().
getWorldLevel
())
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketPlayerLoginRsp.java
View file @
716380a0
package
emu.grasscutter.server.packet.send
;
import
com.google.protobuf.ByteString
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.net.packet.GenshinPacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.PlayerLoginRspOuterClass.PlayerLoginRsp
;
import
emu.grasscutter.net.proto.QueryCurrRegionHttpRspOuterClass
;
import
emu.grasscutter.net.proto.RegionInfoOuterClass.RegionInfo
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.utils.FileUtils
;
import
java.io.File
;
import
java.net.URL
;
import
java.util.Base64
;
public
class
PacketPlayerLoginRsp
extends
GenshinPacket
{
private
static
QueryCurrRegionHttpRspOuterClass
.
QueryCurrRegionHttpRsp
regionCache
;
public
PacketPlayerLoginRsp
(
GameSession
session
)
{
super
(
PacketOpcodes
.
PlayerLoginRsp
,
1
);
this
.
setUseDispatchKey
(
true
);
RegionInfo
info
=
Grasscutter
.
getDispatchServer
().
getCurrRegion
().
getRegionInfo
();
RegionInfo
info
;
if
(
Grasscutter
.
getConfig
().
RunMode
.
equalsIgnoreCase
(
"GAME_ONLY"
))
{
if
(
regionCache
==
null
)
{
try
{
File
file
=
new
File
(
Grasscutter
.
getConfig
().
DATA_FOLDER
+
"query_cur_region.txt"
);
String
query_cur_region
=
""
;
if
(
file
.
exists
())
{
query_cur_region
=
new
String
(
FileUtils
.
read
(
file
));
}
else
{
Grasscutter
.
getLogger
().
warn
(
"query_cur_region not found! Using default current region."
);
}
byte
[]
decodedCurRegion
=
Base64
.
getDecoder
().
decode
(
query_cur_region
);
QueryCurrRegionHttpRspOuterClass
.
QueryCurrRegionHttpRsp
regionQuery
=
QueryCurrRegionHttpRspOuterClass
.
QueryCurrRegionHttpRsp
.
parseFrom
(
decodedCurRegion
);
RegionInfo
serverRegion
=
regionQuery
.
getRegionInfo
().
toBuilder
()
.
setIp
((
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
)
.
setSecretKey
(
ByteString
.
copyFrom
(
FileUtils
.
read
(
Grasscutter
.
getConfig
().
KEY_FOLDER
+
"dispatchSeed.bin"
)))
.
build
();
regionCache
=
regionQuery
.
toBuilder
().
setRegionInfo
(
serverRegion
).
build
();
}
catch
(
Exception
e
)
{
Grasscutter
.
getLogger
().
error
(
"Error while initializing region cache!"
,
e
);
}
}
info
=
regionCache
.
getRegionInfo
();
}
else
{
info
=
Grasscutter
.
getDispatchServer
().
getCurrRegion
().
getRegionInfo
();
}
PlayerLoginRsp
p
=
PlayerLoginRsp
.
newBuilder
()
.
setIsUseAbilityHash
(
true
)
// true
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketPlayerStoreNotify.java
View file @
716380a0
...
...
@@ -19,7 +19,7 @@ public class PacketPlayerStoreNotify extends GenshinPacket {
PlayerStoreNotify
.
Builder
p
=
PlayerStoreNotify
.
newBuilder
()
.
setStoreType
(
StoreType
.
StorePack
)
.
setWeightLimit
(
Grasscutter
.
getConfig
().
getServerOptions
().
InventoryLimitAll
);
.
setWeightLimit
(
Grasscutter
.
getConfig
().
get
Game
ServerOptions
().
InventoryLimitAll
);
for
(
GenshinItem
item
:
player
.
getInventory
())
{
Item
itemProto
=
item
.
toProto
();
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketPullRecentChatRsp.java
View file @
716380a0
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.Config.ServerOptions
;
import
emu.grasscutter.Config.
Game
ServerOptions
;
import
emu.grasscutter.GenshinConstants
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.game.GenshinPlayer
;
...
...
@@ -14,7 +14,7 @@ public class PacketPullRecentChatRsp extends GenshinPacket {
public
PacketPullRecentChatRsp
(
GenshinPlayer
player
)
{
super
(
PacketOpcodes
.
PullRecentChatRsp
);
ServerOptions
serverOptions
=
Grasscutter
.
getConfig
().
getServerOptions
();
Game
ServerOptions
serverOptions
=
Grasscutter
.
getConfig
().
get
Game
ServerOptions
();
PullRecentChatRsp
.
Builder
proto
=
PullRecentChatRsp
.
newBuilder
();
if
(
serverOptions
.
WelcomeEmotes
!=
null
&&
serverOptions
.
WelcomeEmotes
.
length
>
0
)
{
...
...
@@ -33,7 +33,7 @@ public class PacketPullRecentChatRsp extends GenshinPacket {
.
setTime
((
int
)
(
System
.
currentTimeMillis
()
/
1000
))
.
setUid
(
GenshinConstants
.
SERVER_CONSOLE_UID
)
.
setToUid
(
player
.
getUid
())
.
setText
(
Grasscutter
.
getConfig
().
getServerOptions
().
WelcomeMotd
)
.
setText
(
Grasscutter
.
getConfig
().
get
Game
ServerOptions
().
WelcomeMotd
)
.
build
();
proto
.
addChatInfo
(
welcomeMotd
);
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketSceneAreaWeatherNotify.java
View file @
716380a0
...
...
@@ -12,7 +12,7 @@ public class PacketSceneAreaWeatherNotify extends GenshinPacket {
super
(
PacketOpcodes
.
SceneAreaWeatherNotify
);
SceneAreaWeatherNotify
proto
=
SceneAreaWeatherNotify
.
newBuilder
()
.
setWeatherAreaId
(
1
)
.
setWeatherAreaId
(
player
.
getScene
().
getWeather
()
)
.
setClimateType
(
player
.
getScene
().
getClimate
().
getValue
())
.
build
();
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketScenePlayerLocationNotify.java
View file @
716380a0
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.game.GenshinPlayer
;
import
emu.grasscutter.game.GenshinScene
;
import
emu.grasscutter.net.packet.GenshinPacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.ScenePlayerLocationNotifyOuterClass.ScenePlayerLocationNotify
;
public
class
PacketScenePlayerLocationNotify
extends
GenshinPacket
{
public
PacketScenePlayerLocationNotify
(
Genshin
Player
player
)
{
public
PacketScenePlayerLocationNotify
(
Genshin
Scene
scene
)
{
super
(
PacketOpcodes
.
ScenePlayerLocationNotify
);
ScenePlayerLocationNotify
.
Builder
proto
=
ScenePlayerLocationNotify
.
newBuilder
()
.
setSceneId
(
player
.
getScene
Id
());
.
setSceneId
(
scene
.
get
Id
());
for
(
GenshinPlayer
p
:
player
.
getWorld
()
.
getPlayers
())
{
for
(
GenshinPlayer
p
:
scene
.
getPlayers
())
{
proto
.
addPlayerLocList
(
p
.
getPlayerLocationInfo
());
}
...
...
Prev
1
2
3
4
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment