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
60cfa40d
Commit
60cfa40d
authored
Apr 28, 2022
by
Melledy
Browse files
Merge branch 'development' into dungeon-scripts
parents
d71b7abf
d1e5fad9
Changes
26
Hide whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/server/packet/recv/HandlerVehicleInteractReq.java
0 → 100644
View file @
60cfa40d
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.VehicleInteractReqOuterClass
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketVehicleInteractRsp
;
@Opcodes
(
PacketOpcodes
.
VehicleInteractReq
)
public
class
HandlerVehicleInteractReq
extends
PacketHandler
{
@Override
public
void
handle
(
GameSession
session
,
byte
[]
header
,
byte
[]
payload
)
throws
Exception
{
VehicleInteractReqOuterClass
.
VehicleInteractReq
req
=
VehicleInteractReqOuterClass
.
VehicleInteractReq
.
parseFrom
(
payload
);
session
.
send
(
new
PacketVehicleInteractRsp
(
session
.
getPlayer
(),
req
.
getEntityId
(),
req
.
getInteractType
()));
}
}
src/main/java/emu/grasscutter/server/packet/recv/HandlerVehicleSpawnReq.java
0 → 100644
View file @
60cfa40d
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.VehicleSpawnReqOuterClass
;
import
emu.grasscutter.server.game.GameSession
;
import
emu.grasscutter.server.packet.send.PacketVehicleSpawnRsp
;
import
emu.grasscutter.utils.Position
;
@Opcodes
(
PacketOpcodes
.
VehicleSpawnReq
)
public
class
HandlerVehicleSpawnReq
extends
PacketHandler
{
@Override
public
void
handle
(
GameSession
session
,
byte
[]
header
,
byte
[]
payload
)
throws
Exception
{
VehicleSpawnReqOuterClass
.
VehicleSpawnReq
req
=
VehicleSpawnReqOuterClass
.
VehicleSpawnReq
.
parseFrom
(
payload
);
session
.
send
(
new
PacketVehicleSpawnRsp
(
session
.
getPlayer
(),
req
.
getVehicleId
(),
req
.
getPointId
(),
new
Position
(
req
.
getPos
()),
new
Position
(
req
.
getRot
())));
}
}
src/main/java/emu/grasscutter/server/packet/send/PacketGetShopRsp.java
View file @
60cfa40d
...
...
@@ -3,6 +3,7 @@ package emu.grasscutter.server.packet.send;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.game.shop.ShopInfo
;
import
emu.grasscutter.game.shop.ShopLimit
;
import
emu.grasscutter.game.shop.ShopManager
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
...
...
@@ -10,13 +11,13 @@ import emu.grasscutter.net.proto.GetShopRspOuterClass;
import
emu.grasscutter.net.proto.ItemParamOuterClass
;
import
emu.grasscutter.net.proto.ShopGoodsOuterClass.ShopGoods
;
import
emu.grasscutter.net.proto.ShopOuterClass.Shop
;
import
emu.grasscutter.utils.Utils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
public
class
PacketGetShopRsp
extends
BasePacket
{
public
PacketGetShopRsp
(
Player
inv
,
int
shopType
)
{
super
(
PacketOpcodes
.
GetShopRsp
);
...
...
@@ -36,25 +37,42 @@ public class PacketGetShopRsp extends BasePacket {
.
setGoodsItem
(
ItemParamOuterClass
.
ItemParam
.
newBuilder
().
setItemId
(
info
.
getGoodsItem
().
getId
()).
setCount
(
info
.
getGoodsItem
().
getCount
()).
build
())
.
setScoin
(
info
.
getScoin
())
.
setHcoin
(
info
.
getHcoin
())
.
setBoughtNum
(
inv
.
getGoodsLimitNum
(
info
.
getGoodsId
()))
.
setBuyLimit
(
info
.
getBuyLimit
())
.
setBeginTime
(
info
.
getBeginTime
())
.
setEndTime
(
info
.
getEndTime
())
.
setNextRefreshTime
(
info
.
getNextRefreshTime
())
.
setMinLevel
(
info
.
getMinLevel
())
.
setMaxLevel
(
info
.
getMaxLevel
())
.
addAllPreGoodsIdList
(
info
.
getPreGoodsIdList
())
.
setMcoin
(
info
.
getMcoin
())
.
setDisableType
(
info
.
getDisableType
())
.
setSecondarySheetId
(
info
.
getSecondarySheetId
());
if
(
info
.
getCostItemList
()
!=
null
)
{
goods
.
addAllCostItemList
(
info
.
getCostItemList
().
stream
().
map
(
x
->
ItemParamOuterClass
.
ItemParam
.
newBuilder
().
setItemId
(
x
.
getId
()).
setCount
(
x
.
getCount
()).
build
()).
collect
(
Collectors
.
toList
()));
}
if
(
info
.
getPreGoodsIdList
()
!=
null
)
{
goods
.
addAllPreGoodsIdList
(
info
.
getPreGoodsIdList
());
}
int
currentTs
=
Utils
.
getCurrentSeconds
();
ShopLimit
currentShopLimit
=
inv
.
getGoodsLimit
(
info
.
getGoodsId
());
int
nextRefreshTime
=
ShopManager
.
getShopNextRefreshTime
(
info
);
if
(
currentShopLimit
!=
null
)
{
if
(
currentShopLimit
.
getNextRefreshTime
()
<
currentTs
)
{
// second game day
currentShopLimit
.
setHasBoughtInPeriod
(
0
);
currentShopLimit
.
setNextRefreshTime
(
nextRefreshTime
);
}
goods
.
setBoughtNum
(
currentShopLimit
.
getHasBoughtInPeriod
());
goods
.
setNextRefreshTime
(
currentShopLimit
.
getNextRefreshTime
());
}
else
{
inv
.
addShopLimit
(
goods
.
getGoodsId
(),
0
,
nextRefreshTime
);
// save generated refresh time
goods
.
setNextRefreshTime
(
nextRefreshTime
);
}
goodsList
.
add
(
goods
.
build
());
}
shop
.
addAllGoodsList
(
goodsList
);
}
inv
.
save
();
this
.
setData
(
GetShopRspOuterClass
.
GetShopRsp
.
newBuilder
().
setShop
(
shop
).
build
());
}
}
src/main/java/emu/grasscutter/server/packet/send/PacketVehicleInteractRsp.java
0 → 100644
View file @
60cfa40d
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.game.entity.GameEntity
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.VehicleInteractTypeOuterClass.VehicleInteractType
;
import
emu.grasscutter.net.proto.VehicleInteractRspOuterClass.VehicleInteractRsp
;
import
emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember
;
public
class
PacketVehicleInteractRsp
extends
BasePacket
{
public
PacketVehicleInteractRsp
(
Player
player
,
int
entityId
,
VehicleInteractType
interactType
)
{
super
(
PacketOpcodes
.
VehicleInteractRsp
);
VehicleInteractRsp
.
Builder
proto
=
VehicleInteractRsp
.
newBuilder
();
GameEntity
vehicle
=
player
.
getScene
().
getEntityById
(
entityId
);
if
(
vehicle
!=
null
)
{
proto
.
setEntityId
(
vehicle
.
getId
());
proto
.
setInteractType
(
interactType
);
VehicleMember
vehicleMember
=
VehicleMember
.
newBuilder
()
.
setUid
(
player
.
getUid
())
.
setAvatarGuid
(
player
.
getTeamManager
().
getCurrentCharacterGuid
())
.
build
();
proto
.
setMember
(
vehicleMember
);
}
this
.
setData
(
proto
.
build
());
}
}
src/main/java/emu/grasscutter/server/packet/send/PacketVehicleSpawnRsp.java
0 → 100644
View file @
60cfa40d
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.game.entity.EntityVehicle
;
import
emu.grasscutter.game.props.FightProperty
;
import
emu.grasscutter.game.entity.GameEntity
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.VehicleSpawnRspOuterClass.VehicleSpawnRsp
;
import
emu.grasscutter.utils.Position
;
import
it.unimi.dsi.fastutil.ints.Int2ObjectMap
;
public
class
PacketVehicleSpawnRsp
extends
BasePacket
{
public
PacketVehicleSpawnRsp
(
Player
player
,
int
vehicleId
,
int
pointId
,
Position
pos
,
Position
rot
)
{
super
(
PacketOpcodes
.
VehicleSpawnRsp
);
VehicleSpawnRsp
.
Builder
proto
=
VehicleSpawnRsp
.
newBuilder
();
EntityVehicle
vehicle
=
new
EntityVehicle
(
player
.
getScene
(),
player
,
vehicleId
,
pointId
,
pos
,
rot
);
switch
(
vehicleId
)
{
// TODO: Not hardcode this. Waverider (skiff)
case
45001001
,
45001002
->
{
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_BASE_HP
,
10000
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_BASE_ATTACK
,
100
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_CUR_ATTACK
,
100
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_CUR_HP
,
10000
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_CUR_DEFENSE
,
0
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_CUR_SPEED
,
0
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_CHARGE_EFFICIENCY
,
0
);
vehicle
.
addFightProperty
(
FightProperty
.
FIGHT_PROP_MAX_HP
,
10000
);
}
default
->
{}
}
player
.
getScene
().
addEntity
(
vehicle
);
proto
.
setVehicleId
(
vehicleId
);
proto
.
setEntityId
(
vehicle
.
getId
());
this
.
setData
(
proto
.
build
());
}
}
src/main/java/emu/grasscutter/utils/Utils.java
View file @
60cfa40d
...
...
@@ -3,6 +3,8 @@ package emu.grasscutter.utils;
import
java.io.*
;
import
java.nio.file.Files
;
import
java.nio.file.StandardCopyOption
;
import
java.time.*
;
import
java.time.temporal.TemporalAdjusters
;
import
java.util.Random
;
import
emu.grasscutter.Config
;
...
...
@@ -192,4 +194,40 @@ public final class Utils {
if
(
exit
)
System
.
exit
(
1
);
}
public
static
int
GetNextTimestampOfThisHour
(
int
hour
,
String
timeZone
,
int
param
)
{
ZonedDateTime
zonedDateTime
=
ZonedDateTime
.
now
(
ZoneId
.
of
(
timeZone
));
for
(
int
i
=
0
;
i
<
param
;
i
++){
if
(
zonedDateTime
.
getHour
()
<
hour
)
{
zonedDateTime
=
zonedDateTime
.
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
else
{
zonedDateTime
=
zonedDateTime
.
plusDays
(
1
).
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
}
return
(
int
)
zonedDateTime
.
toInstant
().
atZone
(
ZoneOffset
.
UTC
).
toEpochSecond
();
}
public
static
int
GetNextTimestampOfThisHourInNextWeek
(
int
hour
,
String
timeZone
,
int
param
)
{
ZonedDateTime
zonedDateTime
=
ZonedDateTime
.
now
(
ZoneId
.
of
(
timeZone
));
for
(
int
i
=
0
;
i
<
param
;
i
++)
{
if
(
zonedDateTime
.
getDayOfWeek
()
==
DayOfWeek
.
MONDAY
&&
zonedDateTime
.
getHour
()
<
hour
)
{
zonedDateTime
=
ZonedDateTime
.
now
(
ZoneId
.
of
(
timeZone
)).
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
else
{
zonedDateTime
=
zonedDateTime
.
with
(
TemporalAdjusters
.
next
(
DayOfWeek
.
MONDAY
)).
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
}
return
(
int
)
zonedDateTime
.
toInstant
().
atZone
(
ZoneOffset
.
UTC
).
toEpochSecond
();
}
public
static
int
GetNextTimestampOfThisHourInNextMonth
(
int
hour
,
String
timeZone
,
int
param
)
{
ZonedDateTime
zonedDateTime
=
ZonedDateTime
.
now
(
ZoneId
.
of
(
timeZone
));
for
(
int
i
=
0
;
i
<
param
;
i
++)
{
if
(
zonedDateTime
.
getDayOfMonth
()
==
1
&&
zonedDateTime
.
getHour
()
<
hour
)
{
zonedDateTime
=
ZonedDateTime
.
now
(
ZoneId
.
of
(
timeZone
)).
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
else
{
zonedDateTime
=
zonedDateTime
.
with
(
TemporalAdjusters
.
firstDayOfNextMonth
()).
withHour
(
hour
).
withMinute
(
0
).
withSecond
(
0
);
}
}
return
(
int
)
zonedDateTime
.
toInstant
().
atZone
(
ZoneOffset
.
UTC
).
toEpochSecond
();
}
}
Prev
1
2
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