THE KINGDOM CODEX · 挂机工具

ZKok/ZRobot完整手册:从脚本入门到4.0迁移

46页教材重编:动作与反馈、变量循环、坐标弹窗、2.0到4.0迁移及完整两坑实例。

玩家资料历史公告与活动查看来源反馈勘误
我的笔记笔记输入即保存;标签离开输入框后保存。内容只保存在当前浏览器,可在随身笔记中导出。
展开法典
18
本篇收录 20 13,056 字与表格内容
查看本篇的全部关联

01先选择脚本版本,再学习语法

这份46页《ZKok 4.0教学课程》由飞梦提供PDF下载,文档元数据署名约拿、日期为2002年4月27日。它并非46页统一的4.0规范:前十一课讲早期ZRobot,十二、十三课解释2.0迁移3.0及新语言,十五课处理3.0迁移4.0,末尾另收命令问答、变量和两坑牧系实例。

ZKok/ZRobot围绕游戏返回的文字控制脚本。%scene列操作,%bc在收到反馈时决定重试、跳步或转段,%public_bc处理全局事件,%variable保存可轮换的值。IKOK借用了部分写法,却有独立的版本变化,不能把两个工具的所有同名指令视为相同。

02第一步:列出动作、等待与循环

游戏命令行由“等待秒数:行为控制段:命令”三部分组成;时间与反馈段可以留空。命令发出后等待指定时间,再进入下一条;走到正文段末尾时按该段条件决定是否重复。初学时先把动作按顺序写出来,再逐步增加反馈。#开头是注释,开头的#%ZRobot.dll在原例中也是注释。

原教材第2页示例;保留语法、标点、反馈与执行顺序。
8 行原文
输入后定位命中行
%scene begin
  10::invoke on xxxxx
      # 執行 invoke, 再等 10 秒
  10::cast fireball on xxxxx
      # 執行 cast, 再等 10 秒
  10::recharge
      # 執行 recharge, 再等 10 秒
      # 等完 10 秒,重複執行。

03把按键工具的时序移到ZRobot

KeyText的pause作用在下一动作之前,ZRobot时间写在当前动作之后。迁移时删除{loop},将第一个pause移到最后一条动作,其他动作的等待取它后面的pause;原动作之间没有pause就填0。GkkMaster的重复次数要展开:前n−1次保留本行间隔,最后一次接下一行的等待,循环最后一行接首行等待。若不改写GkkMaster代码,教材另提可用ZMaster。

原教材第3页示例;保留语法、标点、反馈与执行顺序。
5 行原文
输入后定位命中行
{loop}
 {pause 5.0}say hi
 {pause 10.0}say 555
 say 666           <--- 這一行沒有{pause ???}, 把它看成是{pause 0}
 {pause 20.0}say bye
原教材第3页示例;保留语法、标点、反馈与执行顺序。
5 行原文
输入后定位命中行
%scene begin
   10.0::say hi
   0::say 555
   20.0::say 666
   5.0::say bye
原教材第4页示例;保留语法、标点、反馈与执行顺序。
9 行原文
输入后定位命中行
3 say hi 5 <--- 這是當前行
  5 say bye 1 <--- 這是下一行
 轉成
  3::say hi
  3::say hi
  3::say hi
  3::say hi
    # 以上是 5-1 = 4 次
  5::say hi

04第二步:用完成与失败反馈控制等待

固定等待不足以区分“忙碌”“正在战斗”“MP恢复”和“施法完成”。冥思时忙碌可稍后retry,精神恢复可再次冥思,完成消息用next提前结束等待;战斗中不能冥思,则等待战斗结束的经验消息。双施第一发杀死目标后第二发会报找不到目标,这也是应该结束该动作的反馈。

反馈段分为命令自身指定的bc与整个scene指定的bc。同一句“精神恢复”在冥思和战斗中需要不同处理;复用bc前先检查它适用的动作。教程建议先列动作、列完成和重试条件、写bc,最后组合,而不是把所有行动都塞进全局匹配。

原教材第6页示例;保留语法、标点、反馈与执行顺序。
11 行原文
输入后定位命中行
%bc meditate_bc
   retry:1:你正忙著呢。
             # 等一秒,再重發當前命令
   retry::你得到了( %* )點經驗。
             # 戰鬥結束了,立即重發當前命令
             # 這個匹配描述使用的模式匹配,在下一節有詳細說明
   retry::你的精神恢復正常,可以冥想了。
             # 可以冥想了,立即重發當前命令
   next::你深深地吸了一口氣,從深沈的冥思中醒來 !
             # 結束冥想,立即進入下一步。
             # 這是二轉 ID 深冥的顯示。如果沒二轉,要注意結束的信息不一樣。
