您尚未登录,请登录后浏览更多内容! 登录 | 加入最MC

QQ登录

只需一步,快速开始

 找回密码
 加入最MC

QQ登录

只需一步,快速开始

查看: 4136|回复: 3

skript编程教程第一谈

[复制链接]
  • TA的每日心情
    擦汗
    2016-10-14 10:34
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-10-25 21:06:08 | 显示全部楼层 |0人打赏|阅读模式
    本帖最后由 lapin_boy 于 2016-10-25 21:07 编辑

    sk系列教程目录

    简介

    很多服主都有个梦想,就是有一天能够自己写插件,但是除了极少数服主以外,很少有人会写插件。现在这个情况改变了,利用skript你就可以办到。 skript脚本插件功能非常强大,可以写出如essentials这样复杂强大的插件。而不需要学习java知识。您可以轻松地创建复杂的自定义命令,在特定条件下执行效果的触发器,以及只需运行周期性的脚本,所有这些都不需要知道任何关于编程的一点点知识,你只需学习一点点skript脚本编写的方法。如果结合其他skript的扩展插件,功能强大不敢想象。Skript是一个流行的服务器插件。它允许服务器管理员在不写任何Java语言的情况下简单的管理Minecraft,这是用触发器(事件)、条件和效果三个部分做到的。当触发器触发,所有条件均满足,效果就会被触发。Skript的基础想法是——自定义 —— 每个服务器都能在没有自定义插件的情况下表现不同。这比你自己钻研插件和找人写插件快的多。同时你也不需要那么多小插件了,这一个插件就够了。


    资源
    • 最新skript官方文档(事件,条件,效果,表达式,类型,函数):点击我
    • SK下载: 综合资源下载地址:点击我sk UDL下载及其安装
    • 1、请在这里:下载skript.xlm
    • 2、安装 Notepad++
    • 3、在Notepad++ 设置里面选择语言格式设置
    • 4、选择导入主题,导入刚才下载的Skript.xml文件
    • 5、选择语言选项---自定义语言格式导入刚才的Skript.xml文件
    • 6、重启Notepad++,现在你就可以用Notepad++开发SK插件了


    安装

    我们需要将skript.jar安装到服务器插件文件夹里面,重启服务器,会生成skript文件夹,大概样子如下所示:

    • aliases-english.sk为语言别称文件
    • config.sk为一些配置选项
    • variables.csv为变量存储文件
    • scripts为脚本文件夹我们写的脚本放入这个文件夹


    我的第一个sk插件

    我们需要一个加入游戏时候向显示“hello minecraft”的插件,分三步:

    • 1、我们新建一个hellominecraft.sk文件
    • 2、用notepad++输入以下代码

    on join:    set join message "hello minecraft"
    • 3、保存并放入服务器sk插件脚本文件夹内,重启服务器
      ok一个简单的自定义加入游戏提示就完成,加入游戏试试效果


    sk的语法

    sk的语法结构一般都是:event → condition(s) → effect(s) 即 事件或触发器 → 条件 → 效果,这样的步骤。比如一个简单的挖石头提示脚本:

    on mine of stone:  #事件及其条件    send "你挖到一个石头!" to player  #效果

    是不是很简单。每一个脚本都可以包含许多事件或触发器,每个触发器或事件对应一系列的条件和效果。


    高级语法

    skript的语法并不局限于简单的语句,也可以是更复杂的语句。做出更加意想不到的效果。在以后的教程中将详细讲解这些应用。高级语法:条件句,循环句,函数,自定义事件、条件、效果等等,我觉得数组也算。


    事件

    事件就是当一件事情发生的时候,例如玩家点击了东西,打出伤害,死亡,吃东西,移动或一个怪物做了一些事情,甚至是环境自己改变。这些事件的发生的时候就会执行事件下面的效果。 例如:

    on explode:    cancel event当爆炸时:    取消事件的发生

    一般理解为当什么什么发生的时候: 一般格式为"

    on ****:    条件    效果

    注意空格,事件后都有一个冒号。你可以用4个或8个空格或者使用tab缩进。以后所有脚本遇到一个冒号就要换行缩进,这是严格要求的,否则会出现错误.


    条件

    条件执行下一部分代码所要判断的前提。例如:

    on leftclick with a golden axe:#左键一个金斧头 #事件    player has the permission "thor" #检查是否有权限thor    #条件    strike lightning at the targeted block#在玩家前方释放闪电 #效果    broadcast "%player%释放了雷击技能!"#广播释放闪电的消息 #效果
    效果

    效果可以理解为执行的语句,就是事件发生,条件达到,开始执行语句。例如:

    on damage:    victim is a player    victim has the permission "skript.god"    cancel the event

    cancel event就是一个效果,他的作用是在符合条件以后,取消受到伤害这个事件。


    指令

    Skript允许你自己自定义指令。这些指令和其他插件一样被注册,你可以像使用其他指令一样使用它。这些命令与事件写法大体相似,就是一个用指令触发的事件。指令的完全形式如下:

    command /commandname <arguments>: # 这里是注册指令    description: 这里是指令描述(可以省略)    usage: 这里是告诉玩家怎么使用指令(可以省略)    permission: 这里是执行这个指令需要的权限(可以省略代表所有人有权限)    permission message: 当没有权限的时候提示的信息(可以省略)    executable by: 这里是指令执行这者可以是players/console/players 和 console (可以省略,代表所有方式执行)    aliases: 指令的别称或者缩写不可以有空格 (可以省略)    trigger: #触发指令以后执行的代码        这里写上条件或者表达式当这个指令被执行的时候这些代码将被执行

    例如:

    command /hi:#注册一个hi指令    permission: skript.hi#执行这个指令所需的权限    trigger:        message "hi"<span style="line-height: 1.5;">#执行指令以后给执行的玩家发送一条信息“hicommand /hi <player>:#注册一个hi指令,这个指令有一个参数是player类型的    permission: skript.hi#执行这个指令所需的权限    trigger:        send "hi" to argument#执行指令以后给参数所代表的玩家发送一条信息“hi”

    对比两个代码,发现指令的参数不同,所执行的效果也不同,第二个代码里面的argument代表参数所代表的玩家,可以简写为arg,有多个参数可以使用arg-1,arg-2来调用。


    变量

    变量是用来在储存脚本产生数据的。可以使用变量名称来调用存储在此变量名称里面的数据。sk变量有三种:全局变量,局部变量和options(预设值变量,需要{@变量}的形式调用).

    形式:全局变量:{变量名}局部变量:{_变量名}预设值变量:options:    option name: option value变量初始化:预先初始化:variables:    {logincount} = 0使用的时候初始化:on login:    add 1 to {logincount}变量列表变量列表一般形式为{变量名::序号}:command /staff:    description: Showsonlinestaff    trigger:        loop all players:            add loop-player to {onlinestaff::*}            if size of {onlinestaff::*} is 0:                message "Nostaffcurrentlyonline!Happygriefing;)!"            else:                message "Onlinestaff: %{onlinestaff::*}%"

    变量列表我会在第三期教程里面详细讲解.

    在其他语句调用变量的时候以%变量%形式调用(主要是""里面调用的时候必须%变量%)


    循环

    循环语句可以用来完成复杂的任务。比如给所有玩家一个礼物等等,一般循环有loop和while循环。

    loop循环的一般形式:loop <expression to loop>:  #loop 循环体:                   <condition(s)>      #条件             <effect(s)>         #效果一个简单的例子:loop {var::*}:    set {var::%loop-index%} to loop-value + 1

    这里的::我们理解他为域操作

    循环变量列表{var::}*

    第二句是让var::的所有成员加1并赋值给{var::%loop-index%}

    这样我们就可以批量为某一变量赋值

    按照变量列表的方式处理有大量变量的内容可以简单高效

    可以循环的对象:
    • 1、变量列表
    • 2、玩家
    • 3、方块
    • 4、实体

    对应的循环值:
    • loop-value
    • loop-player
    • loop-block
    • loop-entity

    循环指定次数loop number times:表示循环number次while循环的一般形式:while <condition(s)>: #while 循环条件:     <condition(s)> #条件 改变    <effect(s)> #效果

    只要条件达到while循环就会一直持续下去,所以你在while循环的时候必须给条件一个改变的值或者结束条件,否则可能会使你的服务器奔溃。


    条件句

    这是一个非常好的特性,当条件满足,将会执行这个触发器。大概形式是这样的: if : code else: code

    例如:

    on login: #事件--当登陆的时候    if chance of 50%:  #条件 50的几率        give a cake to the player #效果执行一个give语句        send "你获得了登陆奖励 =)" to the player #继续执行一个语句,给玩家发送一条提示语句    else: #if----else语句        send "没有获得奖励,下个时段再来" to the player

    这个脚本是给了每个玩家50%的机会,在登录时收到一个蛋糕,并通知他们得到礼物,如果他们没有收到礼物则通知他们下个时段再来



    注:编者水平有限,错误在所难免,欢迎广大读者批评指正 编辑 lapin_boy

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    开心
    2017-9-3 16:08
  • 签到天数: 286 天

    [LV.8]以坛为家I

    发表于 2016-10-25 21:34:25 | 显示全部楼层
    厉害了,java大法好
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    开心
    2018-4-14 05:18
  • 签到天数: 1283 天

    [LV.10]以坛为家III

    发表于 2016-10-26 04:30:39 | 显示全部楼层
    http://www.mcbbs.net/thread-492211-1-1.html
    请确保两者为同一人,谢谢
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
  • TA的每日心情
    擦汗
    2016-10-14 10:34
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2016-10-26 12:32:13 | 显示全部楼层
    Wolverine 发表于 2016-10-26 04:30
    http://www.mcbbs.net/thread-492211-1-1.html
    请确保两者为同一人,谢谢


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?加入最MC

    x

    点评

    非常感谢  发表于 2016-10-27 01:25
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    您需要登录后才可以回帖 登录 | 加入最MC

    本版积分规则