可畏
本帖最后由 可畏 于 2019-10-7 02:04 编辑

*GuoScript *

革新,才能超越


前言
    我是GayaGuoguo,因为一些特殊问题,我的mcbbs账号被盗用后发布了一些违反论坛规定的内容,并且对我今后发布或更新插件都产生了不良影响,因此我决定弃用以前的论坛账号。
    然后回坑后想要更新之前的插件,但在阅读我以前写的一些插件的代码之后我发现,无论是功能还是代码拓展性,它们都被限制得死死的,因此就有了编写这个插件的想法。我也考虑过,虽然这个插件的使用难度可能比以前的要大很多,但我相信,此插件的功能拓展性,值得您花时间深入研究,此插件也会实现并超越以往被弃用的插件的功能。

简介 & 功能
本插件实现了一套相对简单,格式固定的脚本语言,你可以通过正确的编写脚本后,使用此插件提供的调用方式来调用脚本,从而实现大量功能。

目前支持的调用方式有:
1. 指令调用(无玩家和有玩家)

计划中的调用方式:
绑定物品调用
交互方块调用
踩踏方块调用
战斗调用

计划中的脚本语句:
实现GrScriptBlock中的所有语句(现可通过已有语句实现)

指令 & 权限
此插件的所有命令都只允许OP使用,无任何权限节点

教程 & 详解
1. 脚本
    是由你在文件中编写的字符串列表,其中每行字符串称为语句,脚本从上往下逐行运行,直至被停止或运行完成。运行过程是由与语句相对应的语句解释器处理,随后产生对应的效果。运行中的脚本拥有变量,条件,等属性,通过特定的语句创建和调用。

变量:拥有变量名和值,在执行一条语句前,语句中的所有%变量名%都会被替换为对应的变量值
条件:创建后,使用判断类的语句调用使用从而达到控制脚本运行的效果

2. 物品管理器
    可以让你通过指令储存一些物品,用于特定的语句的调用,或是直接使用指令重新获得该物品,物品默认储存在items\default.yml中,你也可以在物品名前面加上“文件夹.”来使物品储存到不同文件中,但之后也要用“文件夹.物品名”的方式来调用该物品。

3. 数据管理器
    可以通过指令,或者特定语句为玩家长久性(或是永久性)地储存一些数据,支持本地文件储存和Mysql储存,可以在配置文件中选择是否启用mysql储存。
    数据,拥有“数据名”和“数据值”两种属性
其中“数据值”的类型是字符串,可以是数字字符串,也可以是文字字符串。对于数字字符串,可以使用/gsd add指令对其进行简单的加减而修改值,也可以编写脚本来对其进行更复杂的运算后修改值。
    所有数据的默认值都为“0”,对于数据,插件还实现了一个用于PlaceholderAPI相关的变量,%gs_data_数据名%,返回的是该玩家的指定数据的值

4. 指令型脚本调用器
    让你通过指令的方式,运行已载入的脚本。如果带有玩家参数,则在脚本运行前,预先添加一个变量,变量名为player,变量值为指令中玩家的名字。


我们先来看一个简单的例子
  1. 脚本1:
  2.   - 'message(hello world!)->*'
  3.   - '发送信息(你好,世界!)->*'
复制代码
打开插件目录下的command文件夹的example.yml,将该脚本写入后,使用指令/gs reload重载插件,然后使用指令 /gsc run 脚本1 运行他
随后,服务器中所有在线的玩家都会收到信息,就像这样
在例子中可以看到,为什么都是发送信息的功能的语句有2种写法?
在这里要提一下的是,考虑到英文单词较中文单词更难记忆的问题,我为所有的语句添加了英文,中文两种写法,当然,你也可以混合使用,只需要把配置文件中的scriptLang改为*即可

好了,现在你已经了解了本插件的大概运行流程,让我们来了解一下所有语句的具体用法吧!

效果执行类
影响游戏的效果

控制运行类
用于控制脚本的运行

变量类
用于创建变量
变量使之后所有语句中的%变量名%都替换为变量值

条件判断类
创建条件,并通过判断来执行其他语句

实例
一、实现一个指令型脚本,要求用金钱换取执行一条指令

二、编写一个指令型脚本,实现使用抽奖券抽奖,发放多个概率不同的奖励中的一项,其中
一等奖的概率为10%,
二等奖的概率为20%,
三等奖的概率为30%,
谢谢参与为40%。


