Samatter

#forum-post-text

May 31st, 2021 (edited)
358
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.42 KB | None
  1. Определение, есть ли на стволе гевеи источники латекса, на какой они высоте и с какой стороны.
  2. Полезно для серверов HiTech 1.7.10, если вы сажаете деревья вплотную и не знаете, есть ли источники на закрытых сторонах.
  3.  
  4. 1) Создаёте в текстовом редакторе MKB файл "script_latex.data.txt".
  5. 2) Пишете в него следующее:
  6. If(%HITID%=="IC2:blockRubWood")
  7. #x=%HITX%
  8. #y=%HITY%
  9. #z=%HITZ%
  10.  
  11. // max rubber tree height is 8
  12. #y_max=#y+8
  13.  
  14. #latex_count=0
  15. &info="Latex not found."
  16.  
  17. For(#y_index,%#y%,%#y_max%)
  18. GetID(%#x%,%#y_index%,%#z%,&id,#data)
  19. If(%&id%=="IC2:blockRubWood")
  20. Dec(#data,1)
  21. If(%#data%>0)
  22. Inc(#latex_count,1)
  23.  
  24. // get latex state
  25. If(%#data%>6)
  26. Dec(#data,6)
  27. &info="Empty latex"
  28. Else
  29. &info="Full latex"
  30. EndIf
  31.  
  32. // get relative height
  33. #block_pos=#y_index
  34. Dec(#block_pos,%#y%)
  35. Inc(#block_pos,1)
  36. &info="%&info% on the block %#block_pos%"
  37.  
  38. // get latex side
  39. If(%#data%==1)
  40. &info="%&info%, north."
  41. ElseIf(%#data%==2)
  42. &info="%&info%, south."
  43. ElseIf(%#data%==3)
  44. &info="%&info%, west."
  45. ElseIf(%#data%==4)
  46. &info="%&info%, east."
  47. EndIf
  48.  
  49. Log(%&info%)
  50. EndIf
  51. EndIf
  52. Next
  53. If(%#latex_count%>0)
  54. &info="%#latex_count% latex found."
  55. EndIf
  56. Log(%&info%)
  57. EndIf
  58. 3) Сохраняете, идёте в меню бинда клавиш, выбираете клавишу.
  59. 4) Вписываете в неё $${Exec("script_latex.data.txt","latex.data.task")}$$.
  60. 5) Берёте нижний блок гевеи в прицел (чтобы появилось название) и нажимаете клавишу.
  61.  
  62. Будет выведена относительная высота каждого блока гевеи с латексом, а также сторона света, куда смотрит источник.
  63. Затем будет выведено общее число источников или "Latex not found", если их вообще нет.
  64.  
  65. ------------
  66.  
  67. Вывод в чат всех игроков, которые входят и выходят с сервера.
  68. У меня скрипт работает постоянно и запускается со входом на сервер, так что я всегда вижу, кто входит и выходит.
  69.  
  70. 1) Создаёте в текстовом редакторе MKB файл "script_leave.check.txt".
  71. 2) Пишете в него следующее:
  72. &color_online_name="§b"
  73. &color_online_text="§a"
  74. &color_offline_name="§b"
  75. &color_offline_text="§c"
  76. UnSafe()
  77. UnSet(@&players[])
  78. ForEach(players)
  79. Push(@&players[],%PLAYERNAME%)
  80. Next
  81. Do()
  82. Wait(5)
  83. UnSet(&players_new[])
  84. ForEach(players)
  85. Push(&players_new[],%PLAYERNAME%)
  86. Next
  87. #players_index=ArraySize(@&players[])
  88. Dec(#players_index,1)
  89. For(#index,0,%#players_index%)
  90. &name=%@&players[%#index%]%
  91. IndexOf(&players_new[],#index_temp,%&name%)
  92. If((%#index_temp%==-1)&&(%&name%!=""))
  93. Log("§r%&color_offline_name%%&name%§r %&color_offline_text%is offline.§r")
  94. @&players[%#index%]=""
  95. EndIf
  96. Next
  97. #players_index=ArraySize(&players_new[])
  98. Dec(#players_index,1)
  99. For(#index,0,%#players_index%)
  100. &name=%&players_new[%#index%]%
  101. IndexOf(@&players[],#index_temp,%&name%)
  102. If(%#index_temp%==-1)
  103. Log("§r%&color_online_name%%&name%§r %&color_online_text%is online.§r")
  104. IndexOf(@&players[],#index_temp,"")
  105. If(%#index_temp%==-1)
  106. Push(@&players[],%&name%)
  107. Else
  108. @&players[%#index_temp%]=%&name%
  109. EndIf
  110. EndIf
  111. Next
  112. Loop
  113. EndUnSafe
  114. 3) Сохраняете, идёте в меню бинда событий, выбираете событие onJoinGame.
  115. 4) Добавляете в него новую команду: $${Exec("script_leave.check.txt","leave.check.task")}$$.
  116. 4.Bonus) Если у вас уже есть команды в onJoinGame, используйте разделитель "|", например так: /god|/fly|$${Exec("script_leave.check.txt","leave.check.task")}$$.
  117. 5) Перезаходите на сервер, чтобы запустить событие onJoinGame и скрипт.
  118.  
  119. Каждый раз при обновлении массива игроков на сервере идёт сравнение его с предыдущей версией. Если игрок был, но его не стало, будет выведено сообщение "имя_игрока is offline". Если игрока не было, но он появился, будет выведено сообщение "имя_игрока is online".
  120.  
  121. ------------
  122.  
  123. Счётчик TPS с дробной частью и постоянным обновлением.
  124. MKB поддерживает только целые числа, так что все счётчики TPS с делением будут выводить неточное значение, округлённое в меньшую сторону. Это можно обойти.
  125.  
  126. 1) Создаёте в текстовом редакторе MKB файл "script_tps.label.txt".
  127. 2) Пишете в него следующее:
  128. Set(@tps_label_active,1)
  129. SetLabel("tps.label","Starting...")
  130. UnSafe()
  131. Do()
  132. #tick_1=%TICKS%
  133. Wait(10)
  134. #tick_2=%TICKS%
  135. &result="T1 = %#tick_1% / T2 = %#tick_2%\n"
  136. #tick_delta=#tick_2-#tick_1
  137. If(%#tick_delta%<0)
  138. Inc(#tick_delta,24000)
  139. EndIf
  140. If(%#tick_delta%>20000)
  141. &result="%&result%Heavy TPS Lag"
  142. Else
  143. &tps_array[]=Split("",%#tick_delta%)
  144. #tps_array_size=ArraySize(&tps_array[])
  145. If(%#tps_array_size%==1)
  146. &tps="0.%#tick_delta%"
  147. Else
  148. Pop(&tps_array[],&tps_array_last_digit)
  149. Push(&tps_array[],".%&tps_array_last_digit%")
  150. &tps=Join("",&tps_array[])
  151. EndIf
  152. &result="%&result%Current TPS = %&tps%"
  153. EndIf
  154. SetLabel("tps.label",%&result%)
  155. Loop
  156. EndUnSafe
  157. 3) Сохраняете, идёте в меню бинда событий, выбираете событие onJoinGame.
  158. 4) Добавляете в него новую команду: $${Exec("script_tps.label.txt","tps.label.task")}$$.
  159. 4.Bonus) Если у вас уже есть команды в onJoinGame, используйте разделитель "|", например так: /god|/fly|$${Exec("script_tps.label.txt","tps.label.task")}$$.
  160. 5) Идёте в меню редактирования GUI MKB, выбираете нужный вам экран, создаёте ярлык.
  161. 6) Задаёте имя ярлыка "tps.label" без кавычек. Визуальные параметры по желанию.
  162. 7) Перезаходите на сервер, чтобы запустить событие onJoinGame и скрипт.
  163.  
  164. Сразу после захода ярлык будет иметь текст "Starting...", но после 10 секунд сменится данными о тиках сервера и TPS, например 15.3. Для более быстрой работы команд (и точного измерения) использован блок UnSafe()/EndUnSafe. Погрешность всё ещё есть, но теперь она находится в намного меньших пределах (до 0.3 TPS по моим ощущениям) и работает только в бо́льшую сторону.
RAW Paste Data Copied