北大侠客行MUD论坛

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

【Paotin++】入门系列之四: 最常用内置函数

[复制链接]
发表于 2024-8-23 16:43:22 | 显示全部楼层 |阅读模式
本帖最后由 doumimi 于 2024-8-23 04:44 PM 编辑

系列贴目录: 【Paotin++】入门系列之一: 客户端基础 - 技术园地 - 北大侠客行MUD论坛 - Powered by Discuz! (pkuxkx.com)

这篇给大家介绍一下PaoTin++客户端最常用的一些函数。

还是那句话,PT本身是个大宝藏,里面包含了3万行代码, 而且文档也非常的丰富。 大家可以没事多看看HELP paotin。  本文章分为两节介绍,一部分函数是跟游戏相关的,一部分是pt 对tt语法的增强xtintin部分。


游戏相关

一、 背包管理

这几个方法可以查询【物品/穿戴/手持/金钱】等方面的内容。   为了保证数据的准确性,请执行这些函数之前,执行一次 i2。并且通过sync.Wait 等待i2 执行完成。

  1. ## 函数 char.backpack.Query <范围>
  2.     查询角色是否携带有某样物品。如果有,则返回 ID 和名称;否则返回空串。
  3.     查询范围:
  4.       Item:       所有物品(但不包括包袱里的内容)
  5.       Wear:       穿戴
  6.       Wield:      手持的装备(武器或盾牌)
  7.       Equip:      携带的装备
  8.       Autoload:   Autoload 的装备
  9.       ItemID:     id 命令看到的数据
  10.       Cash:       金钱

  11. ## 函数 char.backpack.Has <范围>
  12.     查询角色是否携带有某样物品。如果有,则返回真,否则返回假。
  13.     查询范围参见 HELP char.backpack.Query。

  14. ## 函数 char.backpack.Amount <范围> <名称或/和 ID>
  15.     查询角色是否携带有某样物品。如果有,则返回其数量,否则返回 0。
  16.     查询范围参见 HELP char.backpack.Query。

复制代码
应用场景:
1. 做任务的时候,判断武器和装备是否都穿上了。
2. 需要购买,或者交钱的时候,判断是否带钱。 或者身上的钱太多了,影响负重、害怕丢失的时候,可以去钱庄存钱
3. 检查关键道具,比如火折,香蕉,石子,四宝,酒袋,干粮 带了没有。

例子:
  1. okLog @char.backpack.Amount{Item;coin}
  2. 47
  3. okLog @char.backpack.Amount{Item;gold}
  4. 1

  5. okLog @char.backpack.Amount{Item;干粮}
  6. 83

  7. okLog @char.backpack.Query{Wield;shield}
  8. 百战之盾/左手/shield
  9. okLog @char.backpack.Query{Wield;shutong gun}
  10. 熟铜棍/右手/shutong gun
复制代码
补充说明
1. 通常Amount能代替Has方法。
2. 在查询Wield 带了什么武器的时候,会返回武器是在左手或者右手。
3. 同样功能也可以通过 #var char.Item   #var char.Wield   #var char.Cash 来实现。  具体 这里面有提到。

二、 角色解析

判断角色的状态,是否在战斗中,是否繁忙
  1. ## 函数 char.IsBusy
  2.     如果角色正忙,则返回真,否则返回假。无参数。

  3. ## 函数 char.IsIdle
  4.     如果角色不忙,则返回真,否则返回假。无参数。

  5. ## 函数 char.InCombat
  6.     如果角色正处于战斗中,则返回真,否则返回假。无参数。
复制代码
应用场景
1. 是否在战斗: 我有个简陋的战斗模块,每隔0.3秒,判断一下,如果战斗中,就根据状态,选择自动pfm,自动recover,还是要  send quit.  
2. 是否busy: 做一些任务的时候,有时候会busy, 如果直接进行下面的逻辑,肯定是没法处理的。 这时候就需要判断一下是否busy,如果busy,就可能需要 先不执行下面的逻辑, 等待几秒后再retry.