下载
您的支持是我更新此插件的最大动力
您的建议是我更新此插件的主要方向
欢迎评分和回复
建议前置:Vault
建议前置:PlaceholderAPI

GuoScript-1.1.1.jar (105.05 KB, 下载次数: 1675)


更新记录
1.0.0 - 插件发布
1.0.1 - 修改语句
1.0.2 - 增加指令
1.1.0 - 修改语句,新增数据管理器,新增语句
1.1.1 - 优化数据管理器
- 现在每隔3分钟内插件会自动储存一次在线玩家的数据
- 新增了指令/gsd add
- 现在,数据值可以通过使用%gs_data_数据名%的PlaceholderAPI变量调用了

开源 & 声明

本插件所用所有代码均为原创,不存在借用/抄袭/违反协议等行为
来自群组: 银河系气功协会

可畏
拓展API & 写给开发者
占楼编写中……

Cavalry_仰望
不错的插件 支持一下

逍遥生丶
八字水帖,最为致命

逍遥生丶
八字水帖,最为致命

Neubulaeko
这个和MethodScript(EngineHub的出品)或者Skript这两个东西有什么彻底不一样的地方吗?

可畏
Neubulaeko 发表于 2019-10-1 21:00
这个和MethodScript(EngineHub的出品)或者Skript这两个东西有什么彻底不一样的地方吗? ...

MethodScrip是什么我没有了解过,
对比Skript的话,可能是简化了繁杂的功能吧

_諵城`Tr)L
player:玩家名
这里的玩家名是可以替换成 %player_name% 吧?

可畏
本帖最后由 可畏 于 2019-10-1 21:31 编辑
_諵城`Tr)L 发表于 2019-10-1 21:22
player:玩家名
这里的玩家名是可以替换成 %player_name% 吧?

%player% 如果gsc run 的时候有玩家对象的话,编辑一下就要重新等审核~不太敢改内容了呢

498525451
蒸鱼登岛尼。海浩窝梅芳奇

Neubulaeko
可畏 发表于 2019-10-1 21:05
MethodScrip是什么我没有了解过,
对比Skript的话,可能是简化了繁杂的功能吧 ...

