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
3d3f36cf
Commit
3d3f36cf
authored
May 06, 2022
by
Akka
Browse files
Choose Avatar & Enter Tower
parent
a21fc116
Changes
13
Hide whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/data/GameData.java
View file @
3d3f36cf
...
...
@@ -68,7 +68,9 @@ public class GameData {
private
static
final
Int2ObjectMap
<
ShopGoodsData
>
shopGoodsDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
CombineData
>
combineDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
RewardPreviewData
>
rewardPreviewDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerFloorData
>
towerFloorDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerLevelData
>
towerLevelDataMap
=
new
Int2ObjectOpenHashMap
<>();
// Cache
private
static
Map
<
Integer
,
List
<
Integer
>>
fetters
=
new
HashMap
<>();
private
static
Map
<
Integer
,
List
<
ShopGoodsData
>>
shopGoods
=
new
HashMap
<>();
...
...
@@ -313,4 +315,11 @@ public class GameData {
public
static
Int2ObjectMap
<
CombineData
>
getCombineDataMap
()
{
return
combineDataMap
;
}
public
static
Int2ObjectMap
<
TowerFloorData
>
getTowerFloorDataMap
(){
return
towerFloorDataMap
;
}
public
static
Int2ObjectMap
<
TowerLevelData
>
getTowerLevelDataMap
(){
return
towerLevelDataMap
;
}
}
src/main/java/emu/grasscutter/data/def/TowerFloorData.java
0 → 100644
View file @
3d3f36cf
package
emu.grasscutter.data.def
;
import
emu.grasscutter.data.GameResource
;
import
emu.grasscutter.data.ResourceType
;
@ResourceType
(
name
=
"TowerFloorExcelConfigData.json"
)
public
class
TowerFloorData
extends
GameResource
{
private
int
FloorId
;
private
int
FloorIndex
;
private
int
LevelId
;
private
int
OverrideMonsterLevel
;
private
int
TeamNum
;
private
int
FloorLevelConfigId
;
@Override
public
int
getId
()
{
return
this
.
FloorId
;
}
@Override
public
void
onLoad
()
{
super
.
onLoad
();
}
public
int
getFloorId
()
{
return
FloorId
;
}
public
void
setFloorId
(
int
floorId
)
{
FloorId
=
floorId
;
}
public
int
getFloorIndex
()
{
return
FloorIndex
;
}
public
void
setFloorIndex
(
int
floorIndex
)
{
FloorIndex
=
floorIndex
;
}
public
int
getLevelId
()
{
return
LevelId
;
}
public
void
setLevelId
(
int
levelId
)
{
LevelId
=
levelId
;
}
public
int
getOverrideMonsterLevel
()
{
return
OverrideMonsterLevel
;
}
public
void
setOverrideMonsterLevel
(
int
overrideMonsterLevel
)
{
OverrideMonsterLevel
=
overrideMonsterLevel
;
}
public
int
getTeamNum
()
{
return
TeamNum
;
}
public
void
setTeamNum
(
int
teamNum
)
{
TeamNum
=
teamNum
;
}
public
int
getFloorLevelConfigId
()
{
return
FloorLevelConfigId
;
}
public
void
setFloorLevelConfigId
(
int
floorLevelConfigId
)
{
FloorLevelConfigId
=
floorLevelConfigId
;
}
}
src/main/java/emu/grasscutter/data/def/TowerLevelData.java
0 → 100644
View file @
3d3f36cf
package
emu.grasscutter.data.def
;
import
emu.grasscutter.data.GameResource
;
import
emu.grasscutter.data.ResourceType
;
@ResourceType
(
name
=
"TowerLevelExcelConfigData.json"
)
public
class
TowerLevelData
extends
GameResource
{
private
int
ID
;
private
int
LevelId
;
private
int
LevelIndex
;
private
int
DungeonId
;
@Override
public
int
getId
()
{
return
this
.
ID
;
}
@Override
public
void
onLoad
()
{
super
.
onLoad
();
}
public
int
getID
()
{
return
ID
;
}
public
void
setID
(
int
ID
)
{
this
.
ID
=
ID
;
}
public
int
getLevelId
()
{
return
LevelId
;
}
public
void
setLevelId
(
int
levelId
)
{
LevelId
=
levelId
;
}
public
int
getLevelIndex
()
{
return
LevelIndex
;
}
public
void
setLevelIndex
(
int
levelIndex
)
{
LevelIndex
=
levelIndex
;
}
public
int
getDungeonId
()
{
return
DungeonId
;
}
public
void
setDungeonId
(
int
dungeonId
)
{
DungeonId
=
dungeonId
;
}
}
src/main/java/emu/grasscutter/game/dungeons/DungeonManager.java
View file @
3d3f36cf
...
...
@@ -75,7 +75,8 @@ public class DungeonManager {
prevPos
.
set
(
entry
.
getPointData
().
getTranPos
());
}
}
// clean temp team if it has
player
.
getTeamManager
().
cleanTemporaryTeam
();
// Transfer player back to world
player
.
getWorld
().
transferPlayerToScene
(
player
,
prevScene
,
prevPos
);
player
.
sendPacket
(
new
BasePacket
(
PacketOpcodes
.
PlayerQuitDungeonRsp
));
...
...
src/main/java/emu/grasscutter/game/player/Player.java
View file @
3d3f36cf
...
...
@@ -26,6 +26,7 @@ import emu.grasscutter.game.props.EntityType;
import
emu.grasscutter.game.props.PlayerProperty
;
import
emu.grasscutter.game.shop.ShopLimit
;
import
emu.grasscutter.game.managers.MapMarkManager.*
;
import
emu.grasscutter.game.tower.TowerManager
;
import
emu.grasscutter.game.world.Scene
;
import
emu.grasscutter.game.world.World
;
import
emu.grasscutter.net.packet.BasePacket
;
...
...
@@ -88,6 +89,8 @@ public class Player {
@Transient
private
MessageHandler
messageHandler
;
private
TeamManager
teamManager
;
private
TowerManager
towerManager
;
private
PlayerGachaInfo
gachaInfo
;
private
PlayerProfile
playerProfile
;
private
boolean
showAvatar
;
...
...
@@ -172,6 +175,7 @@ public class Player {
this
.
nickname
=
"Traveler"
;
this
.
signature
=
""
;
this
.
teamManager
=
new
TeamManager
(
this
);
this
.
towerManager
=
new
TowerManager
(
this
);
this
.
birthday
=
new
PlayerBirthday
();
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_LEVEL
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_SPRING_AUTO_USE
,
1
);
...
...
@@ -384,6 +388,10 @@ public class Player {
return
this
.
teamManager
;
}
public
TowerManager
getTowerManager
()
{
return
towerManager
;
}
public
PlayerGachaInfo
getGachaInfo
()
{
return
gachaInfo
;
}
...
...
@@ -1020,6 +1028,9 @@ public class Player {
if
(
this
.
getProfile
().
getUid
()
==
0
)
{
this
.
getProfile
().
syncWithCharacter
(
this
);
}
if
(
this
.
getTowerManager
()
==
null
)
{
this
.
towerManager
=
new
TowerManager
(
this
);
}
// Check if player object exists in server
// TODO - optimize
...
...
src/main/java/emu/grasscutter/game/player/TeamInfo.java
View file @
3d3f36cf
...
...
@@ -18,6 +18,11 @@ public class TeamInfo {
this
.
avatars
=
new
ArrayList
<>(
Grasscutter
.
getConfig
().
getGameServerOptions
().
MaxAvatarsInTeam
);
}
public
TeamInfo
(
List
<
Integer
>
avatars
)
{
this
.
name
=
""
;
this
.
avatars
=
avatars
;
}
public
String
getName
()
{
return
name
;
}
...
...
src/main/java/emu/grasscutter/game/player/TeamManager.java
View file @
3d3f36cf
package
emu.grasscutter.game.player
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.LinkedHashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.*
;
import
dev.morphia.annotations.Entity
;
import
dev.morphia.annotations.Transient
;
...
...
@@ -58,7 +52,13 @@ public class TeamManager {
@Transient
private
final
Set
<
EntityBaseGadget
>
gadgets
;
@Transient
private
final
IntSet
teamResonances
;
@Transient
private
final
IntSet
teamResonancesConfig
;
private
int
useTemporarilyTeamIndex
=
-
1
;
/**
* Temporary Team for tower
*/
private
List
<
TeamInfo
>
temporaryTeam
;
public
TeamManager
()
{
this
.
mpTeam
=
new
TeamInfo
();
this
.
avatars
=
new
ArrayList
<>();
...
...
@@ -124,6 +124,10 @@ public class TeamManager {
}
public
TeamInfo
getCurrentTeamInfo
()
{
if
(
useTemporarilyTeamIndex
>=
0
&&
useTemporarilyTeamIndex
<
temporaryTeam
.
size
()){
return
temporaryTeam
.
get
(
useTemporarilyTeamIndex
);
}
if
(
this
.
getPlayer
().
isInMultiplayer
())
{
return
this
.
getMpTeam
();
}
...
...
@@ -351,7 +355,51 @@ public class TeamManager {
// Packet
this
.
updateTeamEntities
(
new
PacketChangeMpTeamAvatarRsp
(
getPlayer
(),
teamInfo
));
}
public
void
setupTemporaryTeam
(
List
<
List
<
Long
>>
guidList
)
{
var
team
=
guidList
.
stream
().
map
(
list
->
{
// Sanity checks
if
(
list
.
size
()
==
0
||
list
.
size
()
>
getMaxTeamSize
())
{
return
null
;
}
// Set team data
LinkedHashSet
<
Avatar
>
newTeam
=
new
LinkedHashSet
<>();
for
(
int
i
=
0
;
i
<
list
.
size
();
i
++)
{
Avatar
avatar
=
getPlayer
().
getAvatars
().
getAvatarByGuid
(
list
.
get
(
i
));
if
(
avatar
==
null
||
newTeam
.
contains
(
avatar
))
{
// Should never happen
return
null
;
}
newTeam
.
add
(
avatar
);
}
// convert to avatar ids
return
newTeam
.
stream
()
.
map
(
Avatar:
:
getAvatarId
)
.
toList
();
})
.
filter
(
Objects:
:
nonNull
)
.
map
(
TeamInfo:
:
new
)
.
toList
();
this
.
temporaryTeam
=
team
;
}
public
void
useTemporaryTeam
(
int
index
)
{
this
.
useTemporarilyTeamIndex
=
index
;
updateTeamEntities
(
null
);
}
public
void
cleanTemporaryTeam
()
{
// check if using temporary team
if
(
useTemporarilyTeamIndex
<
0
){
return
;
}
this
.
useTemporarilyTeamIndex
=
-
1
;
this
.
temporaryTeam
=
null
;
updateTeamEntities
(
null
);
}
public
synchronized
void
setCurrentTeam
(
int
teamId
)
{
//
if
(
getPlayer
().
isInMultiplayer
())
{
...
...
src/main/java/emu/grasscutter/game/tower/TowerManager.java
0 → 100644
View file @
3d3f36cf
package
emu.grasscutter.game.tower
;
import
dev.morphia.annotations.Entity
;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.server.packet.send.PacketTowerEnterLevelRsp
;
import
java.util.List
;
@Entity
public
class
TowerManager
{
private
final
Player
player
;
public
TowerManager
(
Player
player
)
{
this
.
player
=
player
;
}
private
int
currentLevel
;
private
int
currentFloor
;
public
void
teamSelect
(
int
floor
,
List
<
List
<
Long
>>
towerTeams
)
{
var
floorData
=
GameData
.
getTowerFloorDataMap
().
get
(
floor
);
this
.
currentFloor
=
floorData
.
getFloorId
();
this
.
currentLevel
=
floorData
.
getLevelId
();
player
.
getTeamManager
().
setupTemporaryTeam
(
towerTeams
);
}
public
void
enterLevel
(
int
enterPointId
)
{
var
levelData
=
GameData
.
getTowerLevelDataMap
().
get
(
currentLevel
);
var
id
=
levelData
.
getDungeonId
();
// use team user choose
player
.
getTeamManager
().
useTemporaryTeam
(
0
);
player
.
getServer
().
getDungeonManager
()
.
enterDungeon
(
player
,
enterPointId
,
id
);
player
.
getSession
().
send
(
new
PacketTowerEnterLevelRsp
(
currentFloor
,
currentLevel
));
}
}
src/main/java/emu/grasscutter/server/packet/recv/HandlerTowerEnterLevelReq.java
0 → 100644
View file @
3d3f36cf
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.TowerEnterLevelReqOuterClass.TowerEnterLevelReq
;
import
emu.grasscutter.server.game.GameSession
;
@Opcodes
(
PacketOpcodes
.
TowerEnterLevelReq
)
public
class
HandlerTowerEnterLevelReq
extends
PacketHandler
{
@Override
public
void
handle
(
GameSession
session
,
byte
[]
header
,
byte
[]
payload
)
throws
Exception
{
TowerEnterLevelReq
req
=
TowerEnterLevelReq
.
parseFrom
(
payload
);
//session.send(new PacketTowerCurLevelRecordChangeNotify());
session
.
getPlayer
().
getTowerManager
().
enterLevel
(
req
.
getEnterPointId
());
//session.send(new PacketTowerLevelStarCondNotify());
}
}
src/main/java/emu/grasscutter/server/packet/recv/HandlerTowerTeamSelectReq.java
0 → 100644
View file @
3d3f36cf
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.TowerTeamOuterClass
;
import
emu.grasscutter.net.proto.TowerTeamSelectReqOuterClass.TowerTeamSelectReq
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketTowerTeamSelectRsp
;
@Opcodes
(
PacketOpcodes
.
TowerTeamSelectReq
)
public
class
HandlerTowerTeamSelectReq
extends
PacketHandler
{
@Override
public
void
handle
(
GameSession
session
,
byte
[]
header
,
byte
[]
payload
)
throws
Exception
{
TowerTeamSelectReq
req
=
TowerTeamSelectReq
.
parseFrom
(
payload
);
var
towerTeams
=
req
.
getTowerTeamListList
().
stream
()
.
map
(
TowerTeamOuterClass
.
TowerTeam
::
getAvatarGuidListList
)
.
toList
();
session
.
getPlayer
().
getTowerManager
().
teamSelect
(
req
.
getFloorId
(),
towerTeams
);
session
.
send
(
new
PacketTowerTeamSelectRsp
());
}
}
src/main/java/emu/grasscutter/server/packet/send/PacketTowerAllDataRsp.java
View file @
3d3f36cf
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.data.def.TowerFloorData
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.TowerAllDataRspOuterClass.TowerAllDataRsp
;
import
emu.grasscutter.net.proto.TowerCurLevelRecordOuterClass.TowerCurLevelRecord
;
import
emu.grasscutter.net.proto.TowerFloorRecordOuterClass.TowerFloorRecord
;
import
java.util.stream.Collectors
;
public
class
PacketTowerAllDataRsp
extends
BasePacket
{
public
PacketTowerAllDataRsp
()
{
super
(
PacketOpcodes
.
TowerAllDataRsp
);
var
list
=
GameData
.
getTowerFloorDataMap
().
values
().
stream
()
.
map
(
TowerFloorData:
:
getFloorId
)
.
map
(
id
->
TowerFloorRecord
.
newBuilder
().
setFloorId
(
id
).
build
())
.
collect
(
Collectors
.
toList
());
TowerAllDataRsp
proto
=
TowerAllDataRsp
.
newBuilder
()
.
setTowerScheduleId
(
29
)
.
addTowerFloorRecordList
(
TowerFloorRecord
.
newBuilder
().
setFloorId
(
1001
)
)
.
add
All
TowerFloorRecordList
(
list
)
.
setCurLevelRecord
(
TowerCurLevelRecord
.
newBuilder
().
setIsEmpty
(
true
))
.
setNextScheduleChangeTime
(
Integer
.
MAX_VALUE
)
.
putFloorOpenTimeMap
(
1024
,
1630486800
)
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketTowerEnterLevelRsp.java
0 → 100644
View file @
3d3f36cf
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.TowerEnterLevelRspOuterClass.TowerEnterLevelRsp
;
public
class
PacketTowerEnterLevelRsp
extends
BasePacket
{
public
PacketTowerEnterLevelRsp
(
int
floorId
,
int
levelIndex
)
{
super
(
PacketOpcodes
.
TowerEnterLevelRsp
);
TowerEnterLevelRsp
proto
=
TowerEnterLevelRsp
.
newBuilder
()
.
setFloorId
(
floorId
)
.
setLevelIndex
(
levelIndex
)
.
addTowerBuffIdList
(
4
)
.
addTowerBuffIdList
(
28
)
.
addTowerBuffIdList
(
18
)
.
build
();
this
.
setData
(
proto
);
}
}
src/main/java/emu/grasscutter/server/packet/send/PacketTowerTeamSelectRsp.java
0 → 100644
View file @
3d3f36cf
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.TowerTeamSelectRspOuterClass.TowerTeamSelectRsp
;
public
class
PacketTowerTeamSelectRsp
extends
BasePacket
{
public
PacketTowerTeamSelectRsp
()
{
super
(
PacketOpcodes
.
TowerTeamSelectRsp
);
TowerTeamSelectRsp
proto
=
TowerTeamSelectRsp
.
newBuilder
()
.
build
();
this
.
setData
(
proto
);
}
}
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