cc7w
本帖最后由 cc7w 于 2020-2-2 20:05 编辑

Skript

——一款自定义脚本插件



下载地址 —— Download



请按照对应版本下载




帮助文档 —— Documentation

英文版

[原文,推荐英文能力好的去查阅]





中文版

[译者:c7w(楼主)]






简单教程 —— Tutorial

学习Skript脚本需要一定的英语基础和逻辑思维。

自己动手,丰衣足食;那些不知道创新的人,永远不会用这类插件。

—— c7w

在这个教程中我会说明如何写一个用锄头来直接撒播种子的脚本。
它的原理是当一个人手持锄头右键泥土时自动种植作物。
首先,打开你的文档编辑器[例如NotePad++]
现在思考怎么样能让你的触发器被触发,所以我们写下第一行:

  1. on right click:
复制代码
但是我们不想让人们任意右键都触发这个脚本,我们的初衷是让人们是在泥土上右键锄头才触发。
所以我们应该改变一下脚本——

  1. on right click on soil holding a hoe:
复制代码
我们也可以用这个事件+条件来替代——
  1. on right click:
  2.     block is soil
  3.     player is holding a hoe
复制代码
这两种都可以,但我在这篇文档中将使用第一种。
然后我们来检测玩家有无种♂子:

  1. on right click on soil holding a hoe:
  2.     player has seeds
复制代码
请注意第二行的缩进。这会让插件明白这是一个事件中的语句,并且使脚本更容易阅读。
如果你不注意这个缩进的话插件就会报错,因为插件认为他们不属于一个事件中。
在那之后我们应该种植作物了——

  1. on right click on soil holding a hoe:
  2.     player has seeds
  3.     set block above the clicked block to crops
复制代码
这并不是很精确,因为可能我们点击的泥土方块上方有方块(如下图)
[_] <- 其他方块
[_] <- 泥土方块
如果我们只是简单的把上方的方块设置为crops的话我们会覆盖掉原有方块。
但是这方块可能是别的玩家领地中的物品甚至是基岩。
这样的问题看起来并不明显,但对你的服务器有很大的危害性。

你可以在你服务器上使用之前先在一个测试服务器上尝试运行你写出的脚本。
这个问题可以用检测泥土上方的方块来解决——

  1. on right click on soil holding a hoe:
  2.     player has seeds
  3.     block above the clicked block is air
  4.     set block above the clicked block to crops
复制代码
最后一件事是把你的脚本储存到./plugins/Skript/scripts里,你可以取任何名字。
但请不要以-号打头,因为这会使插件认为此脚本被禁用。
文件的扩展名必须是以.sk结尾,例如,你可以把这个脚本储存为hoe.sk。
现在开启你的服务器,检查后台有无错误信息,如果有,尝试按照错误提示修复错误。
然后登入服务器测试脚本查看是不是都可以运行。
如果你测试完毕,你可以上传到你的主服务器让玩家使用了。
你也可以使用
  1. /sk reload 脚本名称
复制代码
来使脚本重载。这方便你调试脚本,不要重启服务器。
如果脚本中有错误的话,错误信息将会发送给使用指令的玩家。
如果后台使用此命令的话,错误信息将发送给后台。




结束语

首先,感谢你看完这篇帖子。
感谢PCD小组提供的排版代码。(@XJue_DaDa )
有问题可以在帖子中提问,有能力与时间就会回答。
Last Edition 02/27/2017


cc7w
本帖最后由 1345979462 于 2017-2-27 20:17 编辑

一些简单的功能,欢迎提出。
注意:如果脚本内含中文报错请用NotePad++将文件转换为UTF8无BOM格式


自动公告


  1. every minute:
  2.     set {_a} to a random integer between 1 and 3
  3.     if {_a} is 1:
  4.         broadcast "SK插件示例脚本第一条"
  5.     if {_a} is 2:
  6.         broadcast "这是第二条"
  7.     if {_a} is 3:
  8.         broadcast "自定义公告第三条"
复制代码






yxw5822
然而原贴地址我加载不出来

ajnsan
这个插件可以做什么
好像听说很厉害

璇葎
可以做出小游戏?

cc7w
璇葎 发表于 2016-9-24 20:17
可以做出小游戏?

、只要你逻辑够强,可以

正义の冷子
严禁单独站楼,我就这样出了车祸

1640727878
哎呀,居然有大大重置,有没有重置到spong版和nikkit版

1640727878
github....这插件的重置居然在这里

蜡笔小新1
求发教程啊   这么好的一个插件没教程这么学  

love猫妖
很有用的插件 支持一个

