optimizer_unit.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716
  1. <?php
  2. /**
  3. * Monster view.
  4. *
  5. * Contains the view layout and some code to present the data.
  6. *
  7. * @category View
  8. * @property_read Monster_Page $page The page model.
  9. * @property_read int $UID Player ID.
  10. */
  11. ?>
  12. <!DOCTYPE html>
  13. <html lang='en'>
  14. <head>
  15. <meta content='text/html; charset=utf-8' http-equiv='content-type'/>
  16. <meta name='viewport' content='width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1'/>
  17. <title><?=$page->title?></title>
  18. <link rel='shortcut icon' href='<?=$page->favicon?>'/>
  19. <!-- CSS files -->
  20. <link rel='stylesheet' type='text/css' href='<?=URL::CSS?>ui.css'/>
  21. <link rel='stylesheet' type='text/css' href='<?=URL::CSS?>optimizer.css'/>
  22. <!-- Meta tags -->
  23. <link rel='canonical' href='<?=$page->canonical?>'/>
  24. <link rel='author' href='<?=$page->author?>'/>
  25. <link rel='publisher' href='<?=$page->author?>'/>
  26. <meta name='description' content='<?=$page->description?>'/>
  27. <meta property='og:title' content='<?=$page->title?>'/>
  28. <meta property='og:url' content='<?=$page->canonical?>'/>
  29. <meta property='og:description' content='<?=$page->description?>'/>
  30. <meta property='og:image' content='<?=$page->icon?>'/>
  31. <meta property='og:site_name' content='<?=$page->name?>'/>
  32. <meta property='og:type' content='website'/>
  33. <meta property='og:locale' content='en'/>
  34. <meta name='twitter:card' content='summary'/>
  35. <meta name='twitter:title' content='<?=$page->title?>'/>
  36. <meta name='twitter:description' content='<?=$page->description?>'/>
  37. <meta name='twitter:image' content='<?=$page->icon?>'/>
  38. <meta name='twitter:url' content='<?=$page->canonical?>'/>
  39. <meta name='robots' content='index follow'/>
  40. <script>
  41. /**
  42. * Updates the value next to the sliders when they change.
  43. *
  44. * @param stat Name of the stat to set.
  45. * @param value Value of the slider.
  46. */
  47. function updateMinValue(stat, value){
  48. document.getElementById('lbl_min_' + stat).innerHTML = value;
  49. }
  50. /**
  51. * Starts the optimization.
  52. *
  53. * Checks for error in the combination of the parameters, and
  54. * shows an error window if there is an invalid conbination. If
  55. * not, builds the url to calculate the new rune combinations,
  56. * and presents th received response.
  57. *
  58. * @return false on error, true on success.
  59. */
  60. function apply(){
  61. // TODO: Check for valid set combinations
  62. var params = '';
  63. var x;
  64. // Player id - mandatory
  65. params = 'uid=<?=$UID?>';
  66. // Unit id - mandatory
  67. params += '&unit=<?=$page->unit->id?>';
  68. // Rune set 1 - mandatory
  69. params += '&set[]=' + document.getElementById('set_1').options[document.getElementById('set_1').selectedIndex].value;
  70. // Rune set 2 - mandatory
  71. params += '&set[]=' + document.getElementById('set_2').options[document.getElementById('set_2').selectedIndex].value;
  72. // Rune set 3 - optional
  73. x = document.getElementById('set_3').options[document.getElementById('set_3').selectedIndex].value;
  74. if (x != ''){
  75. params += '&set[]=' + x;
  76. }
  77. // Slot 2 - mandatory
  78. params += '&stat[]=' + document.getElementById('slot_2').options[document.getElementById('slot_2').selectedIndex].value;
  79. // Slot 4 - mandatory
  80. params += '&stat[]=' + document.getElementById('slot_4').options[document.getElementById('slot_4').selectedIndex].value;
  81. // Slot 5 - mandatory
  82. params += '&stat[]=' + document.getElementById('slot_6').options[document.getElementById('slot_6').selectedIndex].value;
  83. // Rune source - mandatory
  84. params += '&source=' + document.getElementById('rune_source').options[document.getElementById('rune_source').selectedIndex].value;
  85. // Optimizer tuning - mandatory
  86. params += '&tuning=' + document.getElementById('tuning').options[document.getElementById('tuning').selectedIndex].value;
  87. // Min HP - Optional
  88. if (document.getElementById('min_hp').value > document.getElementById('min_hp').min){
  89. params += '&min_hp=' + document.getElementById('min_hp').value;
  90. }
  91. // Min ATK - Optional
  92. if (document.getElementById('min_attack').value > document.getElementById('min_attack').min){
  93. params += '&min_attack=' + document.getElementById('min_attack').value;
  94. }
  95. // Min DEF - Optional
  96. if (document.getElementById('min_defense').value > document.getElementById('min_defense').min){
  97. params += '&min_defense=' + document.getElementById('min_defense').value;
  98. }
  99. // Min SPD - Optional
  100. if (document.getElementById('min_speed').value > document.getElementById('min_speed').min){
  101. params += '&min_speed=' + document.getElementById('min_speed').value;
  102. }
  103. // Min CRR - Optional
  104. if (document.getElementById('min_crit_rate').value > document.getElementById('min_crit_rate').min){
  105. params += '&min_crit_rate=' + document.getElementById('min_crit_rate').value;
  106. }
  107. // Min CRD - Optional
  108. if (document.getElementById('min_crit_damage').value > document.getElementById('min_crit_damage').min){
  109. params += '&min_crit_damage=' + document.getElementById('min_crit_damage').value;
  110. }
  111. // Min ACC - Optional
  112. if (document.getElementById('min_accuracy').value > document.getElementById('min_accuracy').min){
  113. params += '&min_accuracy=' + document.getElementById('min_accuracy').value;
  114. }
  115. // Min RES - Optional
  116. if (document.getElementById('min_resistance').value > document.getElementById('min_resistance').min){
  117. params += '&min_resistance=' + document.getElementById('min_resistance').value;
  118. }
  119. // Send th request
  120. var xhttp = new XMLHttpRequest();
  121. xhttp.onreadystatechange = function() {
  122. if (this.readyState == 4 && this.status == 200) {
  123. showOptimizations(this.response);
  124. }
  125. };
  126. xhttp.open("POST", "/action/optimize/", true);
  127. xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  128. xhttp.send(params);
  129. }
  130. function showOptimizations(content){
  131. console.log("RESPONSE: " + content);
  132. }
  133. </script>
  134. </head>
  135. <body>
  136. <?php
  137. include __DIR__ . "/inc/header.php";
  138. ?>
  139. <section id='monster' class='content'>
  140. <h2>
  141. Optimize <?=$page->unit->title?>
  142. </h2>
  143. <article id='profile'>
  144. <div id='monster_info'>
  145. <div class='monster_panel'>
  146. <?=HTML::unit_panel($page->unit)?>
  147. </div>
  148. <?php
  149. if ($page->unit->experience_level != 0){
  150. $exp_pct = ceil($page->unit->exp_gained * 100 / $page->unit->experience_level);
  151. $exp_txt = $page->unit->exp_gained . " / " . $page->unit->experience_level;
  152. }
  153. else{
  154. $exp_pct = 100;
  155. $exp_txt = "MAX";
  156. }
  157. $now = time();
  158. //$datediff = $now - $page->unit->create_time->getTimestamp();
  159. $datediff = $now - strtotime($page->unit->create_time->format('Y-m-d H:i:s'));
  160. $datediff = floor($datediff / (60 * 60 * 24));
  161. ?>
  162. <div id='monster_details'>
  163. <?php
  164. if (sizeof($page->unit->teams) > 0){
  165. ?>
  166. <div id='teams'>
  167. <h4>
  168. Teams:
  169. </h4>
  170. <ul>
  171. <?php
  172. foreach($page->unit->teams as $team){
  173. ?>
  174. <li>
  175. <a target='blank' href='/<?=$UID?>/teams/<?=$team->id?>'>
  176. <?=$team->name?>
  177. </a>
  178. </li>
  179. <?php
  180. }
  181. ?>
  182. </ul>
  183. </div>
  184. <?php
  185. }
  186. ?>
  187. </div>
  188. </div>
  189. <?php
  190. $building_attack = floor(($page->unit->attack * $page->building_stats["atk"] / 100) + ($page->unit->attack * $page->building_stats["elm"][$page->unit->unit->element] / 100));
  191. $building_defense = floor($page->building_stats["def"] * $page->unit->defense / 100);
  192. $building_hp = floor($page->building_stats["hp"] * $page->unit->hp / 100);
  193. $building_speed = $page->building_stats["spd"];
  194. $building_crit_rate = 0;
  195. $building_crit_damage = $page->building_stats["crd"];
  196. $building_accuracy = 0;
  197. $building_resistance = 0;
  198. ?>
  199. <table id='stats'>
  200. <tr>
  201. <th>
  202. Stats
  203. </th>
  204. <th>
  205. Base
  206. </th>
  207. <th>
  208. Runes
  209. </th>
  210. <th>
  211. Artifacts
  212. </th>
  213. <th>
  214. Buildings
  215. </th>
  216. <th>
  217. Total
  218. </th>
  219. </tr>
  220. <tr>
  221. <th>
  222. ATK
  223. </th>
  224. <td class='base'>
  225. <?=$page->unit->attack?>
  226. </td>
  227. <td class='extra'>
  228. +<?=$page->unit->rune_attack?>
  229. </td>
  230. <td class='extra'>
  231. +<?=$page->artifact_stats["atk"]?>
  232. </td>
  233. <td class='extra'>
  234. +<?=$building_attack?>
  235. </td>
  236. <td class='total'>
  237. <?=$page->unit->attack + $page->unit->rune_attack + $building_attack + $page->artifact_stats["atk"]?>
  238. </td>
  239. </tr>
  240. <tr>
  241. <th>
  242. DEF
  243. </th>
  244. <td class='base'>
  245. <?=$page->unit->defense?>
  246. </td>
  247. <td class='extra'>
  248. +<?=$page->unit->rune_defense?>
  249. </td>
  250. <td class='extra'>
  251. +<?=$page->artifact_stats["def"]?>
  252. </td>
  253. <td class='extra'>
  254. +<?=$building_defense?>
  255. </td>
  256. <td class='total'>
  257. <?=$page->unit->defense + $page->unit->rune_defense + $building_defense + $page->artifact_stats["def"]?>
  258. </td>
  259. </tr>
  260. <tr>
  261. <th>
  262. HP
  263. </th>
  264. <td class='base'>
  265. <?=$page->unit->hp?>
  266. </td>
  267. <td class='extra'>
  268. +<?=$page->unit->rune_hp?>
  269. </td>
  270. <td class='extra'>
  271. +<?=$page->artifact_stats["hp"]?>
  272. </td>
  273. <td class='extra'>
  274. +<?=$building_hp?>
  275. </td>
  276. <td class='total'>
  277. <?=$page->unit->hp + $page->unit->rune_hp + $building_hp + $page->artifact_stats["hp"]?>
  278. </td>
  279. </tr>
  280. <tr>
  281. <th>
  282. SPD
  283. </th>
  284. <td class='base'>
  285. <?=$page->unit->speed?>
  286. </td>
  287. <td class='extra'>
  288. +<?=$page->unit->rune_speed?>
  289. </td>
  290. <td class='extra'>
  291. +0
  292. </td>
  293. <td class='extra'>
  294. +<?=$building_speed?>
  295. </td>
  296. <td class='total'>
  297. <?=$page->unit->speed + $page->unit->rune_speed + $building_speed?>
  298. </td>
  299. </tr>
  300. <tr>
  301. <th>
  302. CRR
  303. </th>
  304. <td class='base'>
  305. <?=$page->unit->crit_rate?>%
  306. </td>
  307. <td class='extra'>
  308. +<?=$page->unit->rune_crit_rate?>%
  309. </td>
  310. <td class='extra'>
  311. +0%
  312. </td>
  313. <td class='extra'>
  314. +<?=$building_crit_rate?>%
  315. </td>
  316. <td class='total'>
  317. <?=$page->unit->crit_rate + $page->unit->rune_crit_rate + $building_crit_rate?>%
  318. </td>
  319. </tr>
  320. <tr>
  321. <th>
  322. CRD
  323. </th>
  324. <td class='base'>
  325. <?=$page->unit->crit_damage?>%
  326. </td>
  327. <td class='extra'>
  328. +<?=$page->unit->rune_crit_damage?>%
  329. </td>
  330. <td class='extra'>
  331. +0%
  332. </td>
  333. <td class='extra'>
  334. +<?=$building_crit_damage?>%
  335. </td>
  336. <td class='total'>
  337. <?=$page->unit->crit_damage + $page->unit->rune_crit_damage + $building_crit_damage?>%
  338. </td>
  339. </tr>
  340. <tr>
  341. <th>
  342. ACC
  343. </th>
  344. <td class='base'>
  345. <?=$page->unit->accuracy?>%
  346. </td>
  347. <td class='extra'>
  348. +<?=$page->unit->rune_accuracy?>%
  349. </td>
  350. <td class='extra'>
  351. +0%
  352. </td>
  353. <td class='extra'>
  354. +<?=$building_accuracy?>%
  355. </td>
  356. <td class='total'>
  357. <?=$page->unit->accuracy + $page->unit->rune_accuracy + $building_accuracy?>%
  358. </td>
  359. </tr>
  360. <tr>
  361. <th>
  362. RES
  363. </th>
  364. <td class='base'>
  365. <?=$page->unit->resistance?>%
  366. </td>
  367. <td class='extra'>
  368. +<?=$page->unit->rune_resistance?>%
  369. </td>
  370. <td class='extra'>
  371. +0%
  372. </td>
  373. <td class='extra'>
  374. +<?=$building_resistance?>%
  375. </td>
  376. <td class='total'>
  377. <?=$page->unit->resistance + $page->unit->rune_resistance + $building_resistance?>%
  378. </td>
  379. </tr>
  380. </table>
  381. <div id='artifacts'>
  382. <?=HTML::artifact_table($page->unit->artifact_type)?>
  383. <?=HTML::artifact_table($page->unit->artifact_element)?>
  384. </div>
  385. </article> <!-- #profile -->
  386. <article id='current_runes'>
  387. <?php
  388. $total_efficiency = 0;
  389. $total_max_efficiency = 0;
  390. $total_reached_efficiency = 0;
  391. $total_level = 0;
  392. $total_stars = 0;
  393. $total_value = 0;
  394. $total_runes = 0;
  395. $show_list = [6, 1, 2, 3, 4, 5];
  396. //foreach ($page->unit->rune as $rune){
  397. foreach ($show_list as $i){
  398. $rune = $page->unit->rune[$i - 1];
  399. $total_efficiency += $rune->efficiency;
  400. $total_max_efficiency += $rune->max_efficiency;
  401. $total_reached_efficiency += ($rune->efficiency * 100 / $rune->max_efficiency);
  402. $total_level += $rune->level;
  403. $total_stars += $rune->stars;
  404. $total_value += $rune->value;
  405. $total_runes ++;
  406. ?>
  407. <?=HTML::rune_table($rune)?>
  408. <?php
  409. if ($i == 2){
  410. ?>
  411. <br/>
  412. <?php
  413. }
  414. }
  415. ?>
  416. </article>
  417. <article id='rune_averages'>
  418. <table id='table_averages'>
  419. <tr>
  420. <td class='title'>
  421. Avg. level:
  422. </td>
  423. <td class='value'>
  424. <?=number_format($total_level / $total_runes, 2)?>
  425. </td>
  426. </tr>
  427. <tr>
  428. <td class='title'>
  429. Avg. stars:
  430. </td>
  431. <td class='value'>
  432. <?=number_format($total_stars / $total_runes, 2)?>
  433. </td>
  434. </tr>
  435. <tr>
  436. <td class='title'>
  437. Avg. value:
  438. </td>
  439. <td class='value'>
  440. <?=number_format($total_value / $total_runes, 2, '.', '')?>
  441. </td>
  442. </tr>
  443. <tr>
  444. <td class='title'>
  445. Total value:
  446. </td>
  447. <td class='value'>
  448. <?=$total_value?>
  449. </td>
  450. </tr>
  451. <tr>
  452. <td class='title'>
  453. Avg. efficiency:
  454. </td>
  455. <td class='value'>
  456. <?=number_format($total_efficiency / $total_runes, 2)?>%
  457. </td>
  458. </tr>
  459. <tr>
  460. <td class='title'>
  461. Avg. max. efficiency:
  462. </td>
  463. <td class='value'>
  464. <?=number_format($total_max_efficiency / $total_runes, 2)?>%
  465. </td>
  466. </tr>
  467. <tr>
  468. <td class='title'>
  469. Avg. reached efficiency:
  470. </td>
  471. <td class='value'>
  472. <?=number_format($total_reached_efficiency / $total_runes, 2)?>%
  473. </td>
  474. </tr>
  475. </table>
  476. </article>
  477. </section> <!-- runes -->
  478. <section id='parameters' class='content'>
  479. <h2>
  480. Optimization parameters
  481. </h2>
  482. <article>
  483. <table>
  484. <tr>
  485. <td class='name'>
  486. Rune sets
  487. </td>
  488. <td class='value'>
  489. <?php
  490. $reflect = new ReflectionClass("RUNE_SET_ID");
  491. ?>
  492. <select id='set_1'>
  493. <?php
  494. foreach($reflect->getConstants() as $name => $id){
  495. $selected = "";
  496. if (in_array($id, $filters["MAIN"])){
  497. $selected = "selected='selected'";
  498. }
  499. ?>
  500. <option value='<?=$id?>' <?=$selected?>><?=$name?></option>
  501. <?php
  502. }
  503. ?>
  504. </select>
  505. <select id='set_2'>
  506. <?php
  507. foreach($reflect->getConstants() as $name => $id){
  508. $selected = "";
  509. if (in_array($id, $filters["MAIN"])){
  510. $selected = "selected='selected'";
  511. }
  512. ?>
  513. <option value='<?=$id?>' <?=$selected?>><?=$name?></option>
  514. <?php
  515. }
  516. ?>
  517. </select>
  518. <select id='set_3'>
  519. <option value='' <?=$selected?>></option>
  520. <?php
  521. foreach($reflect->getConstants() as $name => $id){
  522. $selected = "";
  523. if (in_array($id, $filters["MAIN"])){
  524. $selected = "selected='selected'";
  525. }
  526. ?>
  527. <option value='<?=$id?>' <?=$selected?>><?=$name?></option>
  528. <?php
  529. }
  530. ?>
  531. </select>
  532. </td>
  533. <td class='empty'>
  534. </td>
  535. <td class='name'>
  536. Min HP
  537. </td>
  538. <td class='value'>
  539. <input id='min_hp' type='range' value='<?=$page->unit->hp?>' value='<?=$page->unit->hp?>' min='<?=$page->unit->hp?>' max='50000' oninput='updateMinValue("hp", this.value);'>
  540. <span id='lbl_min_hp'><?=$page->unit->hp?></span>
  541. </td>
  542. </tr>
  543. <tr>
  544. <td class='name'>
  545. Even slots
  546. </td>
  547. <td class='value'>
  548. <select id='slot_2'>
  549. <option value='<?=RUNE_STAT_ID::HP_P?>'>HP%</option>
  550. <option value='<?=RUNE_STAT_ID::ATK_P?>'>ATK%</option>
  551. <option value='<?=RUNE_STAT_ID::DEF_P?>'>DEF%</option>
  552. <option value='<?=RUNE_STAT_ID::SPD?>'>SPD</option>
  553. </select>
  554. <select id='slot_4'>
  555. <option value='<?=RUNE_STAT_ID::HP_P?>'>HP%</option>
  556. <option value='<?=RUNE_STAT_ID::ATK_P?>'>ATK%</option>
  557. <option value='<?=RUNE_STAT_ID::DEF_P?>'>DEF%</option>
  558. <option value='<?=RUNE_STAT_ID::CRR?>'>CRR</option>
  559. <option value='<?=RUNE_STAT_ID::CRR?>'>CRD</option>
  560. </select>
  561. <select id='slot_6'>
  562. <option value='<?=RUNE_STAT_ID::HP_P?>'>HP%</option>
  563. <option value='<?=RUNE_STAT_ID::ATK_P?>'>ATK%</option>
  564. <option value='<?=RUNE_STAT_ID::DEF_P?>'>DEF%</option>
  565. <option value='<?=RUNE_STAT_ID::ACC?>'>ACC</option>
  566. <option value='<?=RUNE_STAT_ID::RES?>'>RES</option>
  567. </select>
  568. </td>
  569. <td class='empty'>
  570. </td>
  571. <td class='name'>
  572. Min ATK
  573. </td>
  574. <td class='value'>
  575. <input id='min_attack' type='range' value='<?=$page->unit->attack?>' value='<?=$page->unit->attack?>' min='<?=$page->unit->attack?>' max='10000' oninput='updateMinValue("attack", this.value);'>
  576. <span id='lbl_min_attack'><?=$page->unit->attack?></span>
  577. </td>
  578. </tr>
  579. <tr>
  580. <td class='name'>
  581. Use runes from
  582. </td>
  583. <td class='value'>
  584. <select id='rune_source'>
  585. <option value='0'>Storage only</option>
  586. <option value='1'>Units in no teams</option>
  587. <option value='2'>Units in teams with 0 score</option>
  588. <option value='3'>Units with lower overall score</option>
  589. <option value='4'>All runes</option>
  590. </select>
  591. </td>
  592. <td class='empty'>
  593. </td>
  594. <td class='name'>
  595. Min DEF
  596. </td>
  597. <td class='value'>
  598. <input id='min_defense' type='range' value='<?=$page->unit->defense?>' value='<?=$page->unit->defense?>' min='<?=$page->unit->defense?>' max='10000' oninput='updateMinValue("defense", this.value);'>
  599. <span id='lbl_min_defense'><?=$page->unit->defense?></span>
  600. </td>
  601. </tr>
  602. <tr>
  603. <td class='name'>
  604. Tune optimizer for
  605. </td>
  606. <td class='value'>
  607. <select id='tuning'>
  608. <option value='0'>Rune current levels</option>
  609. <option value='1'>+12</option>
  610. <option value='2'>2/4/6 +15, 1/3/5 + 12</option>
  611. <option value='3'>+15</option>
  612. </select>
  613. </td>
  614. <td class='empty'>
  615. </td>
  616. <td class='name'>
  617. Min SPD
  618. </td>
  619. <td class='value'>
  620. <input id='min_speed' type='range' value='<?=$page->unit->speed?>' value='<?=$page->unit->speed?>' min='<?=$page->unit->speed?>' max='400' oninput='updateMinValue("speed", this.value);'>
  621. <span id='lbl_min_speed'><?=$page->unit->speed?></span>
  622. </td>
  623. </tr>
  624. <tr>
  625. <td class='empty'>
  626. </td>
  627. <td class='empty'>
  628. </td>
  629. <td class='empty'>
  630. </td>
  631. <td class='name'>
  632. Min CRR
  633. </td>
  634. <td class='value'>
  635. <input id='min_crit_rate' type='range' value='<?=$page->unit->crit_rate?>' value='<?=$page->unit->crit_rate?>' min='<?=$page->unit->crit_rate?>' max='100' oninput='updateMinValue("crit_rate", this.value);'>
  636. <span id='lbl_min_crit_rate'><?=$page->unit->crit_rate?></span>
  637. </td>
  638. </tr>
  639. <tr>
  640. <td class='empty'>
  641. </td>
  642. <td class='empty'>
  643. </td>
  644. <td class='empty'>
  645. </td>
  646. <td class='name'>
  647. Min CRD
  648. </td>
  649. <td class='value'>
  650. <input id='min_crit_damage' type='range' value='<?=$page->unit->crit_damage?>' value='<?=$page->unit->crit_damage?>' min='<?=$page->unit->crit_damage?>' max='400' oninput='updateMinValue("crit_damage", this.value);'>
  651. <span id='lbl_min_crit_damage'><?=$page->unit->crit_damage?></span>
  652. </td>
  653. </tr>
  654. <tr>
  655. <td class='empty'>
  656. </td>
  657. <td class='empty'>
  658. </td>
  659. <td class='empty'>
  660. </td>
  661. <td class='name'>
  662. Min ACC
  663. </td>
  664. <td class='value'>
  665. <input id='min_accuracy' type='range' value='<?=$page->unit->accuracy?>' value='<?=$page->unit->accuracy?>' min='<?=$page->unit->accuracy?>' max='85' oninput='updateMinValue("accuracy", this.value);'>
  666. <span id='lbl_min_accuracy'><?=$page->unit->accuracy?></span>
  667. </td>
  668. </tr>
  669. <tr>
  670. <td class='action'>
  671. <input type='button' value='Apply' onClick='apply();'/>
  672. </td>
  673. <td class='empty'>
  674. </td>
  675. <td class='empty'>
  676. </td>
  677. <td class='name'>
  678. Min RES
  679. </td>
  680. <td class='value'>
  681. <input id='min_resistance' type='range' value='<?=$page->unit->resistance?>' value='<?=$page->unit->resistance?>' min='<?=$page->unit->resistance?>' max='100' oninput='updateMinValue("resistance", this.value);'>
  682. <span id='lbl_min_resistance'><?=$page->unit->resistance?></span>
  683. </td>
  684. </tr>
  685. </table>
  686. </article>
  687. </section>
  688. <?php
  689. include __DIR__ . "/inc/footer.php";
  690. ?>
  691. </body>
  692. </html>