speedo.tin 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分。
  4. PaoTin++ © 2020~2022 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  5. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  6. */
  7. #var lib_speedo[META] {
  8. {NAME} {测速仪}
  9. {DESC} {为各种数据提供测速支持,气血/精神/经验值/存款都可以}
  10. {AUTHOR} {担子炮}
  11. };
  12. #function {lib_speedo.Init} {
  13. #var gSpeedo {};
  14. #return {true};
  15. };
  16. #alias {speedo.Add} {
  17. #local key {%1};
  18. #local value {%2};
  19. #local monotone {%3};
  20. #local keepalive {%4};
  21. #math value {$value + @speedo.Get{{$key}}};
  22. speedo.Set {$key} {$value} {$monotone} {$keepalive};
  23. };
  24. #alias {speedo.Set} {
  25. #local key {%1};
  26. #local value {%2};
  27. #local monotone {%3};
  28. #local keepalive {%4};
  29. #format {now} {%T};
  30. #if { "$gSpeedo[$key]" == "" } {
  31. #var {gSpeedo[$key][base]} {$value};
  32. #var {gSpeedo[$key][baseTime]} {$now};
  33. #var {gSpeedo[$key][deduction]} {0};
  34. #var {gSpeedo[$key][paused]} {false};
  35. };
  36. #nop 只允许单调递增或者单调递减;
  37. #if { "$monotone" == "true" } {
  38. #if { ( $value > $gSpeedo[$key][value] && $gSpeedo[$key][value] < $gSpeedo[$key][base] )
  39. || ( $value < $gSpeedo[$key][value] && $gSpeedo[$key][value] > $gSpeedo[$key][base] ) } {
  40. #var {gSpeedo[$key][base]} {$gSpeedo[$key][value]};
  41. #var {gSpeedo[$key][baseTime]} {$gSpeedo[$key][update]};
  42. #var {gSpeedo[$key][deduction]} {0};
  43. };
  44. };
  45. #line local #math interval {$now - $gSpeedo[$key][update]};
  46. #nop Set 会导致继续统计,但之前暂停时经过的时间将被扣除;
  47. #nop 超过 keepalive 的间隔也会被扣除;
  48. #if { "$gSpeedo[$key][paused]" == "true" || ("$keepalive" != "" && $interval > $keepalive) } {
  49. #var {gSpeedo[$key][paused]} {false};
  50. #math {gSpeedo[$key][deduction]} {$gSpeedo[$key][deduction] + $interval};
  51. };
  52. #var {gSpeedo[$key][value]} {$value};
  53. #var {gSpeedo[$key][update]} {$now};
  54. };
  55. #function {speedo.Get} {
  56. #local key {%1};
  57. #if { "$gSpeedo[$key]" == "" } {
  58. #return {0};
  59. };
  60. #return {$gSpeedo[$key][value]};
  61. };
  62. #alias {speedo.GetUpdateTime} {
  63. #local key {%1};
  64. #return {$gSpeedo[$key][update]};
  65. };
  66. #function {speedo.GetSpeed} {
  67. #local key {%1};
  68. #local interval {%2};
  69. #local speedInfo {@speedo.GetSpeedInfo{{$key};{$interval}}};
  70. #if { "$speedInfo" == "" } {
  71. #return {0};
  72. };
  73. #return {$speedInfo[value]};
  74. };
  75. #function {speedo.GetSpeedInfo} {
  76. #local key {%1};
  77. #local interval {%2};
  78. #if { "$interval" == "" } {
  79. #local interval 1;
  80. };
  81. #if { "$gSpeedo[$key]" == "" } {
  82. #return {};
  83. };
  84. #local value {0};
  85. #math value {
  86. ( $gSpeedo[$key][value] - $gSpeedo[$key][base] ) * $interval
  87. / ( $gSpeedo[$key][update] - $gSpeedo[$key][baseTime] - $gSpeedo[$key][deduction])
  88. };
  89. #return {
  90. {begin} {$gSpeedo[$key][baseTime]}
  91. {end} {$gSpeedo[$key][update]}
  92. {value} {$value}
  93. };
  94. };
  95. #alias {speedo.Pause} {
  96. #local key {%1};
  97. #var {gSpeedo[$key][paused]} {true};
  98. };
  99. #alias {speedo.Resume} {
  100. #local key {%1};
  101. #if { "$gSpeedo[$key][paused]" == "true" } {
  102. #var {gSpeedo[$key][paused]} {false};
  103. #math {gSpeedo[$key][deduction]} {$gSpeedo[$key][deduction] + $now - $gSpeedo[$key][update]};
  104. #format {now} {%T};
  105. #var {gSpeedo[$key][update]} {$now};
  106. };
  107. };
  108. #alias {speedo.Reset} {
  109. #local key {%1};
  110. #if { "$gSpeedo[$key]" == "" } {
  111. #return;
  112. };
  113. #format {now} {%T};
  114. #var {gSpeedo[$key][base]} {0};
  115. #var {gSpeedo[$key][baseTime]} {$now};
  116. #var {gSpeedo[$key][deduction]} {0};
  117. #var {gSpeedo[$key][paused]} {false};
  118. #var {gSpeedo[$key][value]} {0};
  119. #var {gSpeedo[$key][update]} {$now};
  120. };