第6页绑定冥思反馈;等待作为超时上限,不宜短于正常反馈。
1 行原文
100:meditate_bc:meditate

05第三步:准确匹配服务器文字

可在ZTerm显示区双击消息,把它放入命令输入框后复制,保留繁简字、空格、标点。长消息可能被客户端强制折行,教材对长度仅记62/63/64字符的疑问,没有确认一个阈值;以>>标识的强制换行应接回原句,逻辑上本来分段的消息则不能随意合成。

写法匹配意义
固定文字逐字匹配。
%%字面百分号。
%*任意内容,可为空。
%+任意内容,至少一个字符。
%$字母、数字、下划线或空格,至少一个字符。
%#一个或多个数字。
%b将各通配位置依出现顺序保存到%0~%9。
%x?/%X?在枚举变量的左值/右值中匹配一项,并把指针移到该项。
%i?/%z?匹配成功后移动/复位变量指针,自身不占文字;不是在部分匹配时提前修改。

例如获取经验时数值变化,可用%*;施法目标和“喃喃自语”的可变部分也可用通配符。把%*加在首尾可处理版本增加的描述,但不能因此忽略本应区别的成功与失败消息。

在后面的收人/开除示例中,%b 按出现顺序分配捕获结果:第一处 %+ 存入 %0,第二处 %$ 存入 %1,后续两处 %* 分别存入 %2、%3。因此 banish %1 取的是括号内捕获的角色 ID。

开除分支执行 banish %1 后 return next;收人分支写作“20:test_bc:accept ??????”,问号是站位占位符,未提供实际地址,不能直接运行。

原始语法片段;保留占位、匹配文字与控制顺序。
12 行原文
输入后定位命中行
%public_bc 
call:banish:%b%+(%$)告訴你 : %*開我%* 
call:banish:%b【換成你的城市名】%+(%$)%*開我%* 
call:banish:%b【換成你的城市名】%+(%$)%*開除%* 
call:accept:%*向你申請戶籍 ! 

%scene banish 
::banish %1 
return next 
%scene accept 
20:test_bc:accept ?????? 問號就是指定的位置不要說你不懂 
return next

06枚举变量、数值变量与左右值

枚举变量的每行可定义左值和右值,第一次指向第一行;小写变量名取左值、大写取右值。数值变量不写%variable段,第一次使用为0,用(a=1)、(a=a+1)、(a=a+2)赋值。枚举变量的数字赋值会按值数取模,例如三项变量赋10后指向第1号、即第二项;给它赋一个已有字符串则定位到相应项,赋不存在字符串的结果原问答未说明。

版本变量与赋值
2.010个枚举变量0~9;%v0/%V0分别取左右值;旧表达式的=与==都是相等判断。
3.0扩为26个a~z,A~Z不额外增加26个,0~9分别是a~j的别名。%v2、%vc、%Vc同为c左值;%V2、%vC、%VC同为c右值。
3.0标识规则数字变量由首字母标识,后续字母数字只是注释;$后的首字母标识字符串变量。不能借多写几个字母得到IKOK式多词独立变量。
3.0临时变量$0~$4:每个栈结点各有五个,只作数值运算。

字面字符串可用单引号或双引号包围,必须同类引号结束,不能跨行;数字常量由0~9组成。一行只写一条命令或标号。标号是不含空格和冒号、不以数字或#开头的文字,末尾加冒号。

设置条件赋值%oa%va
没有定义列表(a = 10)1010
没有定义列表($a = "abc")???abc
列表依次为 xxx、yyy、abc(a = 10)1(10 % 3 = 1)yyy
相同三项列表($a = "abc")2abc
相同三项列表($a = "sadf")??????
原教材第43页示例;保留语法、标点、反馈与执行顺序。
27 行原文
输入后定位命中行
%variable a #初始化變量段 a
hi HI
bb BB
cc CC
dd DD
ee EE
%scene begin #gkk 顯示
::say %va #你說道:hi
::say %vA #你說道:HI
::say %oa #你說道:0
::%ia #變量段 a 內容下移一行
::say %va #你說道:bb
::say %vA #你說道:BB
::say %oa #你說道:1
::%ia #變量段 a 內容下移一行
::say %va #你說道:cc
::say %vA #你說道:CC
::say %oa #你說道:2
::%da #變量段 a 內容上移一行
::say %va #你說道:bb
::say %vA #你說道:BB
::say %oa #你說道:1
::%za #變量段 a 內容返回第一行
::say %va #你說道:hi
::say %vA #你說道:HI
::say %oa #你說道:0
stop
原教材第43页示例;保留语法、标点、反馈与执行顺序。
10 行原文
输入后定位命中行
%scene begin #第一次用數值變量 b 時,數值變量 b 的值為 0
::say %ob #你說道:0
::(b=b+1) #數值變量 b 的值加一
::say %ob #你說道:1
::%ib #數值變量 b 的值加一
::say %ob #你說道:2
::%db #數值變量 b 的值減一
::say %ob #你說道:1
::%zb #數值變量 b 的值清 0
::say %ob #你說道:0

