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
5f4afc8e
Commit
5f4afc8e
authored
Apr 25, 2022
by
Melledy
Browse files
Call checkSpawns from World instead of from Player
parent
d6544d12
Changes
4
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/game/GenshinPlayer.java
View file @
5f4afc8e
...
@@ -695,10 +695,6 @@ public class GenshinPlayer {
...
@@ -695,10 +695,6 @@ public class GenshinPlayer {
it
.
remove
();
it
.
remove
();
}
}
}
}
//
if
(
this
.
getScene
()
!=
null
&&
this
.
getSceneLoadState
()
==
SceneLoadState
.
LOADED
)
{
this
.
getScene
().
checkSpawns
(
this
);
}
// Ping
// Ping
if
(
this
.
getWorld
()
!=
null
)
{
if
(
this
.
getWorld
()
!=
null
)
{
// RTT notify - very important to send this often
// RTT notify - very important to send this often
...
...
src/main/java/emu/grasscutter/game/GenshinScene.java
View file @
5f4afc8e
...
@@ -315,18 +315,16 @@ public class GenshinScene {
...
@@ -315,18 +315,16 @@ public class GenshinScene {
target
.
onDeath
(
attackerId
);
target
.
onDeath
(
attackerId
);
}
}
// TODO Do not use yet
public
void
onTick
()
{
public
synchronized
void
onTick
()
{
this
.
checkSpawns
();
for
(
GenshinPlayer
player
:
this
.
getPlayers
())
{
this
.
checkSpawns
(
player
);
}
}
}
// TODO - Test
// TODO - Test
public
void
checkSpawns
(
GenshinPlayer
player
)
{
public
void
checkSpawns
()
{
SpatialIndex
<
SpawnGroupEntry
>
list
=
GenshinDepot
.
getSpawnListById
(
this
.
getId
());
SpatialIndex
<
SpawnGroupEntry
>
list
=
GenshinDepot
.
getSpawnListById
(
this
.
getId
());
Set
<
SpawnDataEntry
>
visible
=
new
HashSet
<>();
Set
<
SpawnDataEntry
>
visible
=
new
HashSet
<>();
for
(
GenshinPlayer
player
:
this
.
getPlayers
())
{
int
RANGE
=
100
;
int
RANGE
=
100
;
Collection
<
SpawnGroupEntry
>
entries
=
list
.
query
(
Collection
<
SpawnGroupEntry
>
entries
=
list
.
query
(
new
double
[]
{
player
.
getPos
().
getX
()
-
RANGE
,
player
.
getPos
().
getZ
()
-
RANGE
},
new
double
[]
{
player
.
getPos
().
getX
()
-
RANGE
,
player
.
getPos
().
getZ
()
-
RANGE
},
...
@@ -338,9 +336,10 @@ public class GenshinScene {
...
@@ -338,9 +336,10 @@ public class GenshinScene {
visible
.
add
(
spawnData
);
visible
.
add
(
spawnData
);
}
}
}
}
}
// World level
// World level
WorldLevelData
worldLevelData
=
GenshinData
.
getWorldLevelDataMap
().
get
(
player
.
getWorldLevel
());
WorldLevelData
worldLevelData
=
GenshinData
.
getWorldLevelDataMap
().
get
(
getWorld
()
.
getWorldLevel
());
int
worldLevelOverride
=
0
;
int
worldLevelOverride
=
0
;
if
(
worldLevelData
!=
null
)
{
if
(
worldLevelData
!=
null
)
{
...
...
src/main/java/emu/grasscutter/game/World.java
View file @
5f4afc8e
...
@@ -37,6 +37,7 @@ import emu.grasscutter.server.packet.send.PacketWorldPlayerInfoNotify;
...
@@ -37,6 +37,7 @@ import emu.grasscutter.server.packet.send.PacketWorldPlayerInfoNotify;
import
emu.grasscutter.server.packet.send.PacketWorldPlayerRTTNotify
;
import
emu.grasscutter.server.packet.send.PacketWorldPlayerRTTNotify
;
import
emu.grasscutter.utils.Position
;
import
emu.grasscutter.utils.Position
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectMap
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectMap
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectMaps
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
;
public
class
World
implements
Iterable
<
GenshinPlayer
>
{
public
class
World
implements
Iterable
<
GenshinPlayer
>
{
...
@@ -58,11 +59,13 @@ public class World implements Iterable<GenshinPlayer> {
...
@@ -58,11 +59,13 @@ public class World implements Iterable<GenshinPlayer> {
public
World
(
GenshinPlayer
player
,
boolean
isMultiplayer
)
{
public
World
(
GenshinPlayer
player
,
boolean
isMultiplayer
)
{
this
.
owner
=
player
;
this
.
owner
=
player
;
this
.
players
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
this
.
players
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
this
.
scenes
=
new
Int2ObjectOpenHashMap
<>();
this
.
scenes
=
Int2ObjectMaps
.
synchronize
(
new
Int2ObjectOpenHashMap
<>()
)
;
this
.
levelEntityId
=
getNextEntityId
(
EntityIdType
.
MPLEVEL
);
this
.
levelEntityId
=
getNextEntityId
(
EntityIdType
.
MPLEVEL
);
this
.
worldLevel
=
player
.
getWorldLevel
();
this
.
worldLevel
=
player
.
getWorldLevel
();
this
.
isMultiplayer
=
isMultiplayer
;
this
.
isMultiplayer
=
isMultiplayer
;
this
.
owner
.
getServer
().
registerWorld
(
this
);
}
}
public
GenshinPlayer
getHost
()
{
public
GenshinPlayer
getHost
()
{
...
@@ -273,6 +276,12 @@ public class World implements Iterable<GenshinPlayer> {
...
@@ -273,6 +276,12 @@ public class World implements Iterable<GenshinPlayer> {
}
}
}
}
public
void
onTick
()
{
for
(
GenshinScene
scene
:
this
.
getScenes
().
values
())
{
scene
.
onTick
();
}
}
public
void
close
()
{
public
void
close
()
{
}
}
...
...
src/main/java/emu/grasscutter/server/game/GameServer.java
View file @
5f4afc8e
...
@@ -10,6 +10,7 @@ import emu.grasscutter.command.CommandMap;
...
@@ -10,6 +10,7 @@ import emu.grasscutter.command.CommandMap;
import
emu.grasscutter.database.DatabaseHelper
;
import
emu.grasscutter.database.DatabaseHelper
;
import
emu.grasscutter.game.Account
;
import
emu.grasscutter.game.Account
;
import
emu.grasscutter.game.GenshinPlayer
;
import
emu.grasscutter.game.GenshinPlayer
;
import
emu.grasscutter.game.World
;
import
emu.grasscutter.game.dungeons.DungeonManager
;
import
emu.grasscutter.game.dungeons.DungeonManager
;
import
emu.grasscutter.game.gacha.GachaManager
;
import
emu.grasscutter.game.gacha.GachaManager
;
import
emu.grasscutter.game.managers.ChatManager
;
import
emu.grasscutter.game.managers.ChatManager
;
...
@@ -26,6 +27,7 @@ public final class GameServer extends MihoyoKcpServer {
...
@@ -26,6 +27,7 @@ public final class GameServer extends MihoyoKcpServer {
private
final
GameServerPacketHandler
packetHandler
;
private
final
GameServerPacketHandler
packetHandler
;
private
final
Map
<
Integer
,
GenshinPlayer
>
players
;
private
final
Map
<
Integer
,
GenshinPlayer
>
players
;
private
final
Set
<
World
>
worlds
;
private
final
ChatManager
chatManager
;
private
final
ChatManager
chatManager
;
private
final
InventoryManager
inventoryManager
;
private
final
InventoryManager
inventoryManager
;
...
@@ -50,6 +52,7 @@ public final class GameServer extends MihoyoKcpServer {
...
@@ -50,6 +52,7 @@ public final class GameServer extends MihoyoKcpServer {
this
.
address
=
address
;
this
.
address
=
address
;
this
.
packetHandler
=
new
GameServerPacketHandler
(
PacketHandler
.
class
);
this
.
packetHandler
=
new
GameServerPacketHandler
(
PacketHandler
.
class
);
this
.
players
=
new
ConcurrentHashMap
<>();
this
.
players
=
new
ConcurrentHashMap
<>();
this
.
worlds
=
Collections
.
synchronizedSet
(
new
HashSet
<>());
this
.
chatManager
=
new
ChatManager
(
this
);
this
.
chatManager
=
new
ChatManager
(
this
);
this
.
inventoryManager
=
new
InventoryManager
(
this
);
this
.
inventoryManager
=
new
InventoryManager
(
this
);
...
@@ -84,6 +87,10 @@ public final class GameServer extends MihoyoKcpServer {
...
@@ -84,6 +87,10 @@ public final class GameServer extends MihoyoKcpServer {
return
players
;
return
players
;
}
}
public
Set
<
World
>
getWorlds
()
{
return
worlds
;
}
public
ChatManager
getChatManager
()
{
public
ChatManager
getChatManager
()
{
return
chatManager
;
return
chatManager
;
}
}
...
@@ -161,6 +168,17 @@ public final class GameServer extends MihoyoKcpServer {
...
@@ -161,6 +168,17 @@ public final class GameServer extends MihoyoKcpServer {
}
}
public
void
onTick
()
throws
Exception
{
public
void
onTick
()
throws
Exception
{
Iterator
<
World
>
it
=
this
.
getWorlds
().
iterator
();
while
(
it
.
hasNext
())
{
World
world
=
it
.
next
();
if
(
world
.
getPlayerCount
()
==
0
)
{
it
.
remove
();
}
world
.
onTick
();
}
for
(
GenshinPlayer
player
:
this
.
getPlayers
().
values
())
{
for
(
GenshinPlayer
player
:
this
.
getPlayers
().
values
())
{
player
.
onTick
();
player
.
onTick
();
}
}
...
@@ -168,6 +186,15 @@ public final class GameServer extends MihoyoKcpServer {
...
@@ -168,6 +186,15 @@ public final class GameServer extends MihoyoKcpServer {
OnGameServerTick
.
post
(
new
GameServerTickEvent
());
OnGameServerTick
.
post
(
new
GameServerTickEvent
());
}
}
public
void
registerWorld
(
World
world
)
{
this
.
getWorlds
().
add
(
world
);
}
public
void
deregisterWorld
(
World
world
)
{
// TODO Auto-generated method stub
}
@Override
@Override
public
void
onStartFinish
()
{
public
void
onStartFinish
()
{
Grasscutter
.
getLogger
().
info
(
"Game Server started on port "
+
address
.
getPort
());
Grasscutter
.
getLogger
().
info
(
"Game Server started on port "
+
address
.
getPort
());
...
...
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