592764254
本帖最后由 592764254 于 2020-10-23 23:17 编辑


前言


此教程面向的人群:

1. 对Skript有一定基础的人,如果没有接触过skript,建议先参考Skript 脚本编程教程,在本篇教程中,不对Skript作基本语法的解释。
2. 一位决心制作精品服务端的服主(建议纯净服,Spigot与PaperSpigot最佳)。
3. 想通过Skript编写一些有创新的独特插件的人。

我在自己制作服务端的时候发现了Skript这个宝藏工具,因此我自己的服务器内除了ESS这一类工程量巨大的插件之外全部自己通过Skript编写,甚至是自己编写一个媲美DeluxeMenus的菜单,从而占用更少的资源,除此之外,高大上的更多附魔,满特效抽奖箱,银行,PVP体系,挖矿体系,任务体系,物品升级强化体系等等都会出现在此教程中,这些换为Java编写的插件每个都需要10USD以上,但是更多的是一个体系,方便服主自行修理BUG,更新以及完全适用自己的服务端,不浪费一分一毫资源。

注意!本教程会带大家一起还原一些经典类型的服务端以及从中的创新,然后会在最后罗列出一些在编写服务端插件时的重要选项,比如GUI的应用,声音,粒子效果,物品的name,lore的注意事项以及盔甲架的应用特效等。


准备工作:

1. 本教程所使用的服务端核心为Spigot 1.8.8 (如果不对原版材料有高版本要求,强烈推荐1.8或1.12.2,跨版本可直接使用ViaVersion)


2. Skript系列的Addon插件有很多,有时候缺失就会导致代码失效,所以划重点,这里有常用的Addon:https://forums.skunity.com/resources/categories/addons.1/?order=download_count
(并非全部都需要安装,看服务端需求)


3. Skript本体下载
1.7.10 2.1.2 https://dev.bukkit.org/projects/skript/files/779542/download
1.8.8-1.12.2 2.2dev37c https://github.com/SkriptLang/Skript/releases/download/dev37c/Skript.jar
1.13.2+ 最新版 https://github.com/SkriptLang/Skript/releases

4. 谷歌浏览器(搜索引擎)

谷歌是学习Skript最快的途径,没有之一,当你遇到任何问题时,比如对于NPC的设置,在百度是找不到答案的,此时你只需要在谷歌搜索 "skript npc" 就会出来NPC相关的很多问题(大都来自于skunity论坛Spigotmc论坛),然后你就会发现很多人早在2015年就遇到了和你一样的问题,而下方也已有大佬作出正确解答,你的问题自然也就解决了。是的,百度不行!



好啦,有了上述的准备,我们就可以开始制作属于自己的服务端了!


(对本教程内容有任何问题请在评论区指出,我会第一时间回复,或者联系QQ1214090013)


2021.12 数据,可能有更多内容


前言


此教程面向的人群:
1. 对Skript有一定基础的人,如果没有接触过skript,建议先参考Skript 脚本编程教程,在本篇教程中,不对Skript作基本语法的解释。2. 一位决心制作精品服务端的服主(建议纯净服,Spigot与PaperSpigot最佳)。3. 想通过Skript编写一些有创新的独特插件的人。
我在自己制作服务端的时候发现了Skript这个宝藏工具,因此我自己的服务器内除了ESS这一类工程量巨大的插件之外全部自己通过Skript编写,甚至是自己编写一个媲美DeluxeMenus的菜单,从而占用更少的资源,除此之外,高大上的更多附魔,满特效抽奖箱,银行,PVP体系,挖矿体系,任务体系,物品升级强化体系等等都会出现在此教程中,这些换为Java编写的插件每个都需要10USD以上,但是更多的是一个体系,方便服主自行修理BUG,更新以及完全适用自己的服务端,不浪费一分一毫资源。
注意!本教程会带大家一起还原一些经典类型的服务端以及从中的创新,然后会在最后罗列出一些在编写服务端插件时的重要选项,比如GUI的应用,声音,粒子效果,物品的name,lore的注意事项以及盔甲架的应用特效等。