零落Y_
这个是编写插件的.......插件??!!!  还是类似编辑器......不懂

cc7w
本帖最后由 1345979462 于 2016-10-6 12:01 编辑

有问题欢迎直接回复哦

莫逸若
很有用的插件 支持一个

wcw506
1345979462 发表于 2016-10-6 11:49
有问题欢迎直接回复哦

您好我想问下 如果我想写一个空手破坏方块 会受伤 手持工具时就不会受伤这样写对吗
on left click on break block:
    damage player by 1 heart
    player has tool
       victim is a player
          cancel event

CziSKY
wcw506 发表于 2016-11-2 09:33
您好我想问下 如果我想写一个空手破坏方块 会受伤 手持工具时就不会受伤这样写对吗
on left click on bre ...

Leftclick是左键单击方块....

wcw506
CziSKY 发表于 2016-11-2 10:55
Leftclick是左键单击方块....

-0- 那去掉left click直接 on break?

cc7w
wcw506 发表于 2016-11-2 09:33
您好我想问下 如果我想写一个空手破坏方块 会受伤 手持工具时就不会受伤这样写对吗
on left click on bre ...

On can build check:
    if player's tool is air:
        damage player by 1

wcw506
1345979462 发表于 2016-11-2 19:22
On can build check:
    if player's tool is air:
        damage player by 1

3q~ 我去试试

wcw506
1345979462 发表于 2016-11-2 19:22
On can build check:
    if player's tool is air:
        damage player by 1

on block damage:
    if player's tool is air:
        damage player by 1
就有效果了
on can build check 没效果...

wcw506
本帖最后由 wcw506 于 2016-11-3 09:56 编辑
1345979462 发表于 2016-11-2 19:22
On can build check:
    if player's tool is air:
        damage player by 1

哦对了LZ大大
我想问下如果我想排除 攻击某些方块会有伤害的话应该怎么办呢on block damage:
    if player's tool is air:
        damage player by 1
    if block is stone and snow and skull
       cancel event
这样写对吗

cc7w
wcw506 发表于 2016-11-2 20:11
哦对了LZ大大
我想问下如果我想排除 攻击某些方块会有伤害的话应该怎么办呢on block damage:
    if play ...

把cancel event 改为 exit
你不要取消打方块这个事件

wcw506
本帖最后由 wcw506 于 2016-11-3 20:49 编辑
1345979462 发表于 2016-11-3 19:33
把cancel event 改为 exit
你不要取消打方块这个事件

恩好的谢谢~ 果然还是很难啊 but if 都没用囧 想排除攻击某些方块不受伤还有其他方式吗

不死之躯
你是不是c7w
                                    

1364304184
不错不错

不死之躯
1345979462 发表于 2016-11-3 19:33
把cancel event 改为 exit
你不要取消打方块这个事件

w 我去,你为啥不理我,我说bigboss一直有一个9级的,原来真的是你

浅梦l
  1. every 5 seconds:
  2.     loop players:
  3.         if {drink.%loop-player%} is not set:
  4.             set {drink.%loop-player%} to 100
  5.         if {drink.%loop-player%} is set:
  6.             if {drink.%loop-player%} is below 35:
  7.                 damage loop-player by 0.5 heart
  8.                 wait 1 seconds
  9.                 damage loop-player by 0.5 heart
  10.             else if {drink.%loop-player%} is below 20:
  11.                 damage loop-player by 1 heart
  12.                 set the loop-player's walk speed to 0.15
  13.                 wait 1 seconds
  14.                 damage loop-player by 1 heart
  15.             remove 5 from {drink.%loop-player%}
复制代码

请问这里怎么出错了??求教,应该怎么修改呢

cc7w
浅梦l 发表于 2017-1-17 16:47
请问这里怎么出错了??求教,应该怎么修改呢

{drink.%loop-player%} is below 35
else if {drink.%loop-player%} is below 20
这两句换一下位置吧
把reload时的那个红色报错发上来

浅梦l
1345979462 发表于 2017-1-17 19:13
{drink.%loop-player%} is below 35
else if {drink.%loop-player%} is below 20
这两句换一下位置吧

尴尬,代码没有错误....可能是因为我之前添加了message 而没有给loop-player.....
那请问有办法限制一个变量的最小值和最大值么

cc7w
浅梦l 发表于 2017-1-17 19:22
尴尬,代码没有错误....可能是因为我之前添加了message 而没有给loop-player.....
那请问有办法限制一个 ...

loop中
if 变量 is less than:
    set 变量 to 最小值
if 变量 is greater than:
    set XX to max

第一页 上一页 下一页 最后一页