Run.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. <?php
  2. /**
  3. * Saved run entity file.
  4. *
  5. * Creates the entity and makes it available.
  6. *
  7. * @category Entity
  8. */
  9. /**
  10. * Require dependent entities if not present.
  11. */
  12. require_once(PATH::ENTITY . "Entity.php");
  13. require_once(PATH::ENTITY . "Unit.php");
  14. require_once(PATH::ENTITY . "K_Unit.php");
  15. require_once(PATH::ENTITY . "Rune.php");
  16. require_once(PATH::ENTITY . "Enchantment.php");
  17. require_once(PATH::ENTITY . "Inventory.php");
  18. require_once(PATH::ENTITY . "K_Area.php");
  19. require_once(PATH::ENTITY . "K_Rune_Set.php");
  20. /**
  21. * A run.
  22. *
  23. * Represents an object from the table 'run'.
  24. *
  25. * @category Entity
  26. */
  27. class Run extends Entity{
  28. /**
  29. * @var int Player identifier.
  30. */
  31. public $uid;
  32. /**
  33. * @var int Run identifier.
  34. */
  35. public $id;
  36. /**
  37. * @var DateTime Run start datestamp.
  38. */
  39. public $dtime;
  40. /**
  41. * @var K_Area Area.
  42. */
  43. public $area;
  44. /**
  45. * @var int Stage.
  46. */
  47. public $stage;
  48. /**
  49. * @var int Difficulty (only scenario and dimension hole)
  50. */
  51. public $difficulty;
  52. /**
  53. * @var bool Win or lost run.
  54. */
  55. public $win;
  56. /**
  57. * @var int Clear time, milliseconds.
  58. */
  59. public $time;
  60. /**
  61. * @var int Reward mana.
  62. */
  63. public $mana;
  64. /**
  65. * @var int Reward energy.
  66. */
  67. public $energy;
  68. /**
  69. * @var int Reward crystal.
  70. */
  71. public $crystal;
  72. /**
  73. * @var bool Indicates if a frind/mentor helped.
  74. */
  75. public $helper;
  76. /**
  77. * @var int Score in battles that are rated (WB, rift dungeons...).
  78. */
  79. public $score;
  80. /**
  81. * @var String Rank in battles that are rated (WB, rift dungeons...).
  82. */
  83. public $rank;
  84. /**
  85. * @var \Unit[]|\K_Unit[] Uits used.
  86. * If the unit is still owned, it will be a instance of Unit.
  87. * If not, it will be a instance of K_Unit.
  88. */
  89. public $party = [];
  90. /**
  91. * @var int ID of the leader unit.
  92. */
  93. public $leader;
  94. /**
  95. * @var int[] List of IDs of the frontline units.
  96. */
  97. public $frontline = [];
  98. /**
  99. * @var \Inventory[] Dropped items.
  100. */
  101. public $item = [];
  102. /**
  103. * @var \K_Unit[] Units dropped.
  104. */
  105. public $unit = [];
  106. /**
  107. * @var int K_Unit[] Units whose secret dungeons were found on the run.
  108. */
  109. public $sd= [];
  110. /**
  111. * @var mixed[] List of dropped summon pieces.
  112. *
  113. * Formated as:
  114. * [@{see K_Unit}, amount]
  115. */
  116. public $unit_piece = [];
  117. /**
  118. * @var int Number of shapeshifting stones dropped;
  119. */
  120. public $shapeshifting = 0;
  121. /**
  122. * @var \Rune[] List of Runes dropped.
  123. */
  124. public $rune = [];
  125. /**
  126. * @var \Enchantment[] List of Enchantments dropped.
  127. */
  128. public $enchantment = [];
  129. /**
  130. * Constructor.
  131. *
  132. * Searches the database and retrieves the information about the
  133. * run, populating it and it's items.
  134. *
  135. * @param int $id Run identifier.
  136. * @global resource Database connection.
  137. */
  138. public function __construct($id){
  139. global $db;
  140. $s = "
  141. SELECT
  142. id,
  143. uid,
  144. dtime,
  145. area_type,
  146. area,
  147. stage,
  148. difficulty,
  149. win,
  150. time,
  151. mana,
  152. energy,
  153. crystal,
  154. helper,
  155. score,
  156. rank
  157. FROM run
  158. WHERE id = $id;
  159. ";
  160. $q = $db->query($s);
  161. $r = $q->fetchArray(SQLITE3_ASSOC);
  162. $this->id = $r["id"];
  163. $this->uid = $r["uid"];
  164. $this->dtime = $r["dtime"];
  165. $this->area = new K_Area($r["area"], $r["area_type"]);
  166. $this->stage = $r["stage"];
  167. $this->difficulty = $r["difficulty"];
  168. $this->win = $r["win"];
  169. $this->time = $r["time"];
  170. $this->mana = $r["mana"];
  171. $this->energy = $r["energy"];
  172. $this->crystal = $r["crystal"];
  173. $this->helper = $r["helper"];
  174. $this->score = $r["score"];
  175. $this->rank = $r["rank"];
  176. $s = "
  177. SELECT
  178. unit,
  179. k_unit,
  180. (SELECT count(id) FROM unit WHERE unit.id = run_party.unit) AS owned,
  181. leader,
  182. front
  183. FROM run_party
  184. WHERE run = $id
  185. ORDER BY
  186. front DESC,
  187. leader DESC;
  188. ";
  189. $q = $db->query($s);
  190. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  191. if ($r["owned"] > 0){
  192. array_push($this->party, new Unit($r["unit"], false));
  193. }
  194. else{
  195. array_push($this->party, new K_Unit($r["k_unit"], false));
  196. }
  197. if ($r["leader"] == 1){
  198. $this->leader = $r["unit"];
  199. }
  200. if ($r["front"] == 1){
  201. array_push($this->frontline, $r["unit"]);
  202. }
  203. }
  204. $s = "
  205. SELECT
  206. item,
  207. amount
  208. FROM run_drop_item
  209. WHERE run = $this->id;
  210. ";
  211. $q = $db->query($s);
  212. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  213. $i = new Inventory($r["item"]);
  214. $i->amount = $r["amount"];
  215. array_push($this->item, $i);
  216. }
  217. $s = "
  218. SELECT unit
  219. FROM run_drop_unit
  220. WHERE run = $this->id;
  221. ";
  222. $q = $db->query($s);
  223. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  224. array_push($this->unit, new K_Unit($r["unit"]));
  225. }
  226. $s = "
  227. SELECT unit
  228. FROM run_drop_sd
  229. WHERE run = $this->id;
  230. ";
  231. $q = $db->query($s);
  232. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  233. array_push($this->sd, new K_Unit($r["unit"]));
  234. }
  235. $s = "
  236. SELECT
  237. unit,
  238. amount
  239. FROM run_drop_unit_pieces
  240. WHERE run = $this->id;
  241. ";
  242. $q = $db->query($s);
  243. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  244. $i = [
  245. "unit" => new K_Unit($r["unit"]),
  246. "amount" => $r["amount"]
  247. ];
  248. array_push($this->unit_piece, $i);
  249. }
  250. $s = "
  251. SELECT amount
  252. FROM run_drop_shapeshifting
  253. WHERE run = $this->id;
  254. ";
  255. $q = $db->query($s);
  256. $r = $q->fetchArray(SQLITE3_ASSOC);
  257. if ($r){
  258. $this->shapeshifting = $r["amount"];
  259. }
  260. $s = "
  261. SELECT
  262. id,
  263. type,
  264. slot,
  265. stars,
  266. ancient,
  267. quality,
  268. value,
  269. efficiency,
  270. main_stat,
  271. main_stat_value,
  272. innate_stat,
  273. innate_stat_value,
  274. substat_1,
  275. substat_1_value,
  276. substat_2,
  277. substat_2_value,
  278. substat_3,
  279. substat_3_value,
  280. substat_4,
  281. substat_4_value
  282. FROM run_drop_rune
  283. WHERE run = $this->id;
  284. ";
  285. $q = $db->query($s);
  286. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  287. $rune = new Rune($r["id"]);
  288. if (!isset($rune->id)){
  289. $rune->id = $r["id"];
  290. $rune->level = 0;
  291. $rune->assigned_to = null;
  292. $rune->type = new K_Rune_Set($r["type"]);
  293. $rune->slot = $r["slot"];
  294. $rune->stars = $r["stars"];
  295. $rune->ancient = $r["ancient"];
  296. $rune->quality = $r["quality"];
  297. $rune->original_quality = $r["quality"];
  298. $rune->value = $r["value"];
  299. $rune->value = 0;
  300. $rune->efficiency = $r["efficiency"];
  301. // TODO: Calculate?
  302. $rune->max_efficiency = $r["efficiency"];
  303. $rune->main_stat = $r["main_stat"];
  304. $rune->main_stat_value = $r["main_stat_value"];
  305. $rune->innate_stat = $r["innate_stat"];
  306. $rune->innate_stat_value = $r["innate_stat_value"];
  307. $rune->substat_1 = $r["substat_1"];
  308. $rune->substat_1_value = $r["substat_1_value"];
  309. $rune->substat_1_enchant = 0;
  310. $rune->substat_1_grind = 0;
  311. $rune->substat_2 = $r["substat_2"];
  312. $rune->substat_2_value = $r["substat_2_value"];
  313. $rune->substat_2_enchant = 0;
  314. $rune->substat_2_grind = 0;
  315. $rune->substat_3 = $r["substat_3"];
  316. $rune->substat_3_value = $r["substat_3_value"];
  317. $rune->substat_3_enchant = 0;
  318. $rune->substat_3_grind = 0;
  319. $rune->substat_4 = $r["substat_4"];
  320. $rune->substat_4_value = $r["substat_4_value"];
  321. $rune->substat_4_enchant = 0;
  322. $rune->substat_4_grind = 0;
  323. $rune->refresh_names();
  324. }
  325. array_push($this->rune, $rune);
  326. }
  327. $s = "
  328. SELECT
  329. run_drop_enchantment.id AS id,
  330. type,
  331. run_drop_enchantment.quality AS quality,
  332. rune,
  333. run_drop_enchantment.stat AS stat,
  334. value,
  335. k_enchantment_type.inmemorial AS inmemorial,
  336. k_enchantment_type.ancient AS ancient,
  337. k_enchantment_range.min AS min,
  338. k_enchantment_range.max AS max
  339. FROM
  340. run_drop_enchantment,
  341. k_enchantment_type,
  342. k_enchantment_range
  343. WHERE
  344. run = $this->id AND
  345. run_drop_enchantment.type = k_enchantment_type.id AND
  346. k_enchantment_type.gem = k_enchantment_range.gem AND
  347. k_enchantment_type.gem = k_enchantment_range.gem AND
  348. k_enchantment_type.ancient = k_enchantment_range.ancient AND
  349. run_drop_enchantment.quality = k_enchantment_range.quality AND
  350. run_drop_enchantment.stat = k_enchantment_range.stat;
  351. ;
  352. ";
  353. $q = $db->query($s);
  354. while ($r = $q->fetchArray(SQLITE3_ASSOC)){
  355. $enchantment = new Enchantment($r["id"]);
  356. if (!isset($enchantment->id)){
  357. $enchantment->id = $r["id"];
  358. if ($r["type"] == CRAFT_ID::ENCHANT_GEM || $r["type"] == CRAFT_ID::IMMEMORIAL_GEM){
  359. $enchantment->gem = 1;
  360. }
  361. else{
  362. $enchantment->gem = 0;
  363. }
  364. $enchantment->quality = $r["quality"];
  365. $enchantment->value = 0;
  366. $enchantment->stat = $r["stat"];
  367. $enchantment->ancient = $r["ancient"];
  368. $enchantment->inmemorial = $r["inmemorial"];
  369. $enchantment->rune = new K_Rune_Set($r["rune"]);
  370. $enchantment->min = $r["min"];
  371. $enchantment->max = $r["max"];
  372. $enchantment->value = $r["value"];
  373. $enchantment->amount = 0;
  374. $enchantment->refresh_names();
  375. }
  376. else{
  377. $enchantment->amount = 0;
  378. }
  379. array_push($this->enchantment, $enchantment);
  380. }
  381. }
  382. }
  383. ?>