arena_mine.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. // package arena_mine -- объект шахты на базе
  2. package arena_mine
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  8. // . "wartank/app/lev0/alias"
  9. . "wartank/app/lev0/types"
  10. "wartank/app/lev1"
  11. "wartank/app/lev2/arena"
  12. "wartank/app/lev2/arena/arena_build"
  13. "wartank/app/lev2/arena/arena_mine/bf_mine_accelerate"
  14. "wartank/app/lev2/arena/arena_mine/bf_mine_build"
  15. "wartank/app/lev2/arena/arena_mine/bf_mine_make"
  16. "wartank/app/lev2/arena/arena_mine/bf_mine_take"
  17. "wartank/app/lev2/arena/arena_mine/bf_mine_time_work"
  18. )
  19. // АренаШахта -- объект шахты на базе
  20. type АренаШахта struct {
  21. ИАренаСтроение
  22. лог ИВебЛог
  23. база ИАренаБаза
  24. руда ИСтатПарам
  25. железо ИСтатПарам
  26. сталь ИСтатПарам
  27. свинец ИСтатПарам
  28. конт ILocalCtx
  29. }
  30. // НовШахта -- возвращает новый *Mine
  31. func НовШахта(конт ILocalCtx) *АренаШахта {
  32. сам := &АренаШахта{
  33. конт: конт,
  34. база: конт.Get("база").Val().(ИАренаБаза),
  35. руда: lev1.НовСтатПарам("руда"),
  36. железо: lev1.НовСтатПарам("железо"),
  37. сталь: lev1.НовСтатПарам("сталь"),
  38. свинец: lev1.НовСтатПарам("свинец"),
  39. }
  40. аренаКонфиг := arena.АренаКонфиг{
  41. Конт_: сам.конт,
  42. АренаИмя_: "Шахта",
  43. СтрКонтроль_: `<span class="green2">Руда</span><br/>`,
  44. СтрУрл_: "https://wartank.ru/production/Mine",
  45. ВремОстат_: 1,
  46. }
  47. сам.ИАренаСтроение = arena_build.НовАренаСтроение(конт, аренаКонфиг)
  48. сам.лог = сам.ВебЛог()
  49. go сам.пуск()
  50. сам.лог.ОтклВывод()
  51. сам.лог.Добавить("Шахта.НовШахта(): бот=%q\n", конт.Get("бот").Val().(ИБот).Имя())
  52. конт.Set("шахта", сам, "Шахта бота")
  53. _ = ИАренаШахта(сам)
  54. return сам
  55. }
  56. func (сам *АренаШахта) Пуск() {
  57. сам.ИАренаСтроение.Пуск()
  58. bf_mine_build.ШахтаПостроить(сам.конт)
  59. bf_mine_accelerate.ШахтаУскорить(сам.конт)
  60. bf_mine_take.ШахтаЗабрать(сам.конт)
  61. bf_mine_make.ШахтаРаботать(сам.конт)
  62. bf_mine_time_work.ШахтаРаботаВремя(сам.конт)
  63. }
  64. // пуск -- запускает обработку шахты
  65. func (сам *АренаШахта) пуск() {}
  66. // Проверяет количество продукта в шахте
  67. func (сам *АренаШахта) количествоПолучить() (bool, error) {
  68. сам.лог.Добавить("Шахта.количествоПолучить()\n")
  69. var (
  70. strOut string
  71. еслиНайдено bool
  72. режим string
  73. )
  74. lstMine := сам.Сеть().ВебВоркер().Получ("https://wartank.ru/buildings")
  75. /*
  76. Режим (руда-1):
  77. <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/>&nbsp;1</div></td>
  78. Время (+8 строк):
  79. <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/>&nbsp;1</div></td>
  80. */
  81. for _, strOut = range lstMine {
  82. // Руда текущее
  83. if strings.Contains(strOut, `src="/images/icons/ore.png?2" alt="ore"`) {
  84. // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/>&nbsp;1</div></td>
  85. еслиНайдено = true
  86. режим = "руда"
  87. break
  88. }
  89. // Железо текущее
  90. if strings.Contains(strOut, `src="/images/icons/iron.png?2" alt="iron"`) {
  91. // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/iron.png?2" alt="iron"/>&nbsp;2</div></td>
  92. еслиНайдено = true
  93. режим = "железо"
  94. break
  95. }
  96. // Сталь текущее
  97. if strings.Contains(strOut, `src="/images/icons/steel.png?2" alt="steel"`) {
  98. // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/steel.png?2" alt="iron"/>&nbsp;2</div></td>
  99. еслиНайдено = true
  100. режим = "сталь"
  101. break
  102. }
  103. // Свинец текущее
  104. if strings.Contains(strOut, `src="/images/icons/plumbum.png?2" alt="plumbum"`) {
  105. // <td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="iron"/>&nbsp;2</div></td>
  106. еслиНайдено = true
  107. режим = "свинец"
  108. break
  109. }
  110. }
  111. if !еслиНайдено {
  112. сам.лог.Добавить("Шахта.количествоПолучить(): не надо\n")
  113. return true, nil
  114. }
  115. switch режим {
  116. case "руда":
  117. _число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/ore.png?2" alt="ore"/>&nbsp;`)
  118. _число = strings.TrimSuffix(_число, `</div></td>`)
  119. iNum, err := strconv.Atoi(_число)
  120. if err != nil {
  121. сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во руды (%v) не число, err=\n\t%v\n", _число, err)
  122. return false, fmt.Errorf("")
  123. }
  124. сам.ПродуктСейчас().Уст(iNum)
  125. сам.ПродуктСейчас().ИмяУст("руда")
  126. сам.лог.Добавить("Шахта.количествоПолучить(): кол-во руды = %v\n", iNum)
  127. case "железо":
  128. _число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/iron.png?2" alt="iron"/>&nbsp;`)
  129. _число = strings.TrimSuffix(_число, `</div></td>`)
  130. iNum, err := strconv.Atoi(_число)
  131. if err != nil {
  132. сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во железа (%v) не число, err=\n\t%v\n", _число, err)
  133. return false, fmt.Errorf("")
  134. }
  135. сам.ПродуктСейчас().Уст(iNum)
  136. сам.ПродуктСейчас().ИмяУст("железо")
  137. сам.лог.Добавить("Шахта.количествоПолучить(): кол-во железа = %v\n", iNum)
  138. case "сталь":
  139. _число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/steel.png?2" alt="steel"/>&nbsp;`)
  140. _число = strings.TrimSuffix(_число, `</div></td>`)
  141. iNum, err := strconv.Atoi(_число)
  142. if err != nil {
  143. сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во стали (%v) не число, err=\n\t%v\n", _число, err)
  144. return false, fmt.Errorf("")
  145. }
  146. сам.ПродуктСейчас().Уст(iNum)
  147. сам.ПродуктСейчас().ИмяУст("сталь")
  148. сам.лог.Добавить("Шахта.количествоПолучить(): кол-во стали = %v\n", iNum)
  149. case "свинец":
  150. _число := strings.TrimPrefix(strOut, `<td class="vam"><div class="nwr pr5 gray1"><img class="rico vm" src="/images/icons/plumbum.png?2" alt="plumbum"/>&nbsp;`)
  151. _число = strings.TrimSuffix(_число, `</div></td>`)
  152. iNum, err := strconv.Atoi(_число)
  153. if err != nil {
  154. сам.лог.Добавить("ОШИБКА Шахта.количествоПолучить(): кол-во свинца (%v) не число, err=\n\t%v\n", _число, err)
  155. return false, fmt.Errorf("")
  156. }
  157. сам.ПродуктСейчас().Уст(iNum)
  158. сам.ПродуктСейчас().ИмяУст("свинец")
  159. сам.лог.Добавить("Шахта.количествоПолучить(): кол-во свинца = %v\n", iNum)
  160. default:
  161. сам.лог.Добавить("Шахта.количествоПолучить(): неизвестный режим (%v)\n", режим)
  162. return false, fmt.Errorf("")
  163. }
  164. return true, nil
  165. }
  166. // // Проверяет ускорение строительства FIXME: не работает
  167. // func (сам *АренаШахта) ускорениеПровер() {
  168. // сам.лог.Добавить("")
  169. // списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
  170. // // <span class="green2">Шахта - 0</span><br/>
  171. // var (
  172. // еслиНайти bool
  173. // стр string
  174. // )
  175. // for _, стр = range списСтр {
  176. // if strings.Contains(стр, `<span class="green2">Шахта - `) {
  177. // еслиНайти = true
  178. // break
  179. // }
  180. // }
  181. // if !еслиНайти {
  182. // сам.лог.Добавить("Шахта.ускорениеПровер(): не надо\n")
  183. // return
  184. // }
  185. // сам.лог.Добавить("Шахта.ускорениеПровер(): надо\n")
  186. // }
  187. // Обновляет текущий уровень шахты (может быть не построена)
  188. func (сам *АренаШахта) уровеньОбновить() bool {
  189. сам.лог.Добавить("Шахта.уровеньОбновить()\n")
  190. списСтр := сам.Сеть().ВебВоркер().Получ("http://wartank.ru/buildings")
  191. // <span class="green2">Шахта - 0</span><br/>
  192. var (
  193. еслиНайти = false
  194. стр = ""
  195. )
  196. for _, стр = range списСтр {
  197. if strings.Contains(стр, `<span class="green2">Шахта - `) {
  198. еслиНайти = true
  199. break
  200. }
  201. }
  202. if !еслиНайти {
  203. сам.лог.Добавить("Шахта.уровеньОбновить(): нет уровня\n")
  204. return false
  205. }
  206. _стр := strings.TrimPrefix(стр, `<span class="green2">Шахта - `)
  207. _стр = strings.TrimSuffix(_стр, `</span><br/>`)
  208. иУровень, ош := strconv.Atoi(_стр)
  209. if ош != nil {
  210. сам.лог.Добавить("ОШИБКА Шахта.уровеньОбновить(): строка уровня сбойная, стр=%q, ош=\n\t%v\n", стр, ош)
  211. return false
  212. }
  213. сам.Уровень().Уст(иУровень)
  214. сам.лог.Добавить("Шахта.уровеньОбновить(): уровень=%v\n", иУровень)
  215. return true
  216. }
  217. // Сделать -- вызывается с базы, если она обнаружила, что пора сделать продукцию
  218. func (сам *АренаШахта) Сделать() {
  219. }
  220. // Свинец -- возвращает объект свинца
  221. func (сам *АренаШахта) Свинец() ИСтатПарам {
  222. return сам.свинец
  223. }
  224. // Сталь -- возвращает объект стали
  225. func (сам *АренаШахта) Сталь() ИСтатПарам {
  226. return сам.сталь
  227. }
  228. // Железо -- возвращает объект железа
  229. func (сам *АренаШахта) Железо() ИСтатПарам {
  230. return сам.железо
  231. }
  232. // Руда -- возвращает объект руды
  233. func (сам *АренаШахта) Руда() ИСтатПарам {
  234. return сам.руда
  235. }