准备工作:


1. 本教程所使用的服务端核心为Spigot 1.8.8 (如果不对原版材料有高版本要求,强烈推荐1.8或1.12.2,跨版本可直接使用ViaVersion)


2. Skript系列的Addon插件有很多,有时候缺失就会导致代码失效,所以划重点,这里有常用的Addon:https://forums.skunity.com/resources/categories/addons.1/?order=download_count
(并非全部都需要安装,看服务端需求)


3. Skript本体下载
1.7.10 2.1.2 https://dev.bukkit.org/projects/skript/files/779542/download
1.8.8-1.12.2 2.2dev37c https://github.com/SkriptLang/Skript/releases/download/dev37c/Skript.jar
1.13.2+ 最新版 https://github.com/SkriptLang/Skript/releases


4. 谷歌浏览器(搜索引擎)
谷歌是学习Skript最快的途径,没有之一,当你遇到任何问题时,比如对于NPC的设置,在百度是找不到答案的,此时你只需要在谷歌搜索 "skript npc" 就会出来NPC相关的很多问题(大都来自于skunity论坛Spigotmc论坛),然后你就会发现很多人早在2015年就遇到了和你一样的问题,而下方也已有大佬作出正确解答,你的问题自然也就解决了。是的,百度不行!


好啦,有了上述的准备,我们就可以开始制作属于自己的服务端了!


(对本教程内容有任何问题请在评论区指出,我会第一时间回复,或者联系QQ1214090013)





登录事件


首次登录事件:


熟悉java插件的同学们都知道,首次登录对新玩家会有很多操作,比如说首次登录的地点,首次登录的新手礼包,重置玩家的数据,欢迎标语等等,而这用Java插件需要至少4个插件(CMI不算),比如CustomJoinItems,TPLogin,TitleManger之类的插件,但是如果用Skript,我们只需要几行代码就能搞定全部,一起来看看!


固定新玩家登录地点:

代码:

  1. command /setfirstspawn:
  2.   permission: server.admin
  3.   trigger:
  4.     message "&e(!)首次登录地点在 %player's location%"
  5.     set {firstspawn.location} to player's location
这5行代码就是注册了一个指令“/setfirstspawn”,把首次登录地点设置在了指令执行者脚下。


代码:

  1. on first join:
  2.   teleport player to {firstspawn.location}
这个想必都能看懂,就是在玩家首次登录时将其传送到{firstspawn.location},也就是之前设置的首次登录地点。



新玩家礼包:

代码:

  1. on first join:
  2.   set slot 4 of player to compass of power 1 named "&a帮助菜单&7(右键)" with lore "&7右键使用"
  3.   set helmet of player to glass of power 1 named "&b太空头盔" with lore " "
  4.   set boots of player to leather boots dyed white named "&b太空靴" with lore " "
  5.   set chestplate of player to leather chestplate dyed white named "&b太空防护服" with lore " "
  6.   set leggings of player to leather leggings dyed white named "&b太空防护服" with lore " "
这个例子中很详细地说明了新手礼包,你可以设置装备直接穿在玩家身上,可以设置物品在背包内的位置,效果如下图,所有的lore效果,皮革颜色,附魔都可以自定义。



新玩家进服通知,Title欢迎标语:

代码:

  1. on first join:
  2.   set join message to "&7玩家 &c&l%player% &7第一次进入了服务器!"
  3.   send player title "&c&l(!)" with subtitle "&a&l欢迎来到XXX服务器!"
3行代码完成TitleManger的功能!效果如下:

新玩家进服打开书本(大大增加逼格的东西):

代码:

  1. command /book:
  2.     trigger:
  3.   set {_book} to a new book
效果如下:

至此,新玩家首次登录的东西就差不多啦,还有什么我没想到的可以在评论区补充,下面是整合的代码:


