utils.tin 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. VAR {要寻找的 NPC 的特征,表格} {gFocusNPC} {};
  10. ///=== {
  11. // ## map.FocusNPC <NPC 特征> <行为类型> <行为>
  12. // 关注指定特征的 NPC,并当发现它时,呼叫相应的行为。
  13. // 特征由一系列字段来描述,目前支持的字段有:
  14. // - id: ID
  15. // - name: 名字
  16. // - title: 称号
  17. // - nick: 昵称
  18. // 行为有两种类型:
  19. // - command: 指明行为是一个命令,例如 follow 或者 kill 之类,那么将以 NPC ID 为参数调用它。
  20. // - alias: 指明行为是一个别名,表明要做的事情比较复杂,那么将以 NPC 对象为参数调用它。
  21. //
  22. // 如果省略所有参数,则不再关注任何 NPC。
  23. // };
  24. #alias {map.FocusNPC} {
  25. #local npc {%1};
  26. #local cbType {%2};
  27. #local callback {%3};
  28. #if { "%0" == "" } {
  29. #var gFocusNPC {};
  30. #return;
  31. };
  32. #if { "$npc" == "" } {
  33. xtt.Usage %90;
  34. #return;
  35. };
  36. #if { "$cbType" != "{command|alias}" } {
  37. xtt.Usage %90;
  38. #return;
  39. };
  40. #if { "$callback" == "" } {
  41. xtt.Usage %90;
  42. #return;
  43. };
  44. #local bad {1};
  45. #local new {};
  46. #local key {};
  47. #foreach {id;name;title;nick;desc} {key} {
  48. #if { "$npc[$key]" != "" } {
  49. #local bad {0};
  50. #local {new[$key]} {$npc[$key]};
  51. };
  52. };
  53. #if { $bad } {
  54. xtt.Usage %90;
  55. #return;
  56. };
  57. okLog 好的,已经为你关注 NPC: {$new},如果遇到它,将会调用 {$callback}。;
  58. #var gFocusNPC {$new};
  59. #var gFocusNPC[cbType] {$cbType};
  60. #var gFocusNPC[callback] {$callback};
  61. event.Handle {map/GotRoomInfo} {map/utils} {map} {map.check-npc};
  62. };
  63. #alias {map.check-npc} {
  64. #local idx {};
  65. #foreach {*gMapRoom[objs][]} {idx} {
  66. #local obj {$gMapRoom[objs][$idx]};
  67. #if { ( "$gFocusNPC[id]" == "" || "$obj[id]" == "$gFocusNPC[id]" )
  68. && ( "$gFocusNPC[name]" == "" || "$obj[name]" == "$gFocusNPC[name]" )
  69. && ( "$gFocusNPC[title]" == "" || "$obj[title]" == "$gFocusNPC[title]" )
  70. && ( "$gFocusNPC[nick]" == "" || "$obj[nick]" == "$gFocusNPC[nick]" ) } {
  71. okLog 发现目标 $obj[name] / $obj[id];
  72. #if { "$gFocusNPC[cbType]" == "command" } {
  73. #line sub var #delay 0 {$gFocusNPC[callback] $obj[id]};
  74. };
  75. #else {
  76. #line sub var #delay 0 {$gFocusNPC[callback] {$obj}};
  77. };
  78. };
  79. };
  80. };