07枚举的三个用途:限定、顺序与随机

枚举取值全局共用。旧教程先用变量9限制发送者ID,避免任何人说同一句话都触发断线,再用变量0轮换womana至womanx施法,最后用变量8右值随机选回复;这三种行为分别依赖集合匹配、指针前进和随机替换。

原教材第10页示例;保留语法、标点、反馈与执行顺序。
17 行原文
输入后定位命中行
%variable 9
    dela
    kings
    xxkx
    ...
  %bc begin_bc
    ....
    shutdown::%+(%x9)告訴你 : %*機器人%*
    ....
  或者
    ...
    call:answer_gm:%b%+(%x9)告訴你 : %*機器人%*
    ...

   %scene answer_gm
     ::tell %v9 %0 大人,我正在忙,你不要亂猜啦。
     ::@return
原教材第10页示例;保留语法、标点、反馈与执行顺序。
11 行原文
输入后定位命中行
%variable 0
   womana
   womanb
   womanc
   ......
   womanx
 %scene begin
   50:invoke_bc:invoke on %v0
   ::%i0
   50:recharge_bc:recharge
   50:recharge_bc:recharge
原教材第11页示例;保留语法、标点、反馈与执行顺序。
9 行原文
输入后定位命中行
%variable 8
    :我怎麼會是機器人呢?
    :你不要瞎猜了。
    :就算是,也沒影響別人呀。
    :...

  %scene answer_gm
    ::tell %v9 %0 大人,%X8
    ::@return

08变量替换速查与版本差异

替换含义
%n/%N英文角色ID/中文角色名。
%Knick,不能与角色名混为一项。
%C(旧)/%k(3.0)角色职业。
%Y/%y(3.0)所在城邦/所属组织。
%h/%H;%m/%M当前/最大HP;当前/最大MP。
%g/%E(3.0)身上金币/经验值。
%pc/%PC、%px、%py(2.0)自身位置、横坐标、纵坐标;3.0改%sc、%sx、%sy。
%(x,y)把相对坐标转换为目标位置。
%e0~%e9(旧)环境属性。
%0~%9;%a0~%a9(3.0)此前匹配捕获的内容。
%v?/%V?当前枚举项的左值/右值。
%p?/%P?把左值/右值当位置转换。
%o?/%O?(3.0)当前指针/枚举项总数;数值变量的%o?为数值本身。
%i?/%d?3.0数值加/减一并返回改变后的值,或枚举指针前进/后退;一般枚举移动越界回绕。2.0的%i替换只前进并返回空值。
%I?2.0前进时绕回首项返回1,否则0;3.0已在末项时不再前进、返回1,否则前进并返回0。
%D?(3.0)值为0或枚举已在首项时不减并返回1,否则减一/后退并返回0。
%z?/%Z?数值清零或枚举指针复位;2.0的%z返回空值。
%x?/%X?(替换)从枚举左值/右值随机选取;与反馈匹配中的同名写法作用不同。

09表达式:旧版与3.0的运算符

用途2.03.0
赋值与相等=、==用于相等判断。=赋值;==相等,!=不等。
数值运算+ − * /,%%为取余。+ − * / %;−也可作一元取负。
逻辑&、|、^、!。&&、||、^^、!。
位运算旧课未另列。&、|、^、<<、>>;一元^取反。
比较> >= < <= = == !=;相等/不等可比较字符串。> >= < <= == !=。
字符串旧课仅说明相等/不等。+、<<、>>;原附表未详解两个移位符的字符串含义。
下标旧课未列。变量.数字;左边须由%variable定义。

早期表达式课明确提醒运算没有通常的优先级,应写括号。3.0章扩充了运算符,却没有另给完整优先级表,复合判断继续明确加括号。3.0的%在二元位置取余,在一元位置进行变量替换。

原问答的条件示例;省略号不是游戏命令。
6 行原文
输入后定位命中行
if (%h > 400)
...
endif
if (%m < 1000)
...
endif

10分段、调用与返回

正文段格式为%scene 名称:场景反馈段:重复表达式。名称不可省;段末才计算重复表达式,空表达式表示持续重复。每条命令的bc额外处理本动作。#命令不发给服务器,@开头的早期控制命令由机器人处理;3.0兼容旧@控制写法时,会忽略该行原来的时间与bc栏。