代码:

  1. command /setfirstspawn:
  2.   permission: server.admin
  3.   trigger:
  4.     message "&e(!)首次登录地点在 %player's location%"
  5.     set {firstspawn.location} to player's location
  6. on first join:
  7.   teleport player to {firstspawn.location}
  8.   set slot 4 of player to compass of power 1 named "&a帮助菜单&7(右键)" with lore "&7右键使用"
  9.   set helmet of player to glass of power 1 named "&b太空头盔" with lore " "   
  10.   set boots of player to leather boots dyed white named "&b太空靴" with lore " "
  11.   set chestplate of player to leather chestplate dyed white named "&b太空防护服" with lore " "
  12.   set leggings of player to leather leggings dyed white named "&b太空防护服" with lore " "
  13.   set join message to "&7玩家 &c&l%player% &7第一次进入了服务器!"
  14.   send player title "&c&l(!)" with subtitle "&a&l欢迎来到XXX服务器!"
  15.   stop



登录事件:
固定上线地点:
与首次登录如出一辙,大家只需要修改指令与变量即可,比如把{firstspawn.location}改为{spawn.location}。


进服标语与消息:
还是与首次登录相同。


玩家进服效果:
此选项多用于登录服,小游戏服等等需要给玩家永久药水效果的服务器。

代码:

  1. on join:
  2.   apply night vision 256 to player for 1 days
  3.   apply jump 3 to player for 1 days
  4.   apply speed 2 to player for 1 days
效果如下



好啦,以上基本就是玩家登录涉及到的内容啦,大家可以试着吧这些代码整合到一个sk文件中,取名为login.sk,你的第一个登录相关体系的插件就写好啦,然后你就会开心地发现只有1-2kb,比装几个Java插件节省了不少资源!

传送/多世界相关
通常我们所使用的传送插件多整合于ESS,CMI一类的大型插件当中,而且有许多不可自定义的功能,比如传送当中的冷却时间,在某个世界不能使用传送,在某个WorldGuard的区域内不能使用传送,达不到某些等级不能传送等等,今天我们就用skript来实现!

简单的设置传送点与传送系统:此传送系统仅包含设置传送点与定义指令传送到传送点。


首先是首次登录时玩家的登录点,我们在第一章中讲过:

代码:

  1. command /setfirstspawn:
  2.   permission: server.admin
  3.   trigger:
  4.     message "&e(!)首次登录地点在 %player's location%"
  5.     set {firstspawn.location} to player's location
  6. on first join:
  7.   teleport player to {firstspawn.location}
在skript中,我们所使用的将玩家传送到某一点的代码就是:

代码:

  1. teleport player to {你设置的点}

主城传送点的设置:与首次登录点的相同,此处主要讲讲消息的设置与传送延迟和传送条件的限制。
我们以一段代码来讲解(此处省略了trigger):

代码:

  1. <blockquote>on command "/spawn":
在上述代码中,
if &quot;%region at player%&quot; contains &quot;spawn&quot;:
表示的是如果玩家所处的区域名字包含“spawn”,此处的区域指的是WorldGuard插件的区域,对于所有的区域都可以使用%region at player%来表示和获取。


所以,这段代码所要表示的就是:
当玩家使用/spawn这个指令时,如果玩家位于spawn区域内,则直接将玩家传送到spawn点,如果玩家位于mine区域内,则需要使用冷却时间(这一点对于PVP服务器非常适用)


下面我们来说一说冷却时间,首先是对玩家的冷却时间是否已经为45秒做一个判断,如果是,则继续执行,如果否,则返回一条消息给玩家“传送还在冷却中”。如下:
if {lastsp.%player%} is set:                        set {_dangle1} to difference between {lastsp.%player%} and now最后执行10秒的传送冷却,同时使用actionbar提示玩家时间,最后重置玩家的冷却时间。
大功告成







梅子酒呀
期待更新! 非常详细的sk教学

LiuMo997
非常期待你的更新

a229596451
可以当做比较进阶的教程使用

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