三、 技能模块

判断技能等级、技能上线、以及当前jifa的技能。
  1. ## 函数 char.SkillLimit [<技能名称>]
  2.     如果指定了技能名称,则返回该技能所能达到的技能上限。
  3.     如果没有指定或者技能不存在,则返回本人的武功技能上限。
  4.     如果技能上限获取失败,默认值为基本内功的上限,如果基本内功上限也没有获取到,则默认为 1。

  5. ## 函数 char.SkillLevel <技能中文名称>
  6.     返回该技能的当前等级。没学会的技能等级为 0。

  7. ## 函数 char.GetJifaSkill <混合参数>
  8.     提供技能激发情况查询。
  9.     共分为三种情况:
  10.     1,输入参数为基本技能,输出对应的特殊技能名称。如果未激发则为空
  11.     2,输入参数为特殊技能,输出对应的基本技能名称。结果可能为多个。如果未激发则为空
  12.     3,输入参数为激发类型,则输出对应的基本技能名称。又分为以下两种情形:
  13.       (1),输入参数为常用拳脚或者常用兵器,则输出相应的基本技能名称。
  14.            由于存在互备的情形,因此结果是一个字符串列表,可能包含多个技能名称
  15.       (2),其它内功、躲闪、招架及武功种类,则输出对应的特殊技能名称

  16. ## 函数 char.SkillJifaLevel <技能中文名称>
  17.     返回技能激发等级,数据来自 jifa/enable 命令。
  18.     如果技能未被激发,那么分两种情况:
  19.        1. 如果输入的技能名称为基本功夫,则取 jifa 数据。 如果 jifa 数据取不到,则取技能当前等级的一半。
  20.        2. 如果输入的技能名称为特殊功夫,则取技能的当前等级。
复制代码
应用场景:
1. 通常在 打坐、吐纳、练习领悟、学习 的机器的时候使用。
例子:
  1. okLog @char.GetJifaSkill{基本内功}
  2. 混天气功
  3. okLog @char.SkillJifaLevel{基本内功}
  4. 305
  5. okLog @char.SkillLevel{基本内功}
  6. 192.02
  7. okLog @char.SkillLimit{基本内功}
  8. 197
复制代码

四、 宝石管理

可以对宝石的名称、id、code进行转换
  1. ## 函数 gem.NameToID <宝石中文名>
  2.     将宝石的中文名转换成背包中的英文 ID。

  3. ## 函数 gem.NameToCode <宝石中文名>
  4.     将宝石的中文名转换成锦囊中的英文序号。

  5. ## 函数 gem.CodeToName <宝石序号>
  6.     将锦囊中的宝石序号转换成中文名。

  7. ## 函数 gem.CodeToNameB <宝石序号>
  8.     将锦囊中的宝石序号转换成漂亮的中文名。
复制代码
应用场景:
1. 自动合宝石的机器。
2. 自动交易宝石的机器。
3. 计算宝石价值的机器。


例子:
  1. okLog @gem.NameToID{火☆ 玄冰}
  2. huo bing
  3. okLog @gem.NameToCode{火☆ 玄冰}
  4. B6A
  5. okLog @gem.CodeToName{B6A}
  6. 火☆玄冰
  7. okLog @gem.CodeToNameB{B6A}
  8. 火☆ 玄冰
复制代码







北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-8-23 16:44:12 | 显示全部楼层
本帖最后由 doumimi 于 2025-2-26 03:39 PM 编辑

XTintin相关

xtintin是对于tintin语法的增强, 是完全基于tintin的原始语法的。对于一些操作进行了封装,编程了很多好用的函数。
1. 这部分只需要大致了解即可, 最好需要用的时候当做手册来查询,平时也很难全部记住。
2. 如果你对tintin的语法很熟练这些函数其实完全不用也没关系看个人的习惯

HELP xtintin !

一、math