控制行为
goto/@goto转到标号或正文段;目标不能为空。
jump3.0仅找正文段,比同时找标号的goto直接。
call/@call保存当前执行状态后转子段;早期文档栈深最多10,溢出停止。
return/@return返回调用点;空栈返回会停止。scene发起call默认进入下一条,bc发起call默认重试原动作。
return retry/next/ignore/时间返回后分别重做、进入下一条、仅弹栈继续或覆盖等待;早期还列keep恢复原状态。
pop只弹出保存的调用状态,不跳回;用于不再需要返回的分支。
again直接重新执行本段,不检查段末条件。
end去段末,检查重复条件后决定是否继续。
ifgoto (条件) 标号条件满足时跳标号。
@skip 条件早期控制:真则略过下一条,假则继续。

教材示范MP不足时call冥思段,治疗、冥思至精神恢复后return retry;进入战斗则转kill_npc,用重复call与%i逐个对目标晕击与吸魂。双施例改用第二个bc,处理第二次效果或目标已经死亡。

原教材第16页示例;保留语法、标点、反馈与执行顺序。
17 行原文
输入后定位命中行
%scene begin
  .....
  100:cast1_bc:cast ??? on ???
  .....

%bc cast1_bc
  retry::你上一個動作沒有完成,不能施法.
  next::<施法失敗的各種信息>
  ...     <---- 上面這些是原的了, 下面兩行才是新內容.
  change:cast2_bc:你想起動雙重施法,但失敗了。
  change:cast2_bc:<施展該法術的顯示信息>
%bc cast2_bc
  next::這裡沒有這個人。
      # 第一個施法結果導致 NPC 死忙,會出現這種結果
  next::<施展該法術的顯示信息>
      # 如果該信息顯示後距法術結束還有一段時間, 可以在 next 後兩個冒號之間,加入延遲時間,
如:next:3:.......
原教材第17页示例;保留语法、标点、反馈与执行顺序。
6 行原文
输入后定位命中行
%bc new_begin_bc
     goto:jinyan:你說道 : 1
     goto:jineng:你說道 : 2

  %scene begin begin_bc
    20::say 你是想打經驗(say 1)還是想練技能(say 2)
原教材第17页示例;保留语法、标点、反馈与执行顺序。
15 行原文
输入后定位命中行
%scene meditate_seg
     100:heal_bc:cast double_heal on
         # 也可以用強力恢得
     100:meditate_bc:meditate
   %bc meditate_bc
     return:retry:你的精神正好, 不需要冥想
     ...

 * 為當前運行的正文段加入一行行為控制
   %scene begin begin_bc
   ...
   %bc begin_bc
     ...
     call:meditate_seg:你的法力不夠!!
     ...
原教材第18页示例;保留语法、标点、反馈与执行顺序。
6 行原文
输入后定位命中行
100:med2_bc:meditate
    ...
  %bc med2_bc
    goto:kill_npc:你正在戰鬥中,無法冥想。
    next::你的精神狀態。。。。。。
    ......
原教材第18页示例;保留语法、标点、反馈与执行顺序。
9 行原文
输入后定位命中行
::@call for_npc
    ::%i0
    ::@call for_npc
    ::%i0
    ....
  %scene for_npc
    50:stun_bc:cast stun on %v0
    50:soul_bc:cast soul_steal on %v0
    ::@return

11条件、循环与段末计数

结构使用方法
if / elif / else / endif3.0只在scene中使用。
do 条件 / loop 条件前后条件可省,省略为真;相应条件非0继续循环。
foreach 变量 / loop逐项枚举,循环自身推进指针,不再手动%i。loop也可带表达式。
break/continue结束循环/转下一轮,scene与bc中都可使用。
on (条件)在bc内按条件启用后续规则;如MP高于300重试,低于等于300进入下一步。

例如在同一行为控制段中,用 on (%m > 300) 启用 retry 规则,用 on (%m <= 300) 启用 next 规则;阈值和动作属于这个示例。do/loop、foreach、break 与 continue 的一般用法见上表,循环自身已推进枚举指针,不必再次自增。

示例在 stun_bc 条件判断后,以 50:stun_bc:cast stun on %v0 和 50:storm_bc:cast mind_storm on %v0 配合正文命令;%v0 保持来源写法。

原始语法片段;保留占位、匹配文字与控制顺序。
11 行原文
输入后定位命中行
%bc stun_bc 
retry::你上一個動作.... 
... 
on (%m > 300) 
retry::%i0你... 
on (%m <= 300) 
next::%i0你... 

