北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 2108|回复: 8

tintin++ 慢走function

[复制链接]
发表于 2022-12-26 06:59:29 | 显示全部楼层 |阅读模式
本帖最后由 wolfwar 于 2022-12-26 05:02 PM 编辑

为了这个慢走又头疼了一通, 不过现在总算写了个能用的功能,请大家看看怎么样。
自己测试觉得还满足要求,主要是以后触发里用。

#function {f_run_delay} {
#list l1 create $p_action;
#var v_teller 1;
#list l1 size v_max;
#ticker {run_delay} {  
   
  $l1[$v_teller];
  #if { $v_teller<$v_max }
  {     
    #math {v_teller} {$v_teller+1};  
  };
  #else
  {
   #untick run_delay;
   #unvar v_max;
   #unvar v_teller;
   }
   
} {1};
#return "慢走";
}


用法;
定义路径
#VARIABLE {p_daoguo_to_gang} {n;n;w;n;n;w}
#VARIABLE {p_gang_to_daoguo} {e;s;s;e;s;s}

要走路时
#var p_action $p_daoguo_to_gang
#show @f_run_delay{}

回来
#var p_action $p_gang_to_daoguo
#show @f_run_delay{}

北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2022-12-26 20:31:49 | 显示全部楼层
可以看看我写的命令解析执行器,目前还没实现回调,凑活用。
  1. #nop 命令解析器;

  2. /*
  3. Author:xgg

  4. 功能:解析执行使用分号分隔的命令列表。

  5. 例如:
  6. cmd_set {1;2;3;busy1;wait 5;waitfor 666;waitline 888;stop}

  7. 列表中特定参数有:

  8. 1)wait 等待给定秒数,省略参数则等待 2s。
  9. 2)waitfor 等待给定文本出现。
  10. 3)waitline 等待给定行出现。
  11. 4)busy1 等待 2s。
  12. 5)stop 停止执行。

  13. run 恢复执行。

  14. */

  15. #nop ====根据服务器指令数限制修改====;

  16. #nop 每秒最大命令数;
  17. #var step_accu_max {5};
  18. #nop 命令间隔时间;
  19. #var step_short {0.2};
  20. #nop 指令数超限间隔时间;
  21. #var step_long {1};

  22. #nop ====以下为代码实现部分,勿随意修改====;

  23. #nop 等待指定时间;
  24. #ali {wait}{
  25.     #switch {"%1"}{
  26.         #case {""}{
  27.             #var cmd {wait 2};
  28.         };
  29.         #default {
  30.             #var cmd {wait %1};
  31.         };
  32.     };
  33. };

  34. #nop 等待指定事件;
  35. #alias {waitfor}{
  36.   #var cmd {waitfor %1};
  37. };

  38. #nop 等待指定内容;
  39. #alias {waitline}{
  40.   #var cmd {waitline %1};
  41. };

  42. #nop 停止解析执行;
  43. #alias stop {
  44.   #echo {<103>停止解析执行..};
  45.   #var cmd stop;
  46. };

  47. #nop 继续解析执行;
  48. #alias run {
  49.   #echo {@bc1{继续解析执行..}};
  50.   cmd_do;
  51. };

  52. #nop ====自定义函数====
  53. #function {numitems} {#list {%1} size result};
  54. #function {ismember} {#list {%2} find {%1} result};
  55. #function {item} {#list {%1} get {%2} result};
  56. #nop ==================

  57. #nop 解析队列;
  58. #alias {cmd_set} {
  59.   #var cmds {};
  60.   #list cmds create %0;
  61.   #math stepmax &{cmds[]};
  62.   #echo {@bc1{当前待执行命令共计 $stepmax 个。}};
  63.   #line ignore #show {@bc1{队列:{${cmds[]}}}};
  64.   #math step_accu 1;
  65.   #math step 1;
  66.   cmd_do;
  67. };

  68. #nop 执行队列;
  69. #alias cmd_do {
  70.   #if {$step<=$stepmax} {
  71.     #switch {"$cmd"} {
  72.       #case {"stop"} {
  73.         #echo {<171>STOPPING...};
  74.         #var cmd {};
  75.       };
  76.       #case {"wait%s%d"} {
  77.         #local time {$cmd};
  78.         #replace time {wait} {};
  79.         #replace time { } {};
  80.         #echo {@bc1{等待「$time\s」后行动。}};
  81.         #delay {$time} cmd_do;
  82.         #var cmd {};
  83.       };
  84.       #case {"wait{for|line} %*"} {
  85.         #local waitfor {$cmd};
  86.         #var matchline {false};
  87.         #if { "$cmd" == "waitline %*" } {
  88.           #format matchline {true};
  89.         };
  90.         #replace waitfor {waitfor}  {};
  91.         #replace waitfor {waitline} {};
  92.         #replace waitfor { } {};
  93.         #if { "$matchline" == "true" } {
  94.           #format waitfor {^%p$} {$waitfor};
  95.         };
  96.         #else {
  97.           #format waitfor {%p} {$waitfor};
  98.         };
  99.         #var cmd {
  100.           #class cmd_do_tmp kill;
  101.           #class cmd_do_tmp open;
  102.           #echo {@bc1{等待「$waitfor」出现。}};
  103.           #action {$waitfor} {
  104.             #class cmd_do_tmp kill;
  105.             #delay 1 cmd_do;
  106.           };
  107.           #class cmd_do_tmp close;
  108.         };
  109.         $cmd;
  110.       };
  111.       #default {
  112.         #var cmd @item{cmds;$step};
  113.         #nop #echo {
  114.           @bc1{当前执行第 $step 个命令:「${cmds[+$step]}」}
  115.         };
  116.         #if {"$cmd"=="busy1"} {
  117.           #echo {<103>BUSYING...};
  118.           #math step_accu {$step_accu+1};
  119.           #math step {$step+1};
  120.           #delay 2 cmd_do;
  121.         };
  122.         #else {
  123.           $cmd;
  124.           #math step_accu {$step_accu+1};
  125.           #math step {$step+1};
  126.           #if {$step_accu >= $step_accu_max} {
  127.             #delay $step_long cmd_do;
  128.             #math step_accu 1;
  129.           };
  130.           #else {
  131.             #delay $step_short cmd_do;
  132.           };
  133.         };
  134.       };
  135.     };
  136.   };
  137.   #else {
  138.     #show {@bc1{命令解析执行完毕}};
  139.   };
  140. };
  141.   
  142. #nop 测试;
  143. #alias cmd_test {
  144.   cmd_set {
  145.     #echo 1;
  146.     wait;
  147.     #echo 2;
  148.     waitfor 666;
  149.     #echo 3;
  150.     busy1;
  151.     #echo 4;
  152.     stop;
  153.     waitline 999;
  154.     #echo 5;
  155.     #echo 6;
  156.     #echo 7;
  157.     #echo 8;
  158.     #echo 9;
  159.     busy1;
  160.   };
  161. };