math 提供了非常多数学方面的运算。  大家可以通过HELP math来查看.  我对于这些方法都加了简单的注释,大家应该一看就懂。
  1. lib/xtintin 模块的 math.Sum    求和
  2. lib/xtintin 模块的 math.Min    求最小值
  3. lib/xtintin 模块的 math.Max    求最大值
  4. lib/xtintin 模块的 math.Int    求整,四舍五入
  5. lib/xtintin 模块的 math.Inc    别名, 增、减操作
  6. lib/xtintin 模块的 math.Avg    求平均值
  7. lib/xtintin 模块的 math.Abs    求绝对值
  8. lib/xtintin 模块的 math.Sign   取符号
  9. lib/xtintin 模块的 math.Root   开根
  10. lib/xtintin 模块的 math.Eval   通用计算
  11. lib/xtintin 模块的 math.Ceil   向上取整
  12. lib/xtintin 模块的 math.Power  幂
  13. lib/xtintin 模块的 math.Floor  向下取整
  14. lib/xtintin 模块的 math.Random  取 %1 %2 中间的一个随机值
  15. lib/xtintin 模块的 math.ParseCN   将汉字转化为数字
复制代码


例子:
  1. okLog @math.Int{4.5}
  2. 5
  3. okLog @math.Int{4.4}
  4. 4
  5. okLog @math.Avg{4;5;6}
  6. 5
  7. okLog @math.Min{1;2;3}
  8. 1
  9. okLog @math.Max{1;2;3}
  10. 3
  11. okLog @math.Eval{123 + 45 / 5}
  12. 132
  13. okLog @math.ParseCN{一百五十六}
  14. 156
复制代码
补充说明:
1. @math.Eval 是一个通用的计算模块, 大家如果不想记太多的函数的话,就记这一个也可以,已经能完成绝大多数的操作了, 比如求平均,就自己加一加,然后再除以个数。
2. @math.ParseCN 也非常好用, 他会将一个汉字变成数字,在mud游戏中很多地方都可能遇到。 具体看下上面的例子就明白了。
3. @math.Eval 里面的数字和符号之间要加空格, 用 #math aaa {123 + 45 / 5} 也要加空格。  这个是tintin的限制。

二、 字符串

str模块提供了非常多的字符串相关的操作, 下面是 我经常会用到的。

  1. str.Trim      去掉空格
  2. str.ToLower   转换成小写
  3. str.ToUpper   转换成大写
  4. str.Split       把字符串分割开
  5. str.Replace    替换字符
  6. str.Left    按照宽度截取字符串左边的内容,
  7. str.Right   按照宽度截取字符串右边的内容,
  8. str.Sub    从左开始截取,截取指定宽度
复制代码
例子:
  1. okLog @str.Trim{  你好   };
  2. 你好
  3. okLog @str.Len{你好}
  4. 4
  5. okLog @str.ToLower{ABCD};
  6. abcd
  7. okLog @str.ToUpper{abcd};
  8. ABCD
  9. okLog @str.Split{扬州的武庙;的}
  10. 扬州;武庙
  11. okLog @str.Replace{11111aaaa2222;a;b}
  12. 11111bbbb2222
  13. okLog @str.Left{123456789;5}
  14. 12345
  15. okLog @str.Right{123456789;5}
  16. 56789
  17. okLog @str.Sub{123456789;3;3}
  18. 456
  19. okLog @str.Sub{你好;2;2}
复制代码
特别说明:1. 字符有Len求长度, 以及Width求显示宽度, 然后截取的那三个函数,都是按照宽度来截取的汉字是2个宽度, 所以如果有汉字,或者】这种中文全角符号,那么需要特殊考虑.

三、列表
在看列表之前,请先看一下HELP  DataType,  在tintin中,所有的数据结构,都可以看成是字符串, 所以表格,列表,都可以看成是字符串
注意,由于 TinTin++ 自身语法的缺陷,字符串列表的第一个元素只能是简单字符串,不能是列表、字符串列表、表格,其余元素不受此限制。