%scene begin 
50:stun_bc:cast stun on %v0 
50:storm_bc:cast mind_storm on %v0

第八课的sayhi例在段末用(%I0==0)控制五次发言,再说bye;深度恢复例还以MP>300限制。指针应在成功、目标不在或目标已有该效果时前进,失败时继续处理当前目标。原例误写%scane,另一处jingyan/jinyan及begin_bc/new_begin_bc命名不一致,均不是新语法。

早期版本段末五次发言例;保留原%scane拼写,非新增语法。
12 行原文
输入后定位命中行
%scene sayhi::(%I0 == 0)
    5::say hi
  %scane begin
    ::%z0
    ::@call sayhi
    10::say bye
  %variable 0
    a
    b
    c
    d
    e
早期版本按MP与逐个目标推进的深度恢复例;省略号为原教学占位。
28 行原文
输入后定位命中行
%variable 0
    a
    b
    c
    d
    e


下面的例子是,當角色的法力值大於 300 時,依次對周圍的施展深恢,否則就用一次心爆。

  %variable 0
    mana
    manb
    ...
    manx
  %scene begin
    ::@call drnpc
    50:mind_bc:cast mind_blast on %v0
  %scene drnpc::(%m > 300)
    50:dr_bc:cast deep_recover on %v0

  %bc dr_bc
    next::%i0<成功的消息>
    next::%i0<NPC 不存在的消息>
    next::%i0<NPC 已經有深恢的消息>
    next::<法術失敗的消息>
    retry::<正忙的消息>
    ...

12反馈命令、优先顺序与运行控制

命令用途与限制
retry [时间]等待后重做当前命令;等待中命令bc关闭,场景bc仍有效。
next [时间]提前结束当前动作,等待后进入下一条;同样暂时关闭命令bc。
delay 时间重设当前等待,保持当前命令bc。
change bc名改用另一个命令bc,直至动作结束、重试或再次change。
ignore忽略整条已匹配消息。
priorityZKOK默认顺序:全局bc→场景bc→命令bc。
priority inverseZKOK反转顺序:命令bc→场景bc→全局bc;这与IKOK历史版临时不接收public_bc的说明不同。
restart [场景]复位后从指定段开始,省略从begin;指定不存在的段会停止。
pause/stop/run暂停/停止/继续机器人。此处run不是@&run移动。
shutdown关闭GKK;后收录问答支持shutdown 300在300秒后重连,0或无参数不重连。早期第十一课则写参数忽略,属版本差异。
echo/@echo制造一条内部消息供bc匹配,不发给游戏;3.0仅scene使用。
log、show、prompt写记录、在ZTerm显示、弹提示;早期bc的log与prompt作用于被匹配消息。

保留重启消息匹配示例:restart::@restart;也可restart:second_begin:@restart。整点维护提示的原例用shutdown:600:万王之王的世界将在1分?后重新启动。问号本来就在原文,必须按实际回包核对。

13相对坐标、罗盘位置与移动

第21页图中玩家在(5,10),纵向0~20;偶数行11个位置、奇数行10个,顶上重复的横向数字表示交错位置,不是20个独立横格。图中@标出四角常用放NPC位置,*为其他可放物件点,#是玩家。

写法用途
(x,y)相对当前角色的可见位置。
[x,y]罗盘绝对坐标,主要用于行走、奔跑。
NPC/物品名可用中英文名称;同名对象的选择不确定。
%(x,y)、%p变量、%P变量ZRobot位置转换后用于游戏指令。
@&click/@&look/@&kill点击物件/查看人物/攻击人物。
@&go/@&run走到/跑到目标位置。
第21页三个相邻交错位置的施法示例。
3 行原文
50:fire_bc:cast fireball on %(0,0)
50:fire_bc:cast fireball on %(0,1)
50:fire_bc:cast fireball on %(1,0)

更新后的 ZKok 允许字符串相加,计算式须加括号。以下移动至当前位置横、纵各减 3 的坐标;50 是命令行中原有的等待值。

游戏命令
1 行原文
50:run_bc:("@&run [" + (%sx - 3) + "," + (%sy - 3) + "]")
早期%I5段末迭代示例;位置列表的省略号来自原教材。
16 行原文
输入后定位命中行
%variable 5
  (0,0)
  (0,1)
  (1,0)
  (1,1)
  (2,0)
  (2,1)
  (0,18)
  (0,17)
  (1,18)
  (1,17)
  ...
  (10,20)

%scene fightall::(%I5 == 0)
  20:soul_steal_bc:cast soul_steal on %p5

14到达判断、HP/MP与时间陷阱

