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
fc9acf42
Commit
fc9acf42
authored
Jun 25, 2022
by
AnimeGitB
Committed by
Melledy
Jun 25, 2022
Browse files
PlayerProperty Refactor
parent
baafb410
Changes
6
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/game/managers/ResinManager.java
View file @
fc9acf42
...
...
@@ -44,7 +44,6 @@ public class ResinManager {
}
// Send packets.
this
.
player
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
.
player
,
PlayerProperty
.
PROP_PLAYER_RESIN
));
this
.
player
.
sendPacket
(
new
PacketResinChangeNotify
(
this
.
player
));
// Battle Pass trigger
...
...
@@ -70,7 +69,6 @@ public class ResinManager {
}
// Send packets.
this
.
player
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
.
player
,
PlayerProperty
.
PROP_PLAYER_RESIN
));
this
.
player
.
sendPacket
(
new
PacketResinChangeNotify
(
this
.
player
));
}
...
...
@@ -117,7 +115,6 @@ public class ResinManager {
}
// Send packets.
this
.
player
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
.
player
,
PlayerProperty
.
PROP_PLAYER_RESIN
));
this
.
player
.
sendPacket
(
new
PacketResinChangeNotify
(
this
.
player
));
}
...
...
@@ -141,7 +138,6 @@ public class ResinManager {
}
// Send initial notifications on logon.
this
.
player
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
.
player
,
PlayerProperty
.
PROP_PLAYER_RESIN
));
this
.
player
.
sendPacket
(
new
PacketResinChangeNotify
(
this
.
player
));
}
}
src/main/java/emu/grasscutter/game/managers/SotSManager.java
View file @
fc9acf42
...
...
@@ -8,7 +8,6 @@ import emu.grasscutter.game.props.FightProperty;
import
emu.grasscutter.game.props.PlayerProperty
;
import
emu.grasscutter.net.proto.ChangeHpReasonOuterClass.ChangeHpReason
;
import
emu.grasscutter.net.proto.PropChangeReasonOuterClass.PropChangeReason
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketEntityFightPropChangeReasonNotify
;
import
emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify
;
...
...
@@ -26,7 +25,7 @@ public class SotSManager {
private
Timer
autoRecoverTimer
;
private
final
boolean
enablePriorityHealing
=
false
;
public
final
static
int
GlobalMaximumSpringVolume
=
8500000
;
public
final
static
int
GlobalMaximumSpringVolume
=
PlayerProperty
.
PROP_MAX_SPRING_VOLUME
.
getMax
()
;
public
SotSManager
(
Player
player
)
{
this
.
player
=
player
;
...
...
src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java
View file @
fc9acf42
...
...
@@ -2,8 +2,6 @@ package emu.grasscutter.game.managers.stamina;
import
ch.qos.logback.classic.Logger
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.command.commands.NoStaminaCommand
;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.game.avatar.Avatar
;
import
emu.grasscutter.game.entity.EntityAvatar
;
import
emu.grasscutter.game.entity.GameEntity
;
...
...
@@ -112,8 +110,8 @@ public class StaminaManager {
}};
private
final
Logger
logger
=
Grasscutter
.
getLogger
();
public
final
static
int
GlobalCharacterMaximumStamina
=
24000
;
public
final
static
int
GlobalVehicleMaxStamina
=
24000
;
public
final
static
int
GlobalCharacterMaximumStamina
=
PlayerProperty
.
PROP_MAX_STAMINA
.
getMax
()
;
public
final
static
int
GlobalVehicleMaxStamina
=
PlayerProperty
.
PROP_MAX_STAMINA
.
getMax
()
;
private
Position
currentCoordinates
=
new
Position
(
0
,
0
,
0
);
private
Position
previousCoordinates
=
new
Position
(
0
,
0
,
0
);
private
MotionState
currentState
=
MotionState
.
MOTION_STATE_STANDBY
;
...
...
@@ -292,7 +290,6 @@ public class StaminaManager {
// set stamina if is character stamina
if
(
isCharacterStamina
)
{
player
.
setProperty
(
PlayerProperty
.
PROP_CUR_PERSIST_STAMINA
,
newStamina
);
session
.
send
(
new
PacketPlayerPropNotify
(
player
,
PlayerProperty
.
PROP_CUR_PERSIST_STAMINA
));
}
else
{
vehicleStamina
=
newStamina
;
session
.
send
(
new
PacketVehicleStaminaNotify
(
vehicleId
,
((
float
)
newStamina
)
/
100
));
...
...
src/main/java/emu/grasscutter/game/player/Player.java
View file @
fc9acf42
...
...
@@ -259,14 +259,14 @@ public class Player {
this
.
teamManager
=
new
TeamManager
(
this
);
this
.
birthday
=
new
PlayerBirthday
();
this
.
codex
=
new
PlayerCodex
(
this
);
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_LEVEL
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_SPRING_AUTO_USE
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_SPRING_AUTO_USE_PERCENT
,
50
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_FLYABLE
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_TRANSFERABLE
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_MAX_STAMINA
,
24000
);
this
.
setProperty
(
PlayerProperty
.
PROP_CUR_PERSIST_STAMINA
,
24000
);
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_RESIN
,
160
);
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_LEVEL
,
1
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_SPRING_AUTO_USE
,
1
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_SPRING_AUTO_USE_PERCENT
,
50
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_FLYABLE
,
1
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_TRANSFERABLE
,
1
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_MAX_STAMINA
,
24000
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_CUR_PERSIST_STAMINA
,
24000
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_RESIN
,
160
,
false
);
this
.
getFlyCloakList
().
add
(
140001
);
this
.
getNameCardList
().
add
(
210001
);
this
.
getPos
().
set
(
GameConstants
.
START_POSITION
);
...
...
@@ -481,7 +481,6 @@ public class Player {
public
void
setPrimogems
(
int
primogem
)
{
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_HCOIN
,
primogem
);
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
PlayerProperty
.
PROP_PLAYER_HCOIN
));
}
public
int
getMora
()
{
...
...
@@ -490,7 +489,6 @@ public class Player {
public
void
setMora
(
int
mora
)
{
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_SCOIN
,
mora
);
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
PlayerProperty
.
PROP_PLAYER_SCOIN
));
}
public
int
getCrystals
()
{
...
...
@@ -499,7 +497,6 @@ public class Player {
public
void
setCrystals
(
int
crystals
)
{
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_MCOIN
,
crystals
);
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
PlayerProperty
.
PROP_PLAYER_MCOIN
));
}
public
int
getHomeCoin
()
{
...
...
@@ -508,7 +505,6 @@ public class Player {
public
void
setHomeCoin
(
int
coin
)
{
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_HOME_COIN
,
coin
);
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
PlayerProperty
.
PROP_PLAYER_HOME_COIN
));
}
private
int
getExpRequired
(
int
level
)
{
PlayerLevelData
levelData
=
GameData
.
getPlayerLevelDataMap
().
get
(
level
);
...
...
@@ -546,9 +542,6 @@ public class Player {
// Set exp
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_EXP
,
exp
);
// Update player with packet
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
PlayerProperty
.
PROP_PLAYER_EXP
));
}
private
void
updateWorldLevel
()
{
...
...
@@ -621,7 +614,11 @@ public class Player {
}
public
boolean
setProperty
(
PlayerProperty
prop
,
int
value
)
{
return
setPropertyWithSanityCheck
(
prop
,
value
);
return
setPropertyWithSanityCheck
(
prop
,
value
,
true
);
}
public
boolean
setProperty
(
PlayerProperty
prop
,
int
value
,
boolean
sendPacket
)
{
return
setPropertyWithSanityCheck
(
prop
,
value
,
sendPacket
);
}
public
int
getProperty
(
PlayerProperty
prop
)
{
...
...
@@ -1456,8 +1453,8 @@ public class Player {
world
.
addPlayer
(
this
);
// Multiplayer setting
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_MP_SETTING_TYPE
,
this
.
getMpSetting
().
getNumber
());
this
.
setProperty
(
PlayerProperty
.
PROP_IS_MP_MODE_AVAILABLE
,
1
);
this
.
setProperty
(
PlayerProperty
.
PROP_PLAYER_MP_SETTING_TYPE
,
this
.
getMpSetting
().
getNumber
()
,
false
);
this
.
setProperty
(
PlayerProperty
.
PROP_IS_MP_MODE_AVAILABLE
,
1
,
false
);
// Packets
session
.
send
(
new
PacketPlayerDataNotify
(
this
));
// Player data
...
...
@@ -1565,101 +1562,41 @@ public class Player {
this
.
messageHandler
=
messageHandler
;
}
private
void
saveSanityCheckedProperty
(
PlayerProperty
prop
,
int
value
)
{
getProperties
().
put
(
prop
.
getId
(),
value
);
}
private
boolean
setPropertyWithSanityCheck
(
PlayerProperty
prop
,
int
value
)
{
if
(
prop
==
PlayerProperty
.
PROP_EXP
)
{
// 1001
if
(!(
value
>=
0
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_BREAK_LEVEL
)
{
// 1002
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_SATIATION_VAL
)
{
// 1003
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_SATIATION_PENALTY_TIME
)
{
// 1004
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_LEVEL
)
{
// 4001
if
(!(
value
>=
0
&&
value
<=
90
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_LAST_CHANGE_AVATAR_TIME
)
{
// 10001
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_MAX_SPRING_VOLUME
)
{
// 10002
if
(!(
value
>=
0
&&
value
<=
SotSManager
.
GlobalMaximumSpringVolume
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_SPRING_VOLUME
)
{
// 10003
int
playerMaximumSpringVolume
=
getProperty
(
PlayerProperty
.
PROP_MAX_SPRING_VOLUME
);
if
(!(
value
>=
0
&&
value
<=
playerMaximumSpringVolume
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_SPRING_AUTO_USE
)
{
// 10004
if
(!(
value
>=
0
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_SPRING_AUTO_USE_PERCENT
)
{
// 10005
if
(!(
value
>=
0
&&
value
<=
100
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_FLYABLE
)
{
// 10006
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_WEATHER_LOCKED
)
{
// 10007
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_GAME_TIME_LOCKED
)
{
// 10008
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_TRANSFERABLE
)
{
// 10009
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_MAX_STAMINA
)
{
// 10010
if
(!(
value
>=
0
&&
value
<=
StaminaManager
.
GlobalCharacterMaximumStamina
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_PERSIST_STAMINA
)
{
// 10011
int
playerMaximumStamina
=
getProperty
(
PlayerProperty
.
PROP_MAX_STAMINA
);
if
(!(
value
>=
0
&&
value
<=
playerMaximumStamina
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_TEMPORARY_STAMINA
)
{
// 10012
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_LEVEL
)
{
// 10013
if
(!(
0
<
value
&&
value
<=
90
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_EXP
)
{
// 10014
if
(!(
0
<=
value
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_HCOIN
)
{
// 10015
// see PlayerProperty.PROP_PLAYER_HCOIN comments
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_SCOIN
)
{
// 10016
// See 10015
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_MP_SETTING_TYPE
)
{
// 10017
if
(!(
0
<=
value
&&
value
<=
2
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_MP_MODE_AVAILABLE
)
{
// 10018
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WORLD_LEVEL
)
{
// 10019
if
(!(
0
<=
value
&&
value
<=
8
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_RESIN
)
{
// 10020
// Do not set 160 as a cap, because player can have more than 160 when they use fragile resin.
if
(!(
0
<=
value
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WAIT_SUB_HCOIN
)
{
// 10022
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WAIT_SUB_SCOIN
)
{
// 10023
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_ONLY_MP_WITH_PS_PLAYER
)
{
// 10024
if
(!(
0
<=
value
&&
value
<=
1
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_MCOIN
)
{
// 10025
// see 10015
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WAIT_SUB_MCOIN
)
{
// 10026
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_LEGENDARY_KEY
)
{
// 10027
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_IS_HAS_FIRST_SHARE
)
{
// 10028
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_FORGE_POINT
)
{
// 10029
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_CLIMATE_METER
)
{
// 10035
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_CLIMATE_TYPE
)
{
// 10036
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_CLIMATE_AREA_ID
)
{
// 10037
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_CUR_CLIMATE_AREA_CLIMATE_TYPE
)
{
// 10038
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WORLD_LEVEL_LIMIT
)
{
// 10039
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WORLD_LEVEL_ADJUST_CD
)
{
// 10040
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM
)
{
// 10041
// TODO: implement sanity check
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_HOME_COIN
)
{
// 10042
if
(!(
0
<=
value
))
{
return
false
;
}
}
else
if
(
prop
==
PlayerProperty
.
PROP_PLAYER_WAIT_SUB_HOME_COIN
)
{
// 10043
// TODO: implement sanity check
}
saveSanityCheckedProperty
(
prop
,
value
);
public
int
getPropertyMin
(
PlayerProperty
prop
)
{
if
(
prop
.
getDynamicRange
())
{
return
switch
(
prop
)
{
default
->
0
;
};
}
else
{
return
prop
.
getMin
();
}
}
public
int
getPropertyMax
(
PlayerProperty
prop
)
{
if
(
prop
.
getDynamicRange
())
{
return
switch
(
prop
)
{
case
PROP_CUR_SPRING_VOLUME
->
getProperty
(
PlayerProperty
.
PROP_MAX_SPRING_VOLUME
);
case
PROP_CUR_PERSIST_STAMINA
->
getProperty
(
PlayerProperty
.
PROP_MAX_STAMINA
);
default
->
0
;
};
}
else
{
return
prop
.
getMax
();
}
}
private
boolean
setPropertyWithSanityCheck
(
PlayerProperty
prop
,
int
value
,
boolean
sendPacket
)
{
int
min
=
this
.
getPropertyMin
(
prop
);
int
max
=
this
.
getPropertyMax
(
prop
);
if
(
min
<=
value
&&
value
<=
max
)
{
this
.
properties
.
put
(
prop
.
getId
(),
value
);
if
(
sendPacket
)
{
// Update player with packet
this
.
sendPacket
(
new
PacketPlayerPropNotify
(
this
,
prop
));
}
return
true
;
}
else
{
return
false
;
}
}
}
src/main/java/emu/grasscutter/game/props/PlayerProperty.java
View file @
fc9acf42
...
...
@@ -6,41 +6,41 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import
it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
;
public
enum
PlayerProperty
{
PROP_EXP
(
1001
),
PROP_EXP
(
1001
,
0
),
PROP_BREAK_LEVEL
(
1002
),
PROP_SATIATION_VAL
(
1003
),
PROP_SATIATION_PENALTY_TIME
(
1004
),
PROP_LEVEL
(
4001
),
PROP_LEVEL
(
4001
,
0
,
90
),
PROP_LAST_CHANGE_AVATAR_TIME
(
10001
),
PROP_MAX_SPRING_VOLUME
(
10002
),
// Maximum volume of the Statue of the Seven for the player [0, 8500000]
PROP_CUR_SPRING_VOLUME
(
10003
),
// Current volume of the Statue of the Seven [0, PROP_MAX_SPRING_VOLUME]
PROP_IS_SPRING_AUTO_USE
(
10004
),
// Auto HP recovery when approaching the Statue of the Seven [0, 1]
PROP_SPRING_AUTO_USE_PERCENT
(
10005
),
// Auto HP recovery percentage [0, 100]
PROP_IS_FLYABLE
(
10006
),
// Are you in a state that disables your flying ability? e.g. new player [0, 1]
PROP_IS_WEATHER_LOCKED
(
10007
),
PROP_IS_GAME_TIME_LOCKED
(
10008
),
PROP_IS_TRANSFERABLE
(
10009
),
PROP_MAX_STAMINA
(
10010
),
// Maximum stamina of the player (0 - 24000)
PROP_CUR_PERSIST_STAMINA
(
10011
),
// Used stamina of the player (0 - PROP_MAX_STAMINA)
PROP_MAX_SPRING_VOLUME
(
10002
,
0
,
8_500_000
),
// Maximum volume of the Statue of the Seven for the player [0, 8500000]
PROP_CUR_SPRING_VOLUME
(
10003
,
true
),
// Current volume of the Statue of the Seven [0, PROP_MAX_SPRING_VOLUME]
PROP_IS_SPRING_AUTO_USE
(
10004
,
0
,
1
),
// Auto HP recovery when approaching the Statue of the Seven [0, 1]
PROP_SPRING_AUTO_USE_PERCENT
(
10005
,
0
,
100
),
// Auto HP recovery percentage [0, 100]
PROP_IS_FLYABLE
(
10006
,
0
,
1
),
// Are you in a state that disables your flying ability? e.g. new player [0, 1]
PROP_IS_WEATHER_LOCKED
(
10007
,
0
,
1
),
PROP_IS_GAME_TIME_LOCKED
(
10008
,
0
,
1
),
PROP_IS_TRANSFERABLE
(
10009
,
0
,
1
),
PROP_MAX_STAMINA
(
10010
,
0
,
24_000
),
// Maximum stamina of the player (0 - 24000)
PROP_CUR_PERSIST_STAMINA
(
10011
,
true
),
// Used stamina of the player (0 - PROP_MAX_STAMINA)
PROP_CUR_TEMPORARY_STAMINA
(
10012
),
PROP_PLAYER_LEVEL
(
10013
),
PROP_PLAYER_LEVEL
(
10013
,
1
,
60
),
PROP_PLAYER_EXP
(
10014
),
PROP_PLAYER_HCOIN
(
10015
),
// Primogem (-inf, +inf)
// It is known that Mihoyo will make Primogem negative in the cases that a player spends
// his gems and then got a money refund, so negative is allowed.
PROP_PLAYER_SCOIN
(
10016
),
// Mora [0, +inf)
PROP_PLAYER_MP_SETTING_TYPE
(
10017
),
// Do you allow other players to join your game? [0=no 1=direct 2=approval]
PROP_IS_MP_MODE_AVAILABLE
(
10018
),
// 0 if in quest or something that disables MP [0, 1]
PROP_PLAYER_WORLD_LEVEL
(
10019
),
// [0, 8]
PROP_PLAYER_RESIN
(
10020
),
// Original Resin [0,
+inf)
PROP_PLAYER_SCOIN
(
10016
,
0
),
// Mora [0, +inf)
PROP_PLAYER_MP_SETTING_TYPE
(
10017
,
0
,
2
),
// Do you allow other players to join your game? [0=no 1=direct 2=approval]
PROP_IS_MP_MODE_AVAILABLE
(
10018
,
0
,
1
),
// 0 if in quest or something that disables MP [0, 1]
PROP_PLAYER_WORLD_LEVEL
(
10019
,
0
,
8
),
// [0, 8]
PROP_PLAYER_RESIN
(
10020
,
0
,
2000
),
// Original Resin [0,
2000] - note that values above 160 require refills
PROP_PLAYER_WAIT_SUB_HCOIN
(
10022
),
PROP_PLAYER_WAIT_SUB_SCOIN
(
10023
),
PROP_IS_ONLY_MP_WITH_PS_PLAYER
(
10024
),
// Is only MP with PlayStation players? [0, 1]
PROP_IS_ONLY_MP_WITH_PS_PLAYER
(
10024
,
0
,
1
),
// Is only MP with PlayStation players? [0, 1]
PROP_PLAYER_MCOIN
(
10025
),
// Genesis Crystal (-inf, +inf) see 10015
PROP_PLAYER_WAIT_SUB_MCOIN
(
10026
),
PROP_PLAYER_LEGENDARY_KEY
(
10027
),
PROP_IS_HAS_FIRST_SHARE
(
10028
),
PROP_PLAYER_FORGE_POINT
(
10029
),
PROP_PLAYER_FORGE_POINT
(
10029
,
0
,
300_000
),
PROP_CUR_CLIMATE_METER
(
10035
),
PROP_CUR_CLIMATE_TYPE
(
10036
),
PROP_CUR_CLIMATE_AREA_ID
(
10037
),
...
...
@@ -48,22 +48,55 @@ public enum PlayerProperty {
PROP_PLAYER_WORLD_LEVEL_LIMIT
(
10039
),
PROP_PLAYER_WORLD_LEVEL_ADJUST_CD
(
10040
),
PROP_PLAYER_LEGENDARY_DAILY_TASK_NUM
(
10041
),
PROP_PLAYER_HOME_COIN
(
10042
),
// Realm currency [0, +inf)
PROP_PLAYER_HOME_COIN
(
10042
,
0
),
// Realm currency [0, +inf)
PROP_PLAYER_WAIT_SUB_HOME_COIN
(
10043
);
private
final
int
id
;
private
static
final
int
inf
=
Integer
.
MAX_VALUE
;
// Maybe this should be something else?
private
final
int
id
,
min
,
max
;
private
final
boolean
dynamicRange
;
private
static
final
Int2ObjectMap
<
PlayerProperty
>
map
=
new
Int2ObjectOpenHashMap
<>();
static
{
Stream
.
of
(
values
()).
forEach
(
e
->
map
.
put
(
e
.
getId
(),
e
));
}
PlayerProperty
(
int
id
)
{
PlayerProperty
(
int
id
,
int
min
,
int
max
,
boolean
dynamicRange
)
{
this
.
id
=
id
;
this
.
min
=
min
;
this
.
max
=
max
;
this
.
dynamicRange
=
dynamicRange
;
}
PlayerProperty
(
int
id
,
int
min
)
{
this
(
id
,
min
,
inf
,
false
);
}
PlayerProperty
(
int
id
,
int
min
,
int
max
)
{
this
(
id
,
min
,
max
,
false
);
}
PlayerProperty
(
int
id
)
{
this
(
id
,
Integer
.
MIN_VALUE
,
inf
,
false
);
}
PlayerProperty
(
int
id
,
boolean
dynamicRange
)
{
this
(
id
,
Integer
.
MIN_VALUE
,
inf
,
dynamicRange
);
}
public
int
getId
()
{
return
id
;
return
this
.
id
;
}
public
int
getMin
()
{
return
this
.
min
;
}
public
int
getMax
()
{
return
this
.
max
;
}
public
boolean
getDynamicRange
()
{
return
dynamicRange
;
}
public
static
PlayerProperty
getPropById
(
int
value
)
{
...
...
src/main/java/emu/grasscutter/server/packet/recv/HandlerSetPlayerPropReq.java
View file @
fc9acf42
...
...
@@ -10,9 +10,6 @@ import emu.grasscutter.net.proto.SetPlayerPropReqOuterClass.SetPlayerPropReq;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketSetPlayerPropRsp
;
import
java.util.ArrayList
;
import
java.util.List
;
@Opcodes
(
PacketOpcodes
.
SetPlayerPropReq
)
public
class
HandlerSetPlayerPropReq
extends
PacketHandler
{
...
...
@@ -21,11 +18,10 @@ public class HandlerSetPlayerPropReq extends PacketHandler {
// Auto template
SetPlayerPropReq
req
=
SetPlayerPropReq
.
parseFrom
(
payload
);
Player
player
=
session
.
getPlayer
();
List
<
PropValue
>
propList
=
req
.
getPropListList
();
for
(
int
i
=
0
;
i
<
propList
.
size
();
i
++)
{
PlayerProperty
prop
=
PlayerProperty
.
getPropById
(
propList
.
get
(
i
).
getType
());
for
(
PropValue
p
:
req
.
getPropListList
())
{
PlayerProperty
prop
=
PlayerProperty
.
getPropById
(
p
.
getType
());
if
(
prop
==
PlayerProperty
.
PROP_IS_MP_MODE_AVAILABLE
)
{
if
(!
player
.
setProperty
(
prop
,
(
int
)
p
ropList
.
get
(
i
)
.
getVal
()))
{
if
(!
player
.
setProperty
(
prop
,
(
int
)
p
.
getVal
()
,
false
))
{
session
.
send
(
new
PacketSetPlayerPropRsp
(
1
));
return
;
}
...
...
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