北大侠客行MUD论坛

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

【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 | 显示全部楼层
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游戏中很多地方都可能遇到。 具体看下上面的例子就明白了。

二、 字符串

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-17 03:30 AM , Processed in 0.015778 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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