普通列表可以用 @list 相关的方法 , 如果是字符串列表是 可以用@slist以及@list的所有方法.


PS: 我感觉Tintin本身的list的功能已经很好用了。 那些 基本的 add, find, delete, create, size ,sort, order, get 等方法我个人更习惯用tintin原生的。  
这里比较推荐一个 Reverse方法,可能会经常用到。
  1. #list temp create {a;b;c;d}; okLog @list.Reverse{$temp};
  2. {1}{d}{2}{c}{3}{b}{4}{a}

  3. #list temp create {11;2};#list temp order;#var temp;
  4. #VARIABLE {temp}
  5. {
  6.     {1} {2}
  7.     {2} {11}
  8. }
  9. #list temp create {11;2};#list temp sort;#var temp;
  10. #VARIABLE {temp}
  11. {
  12.     {1} {11}
  13.     {2} {2}
  14. }


复制代码

四、集合Set


集合真的是太厉害了!
Pt用list实现了集合set的功能, 集合的特性就是里面的所有元素都不重复, 也就是说, 你往一个set里面加入 1,2,2,3,3,4  那么最终集合中的元素会是 1,2,3,4 。重复的2和3都被过滤掉了。集合的方法特别多, 简单的 create、 add、 size 之类的就不细说了。 重点说三个,  交集, 并集, 以及Diff

  1. 先定义两个列表
  2. #var temp {@set.Create{1;2;3;4;5;1;2;3}};
  3. #var temp2 {@set.Create{4;4;5;5;6;6;7;7;8}};
  4. #VARIABLE {temp}
  5. {
  6.     {1} {1}
  7.     {2} {2}
  8.     {3} {3}
  9.     {4} {4}
  10.     {5} {5}
  11. }


  12. #VARIABLE {temp2}
  13. {
  14.     {1} {4}
  15.     {2} {5}
  16.     {3} {6}
  17.     {4} {7}
  18.     {5} {8}
  19. }

  20. 取并集
  21. #var temp3 {@set.Union{{$temp};{$temp2}}};
  22. #VARIABLE {temp3}
  23. {
  24.     {1} {1}
  25.     {2} {2}
  26.     {3} {3}
  27.     {4} {4}
  28.     {5} {5}
  29.     {6} {6}
  30.     {7} {7}
  31.     {8} {8}
  32. }

  33. 取交集
  34. #var temp4 {@set.Intersection{{$temp};{$temp2}}};
  35. #VARIABLE {temp4}
  36. {
  37.     {1} {4}
  38.     {2} {5}
  39. }

  40. 取A-B差集
  41. #VARIABLE {temp5}
  42. {
  43.     {1} {1}
  44.     {2} {2}
  45.     {3} {3}
  46. }
复制代码

应用场景:
  • 偷学
  • 经书、乱序 等其他需要进行一些文字对比的地方。

五、转换

fp系列函数的主要功能就是对列表或者表格进行 转换、过滤。 掌握了之后写代码会非常的优雅。

  1. lib/xtintin 模块的 fp.Map                         遍历表格,进行内容转换
  2. lib/xtintin 模块的 fp.MapIf                      遍历表格,根据条件,进行内容转化
  3. lib/xtintin 模块的 fp.Select                      遍历字符串列表,根据条件过滤
  4. lib/xtintin 模块的 fp.Filter                       遍历表格,根据条件过滤
  5. lib/xtintin 模块的 fp.Transform                遍历字符串列表,转换Item
  6. lib/xtintin 模块的 fp.FilterMap                  遍历表格,既过滤,又转换
  7. lib/xtintin 模块的 fp.TransformIf              遍历字符串列表, 根据条件,对于内容进行转换。
  8. lib/xtintin 模块的 fp.SelectTransform        遍历字符串列表, 既过滤,又转换
复制代码