复制代码


北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2022-12-26 20:34:10 | 显示全部楼层
单纯的慢走则可以使用#path run delay
  1. #nop 慢速执行,必须带括号;
  2. #nop 示例:slowdo {w;w;s};
  3. #alias slowdo {
  4.   #path load %0;
  5.   #path run 1;
  6. };
复制代码


北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2022-12-26 23:51:25 | 显示全部楼层
本帖最后由 wolfwar 于 2022-12-27 01:08 AM 编辑
xgg 发表于 2022-12-26 08:34 PM
单纯的慢走则可以使用#path run delay

测试了一下, 原来path 可以执行任何命令,只是在录制的时候不能接受除n,s,e,w,之外的命令,你这个功能和我的一样,只不过简洁多了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2022-12-26 23:57:11 | 显示全部楼层
xgg 发表于 2022-12-26 08:31 PM
可以看看我写的命令解析执行器,目前还没实现回调,凑活用。

谢谢! 等我慢慢研究学习
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2022-12-27 09:15:46 | 显示全部楼层
wolfwar 发表于 2022-12-26 11:51 PM
测试了一下, 原来path 可以执行任何命令,只是在录制的时候不能接受除n,s,e,w,之外的命令,你这个功能和 ...

并不是不支持,请查看#pathdir条目,要录制自定义指令则必须预先指定路径方向。
  1. 自定义命令只能是 1-63 之间的值。
  2. 比如:enter,out。

  3. #PATHDIR         {n}  {s}  {1}
  4. #PATHDIR         {e}  {w}  {2}
  5. #PATHDIR         {s}  {n}  {4}
  6. #PATHDIR         {w}  {e}  {8}
  7. #PATHDIR         {u}  {d}  {16}
  8. #PATHDIR         {d}  {u}  {32}
  9. #PATHDIR         {ne} {sw} {3}
  10. #PATHDIR         {se} {nw} {6}
  11. #PATHDIR         {nw} {se} {9}
  12. #PATHDIR         {sw} {ne} {12}
  13. #PATHDIR         {nu} {sd} {17}
  14. #PATHDIR         {eu} {wd} {18}
  15. #PATHDIR         {su} {nd} {20}
  16. #PATHDIR         {wu} {ed} {24}
  17. #PATHDIR         {nd} {su} {33}
  18. #PATHDIR         {ed} {wu} {34}
  19. #PATHDIR         {sd} {nu} {36}
  20. #PATHDIR         {wd} {eu} {40}
  21. #nop 自定义命令范围 1-63;
  22. #PATHDIR         {out} {enter} {61}
  23. #PATHDIR         {enter} {out} {62}
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2022-12-27 17:04:52 | 显示全部楼层
xgg 发表于 2022-12-27 09:15 AM
并不是不支持,请查看#pathdir条目,要录制自定义指令则必须预先指定路径方向。
...

原来这样啊, 信息太多一时弄不过来了,谢谢
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2023-1-21 12:18:29 | 显示全部楼层
xgg 发表于 2022-12-26 08:34 PM
单纯的慢走则可以使用#path run delay

请问怎么判断慢走是否结束?
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2023-1-21 12:26:46 | 显示全部楼层
oakbai 发表于 2023-1-21 12:18 PM
请问怎么判断慢走是否结束?

自己判断。tintin++ 不管这个。你做好房间触发,或者 response 触发,然后自己调用命令就行了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-3-29 03:36 PM , Processed in 0.016437 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表