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
a48585d1
Commit
a48585d1
authored
May 18, 2022
by
Melledy
Browse files
Implement local specialty spawning
parent
df580bf5
Changes
18
Show whitespace changes
Inline
Side-by-side
src/main/java/emu/grasscutter/data/GameData.java
View file @
a48585d1
...
@@ -75,6 +75,7 @@ public class GameData {
...
@@ -75,6 +75,7 @@ public class GameData {
private
static
final
Int2ObjectMap
<
ShopGoodsData
>
shopGoodsDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
ShopGoodsData
>
shopGoodsDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
CombineData
>
combineDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
CombineData
>
combineDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
RewardPreviewData
>
rewardPreviewDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
RewardPreviewData
>
rewardPreviewDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
GatherData
>
gatherDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerFloorData
>
towerFloorDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerFloorData
>
towerFloorDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerLevelData
>
towerLevelDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerLevelData
>
towerLevelDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerScheduleData
>
towerScheduleDataMap
=
new
Int2ObjectOpenHashMap
<>();
private
static
final
Int2ObjectMap
<
TowerScheduleData
>
towerScheduleDataMap
=
new
Int2ObjectOpenHashMap
<>();
...
@@ -347,4 +348,8 @@ public class GameData {
...
@@ -347,4 +348,8 @@ public class GameData {
public
static
Int2ObjectMap
<
QuestData
>
getQuestDataMap
()
{
public
static
Int2ObjectMap
<
QuestData
>
getQuestDataMap
()
{
return
questDataMap
;
return
questDataMap
;
}
}
public
static
Int2ObjectMap
<
GatherData
>
getGatherDataMap
()
{
return
gatherDataMap
;
}
}
}
src/main/java/emu/grasscutter/data/def/GatherData.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.data.def
;
import
emu.grasscutter.data.GameResource
;
import
emu.grasscutter.data.ResourceType
;
@ResourceType
(
name
=
"GatherExcelConfigData.json"
)
public
class
GatherData
extends
GameResource
{
private
int
PointType
;
private
int
Id
;
private
int
GadgetId
;
private
int
ItemId
;
private
int
Cd
;
// Probably hours
private
boolean
IsForbidGuest
;
private
boolean
InitDisableInteract
;
@Override
public
int
getId
()
{
return
this
.
PointType
;
}
public
int
getGatherId
()
{
return
Id
;
}
public
int
getGadgetId
()
{
return
GadgetId
;
}
public
int
getItemId
()
{
return
ItemId
;
}
public
int
getCd
()
{
return
Cd
;
}
public
boolean
isForbidGuest
()
{
return
IsForbidGuest
;
}
public
boolean
initDisableInteract
()
{
return
InitDisableInteract
;
}
@Override
public
void
onLoad
()
{
}
}
src/main/java/emu/grasscutter/data/def/SceneData.java
View file @
a48585d1
...
@@ -12,7 +12,6 @@ public class SceneData extends GameResource {
...
@@ -12,7 +12,6 @@ public class SceneData extends GameResource {
private
SceneType
Type
;
private
SceneType
Type
;
private
String
ScriptData
;
private
String
ScriptData
;
@Override
@Override
public
int
getId
()
{
public
int
getId
()
{
return
this
.
Id
;
return
this
.
Id
;
...
...
src/main/java/emu/grasscutter/game/entity/EntityGadget.java
View file @
a48585d1
...
@@ -5,8 +5,13 @@ import java.util.List;
...
@@ -5,8 +5,13 @@ import java.util.List;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.data.def.GadgetData
;
import
emu.grasscutter.data.def.GadgetData
;
import
emu.grasscutter.game.entity.gadget.GadgetContent
;
import
emu.grasscutter.game.entity.gadget.GadgetGatherPoint
;
import
emu.grasscutter.game.entity.gadget.GadgetRewardStatue
;
import
emu.grasscutter.game.entity.gadget.GadgetWorktop
;
import
emu.grasscutter.game.props.EntityIdType
;
import
emu.grasscutter.game.props.EntityIdType
;
import
emu.grasscutter.game.props.EntityType
;
import
emu.grasscutter.game.props.EntityType
;
import
emu.grasscutter.game.props.FightProperty
;
import
emu.grasscutter.game.props.PlayerProperty
;
import
emu.grasscutter.game.props.PlayerProperty
;
import
emu.grasscutter.game.world.Scene
;
import
emu.grasscutter.game.world.Scene
;
import
emu.grasscutter.game.world.World
;
import
emu.grasscutter.game.world.World
;
...
@@ -39,7 +44,8 @@ public class EntityGadget extends EntityBaseGadget {
...
@@ -39,7 +44,8 @@ public class EntityGadget extends EntityBaseGadget {
private
int
gadgetId
;
private
int
gadgetId
;
private
int
state
;
private
int
state
;
private
IntSet
worktopOptions
;
private
int
pointType
;
private
GadgetContent
content
;
public
EntityGadget
(
Scene
scene
,
int
gadgetId
,
Position
pos
)
{
public
EntityGadget
(
Scene
scene
,
int
gadgetId
,
Position
pos
)
{
super
(
scene
);
super
(
scene
);
...
@@ -50,19 +56,22 @@ public class EntityGadget extends EntityBaseGadget {
...
@@ -50,19 +56,22 @@ public class EntityGadget extends EntityBaseGadget {
this
.
rot
=
new
Position
();
this
.
rot
=
new
Position
();
}
}
public
EntityGadget
(
Scene
scene
,
int
gadgetId
,
Position
pos
,
GadgetContent
content
)
{
this
(
scene
,
gadgetId
,
pos
);
this
.
content
=
content
;
}
public
GadgetData
getGadgetData
()
{
public
GadgetData
getGadgetData
()
{
return
data
;
return
data
;
}
}
@Override
@Override
public
Position
getPosition
()
{
public
Position
getPosition
()
{
// TODO Auto-generated method stub
return
this
.
pos
;
return
this
.
pos
;
}
}
@Override
@Override
public
Position
getRotation
()
{
public
Position
getRotation
()
{
// TODO Auto-generated method stub
return
this
.
rot
;
return
this
.
rot
;
}
}
...
@@ -82,27 +91,42 @@ public class EntityGadget extends EntityBaseGadget {
...
@@ -82,27 +91,42 @@ public class EntityGadget extends EntityBaseGadget {
this
.
state
=
state
;
this
.
state
=
state
;
}
}
public
IntSet
getWorktopOptions
()
{
public
int
getPointType
()
{
return
worktopOptions
;
return
pointType
;
}
public
void
setPointType
(
int
pointType
)
{
this
.
pointType
=
pointType
;
}
}
public
void
addWorktopOptions
(
int
[]
options
)
{
public
GadgetContent
getContent
()
{
if
(
this
.
worktopOptions
==
null
)
{
return
content
;
this
.
worktopOptions
=
new
IntOpenHashSet
();
}
}
Arrays
.
stream
(
options
).
forEach
(
this
.
worktopOptions
::
add
);
@Deprecated
// Dont use!
public
void
setContent
(
GadgetContent
content
)
{
this
.
content
=
this
.
content
==
null
?
content
:
this
.
content
;
}
}
public
void
removeWorktopOption
(
int
option
)
{
// TODO refactor
if
(
this
.
worktopOptions
==
null
)
{
public
void
buildContent
()
{
if
(
getContent
()
!=
null
||
getGadgetData
()
==
null
||
getGadgetData
().
getType
()
==
null
)
{
return
;
return
;
}
}
this
.
worktopOptions
.
remove
(
option
);
EntityType
type
=
getGadgetData
().
getType
();
GadgetContent
content
=
switch
(
type
)
{
case
GatherPoint
->
new
GadgetGatherPoint
(
this
);
case
Worktop
->
new
GadgetWorktop
(
this
);
case
RewardStatue
->
new
GadgetRewardStatue
(
this
);
default
->
null
;
};
this
.
content
=
content
;
}
}
@Override
@Override
public
Int2FloatOpenHashMap
getFightProperties
()
{
public
Int2FloatOpenHashMap
getFightProperties
()
{
// TODO Auto-generated method stub
return
null
;
return
null
;
}
}
...
@@ -143,11 +167,8 @@ public class EntityGadget extends EntityBaseGadget {
...
@@ -143,11 +167,8 @@ public class EntityGadget extends EntityBaseGadget {
.
setIsEnableInteract
(
true
)
.
setIsEnableInteract
(
true
)
.
setAuthorityPeerId
(
this
.
getScene
().
getWorld
().
getHostPeerId
());
.
setAuthorityPeerId
(
this
.
getScene
().
getWorld
().
getHostPeerId
());
if
(
this
.
getGadgetData
().
getType
()
==
EntityType
.
Worktop
&&
this
.
getWorktopOptions
()
!=
null
)
{
if
(
this
.
getContent
()
!=
null
)
{
WorktopInfo
worktop
=
WorktopInfo
.
newBuilder
()
this
.
getContent
().
onBuildProto
(
gadgetInfo
);
.
addAllOptionList
(
this
.
getWorktopOptions
())
.
build
();
gadgetInfo
.
setWorktop
(
worktop
);
}
}
entityInfo
.
setGadget
(
gadgetInfo
);
entityInfo
.
setGadget
(
gadgetInfo
);
...
...
src/main/java/emu/grasscutter/game/entity/gadget/GadgetContent.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.game.entity.gadget
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo
;
public
abstract
class
GadgetContent
{
private
final
EntityGadget
gadget
;
public
GadgetContent
(
EntityGadget
gadget
)
{
this
.
gadget
=
gadget
;
}
public
EntityGadget
getGadget
()
{
return
gadget
;
}
public
abstract
boolean
onInteract
(
Player
player
);
public
abstract
void
onBuildProto
(
SceneGadgetInfo
.
Builder
gadgetInfo
);
}
src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherPoint.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.game.entity.gadget
;
import
emu.grasscutter.data.GameData
;
import
emu.grasscutter.data.def.GatherData
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.inventory.GameItem
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.game.props.ActionReason
;
import
emu.grasscutter.net.proto.GatherGadgetInfoOuterClass.GatherGadgetInfo
;
import
emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo
;
public
class
GadgetGatherPoint
extends
GadgetContent
{
private
GatherData
gatherData
;
public
GadgetGatherPoint
(
EntityGadget
gadget
)
{
super
(
gadget
);
this
.
gatherData
=
GameData
.
getGatherDataMap
().
get
(
gadget
.
getPointType
());
}
public
GatherData
getGatherData
()
{
return
gatherData
;
}
public
int
getItemId
()
{
return
getGatherData
().
getItemId
();
}
public
boolean
onInteract
(
Player
player
)
{
GameItem
item
=
new
GameItem
(
gatherData
.
getItemId
(),
1
);
player
.
getInventory
().
addItem
(
item
,
ActionReason
.
Gather
);
return
true
;
}
public
void
onBuildProto
(
SceneGadgetInfo
.
Builder
gadgetInfo
)
{
GatherGadgetInfo
gatherGadgetInfo
=
GatherGadgetInfo
.
newBuilder
()
.
setItemId
(
this
.
getItemId
())
.
setIsForbidGuest
(
this
.
getGatherData
().
isForbidGuest
())
.
build
();
gadgetInfo
.
setGatherGadget
(
gatherGadgetInfo
);
}
}
src/main/java/emu/grasscutter/game/entity/gadget/GadgetRewardStatue.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.game.entity.gadget
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType
;
import
emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo
;
import
emu.grasscutter.server.packet.send.PacketGadgetInteractRsp
;
public
class
GadgetRewardStatue
extends
GadgetContent
{
public
GadgetRewardStatue
(
EntityGadget
gadget
)
{
super
(
gadget
);
}
public
boolean
onInteract
(
Player
player
)
{
if
(
player
.
getScene
().
getChallenge
()
!=
null
)
{
player
.
getScene
().
getChallenge
().
getStatueDrops
(
player
);
}
player
.
sendPacket
(
new
PacketGadgetInteractRsp
(
getGadget
(),
InteractType
.
INTERACT_OPEN_STATUE
));
return
false
;
}
public
void
onBuildProto
(
SceneGadgetInfo
.
Builder
gadgetInfo
)
{
}
}
src/main/java/emu/grasscutter/game/entity/gadget/GadgetWorktop.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.game.entity.gadget
;
import
java.util.Arrays
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.player.Player
;
import
emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo
;
import
emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo
;
import
it.unimi.dsi.fastutil.ints.IntOpenHashSet
;
import
it.unimi.dsi.fastutil.ints.IntSet
;
public
class
GadgetWorktop
extends
GadgetContent
{
private
IntSet
worktopOptions
;
public
GadgetWorktop
(
EntityGadget
gadget
)
{
super
(
gadget
);
}
public
IntSet
getWorktopOptions
()
{
return
worktopOptions
;
}
public
void
addWorktopOptions
(
int
[]
options
)
{
if
(
this
.
worktopOptions
==
null
)
{
this
.
worktopOptions
=
new
IntOpenHashSet
();
}
Arrays
.
stream
(
options
).
forEach
(
this
.
worktopOptions
::
add
);
}
public
void
removeWorktopOption
(
int
option
)
{
if
(
this
.
worktopOptions
==
null
)
{
return
;
}
this
.
worktopOptions
.
remove
(
option
);
}
public
boolean
onInteract
(
Player
player
)
{
return
false
;
}
public
void
onBuildProto
(
SceneGadgetInfo
.
Builder
gadgetInfo
)
{
if
(
this
.
worktopOptions
==
null
)
{
return
;
}
WorktopInfo
worktop
=
WorktopInfo
.
newBuilder
()
.
addAllOptionList
(
this
.
getWorktopOptions
())
.
build
();
gadgetInfo
.
setWorktop
(
worktop
);
}
}
src/main/java/emu/grasscutter/game/player/Player.java
View file @
a48585d1
...
@@ -917,22 +917,20 @@ public class Player {
...
@@ -917,22 +917,20 @@ public class Player {
else
else
this
.
getScene
().
broadcastPacket
(
new
PacketGadgetInteractRsp
(
drop
,
InteractType
.
INTERACT_PICK_ITEM
));
this
.
getScene
().
broadcastPacket
(
new
PacketGadgetInteractRsp
(
drop
,
InteractType
.
INTERACT_PICK_ITEM
));
}
}
}
else
if
(
entity
instanceof
EntityGadget
)
{
}
else
if
(
entity
instanceof
EntityGadget
gadget
)
{
EntityGadget
gadget
=
(
EntityGadget
)
entity
;
if
(
gadget
.
getContent
()
==
null
)
{
return
;
if
(
gadget
.
getGadgetData
().
getType
()
==
EntityType
.
RewardStatue
)
{
if
(
scene
.
getChallenge
()
!=
null
)
{
scene
.
getChallenge
().
getStatueDrops
(
this
);
}
}
this
.
sendPacket
(
new
PacketGadgetInteractRsp
(
gadget
,
InteractType
.
INTERACT_OPEN_STATUE
));
boolean
shouldDelete
=
gadget
.
getContent
().
onInteract
(
this
);
if
(
shouldDelete
)
{
entity
.
getScene
().
removeEntity
(
entity
);
}
}
}
else
{
}
else
{
// Delete directly
// Delete directly
entity
.
getScene
().
removeEntity
(
entity
);
entity
.
getScene
().
removeEntity
(
entity
);
}
}
return
;
}
}
public
void
onPause
()
{
public
void
onPause
()
{
...
...
src/main/java/emu/grasscutter/game/world/Scene.java
View file @
a48585d1
...
@@ -23,6 +23,7 @@ import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
...
@@ -23,6 +23,7 @@ import emu.grasscutter.net.proto.VisionTypeOuterClass.VisionType;
import
emu.grasscutter.scripts.SceneIndexManager
;
import
emu.grasscutter.scripts.SceneIndexManager
;
import
emu.grasscutter.scripts.SceneScriptManager
;
import
emu.grasscutter.scripts.SceneScriptManager
;
import
emu.grasscutter.scripts.data.SceneBlock
;
import
emu.grasscutter.scripts.data.SceneBlock
;
import
emu.grasscutter.scripts.data.SceneGadget
;
import
emu.grasscutter.scripts.data.SceneGroup
;
import
emu.grasscutter.scripts.data.SceneGroup
;
import
emu.grasscutter.server.packet.send.PacketAvatarSkillInfoNotify
;
import
emu.grasscutter.server.packet.send.PacketAvatarSkillInfoNotify
;
import
emu.grasscutter.server.packet.send.PacketDungeonChallengeFinishNotify
;
import
emu.grasscutter.server.packet.send.PacketDungeonChallengeFinishNotify
;
...
@@ -578,6 +579,14 @@ public class Scene {
...
@@ -578,6 +579,14 @@ public class Scene {
continue
;
continue
;
}
}
// Load garbages
List
<
SceneGadget
>
garbageGadgets
=
group
.
getGarbageGadgets
();
if
(
garbageGadgets
!=
null
)
{
garbageGadgets
.
forEach
(
g
->
scriptManager
.
createGadgets
(
group
.
id
,
group
.
block_id
,
g
));
}
// Load suites
int
suite
=
group
.
init_config
.
suite
;
int
suite
=
group
.
init_config
.
suite
;
if
(
suite
==
0
)
{
if
(
suite
==
0
)
{
...
...
src/main/java/emu/grasscutter/scripts/SceneScriptManager.java
View file @
a48585d1
...
@@ -362,6 +362,8 @@ public class SceneScriptManager {
...
@@ -362,6 +362,8 @@ public class SceneScriptManager {
entity
.
setGroupId
(
groupId
);
entity
.
setGroupId
(
groupId
);
entity
.
getRotation
().
set
(
g
.
rot
);
entity
.
getRotation
().
set
(
g
.
rot
);
entity
.
setState
(
g
.
state
);
entity
.
setState
(
g
.
state
);
entity
.
setPointType
(
g
.
point_type
);
entity
.
buildContent
();
return
entity
;
return
entity
;
}
}
...
...
src/main/java/emu/grasscutter/scripts/ScriptLib.java
View file @
a48585d1
...
@@ -4,6 +4,7 @@ import emu.grasscutter.game.dungeons.DungeonChallenge;
...
@@ -4,6 +4,7 @@ import emu.grasscutter.game.dungeons.DungeonChallenge;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.entity.EntityMonster
;
import
emu.grasscutter.game.entity.EntityMonster
;
import
emu.grasscutter.game.entity.GameEntity
;
import
emu.grasscutter.game.entity.GameEntity
;
import
emu.grasscutter.game.entity.gadget.GadgetWorktop
;
import
emu.grasscutter.scripts.data.SceneGroup
;
import
emu.grasscutter.scripts.data.SceneGroup
;
import
emu.grasscutter.scripts.data.SceneRegion
;
import
emu.grasscutter.scripts.data.SceneRegion
;
import
emu.grasscutter.server.packet.send.PacketCanUseSkillNotify
;
import
emu.grasscutter.server.packet.send.PacketCanUseSkillNotify
;
...
@@ -83,21 +84,22 @@ public class ScriptLib {
...
@@ -83,21 +84,22 @@ public class ScriptLib {
public
int
SetWorktopOptionsByGroupId
(
int
groupId
,
int
configId
,
int
[]
options
)
{
public
int
SetWorktopOptionsByGroupId
(
int
groupId
,
int
configId
,
int
[]
options
)
{
logger
.
debug
(
"[LUA] Call SetWorktopOptionsByGroupId with {},{},{}"
,
logger
.
debug
(
"[LUA] Call SetWorktopOptionsByGroupId with {},{},{}"
,
groupId
,
configId
,
options
);
groupId
,
configId
,
options
);
Optional
<
GameEntity
>
entity
=
getSceneScriptManager
().
getScene
().
getEntities
().
values
().
stream
()
Optional
<
GameEntity
>
entity
=
getSceneScriptManager
().
getScene
().
getEntities
().
values
().
stream
()
.
filter
(
e
->
e
.
getConfigId
()
==
configId
&&
e
.
getGroupId
()
==
groupId
).
findFirst
();
.
filter
(
e
->
e
.
getConfigId
()
==
configId
&&
e
.
getGroupId
()
==
groupId
).
findFirst
();
if
(
entity
.
isEmpty
())
{
if
(
entity
.
isEmpty
()
||
!(
entity
.
get
()
instanceof
EntityGadget
gadget
))
{
return
1
;
return
1
;
}
}
if
(!(
entity
.
get
()
instanceof
EntityGadget
))
{
if
(!(
gadget
.
getContent
()
instanceof
GadgetWorktop
worktop
))
{
return
1
;
return
1
;
}
}
EntityGadget
gadget
=
(
EntityGadget
)
entity
.
get
();
worktop
.
addWorktopOptions
(
options
);
gadget
.
addWorktopOptions
(
options
);
getSceneScriptManager
().
getScene
().
broadcastPacket
(
new
PacketWorktopOptionNotify
(
gadget
));
getSceneScriptManager
().
getScene
().
broadcastPacket
(
new
PacketWorktopOptionNotify
(
gadget
));
return
0
;
return
0
;
}
}
...
@@ -107,18 +109,17 @@ public class ScriptLib {
...
@@ -107,18 +109,17 @@ public class ScriptLib {
Optional
<
GameEntity
>
entity
=
getSceneScriptManager
().
getScene
().
getEntities
().
values
().
stream
()
Optional
<
GameEntity
>
entity
=
getSceneScriptManager
().
getScene
().
getEntities
().
values
().
stream
()
.
filter
(
e
->
e
.
getConfigId
()
==
configId
&&
e
.
getGroupId
()
==
groupId
).
findFirst
();
.
filter
(
e
->
e
.
getConfigId
()
==
configId
&&
e
.
getGroupId
()
==
groupId
).
findFirst
();
if
(
entity
.
isEmpty
())
{
if
(
entity
.
isEmpty
()
||
!(
entity
.
get
()
instanceof
EntityGadget
gadget
)
)
{
return
1
;
return
1
;
}
}
if
(!(
entity
.
get
()
instanceof
EntityGadget
))
{
if
(!(
gadget
.
getContent
()
instanceof
GadgetWorktop
worktop
))
{
return
1
;
return
1
;
}
}
EntityGadget
gadget
=
(
EntityGadget
)
entity
.
get
();
worktop
.
removeWorktopOption
(
option
);
gadget
.
removeWorktopOption
(
option
);
getSceneScriptManager
().
getScene
().
broadcastPacket
(
new
PacketWorktopOptionNotify
(
gadget
));
getSceneScriptManager
().
getScene
().
broadcastPacket
(
new
PacketWorktopOptionNotify
(
gadget
));
return
0
;
return
0
;
}
}
...
...
src/main/java/emu/grasscutter/scripts/ScriptLoader.java
View file @
a48585d1
...
@@ -95,7 +95,7 @@ public class ScriptLoader {
...
@@ -95,7 +95,7 @@ public class ScriptLoader {
return
sc
.
get
();
return
sc
.
get
();
}
}
Grasscutter
.
getLogger
().
info
(
"Load
ed S
cript"
+
path
);
Grasscutter
.
getLogger
().
info
(
"Load
ing s
cript
"
+
path
);
File
file
=
new
File
(
path
);
File
file
=
new
File
(
path
);
...
@@ -106,7 +106,7 @@ public class ScriptLoader {
...
@@ -106,7 +106,7 @@ public class ScriptLoader {
scriptsCache
.
put
(
path
,
new
SoftReference
<>(
script
));
scriptsCache
.
put
(
path
,
new
SoftReference
<>(
script
));
return
script
;
return
script
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
Grasscutter
.
getLogger
().
error
(
"Load
ed S
cript {} failed!"
,
path
,
e
);
Grasscutter
.
getLogger
().
error
(
"Load
ing s
cript {} failed!"
,
path
,
e
);
return
null
;
return
null
;
}
}
...
...
src/main/java/emu/grasscutter/scripts/data/SceneBusiness.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.scripts.data
;
import
lombok.Setter
;
import
lombok.ToString
;
@ToString
@Setter
public
class
SceneBusiness
{
public
int
type
;
}
src/main/java/emu/grasscutter/scripts/data/SceneGadget.java
View file @
a48585d1
...
@@ -8,4 +8,5 @@ import lombok.ToString;
...
@@ -8,4 +8,5 @@ import lombok.ToString;
public
class
SceneGadget
extends
SceneObject
{
public
class
SceneGadget
extends
SceneObject
{
public
int
gadget_id
;
public
int
gadget_id
;
public
int
state
;
public
int
state
;
public
int
point_type
;
}
}
src/main/java/emu/grasscutter/scripts/data/SceneGarbage.java
0 → 100644
View file @
a48585d1
package
emu.grasscutter.scripts.data
;
import
java.util.List
;
import
lombok.Setter
;
import
lombok.ToString
;
@ToString
@Setter
public
class
SceneGarbage
{
public
List
<
SceneGadget
>
gadgets
;
}
src/main/java/emu/grasscutter/scripts/data/SceneGroup.java
View file @
a48585d1
...
@@ -26,21 +26,20 @@ public class SceneGroup {
...
@@ -26,21 +26,20 @@ public class SceneGroup {
public
int
refresh_id
;
public
int
refresh_id
;
public
Position
pos
;
public
Position
pos
;
/**
public
Map
<
Integer
,
SceneMonster
>
monsters
;
// <ConfigId, Monster>
* ConfigId - Monster
public
Map
<
Integer
,
SceneGadget
>
gadgets
;
// <ConfigId, Gadgets>
*/
public
Map
<
Integer
,
SceneMonster
>
monsters
;
/**
* ConfigId - Gadget
*/
public
Map
<
Integer
,
SceneGadget
>
gadgets
;
public
List
<
SceneTrigger
>
triggers
;
public
List
<
SceneTrigger
>
triggers
;
public
List
<
SceneRegion
>
regions
;
public
List
<
SceneRegion
>
regions
;
public
List
<
SceneSuite
>
suites
;
public
List
<
SceneSuite
>
suites
;
public
List
<
SceneVar
>
variables
;
public
SceneBusiness
business
;
public
SceneGarbage
garbages
;
public
SceneInitConfig
init_config
;
public
SceneInitConfig
init_config
;
public
List
<
SceneVar
>
variables
;
private
transient
boolean
loaded
;
// Not an actual variable in the scripts either
private
transient
boolean
loaded
;
// Not an actual variable in the scripts either
private
transient
CompiledScript
script
;
public
boolean
isLoaded
()
{
public
boolean
isLoaded
()
{
return
loaded
;
return
loaded
;
...
@@ -50,7 +49,13 @@ public class SceneGroup {
...
@@ -50,7 +49,13 @@ public class SceneGroup {
this
.
loaded
=
loaded
;
this
.
loaded
=
loaded
;
}
}
private
transient
CompiledScript
script
;
// Not an actual variable in the scripts either
public
int
getBusinessType
()
{
return
this
.
business
==
null
?
0
:
this
.
business
.
type
;
}
public
List
<
SceneGadget
>
getGarbageGadgets
()
{
return
this
.
garbages
==
null
?
null
:
this
.
garbages
.
gadgets
;
}
public
CompiledScript
getScript
()
{
public
CompiledScript
getScript
()
{
return
script
;
return
script
;
...
@@ -75,6 +80,7 @@ public class SceneGroup {
...
@@ -75,6 +80,7 @@ public class SceneGroup {
}
}
this
.
script
=
cs
;
this
.
script
=
cs
;
// Eval script
// Eval script
try
{
try
{
cs
.
eval
(
bindings
);
cs
.
eval
(
bindings
);
...
@@ -93,12 +99,13 @@ public class SceneGroup {
...
@@ -93,12 +99,13 @@ public class SceneGroup {
suites
=
ScriptLoader
.
getSerializer
().
toList
(
SceneSuite
.
class
,
bindings
.
get
(
"suites"
));
suites
=
ScriptLoader
.
getSerializer
().
toList
(
SceneSuite
.
class
,
bindings
.
get
(
"suites"
));
regions
=
ScriptLoader
.
getSerializer
().
toList
(
SceneRegion
.
class
,
bindings
.
get
(
"regions"
));
regions
=
ScriptLoader
.
getSerializer
().
toList
(
SceneRegion
.
class
,
bindings
.
get
(
"regions"
));
garbages
=
ScriptLoader
.
getSerializer
().
toObject
(
SceneGarbage
.
class
,
bindings
.
get
(
"garbages"
));
init_config
=
ScriptLoader
.
getSerializer
().
toObject
(
SceneInitConfig
.
class
,
bindings
.
get
(
"init_config"
));
init_config
=
ScriptLoader
.
getSerializer
().
toObject
(
SceneInitConfig
.
class
,
bindings
.
get
(
"init_config"
));
// Add variables to suite
// Add variables to suite
variables
=
ScriptLoader
.
getSerializer
().
toList
(
SceneVar
.
class
,
bindings
.
get
(
"variables"
));
variables
=
ScriptLoader
.
getSerializer
().
toList
(
SceneVar
.
class
,
bindings
.
get
(
"variables"
));
// Add monsters to suite
// Add monsters
and gadgets
to suite
for
(
SceneSuite
suite
:
suites
)
{
for
(
SceneSuite
suite
:
suites
)
{
suite
.
sceneMonsters
=
new
ArrayList
<>(
suite
.
sceneMonsters
=
new
ArrayList
<>(
suite
.
monsters
.
stream
()
suite
.
monsters
.
stream
()
...
@@ -118,6 +125,7 @@ public class SceneGroup {
...
@@ -118,6 +125,7 @@ public class SceneGroup {
}
catch
(
ScriptException
e
)
{
}
catch
(
ScriptException
e
)
{
Grasscutter
.
getLogger
().
error
(
"Error loading group "
+
id
+
" in scene "
+
sceneId
,
e
);
Grasscutter
.
getLogger
().
error
(
"Error loading group "
+
id
+
" in scene "
+
sceneId
,
e
);
}
}
Grasscutter
.
getLogger
().
info
(
"group {} in scene {} is loaded successfully."
,
id
,
sceneId
);
Grasscutter
.
getLogger
().
info
(
"group {} in scene {} is loaded successfully."
,
id
,
sceneId
);
return
this
;
return
this
;
}
}
...
...
src/main/java/emu/grasscutter/server/packet/send/PacketWorktopOptionNotify.java
View file @
a48585d1
package
emu.grasscutter.server.packet.send
;
package
emu.grasscutter.server.packet.send
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.entity.EntityGadget
;
import
emu.grasscutter.game.entity.gadget.GadgetWorktop
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.BasePacket
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.packet.PacketOpcodes
;
import
emu.grasscutter.net.proto.WorktopOptionNotifyOuterClass.WorktopOptionNotify
;
import
emu.grasscutter.net.proto.WorktopOptionNotifyOuterClass.WorktopOptionNotify
;
...
@@ -13,8 +14,8 @@ public class PacketWorktopOptionNotify extends BasePacket {
...
@@ -13,8 +14,8 @@ public class PacketWorktopOptionNotify extends BasePacket {
WorktopOptionNotify
.
Builder
proto
=
WorktopOptionNotify
.
newBuilder
()
WorktopOptionNotify
.
Builder
proto
=
WorktopOptionNotify
.
newBuilder
()
.
setGadgetEntityId
(
gadget
.
getId
());
.
setGadgetEntityId
(
gadget
.
getId
());
if
(
gadget
.
get
WorktopOptions
()
!=
null
)
{
if
(
gadget
.
get
Content
()
instanceof
GadgetWorktop
worktop
)
{
proto
.
addAllOptionList
(
gadget
.
getWorktopOptions
());
proto
.
addAllOptionList
(
worktop
.
getWorktopOptions
());
}
}
this
.
setData
(
proto
);
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