Skip to content

Commit e5ecd36

Browse files
committed
scripting cont
1 parent ee27e38 commit e5ecd36

20 files changed

Lines changed: 296 additions & 98 deletions

File tree

Bootstrap/Spigot/src/main/java/cz/neumimto/rpg/SpigotRpgBootstrap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@Author("NeumimTo")
2020
@Website("https://github.com/Sponge-RPG-dev/NT-RPG")
2121
@LogPrefix("NTRPG")
22-
@ApiVersion(ApiVersion.Target.v1_14)
22+
@ApiVersion(ApiVersion.Target.v1_17)
2323
@SoftDependsOn(
2424
value = {
2525
@SoftDependency("PlaceholderAPI"),

Common/lib-cp/NT-Script-0.1.9.jar

37 Bytes
Binary file not shown.

Common/src/main/java/cz/neumimto/rpg/common/events/damage/IEntityWeaponDamageEarlyEvent.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cz.neumimto.rpg.common.events.damage;
22

3+
import cz.neumimto.rpg.common.entity.IEntity;
34
import cz.neumimto.rpg.common.items.RpgItemStack;
45

56
import java.util.Optional;
@@ -10,4 +11,7 @@ public interface IEntityWeaponDamageEarlyEvent extends DamageIEntityEarlyEvent {
1011

1112
void setWeapon(RpgItemStack weapon);
1213

14+
void setDamager(IEntity attacker);
15+
16+
IEntity getDamager();
1317
}

Common/src/main/java/cz/neumimto/rpg/common/scripting/NTScriptEngine.java

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.google.inject.Key;
55
import cz.neumimto.nts.NTScript;
66
import cz.neumimto.nts.annotations.ScriptMeta;
7+
import cz.neumimto.rpg.common.Rpg;
78
import cz.neumimto.rpg.common.assets.AssetService;
89
import cz.neumimto.rpg.common.effects.IEffect;
910
import cz.neumimto.rpg.common.logging.Log;
@@ -14,6 +15,7 @@
1415
import javax.inject.Inject;
1516
import javax.inject.Singleton;
1617
import java.io.BufferedReader;
18+
import java.io.File;
1719
import java.io.IOException;
1820
import java.io.StringReader;
1921
import java.util.*;
@@ -55,18 +57,18 @@ public NTScript scriptContextForSkills(Consumer<NTScript.Builder> builder, Class
5557
}
5658

5759
NTScript.Builder n = NTScript.builder()
58-
.implementingType(ScriptSkill.class)
60+
.implementingType(type)
5961
.classAnnotations(new Class[]{Singleton.class})
6062
.fieldAnnotation(new Class[]{Inject.class})
6163
.macro(macrosMap)
6264
.withEnum(SkillResult.class)
63-
.implementingType(type)
65+
.debugOutput(Rpg.get().getWorkingDirectory() + File.separator + "/compiled-scripts")
6466
.add(getStl())
65-
.debugOutput("/tmp")
6667
.logging(Log::warn)
6768
.package_("cz.neumimto.rpg.script.skills")
6869
.setClassNamePattern(type.getSimpleName());
6970

71+
n.add(STL);
7072
builder.accept(n);
7173

7274
return n.build();
@@ -87,25 +89,6 @@ public List<Object> getStl() {
8789
.forEach(list::add);
8890

8991
} catch (Throwable t) {
90-
Log.info("Java service provider bug still present, doing it the stupid way");
91-
92-
try {
93-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.BleedingEffect"));
94-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.FeatherFall"));
95-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.Maim"));
96-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.ManaShieldEffect"));
97-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.NoAutohealEffect"));
98-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.PiggifyEffect"));
99-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.SlowEffect"));
100-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.StunEffect"));
101-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.UnhealEffect"));
102-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.UnlimtedFoodLevelEffect"));
103-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.WebEffect"));
104-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.FlickerEffect"));
105-
list.add(Class.forName("cz.neumimto.rpg.spigot.effects.common.InvisibilityEffect"));
106-
} catch (Exception e) {
107-
108-
}
10992
}
11093

11194
list.addAll(STL);

Common/src/main/java/cz/neumimto/rpg/common/scripting/SkillScriptHandlers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ SkillResult castOnTarget(@NamedParam("caster") IActiveCharacter caster,
2727

2828
interface Passive extends SkillScriptHandlers {
2929
@ScriptTarget
30-
SkillResult init(@NamedParam("caster") IActiveCharacter caster,
30+
void init(@NamedParam("caster") IActiveCharacter caster,
3131
@NamedParam("context") PlayerSkillContext context,
3232
@NamedParam("this_skill")ISkill iSkill);
3333
}

Common/src/main/java/cz/neumimto/rpg/common/scripting/mechanics/SkillCommons.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import cz.neumimto.rpg.common.skills.PlayerSkillContext;
1111
import jdk.jfr.Name;
1212

13+
import java.util.concurrent.ThreadLocalRandom;
1314
import java.util.logging.Logger;
1415

1516
@AutoService(NTScriptProxy.class)
@@ -32,6 +33,12 @@ public boolean exists(@NamedParam("o|obj|var") Object o) {
3233
return o != null;
3334
}
3435

36+
@Handler
37+
@Function("roll")
38+
public boolean roll(@NamedParam("pass") double min, @NamedParam("maxVal|max") double max) {
39+
return ThreadLocalRandom.current().nextDouble(max) <= min;
40+
}
41+
3542
@Handler
3643
@Function("print")
3744
public void print(@NamedParam("o|obj|var") Object o) {

Common/src/main/java/cz/neumimto/rpg/common/skills/SkillService.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.nio.file.Paths;
3939
import java.util.*;
4040
import java.util.concurrent.ConcurrentHashMap;
41+
import java.util.function.Consumer;
4142
import java.util.stream.Stream;
4243

4344
import static cz.neumimto.rpg.common.logging.Log.*;
@@ -70,6 +71,8 @@ public SkillService() {
7071
Stream.of(SkillType.values()).forEach(this::registerSkillType);
7172
}
7273

74+
public abstract Consumer<NTScript.Builder> getNTSBuilderContext();
75+
7376
public void load() {
7477
skillTrees.clear();
7578
reloadSkills();
@@ -170,9 +173,6 @@ public void registerSkillAlternateName(String name, ISkill skill) {
170173
skillByNames.put(name, skill);
171174
}
172175

173-
174-
public abstract NTScript getNtScriptCompilerFor(Class<? extends SkillScriptHandlers> c);
175-
176176
public ISkill skillDefinitionToSkill(ScriptSkillModel scriptSkillModel, ClassLoader classLoader) {
177177

178178
if (scriptSkillModel.handlerId.equalsIgnoreCase("nts")) {
@@ -190,14 +190,30 @@ public ISkill skillDefinitionToSkill(ScriptSkillModel scriptSkillModel, ClassLoa
190190

191191
Log.info("Compiling nts script " + scriptSkillModel.id + " as " + c.getSimpleName());
192192

193-
Class<? extends SkillScriptHandlers> generate = getNtScriptCompilerFor(c).compile(scriptSkillModel.script);
193+
Class<? extends SkillScriptHandlers> generate = ntScriptEngine.prepareCompiler(getNTSBuilderContext(),c)
194+
.compile(scriptSkillModel.script);
194195
if (generate == null) {
195196
Log.error("Unable to generate script " + scriptSkillModel.id);
196197
}
197198
SkillScriptHandlers instance = injector.getInstance(generate);
198199
ScriptSkill ss = getSkillByHandlerType(instance);
199200
ss.setModel(scriptSkillModel);
200201
ss.setHandler(instance);
202+
if (ss instanceof PassiveScriptSkill p) {
203+
p.setRelevantEffectName(scriptSkillModel.relevantEffectName);
204+
}
205+
206+
if (scriptSkillModel.skillTypes != null) {
207+
for (String skillType : scriptSkillModel.skillTypes) {
208+
SkillType st = SkillType.byId(skillType);
209+
if (st == null) {
210+
Log.warn("Unknown skill type " + st);
211+
} else {
212+
ss.addSkillType(st);
213+
}
214+
}
215+
}
216+
201217
injector.injectMembers(ss);
202218
injectCatalogId((ISkill) ss, scriptSkillModel.id);
203219
return (ISkill) ss;

Common/src/main/java/cz/neumimto/rpg/common/skills/scripting/EffectScriptGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@ public ClassVisitor wrap(TypeDescription instrumentedType, ClassVisitor classVis
166166

167167
}
168168

169-
// bb.make().saveIn(new File("/tmp"));
170169
Class<? extends EffectBase> loaded = bb.make()
171170
.load(classLoader, INJECTION)
172171
.getLoaded();
@@ -202,7 +201,7 @@ private static ScriptEffectBase.Handler generateHandler(String script, ClassLoad
202201
.getLoaded();
203202

204203
Class compile = Rpg.get().getScriptEngine()
205-
.prepareCompiler(builder -> {}, loaded1)
204+
.prepareCompiler(Rpg.get().getSkillService().getNTSBuilderContext(), loaded1)
206205
.compile(script);
207206
try {
208207
Object o = compile.newInstance();

Common/src/main/java/cz/neumimto/rpg/common/skills/scripting/ListenerScriptGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public static Class from(ScriptListenerModel model, ClassLoader classLoader) {
3232
.make()
3333
.load(classLoader, ClassLoadingStrategy.Default.INJECTION)
3434
.getLoaded();
35-
Class compile = Rpg.get().getScriptEngine().prepareCompiler(builder -> {
36-
}, bb).compile(model.script);
35+
36+
Class compile = Rpg.get().getScriptEngine().prepareCompiler(Rpg.get().getSkillService().getNTSBuilderContext(), bb).compile(model.script);
3737
return compile;
3838
} catch (Throwable t) {
3939
t.printStackTrace();

Common/src/main/java/cz/neumimto/rpg/common/skills/scripting/ScriptSkillModel.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ public class ScriptSkillModel {
2424
@Path("Script")
2525
public String script;
2626

27+
@Optional
28+
@Path("RelevantEffectName")
29+
public String relevantEffectName;
30+
2731
@Optional
2832
@Path("SuperType")
2933
public String superType;

0 commit comments

Comments
 (0)