例子:

  1. #var temp {a;b;c;d;5;6;7};

  2. okLog {@fp.Transform{{$temp};gan che to VALUE}};
  3. {gan che to a;gan che to b;gan che to c;gan che to d;gan che to 5;gan che to 6;gan che to 7}

  4. okLog {@fp.TransformIf{{$temp};{"VALUE" == "%d"};{gan che to VALUE}}};
  5. {a;b;c;d;gan che to 5;gan che to 6;gan che to 7}

  6. #var temp {
  7.     {扬州} {{name}{扬州}{area}{yes}}
  8.     {当铺} {{name}{当铺}{area}{no}}
  9. };
  10. #VARIABLE {temp}
  11. {
  12.     {当铺}
  13.     {
  14.         {area} {no}
  15.         {name} {当铺}
  16.     }
  17.     {扬州}
  18.     {
  19.         {area} {yes}
  20.         {name} {扬州}
  21.     }
  22. }

  23. #var temp2 {@fp.Filter{{$temp};{"VALUE[area]" == "yes"}}};
  24. #VARIABLE {temp2}
  25. {
  26.     {扬州}
  27.     {
  28.         {area} {yes}
  29.         {name} {扬州}
  30.     }
  31. }
复制代码

特别说明:
1. 可以看到上面例子中给了两个功能,一个是将字符串进行转换, 一个是对表格类型的数据进行过滤。 都只用了一行函数就完成了整个操作。 非常非常的优雅。 如果自己实现通过遍历也是可以的,就是可能要5、6行代码才行。
2. 这个系列的函数虽然看着很多,但是只要记住核心的功能就是进行转化和过滤就行。 Map和transform对应转化,Filter和select对应过滤。 分别对应了表格和字符串列表的方法。

   
六、路径
路径相关的函数也经常会用到,毕竟mud里面最重要的就是赶路
  1. ## 函数 path.Reverse <路径>
  2.    给出路径对应的反向路径。

  3. ## 函数 path.Long <路径>
  4.    返回长版本的路径。路径中的每个方向命令都会被扩展成完整的单词。

  5. ## 函数 path.Short <路径>
  6.    返回长版本的路径。路径中的每个方向命令都会被简化。
复制代码
应用场景:1. 所有跟路线有关的场景,尤其是固定路线, 比如推车,巡山等都可能用到。
例子:
  1. #var temp {west;east;north;south};
  2. okLog @path.Short{$temp};
  3. w;e;n;s


  4. #var temp {w;e;n;s}
  5. okLog @path.Long{$temp};
  6. west;east;north;south


  7. #var temp {w;e;n;s;north};
  8. okLog @path.Reverse{$temp};
  9. south;n;s;w;e
复制代码


七、其他
剩下一个我经常用的函数就是时间,非常简单,直接给个例子
  1. okLog @time.FormatNow{} 获得了100颗天木;
  2. 2024-08-23 16:29:06 获得了100颗天木
复制代码



好了,暂时就到这里了,之后遇见好用的函数,还会回来补充到帖子里面。

北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

发表于 2024-8-23 16:54:16 | 显示全部楼层
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-8-23 17:03:42 | 显示全部楼层
普及贴,赞一个
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

发表于 2025-1-7 20:41:38 | 显示全部楼层
厉害!!!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 6 天前 | 显示全部楼层
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 6 天前 | 显示全部楼层
竟然有更新,那得再拜读一遍!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 6 天前 | 显示全部楼层
yanguilai 发表于 2025-2-26 03:59 PM
竟然有更新,那得再拜读一遍!

诶,这个是有提示还是说你看文档的编辑时间知道的更新呢?  我只是有时候会补充一点东西,或者遇到一些新人遇到的问题就更新上去, 整体上没有大更新了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 6 天前 | 显示全部楼层
本帖最后由 yanguilai 于 2025-2-26 04:11 PM 编辑

之前看过,今儿凑巧翻到这里浏览一下,感觉内容有些不一样了,运气好发现竟然还有更新:)
建议更新后回帖建个日志,系统也能提醒。
最后,期待大佬多细化更多有助于新手理解的例子和内容!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-3-4 08:19 AM , Processed in 0.015970 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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