trap设置后持续有效,restart或同名trap不带参数时取消。可用trap hplow 350,400,在HP低于350时触发@hplow、回升400后复位;MP使用mplow,位置用trap position x,y,时间用trap time。问答另写trap hp 200,300,附表没有解释hp是否是hplow别名,保留这个未决差异。

原教材第39页示例;保留语法、标点、反馈与执行顺序。
12 行原文
输入后定位命中行
%public_bc
call:drink:@hplow

%scene begin
trap hplow 350,400

%scene drink
0.1:drink_bc:drink potion
return

%bc drink_bc
stop::What?

到达[50,100]可布置地面消息,或发送移动后循环检查%sx/%sy,或设position陷阱等@position。不能只靠固定50秒等待断言已经到达。

原教材第41页示例;保留语法、标点、反馈与执行顺序。
20 行原文
输入后定位命中行
do ((%sx != 67) || (%sy != 108))
1::
loop


如果要跑到[50,100], 可採用的幾種方法:

1. 在[50,100]處設置地面信息
2. 用%sx, %sy, %sc 等來判斷
    ::@&run [50,100]
    do
        1::
    loop ((%sx != 50) || (%sy != 100))
3. 使用 trap
    %scene ...
        trap position (50,100)
        50:run_bc:@&run [50,100]

    %bc run_bc
        next::@position

15弹窗与快捷键:3.0迁移4.0

用途旧写法与变化
快捷键@'1~@'8对应F1~F8,@"1~@"8对应Shift+F1~F8。
按钮@%0关闭;@%1~@%9选择第1~9个按钮。finger/who原例1上一页、2下一页、3结束、0取消。
3.0输入与列表@$内容输入单行文字;选择列表时@$数字选第几项,0不选,然后另发@%按钮。
4.0把@$参数合入@%:如@%1 10000,或@%1 罗盘/@%1 2。脚本中百分号须转义为@%%。

3.0脚本迁移4.0还应核对GB/Big5转换造成的字形差异、弹窗文字变化,以及首尾增加的消息;不要把旧匹配字串不适用误判成循环本身有错。

4.0研究弹窗示例;先弹出对应对话框,再提交数值。
2 行原文
research 10
@%%1 10000

16从ZRobot2.0迁移到3.0

  1. 把初始化段的public_bc设置改为%public_bc段。
  2. 把hp_low/hp_restore和mp_low/mp_restore改为begin中的trap hplow/mplow。原begin改名raw_begin,保留原场景bc,再从新begin转入。
  3. 将相等判断的=改为==;保留真正赋值用=。
  4. 自身坐标由%pc/%px/%py改为%sc/%sx/%sy;旧字母c、x、y已属于扩充后的变量。
  5. 复核%I枚举终点行为、操作符以及旧@控制行时间被忽略的影响。
原教材第29页示例;保留语法、标点、反馈与执行顺序。
12 行原文
输入后定位命中行
#%ZRobot.dll
    hp_low:???
    hp_restore:???
    mp_low:???
    mp_restore:???
    public_bc:<全局共用行為控制段名>
  ...
  %bc <全局共用行為控制段名>
    ...
  ...
  %scene begin:<begin 段用行為控制段名>:...
    ...
原教材第29页示例;保留语法、标点、反馈与执行顺序。
11 行原文
输入后定位命中行
在改成 3.0 的格式時,可按下面的方法
  #%ZRobot.dll
  %public_bc
    ... (全司供用的行為控制段內容)
  ...
  %scene begin
    trap hplow <hp_low_value>,<hp_restore_value>
    trap mplow <mp_low_value>,<mp_restore_value>
    goto raw_begin
  %scene raw_begin:<begin 段用行為控制段名>:...
    ...

17小写转换

表达式结果
%{%1%}将捕获变量 1 的大写字母转为小写
%{%VA%}先取变量 a 的右值,再转小写
%{VA%}VA 没有 % 替换标记,原样保留

示例在收到“加潜能”的私聊或回答后调用 pot 分支。Cast pote??? on %{%1%} 中的 pote??? 是原始未填全法术名,不能替换为猜测的法术。

原始语法片段;保留占位、匹配文字与控制顺序。
10 行原文
输入后定位命中行
%scene begin 
100:wait_bc: 

%bc wait_bc 
call:pot:%b%*(%*)告訴你:加潛能 
call:pot:%b%*(%*)回答你:加潛能 

%scene pot 
50:pot_bc:Cast pote??? on %{%1%} 
return retry

18额点调整与自动启动

n 为要移动的额点数;dex 敏捷、con 体质、int 智慧、str 力量
2 行原文
setup dex -n
setup con n
旧 ZTerm 启动参数及每行记录格式;这里只显示占位符
2 行原文
....\ZTerm.exe C:\StartKok.txt
帳號名:帳號密碼:角色名:角色密碼:伺服器