可以去EngineHub(开发了WorldEdit的那群人)的官网上面看一下, 感觉很类似啊从简介上看(
当然不是说已经有了轮子就没必要造,我倒是希望看见一个竞争对手或者一个功能更加完善的或者更亲民的插件的(

Nicekill
很棒的插件嗷~

SK想学,英语基础不好
GS想学,不知道有没有机会

1416868137
插件不错,支持

A梦很帅
那GuoGuo你的账号不能联系找回吗  毕竟优秀的Guo命令系列的插件

2427496942
6666666666666

可畏
A梦很帅 发表于 2019-10-2 10:01
那GuoGuo你的账号不能联系找回吗  毕竟优秀的Guo命令系列的插件

此插件会重新实现并超越之前的插件的功能
目前已经实现GuoGroupCommand的内容
其他的,仍在编写中

黑羽快斗´
哈哈哈拿走了

可畏
辉 发表于 2019-10-2 07:54
SK想学,英语基础不好
GS想学,不知道有没有机会

多看几眼的话,还是挺简单的吧

可畏

谢谢支持

Nicekill

激起了我学习的欲望qwq

498525451
可以添加个随机的实例吗?

可畏
本帖最后由 可畏 于 2019-10-4 20:44 编辑
498525451 发表于 2019-10-4 03:42
可以添加个随机的实例吗?

现已添加

萝卜石头
准备移步guoscript,原因:skript的下载速度令人崩溃

a888kay
可以加个独立冷却吗。就是脚本运行后要一段时间才可以用

a888kay
可以加个独立冷却吗。就是脚本运行后要一段时间才可以用,并且在冷却时间内再启动会提示还有冷却多少秒

EmeizAtenls
a888kay 发表于 2019-11-14 06:14
可以加个独立冷却吗。就是脚本运行后要一段时间才可以用,并且在冷却时间内再启动会提示还有冷却多少秒 ...

可以通过获取服务器时间然后在脚本启动前判断来实现。

莱卡猫
支持一下!!

莱卡猫
很棒的插件

498525451
本帖最后由 498525451 于 2019-11-24 13:54 编辑

gsc run 好像后面的player变量没用 设置*还是有用 对了玩家名为中文名 测试版本paper1.12.2 后台无报错话说绑定到方块什么时候制作?
后台执行gsc run 指令 id 可以正常使用 如果OP使用的话 ->%player%如果设置成这个的话 没用,使用"*"可以用,但是全部玩家执行。

Allure倾城
不错的插件,我很需要 支持

Korea
希望早些更新调用方式,相比之前GSB拥有了优秀的条件判断,但是触发方式和严重影响了插件的愉悦度,就差最后这个点睛之笔了!

青犬
作者大大 分已评 插件很好用 有个问题! 有没有判断玩家背包剩余格数的条件 还有 如果有多个条件不满足 是不是得每个条件都有个个stop

Aroz
报错并且无法使用。

青犬
本帖最后由 MrYunGZzzz 于 2020-7-12 22:46 编辑

插件太赞了!本来在问作者变量的问题! 最后自己试出来了!分享给大家!
脚本:
任务奖励:
- 'loadPAPIToVar(%player%:%sl_level%)->当前等级' #读取玩家等级
- 'loadPAPIToVar(%player%:%sx_expAddition%)->经验倍率' #读取玩家经验加成
- 'setVar((%当前等级% * 355) * (1 + %经验倍率% / 100))->任务经验奖励' #设置任务经验最终奖励#玩家等级乘以 355 乘以经验加成倍数
- 'console(sl add %player% %任务经验奖励%)' #用指令给予最终计算的数值奖励!
基于SX插件与附属SL插件的变量 做的一个任务经验基于玩家等级并且使用经验加成变量

白居易_White
gsi give %player% 物品名称 显示该玩家不在线

Link和glx
连续增加了三次0.3就会这样,希望你能修复它


linyiyi
很好的插件

linyiyi
很好的插件

三列玖座丶
可畏 发表于 2019-10-1 20:12
[/td][/tr]
[/table][/td][/tr]
[/table]

请问是否可以添加一个设置脚本使用通知message开关的一个配置选项

挂祭人
dalao真的NB  但是啥时候更新吖... 期待ing... 现在还得和gilc组合起来用呢...

伍雨柒_听雨
很实用!!!

q1156539433
神乎奇迹 虽然我看不懂

飓风Cyclone
[16:07:00 WARN]: ^ in <eval> at line number 1 at column number 0
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:467)
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:534)
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:521)
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:399)
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155)
[16:07:00 WARN]: at javax.script.AbstractScriptEngine.eval(Unknown Source)
[16:07:00 WARN]: at org.formidable.guoscript.script.interpreter.global.RelationInterpreter.execute(RelationInterpreter.java:20)
[16:07:00 WARN]: at org.formidable.guoscript.script.ScriptHandler.interpretScriptLine(ScriptHandler.java:68)
[16:07:00 WARN]: at org.formidable.guoscript.script.ScriptBukkitRunnable.run(ScriptBukkitRunnable.java:46)
[16:07:00 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftTask.run(CraftTask.java:64)
[16:07:00 WARN]: at org.bukkit.craftbukkit.v1_12_R1.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:423)
[16:07:00 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:840)
[16:07:00 WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:423)
[16:07:00 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:774)
[16:07:00 WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:666)
[16:07:00 WARN]: at java.lang.Thread.run(Unknown Source)
[16:07:00 WARN]: Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1:0 Expected an operand but found %
[16:07:00 WARN]: %gs_data_贵族成长值%==0
[16:07:00 WARN]: ^
[16:07:00 WARN]: at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:292)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:277)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:3182)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.expression(Parser.java:3282)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.expressionStatement(Parser.java:1150)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.statement(Parser.java:967)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:773)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.program(Parser.java:709)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.parse(Parser.java:283)
[16:07:00 WARN]: at jdk.nashorn.internal.parser.Parser.parse(Parser.java:249)
[16:07:00 WARN]: at jdk.nashorn.internal.runtime.Context.compile(Context.java:1286)
[16:07:00 WARN]: at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1253)
[16:07:00 WARN]: at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:625)
[16:07:00 WARN]: at jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:532)
[16:07:00 WARN]: ... 14 more
[16:07:00 WARN]: [GuoScript] 存在运行出错的语句: relation(%gs_data_贵族成长值%==0)->default‘


无法进行变量判断,服务端是1.12.2的paper端

下一页 最后一页