Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
8c860308
Commit
8c860308
authored
2 years ago
by
Melledy
Browse files
Options
Download
Email Patches
Plain Diff
Fix bad casting exceptions with scene garbages objects
parent
0dac404f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
src/main/java/emu/grasscutter/game/world/Scene.java
+1
-0
src/main/java/emu/grasscutter/game/world/Scene.java
src/main/java/emu/grasscutter/scripts/SceneScriptManager.java
+4
-1
...main/java/emu/grasscutter/scripts/SceneScriptManager.java
src/main/java/emu/grasscutter/scripts/ScriptUtils.java
+28
-0
src/main/java/emu/grasscutter/scripts/ScriptUtils.java
src/main/java/emu/grasscutter/scripts/data/SceneGroup.java
+14
-2
src/main/java/emu/grasscutter/scripts/data/SceneGroup.java
src/main/java/emu/grasscutter/scripts/serializer/LuaSerializer.java
+13
-2
...ava/emu/grasscutter/scripts/serializer/LuaSerializer.java
with
60 additions
and
5 deletions
+60
-5
src/main/java/emu/grasscutter/game/world/Scene.java
View file @
8c860308
...
...
@@ -599,6 +599,7 @@ public class Scene {
.
map
(
g
->
scriptManager
.
createGadget
(
group
.
id
,
group
.
block_id
,
g
)).
toList
());
entities
.
addAll
(
suiteData
.
sceneMonsters
.
stream
()
.
map
(
mob
->
scriptManager
.
createMonster
(
group
.
id
,
group
.
block_id
,
mob
)).
toList
());
suite
++;
}
while
(
suite
<
group
.
init_config
.
end_suite
);
}
...
...
This diff is collapsed.
Click to expand it.
src/main/java/emu/grasscutter/scripts/SceneScriptManager.java
View file @
8c860308
...
...
@@ -164,7 +164,10 @@ public class SceneScriptManager {
public
void
loadGroupFromScript
(
SceneGroup
group
)
{
group
.
load
(
getScene
().
getId
());
group
.
variables
.
forEach
(
var
->
this
.
getVariables
().
put
(
var
.
name
,
var
.
value
));
if
(
group
.
variables
!=
null
)
{
group
.
variables
.
forEach
(
var
->
this
.
getVariables
().
put
(
var
.
name
,
var
.
value
));
}
this
.
sceneGroups
.
put
(
group
.
id
,
group
);
if
(
group
.
regions
!=
null
){
...
...
This diff is collapsed.
Click to expand it.
src/main/java/emu/grasscutter/scripts/ScriptUtils.java
0 → 100644
View file @
8c860308
package
emu.grasscutter.scripts
;
import
java.util.HashMap
;
import
org.luaj.vm2.LuaTable
;
import
org.luaj.vm2.LuaValue
;
import
emu.grasscutter.Grasscutter
;
public
class
ScriptUtils
{
public
static
HashMap
<
Object
,
Object
>
toMap
(
LuaTable
table
)
{
HashMap
<
Object
,
Object
>
map
=
new
HashMap
<>();
LuaValue
[]
rootKeys
=
table
.
keys
();
for
(
LuaValue
k
:
rootKeys
)
{
if
(
table
.
get
(
k
).
istable
())
{
map
.
put
(
k
,
toMap
(
table
.
get
(
k
).
checktable
()));
}
else
{
map
.
put
(
k
,
table
.
get
(
k
));
}
}
return
map
;
}
public
static
void
print
(
LuaTable
table
)
{
Grasscutter
.
getLogger
().
info
(
toMap
(
table
).
toString
());
}
}
This diff is collapsed.
Click to expand it.
src/main/java/emu/grasscutter/scripts/data/SceneGroup.java
View file @
8c860308
...
...
@@ -9,6 +9,10 @@ import lombok.ToString;
import
javax.script.Bindings
;
import
javax.script.CompiledScript
;
import
javax.script.ScriptException
;
import
org.luaj.vm2.LuaTable
;
import
org.luaj.vm2.LuaValue
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -106,9 +110,17 @@ public class SceneGroup {
suites
=
ScriptLoader
.
getSerializer
().
toList
(
SceneSuite
.
class
,
bindings
.
get
(
"suites"
));
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"
));
// Garbages TODO fix properly later
Object
garbagesValue
=
bindings
.
get
(
"garbages"
);
if
(
garbagesValue
!=
null
&&
garbagesValue
instanceof
LuaValue
garbagesTable
)
{
garbages
=
new
SceneGarbage
();
if
(
garbagesTable
.
checktable
().
get
(
"gadgets"
)
!=
LuaValue
.
NIL
)
{
garbages
.
gadgets
=
ScriptLoader
.
getSerializer
().
toList
(
SceneGadget
.
class
,
garbagesTable
.
checktable
().
get
(
"gadgets"
).
checktable
());
}
}
// Add variables to suite
variables
=
ScriptLoader
.
getSerializer
().
toList
(
SceneVar
.
class
,
bindings
.
get
(
"variables"
));
...
...
This diff is collapsed.
Click to expand it.
src/main/java/emu/grasscutter/scripts/serializer/LuaSerializer.java
View file @
8c860308
...
...
@@ -2,6 +2,9 @@ package emu.grasscutter.scripts.serializer;
import
com.esotericsoftware.reflectasm.ConstructorAccess
;
import
com.esotericsoftware.reflectasm.MethodAccess
;
import
emu.grasscutter.Grasscutter
;
import
emu.grasscutter.scripts.ScriptUtils
;
import
lombok.AccessLevel
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
...
...
@@ -9,6 +12,8 @@ import lombok.experimental.FieldDefaults;
import
org.luaj.vm2.LuaTable
;
import
org.luaj.vm2.LuaValue
;
import
java.lang.reflect.ParameterizedType
;
import
java.lang.reflect.Type
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
...
...
@@ -31,6 +36,10 @@ public class LuaSerializer implements Serializer {
public
<
T
>
List
<
T
>
serializeList
(
Class
<
T
>
type
,
LuaTable
table
)
{
List
<
T
>
list
=
new
ArrayList
<>();
if
(
table
==
null
)
{
return
list
;
}
try
{
LuaValue
[]
keys
=
table
.
keys
();
for
(
LuaValue
k
:
keys
)
{
...
...
@@ -79,7 +88,7 @@ public class LuaSerializer implements Serializer {
}
try
{
if
(!
methodAccessCache
.
containsKey
(
type
)){
if
(!
methodAccessCache
.
containsKey
(
type
))
{
cacheType
(
type
);
}
var
methodAccess
=
methodAccessCache
.
get
(
type
);
...
...
@@ -87,9 +96,10 @@ public class LuaSerializer implements Serializer {
object
=
(
T
)
constructorCache
.
get
(
type
).
newInstance
();
if
(
table
==
null
){
if
(
table
==
null
)
{
return
object
;
}
LuaValue
[]
keys
=
table
.
keys
();
for
(
LuaValue
k
:
keys
)
{
try
{
...
...
@@ -117,6 +127,7 @@ public class LuaSerializer implements Serializer {
}
}
}
catch
(
Exception
e
)
{
Grasscutter
.
getLogger
().
info
(
ScriptUtils
.
toMap
(
table
).
toString
());
e
.
printStackTrace
();
}
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help