启动文件每行填写一组账号、角色与服务器,以冒号分隔;可把ZTerm启动命令做成快捷方式。这里展示的是原教程的占位格式。

19两坑牧系示例的坐标与执行顺序

相对坐标使用小括号,罗盘绝对坐标使用中括号。原教程把视野描述为 10×20,端点为 (0,0) 与 (10,20);这些坐标用于当时客户端的可见范围。

  1. 变量 a 的两项是 [72,152]、[52,150];begin 中 ::%ia 把索引加一,然后 20::@&run %va 移向另一坑。原文建议跑不到时把 20 秒改为 30 秒。
  2. goto kill 进入攻击段;按表中 24 个相对坐标依次执行 1:kill_bc:@&kill (坐标)。
  3. 之后用 100:holy_word_bc:cast holy_word on 施放圣言,等待值为 100;kill_bc 遇无生物消息回 begin。
  4. holy_word_bc 对忙碌、什么也没发生、MP 不足、上个动作未完成和结束圣祷消息重试;不在战斗时来源写 goto:run,但后文只定义 purify。
  5. purify 使用 foreach s、100:purify_bc:purify %ps、loop 遍历尸体;安葬成功、灵魂散去、暂不可处理时 next,没有待净化灵魂时回 begin。
牧系两坑教程原码与逐行注释;相对坐标、重复攻击、等待及回包顺序保持原样。
102 行原文
输入后定位命中行
%variable s 
# 這是變數段,每個變數段定一個變數,ZRobot只允許有26個變數,變數名可以是"a"-"z"("A"-"Z", "0"-"9"),這裡是定義變數s。 
(0,2) 
(0,3) 
(1,2) 
(1,3) 
(2,2) 
(2,3) 
(7,3) 
(8,2) 
(8,3) 
(9,2) 
(9,3) 
(10,2) 
(0,20) 
(0,19) 
(1,20) 
(1,19) 
(2,20) 
(2,19) 
(7,19) 
(8,20) 
(8,19) 
(9,20) 
(9,19) 
(10,20) 
# 以上是npc的相對座標,zkk的相對座標是以你為中心,所能看到的螢幕分成10x20的方格,左上為(0,0)右下為(10,20)注意必須是小括號,如果你是大臣開啟網格就明白了。 
%variable a 
[72,152] 
[52,150] 
# 以上是定義變數a為用羅盤測出的座標,必須用中括號,這裡是兩個坑的中心座標(就是站在骷髏頭上的座標) 
%scene begin 
#每一個程式碼必須有的,也是從這裡開始執行程式碼的。 
::%ia 
# 變數a內的值加1,例如,原來變數a是[72,152],執行這個命令後成為[52,150] 
20::@&run %va 
# @&run 是跑的指令,後面可以是座標和相對座標,%va是變數a的內容,20是執行@&run [52,150]命令20秒,就是向第2個坑跑20秒,跑不到?就改成30秒 
goto kill 
# goto 跳轉到指定標號或指定正文段,這裡是轉到%scene kill 

%scene kill 
# 定義正文段kill,zkok可以存在多個正文段 
1:kill_bc:@&kill (0,2) 
1:kill_bc:@&kill (0,3) 
1:kill_bc:@&kill (1,2) 
1:kill_bc:@&kill (1,3) 
1:kill_bc:@&kill (2,2) 
1:kill_bc:@&kill (2,3) 
1:kill_bc:@&kill (7,3) 
1:kill_bc:@&kill (8,2) 
1:kill_bc:@&kill (8,3) 
1:kill_bc:@&kill (9,2) 
1:kill_bc:@&kill (9,3) 
1:kill_bc:@&kill (10,2) 
1:kill_bc:@&kill (0,20) 
1:kill_bc:@&kill (0,19) 
1:kill_bc:@&kill (1,20) 
1:kill_bc:@&kill (1,19) 
1:kill_bc:@&kill (2,20) 
1:kill_bc:@&kill (2,19) 
1:kill_bc:@&kill (7,19) 
1:kill_bc:@&kill (8,20) 
1:kill_bc:@&kill (8,19) 
1:kill_bc:@&kill (9,20) 
1:kill_bc:@&kill (9,19) 
1:kill_bc:@&kill (10,20) 
# @&kill (0,2)是鏢相對座標(0,2)處的npc,kill_bc是根據行為控制段%bc kill_bc的內容,來決定鏢完了作什麼 
100:holy_word_bc:cast holy_word on 
# 放聖言,然後停100秒後執行下一個命令,如果holy_word_bc跟對應的行為控制段%bc holy_word_bc匹配的話,執行匹配的命令。 

