missions.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. package missions
  2. import (
  3. "strings"
  4. "time"
  5. "wartank/pkg/arena"
  6. "wartank/pkg/components/arena_net"
  7. . "wartank/pkg/kernel/kernel_types"
  8. . "wartank/server/lev0/types"
  9. )
  10. /*
  11. Сканирует миссии на предмет забрать золотишко.
  12. */
  13. // Миссии -- забирает золотишко
  14. type Миссии struct {
  15. ИАрена
  16. бот ИБот
  17. сеть ИАренаСеть
  18. }
  19. // НовМиссии -- возвращает новый *Миссии
  20. func НовМиссии(конт ИЯдроКонтекст, бот ИБот) (*Миссии, error) {
  21. сам := &Миссии{
  22. бот: бот,
  23. }
  24. аренаКонфиг := arena.АренаКонфиг{
  25. Бот_: бот,
  26. АренаИмя_: "Миссии",
  27. СтрКонтроль_: "<title>Миссии</title>",
  28. ФнПуск_: сам.пуск,
  29. СтрУрл_: "https://wartank.ru/missions/", // https://wartank.ru/missions/
  30. }
  31. сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
  32. сам.сеть = arena_net.НовАренаСеть(конт, сам, "https://wartank.ru/missions/")
  33. _ = ИМиссии(сам)
  34. return сам, nil
  35. }
  36. // // Бот -- возвращает бота
  37. // func (сам *Миссии) Бот() types.ИБот {
  38. // return сам.бот
  39. // }
  40. // Пуск -- запускает в работу сбор миссий
  41. func (сам *Миссии) Пуск() {
  42. go сам.пуск()
  43. }
  44. // обрабатывает конвой
  45. func (сам *Миссии) пуск() {
  46. time.Sleep(time.Second * 5)
  47. for { // Время истекло
  48. // time.Sleep(time.Minute * 1)
  49. select {
  50. case <-сам.бот.Контекст().Done():
  51. return
  52. default:
  53. сам.проверНаграда()
  54. time.Sleep(time.Minute * 1)
  55. }
  56. }
  57. }
  58. // Забирает всё самое вкусное
  59. func (сам *Миссии) проверНаграда() {
  60. сам.сражениеЗащита()
  61. сам.сражениеНаступление()
  62. сам.проведиВойну()
  63. сам.battle5Fiting()
  64. сам.battle6win()
  65. сам.battle10Fiting()
  66. сам.battleDogFyting()
  67. сам.makeResource()
  68. сам.kill3tanks()
  69. сам.топливоДив()
  70. сам.upMan()
  71. }
  72. // Проверяет награду за уничтожить 3 танка в бою
  73. func (сам *Миссии) kill3tanks() {
  74. var (
  75. strOut string
  76. lstMissions = сам.СписПолучить()
  77. еслиНайдено bool
  78. ind int
  79. )
  80. for ind, strOut = range lstMissions {
  81. if strings.Contains(strOut, `Уничтожь в бою 3 танка<br/>`) {
  82. еслиНайдено = true
  83. break
  84. }
  85. }
  86. if !еслиНайдено {
  87. return
  88. }
  89. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  90. ind += 23
  91. strOut = lstMissions[ind]
  92. if !strings.Contains(strOut, `>Получить награду<`) {
  93. return
  94. }
  95. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  96. strLink := lstLink[1]
  97. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  98. strLink = "https://wartank.ru/missions/" + lstLink[0]
  99. lstMissions, err := сам.сеть.Get(strLink)
  100. if err != nil {
  101. // log._rintf("ERRO Миссии.kill3tanks(): при выполнении GET-запроса, err=\n\t%v\n", err)
  102. return
  103. }
  104. if err := сам.СтрОбновить(lstMissions); err != nil {
  105. // log._rintf("ERRO Миссии.kill3tanks(): при обновлении lstMissions, err=\n\t%v\n", err)
  106. return
  107. }
  108. }
  109. // Проверяет награду оборонительного сражения
  110. func (сам *Миссии) сражениеЗащита() {
  111. var (
  112. strOut string
  113. еслиНайдено bool
  114. )
  115. сам.сеть.Обновить()
  116. списМиссия := сам.СписПолучить()
  117. // <a class="simple-but border" href="?23-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  118. for _, strOut = range списМиссия {
  119. if strings.Contains(strOut, `.ILinkListener-missions-cc-0-c-awardLink`) {
  120. еслиНайдено = true
  121. break
  122. }
  123. }
  124. if !еслиНайдено {
  125. return
  126. }
  127. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  128. _ссылка := strings.TrimPrefix(strOut, `<a class="simple-but border" href="`)
  129. _ссылка = strings.TrimSuffix(_ссылка, `"><span><span>Получить награду</span></span></a>`)
  130. strLink := "https://wartank.ru/missions/" + _ссылка
  131. списМиссия, err := сам.сеть.Get(strLink)
  132. if err != nil {
  133. // log._rintf("ERRO Миссии.battleDefence(): при выполнении GET-запроса, err=\n\t%v\n", err)
  134. return
  135. }
  136. if err := сам.СтрОбновить(списМиссия); err != nil {
  137. // log._rintf("ERRO Миссии.battleDefence(): при обновлении lstMissions, err=\n\t%v\n", err)
  138. return
  139. }
  140. }
  141. // Проверяет награду за одну войну
  142. func (сам *Миссии) проведиВойну() {
  143. var (
  144. strOut string
  145. lstMissions = сам.СписПолучить()
  146. еслиНайдено bool
  147. ind int
  148. )
  149. for ind, strOut = range lstMissions {
  150. if strings.Contains(strOut, `Проведи одну войну<br/>`) {
  151. еслиНайдено = true
  152. break
  153. }
  154. }
  155. if !еслиНайдено {
  156. return
  157. }
  158. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  159. ind += 23
  160. strOut = lstMissions[ind]
  161. if !strings.Contains(strOut, `>Получить награду<`) {
  162. return
  163. }
  164. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  165. strLink := lstLink[1]
  166. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  167. strLink = "https://wartank.ru/missions/" + lstLink[0]
  168. lstMissions, err := сам.сеть.Get(strLink)
  169. if err != nil {
  170. // log._rintf("ERRO Миссии.battleWar(): при выполнении GET-запроса, err=\n\t%v\n", err)
  171. return
  172. }
  173. if err := сам.СтрОбновить(lstMissions); err != nil {
  174. // log._rintf("ERRO Миссии.battleWar(): при обновлении lstMissions, err=\n\t%v\n", err)
  175. return
  176. }
  177. }
  178. // Проверяет награду наступательного сражения
  179. func (сам *Миссии) сражениеНаступление() {
  180. var (
  181. strOut string
  182. еслиНайдено bool
  183. ind int
  184. lstMissions = сам.СписПолучить()
  185. )
  186. if len(lstMissions) == 0 {
  187. сам.сеть.Обновить()
  188. lstMissions = сам.СписПолучить()
  189. }
  190. for ind, strOut = range lstMissions {
  191. if strings.Contains(strOut, "Проведи одно наступательное сражение<br/>") {
  192. еслиНайдено = true
  193. break
  194. }
  195. }
  196. if !еслиНайдено {
  197. return
  198. }
  199. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  200. ind += 23
  201. strOut = lstMissions[ind]
  202. if !strings.Contains(strOut, `>Получить награду<`) {
  203. return
  204. }
  205. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  206. strLink := lstLink[1]
  207. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  208. strLink = "https://wartank.ru/missions/" + lstLink[0]
  209. lstMissions, err := сам.сеть.Get(strLink)
  210. if err != nil {
  211. // log._rintf("ERRO Миссии.battleAttack(): при выполнении GET-запроса, err=\n\t%v\n", err)
  212. return
  213. }
  214. if err := сам.СтрОбновить(lstMissions); err != nil {
  215. // log._rintf("ERRO Миссии.battleAttack(): при обновлении lstMissions, err=\n\t%v\n", err)
  216. return
  217. }
  218. }
  219. // Проверяет награду за схватку
  220. func (сам *Миссии) battleDogFyting() {
  221. var (
  222. strOut string
  223. lstMissions = сам.СписПолучить()
  224. еслиНайдено bool
  225. ind int
  226. )
  227. for ind, strOut = range lstMissions {
  228. if strings.Contains(strOut, `Проведи одну схватку<br/>`) {
  229. еслиНайдено = true
  230. break
  231. }
  232. }
  233. if !еслиНайдено {
  234. return
  235. }
  236. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  237. ind += 23
  238. strOut = lstMissions[ind]
  239. if !strings.Contains(strOut, `>Получить награду<`) {
  240. return
  241. }
  242. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  243. strLink := lstLink[1]
  244. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  245. strLink = "https://wartank.ru/missions/" + lstLink[0]
  246. lstMissions, err := сам.сеть.Get(strLink)
  247. if err != nil {
  248. // log._rintf("ERRO Миссии.battleDogFyting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  249. return
  250. }
  251. if err := сам.СтрОбновить(lstMissions); err != nil {
  252. // log._rintf("ERRO Миссии.battleDogFyting(): при обновлении lstMissions, err=\n\t%v\n", err)
  253. return
  254. }
  255. }
  256. // Проверяет награду за ресурсы
  257. func (сам *Миссии) makeResource() {
  258. var (
  259. strOut string
  260. lstMissions = сам.СписПолучить()
  261. еслиНайдено bool
  262. ind int
  263. )
  264. for ind, strOut = range lstMissions {
  265. if strings.Contains(strOut, `Произведи на базе 10 ресурсов<br/>`) {
  266. еслиНайдено = true
  267. break
  268. }
  269. }
  270. if !еслиНайдено {
  271. return
  272. }
  273. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  274. ind += 23
  275. strOut = lstMissions[ind]
  276. if !strings.Contains(strOut, `>Получить награду<`) {
  277. return
  278. }
  279. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  280. strLink := lstLink[1]
  281. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  282. strLink = "https://wartank.ru/missions/" + lstLink[0]
  283. lstMissions, err := сам.сеть.Get(strLink)
  284. if err != nil {
  285. // log._rintf("ERRO Миссии.makeResource(): при выполнении GET-запроса, err=\n\t%v\n", err)
  286. return
  287. }
  288. if err := сам.СтрОбновить(lstMissions); err != nil {
  289. // log._rintf("ERRO Миссии.makeResource(): при обновлении lstMissions, err=\n\t%v\n", err)
  290. return
  291. }
  292. }
  293. // Проверяет награду за ресурсы
  294. func (сам *Миссии) upMan() {
  295. var (
  296. strOut string
  297. lstMissions = сам.СписПолучить()
  298. еслиНайдено bool
  299. ind int
  300. )
  301. for ind, strOut = range lstMissions {
  302. if strings.Contains(strOut, `Прокачай экипаж на 100 опыта экипажа<br/>`) {
  303. еслиНайдено = true
  304. break
  305. }
  306. }
  307. if !еслиНайдено {
  308. return
  309. }
  310. // <a class="simple-but border" href="?70-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  311. ind += 23
  312. strOut = lstMissions[ind]
  313. if !strings.Contains(strOut, `>Получить награду<`) {
  314. return
  315. }
  316. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  317. strLink := lstLink[1]
  318. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  319. strLink = "https://wartank.ru/missions/" + lstLink[0]
  320. lstMissions, err := сам.сеть.Get(strLink)
  321. if err != nil {
  322. // log._rintf("ERRO Миссии.upMan(): при выполнении GET-запроса, err=\n\t%v\n", err)
  323. return
  324. }
  325. if err := сам.СтрОбновить(lstMissions); err != nil {
  326. // log._rintf("ERRO Миссии.upMan(): при обновлении lstMissions, err=\n\t%v\n", err)
  327. return
  328. }
  329. // log._rintf("INFO Миссии.upMan(): награда получена\n")
  330. }
  331. // Проверяет награду за топливо
  332. func (сам *Миссии) топливоДив() {
  333. var (
  334. strOut string
  335. lstMissions = сам.СписПолучить()
  336. еслиНайдено bool
  337. ind int
  338. )
  339. for ind, strOut = range lstMissions {
  340. if strings.Contains(strOut, `Получи топливо в дивизии<br/>`) {
  341. еслиНайдено = true
  342. break
  343. }
  344. }
  345. if !еслиНайдено {
  346. return
  347. }
  348. // <a class="simple-but border" href="?157-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  349. ind += 19
  350. strOut = lstMissions[ind]
  351. if !strings.Contains(strOut, `>Получить награду</`) {
  352. return
  353. }
  354. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  355. strLink := lstLink[1]
  356. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  357. strLink = "https://wartank.ru/missions/" + lstLink[0]
  358. lstMissions, err := сам.сеть.Get(strLink)
  359. if err != nil {
  360. // log._rintf("ERRO Миссии.makeFuel(): при выполнении GET-запроса, err=\n\t%v\n", err)
  361. return
  362. }
  363. if err := сам.СтрОбновить(lstMissions); err != nil {
  364. // log._rintf("ERRO Миссии.makeFuel(): при обновлении lstMissions, err=\n\t%v\n", err)
  365. return
  366. }
  367. // log._rintf("INFO Миссии.makeFuel(): награда получена")
  368. }
  369. // Проверяет награду 5 боёв
  370. func (сам *Миссии) battle5Fiting() {
  371. var (
  372. strOut string
  373. lstMissions = сам.СписПолучить()
  374. еслиНайдено bool
  375. ind int
  376. )
  377. for ind, strOut = range lstMissions {
  378. if strings.Contains(strOut, `Проведи 5 боев<br/>`) {
  379. еслиНайдено = true
  380. break
  381. }
  382. }
  383. if !еслиНайдено {
  384. return
  385. }
  386. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  387. ind += 23
  388. strOut = lstMissions[ind]
  389. if !strings.Contains(strOut, `>Получить награду<`) {
  390. return
  391. }
  392. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  393. strLink := lstLink[1]
  394. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  395. strLink = "https://wartank.ru/missions/" + lstLink[0]
  396. lstMissions, err := сам.сеть.Get(strLink)
  397. if err != nil {
  398. // log._rintf("ERRO Миссии.battle5Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  399. return
  400. }
  401. if err := сам.СтрОбновить(lstMissions); err != nil {
  402. // log._rintf("ERRO Миссии.battle5Fiting(): при обновлении lstMissions, err=\n\t%v\n", err)
  403. return
  404. }
  405. }
  406. // Проверяет награду 10 боёв
  407. func (сам *Миссии) battle10Fiting() {
  408. var (
  409. strOut string
  410. lstMissions = сам.СписПолучить()
  411. еслиНайдено bool
  412. ind int
  413. )
  414. for ind, strOut = range lstMissions {
  415. if strings.Contains(strOut, `Уничтожь в бою 10 танков<br/>`) {
  416. еслиНайдено = true
  417. break
  418. }
  419. }
  420. if !еслиНайдено {
  421. return
  422. }
  423. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  424. ind += 23
  425. strOut = lstMissions[ind]
  426. if !strings.Contains(strOut, `>Получить награду<`) {
  427. return
  428. }
  429. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  430. strLink := lstLink[1]
  431. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  432. strLink = "https://wartank.ru/missions/" + lstLink[0]
  433. lstMissions, err := сам.сеть.Get(strLink)
  434. if err != nil {
  435. // log._rintf("ERRO Миссии.battle10Fiting(): при выполнении GET-запроса, err=\n\t%v\n", err)
  436. return
  437. }
  438. if err := сам.СтрОбновить(lstMissions); err != nil {
  439. // log._rintf("ERRO Миссии.battle10Fiting(): при обновлении lstMissions, err=\n\t%v\n", err)
  440. return
  441. }
  442. }
  443. // Проверяет награду за 6 побед подряд
  444. func (сам *Миссии) battle6win() {
  445. var (
  446. strOut string
  447. lstMissions = сам.СписПолучить()
  448. еслиНайдено bool
  449. ind int
  450. )
  451. for ind, strOut = range lstMissions {
  452. if strings.Contains(strOut, `Победи 6 раз подряд<br/>`) {
  453. еслиНайдено = true
  454. break
  455. }
  456. }
  457. if !еслиНайдено {
  458. return
  459. }
  460. // <a class="simple-but border" href="?113-1.ILinkListener-missions-cc-0-c-awardLink"><span><span>Получить награду</span></span></a>
  461. ind += 25
  462. strOut = lstMissions[ind]
  463. if !strings.Contains(strOut, `>Получить награду<`) {
  464. return
  465. }
  466. lstLink := strings.Split(strOut, `<a class="simple-but border" href="`)
  467. strLink := lstLink[1]
  468. lstLink = strings.Split(strLink, `"><span><span>Получить награду</span></span></a>`)
  469. strLink = "https://wartank.ru/missions/" + lstLink[0]
  470. lstMissions, err := сам.сеть.Get(strLink)
  471. if err != nil {
  472. // log._rintf("ERRO Миссии.battle6win(): при выполнении GET-запроса, err=\n\t%v\n", err)
  473. return
  474. }
  475. if err := сам.СтрОбновить(lstMissions); err != nil {
  476. // log._rintf("ERRO Миссии.battle6win(): при обновлении lstMissions, err=\n\t%v\n", err)
  477. return
  478. }
  479. }