%bc kill_bc 
# 定義行為控制段kill_bc 
goto:begin:這裡沒有任何生物。 
# 跟前面的鏢npc的命令對應,如果鏢npc,螢幕顯示:這裡沒有任何生物。那麼執行goto begin 

%bc holy_word_bc 
# 定義行為控制段holy_word_bc,跟放聖言對應 
retry::你正忙著呢 ! 
# 當放聖言的指令發出後,螢幕顯示:你正忙著呢 !重新執行放聖言的指令 
retry::但是什麼事也沒發生。 
# 當放聖言的指令發出後,螢幕顯示:但是什麼事也沒發生。重新執行放聖言的指令 
retry::你的法力不夠 !! 
retry::你上一個動作沒有完成, 不能施法! 
retry::你在胸口畫出一個神聖的印記,結束了你的聖禱。 
goto:run:你現在不在戰鬥中。 
# 當放聖言的指令發出後,螢幕顯示:你現在不在戰鬥中。跳轉到 run,這裡的作用是用聖言殺死npc後跳轉到淨化段。 

%scene purify 
#定義purify 
foreach s 
# foreach 和loop 配合使用,執行它們中間的命令,遇到loop ,foreach 後面跟著的變數加1 
100:purify_bc:purify %ps 
# 淨化相對座標處的屍體 
loop 

%bc purify_bc 
next::你面無表情地將%*的屍體埋葬, 並安撫他的亡靈, 眼中流露出難得一見的慈悲。 
# 淨化指令發出後,螢幕顯示:你面無表情地將%*的屍體埋葬, 並安撫他的亡靈, 眼中流露出難得一見的慈悲。執行下一個命令,就是淨化下一個。(%*可以代替任意字元) 
next::一個朦朧的靈魂從你眼前飄過, 向你微笑後, 散入無盡的天空。 
next::你現在還不能處理這具屍體。 
goto:begin:這裡並沒有需要淨化的靈魂。 
# 淨化玩了,重新開始。

20原稿中未完成或含糊的地方

  • accept ??????需要填入收人的指定位置,Cast pote???不是完整法术ID。
  • 两坑示例holy_word_bc转run,但原稿没有定义run,只给出purify净化段;不能把说明当作已补齐控制流。
  • 深度恢复/冥思示例有%scane、begin_bc/new_begin_bc、jingyan/jinyan名称不一致。
  • 第39页给字符串变量赋不存在枚举值后的%oa/%va结果仍写???;不编造一个运行结果。
  • 早期关闭命令参数忽略、后期shutdown秒数重连,以及2.0/3.0的%I与等号差异,均按就近版本阅读。

本页保存的是历史脚本知识,尚未在相应旧客户端执行。反馈文字、法术、地点及账号配置需要和实际运行版本对应。

来源与版本

飞梦/17KOK、渔夫与2001年典藏版出现数值或机制冲突时,以飞梦所记相应服务器的后续有效规则为正文依据;同站更新按明确生效日期处理。旧规则保留年代与服别,未明日期的差异就近说明;原资料对照用于追溯。

对照原资料
查看 5 份来源与保存记录
17KOK 资料站历史快照 · 2019-07-20

zkok4.0 教学课程PDF版-软件下载

查看保存记录
来源编号
17-d9a7b9c249e82822
保存时间
2026-09-07

原文署名飞梦

正文注明“本资料来自17kok.com 转载请保留”,依该声明保留出处与署名;不将此声明扩大用于其他页面或来源不明配图。

17KOK 资料站

zkok4.0 教学课程PDF版

查看保存记录
来源编号
17-live-02de112a9ca43e78
保存时间
2026-09-08

原文署名飞梦

正文注明“本资料来自17kok.com 转载请保留”,依该声明保留出处与署名;不将此声明扩大用于其他页面或来源不明配图。

台湾渔夫资料站

zkok语法介绍

查看保存记录
来源编号
p232
资料集
玩家宝典
保存时间
2026-09-07
原始位置
ada99:心得\zkok語法介紹.txt
台湾渔夫资料站

zkok 各种语句得用法

查看保存记录
来源编号
c220
资料集
代码攻略
保存时间
2026-09-07
原始位置
ada99:必備zkok 各種語句得用法.txt
17KOK 资料站

ZKok 4.0教学课程PDF(46页)

查看保存记录
来源编号
17-zkok-manual-pdf
保存时间
2026-09-10
原始位置
PDF页序与页脚1~46逐页一致;已读全部正文,回看21与29~36页图表。

原文署名约拿(PDF元数据)