PageRenderTime 34ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

/nacridan/factory/EquipFactory.inc.php

https://gitlab.com/Goutte/Nacridan
PHP | 301 lines | 252 code | 44 blank | 5 comment | 66 complexity | 1a53233b73fd91ced2b8fa3c208569c9 MD5 | raw file
  1. <?php
  2. require_once (HOMEPATH . "/economy/edef.inc.php");
  3. require_once (HOMEPATH . "/factory/PNJFactory.inc.php");
  4. class EquipFactory
  5. {
  6. static public function getCondFromArray($arr, $fieldname, $cond)
  7. {
  8. $msg = "";
  9. $first = 1;
  10. if (is_array($arr)) {
  11. foreach ($arr as $key => $val) {
  12. if ($first)
  13. $msg = $fieldname . "=" . $val;
  14. else
  15. $msg .= " " . $cond . " " . $fieldname . "=" . $val;
  16. $first = 0;
  17. }
  18. } else {
  19. $msg = $fieldname . "=" . $arr;
  20. }
  21. return $msg;
  22. }
  23. static function getDurability($equip, $db)
  24. {
  25. return self::getDurabilityDetail($equip->get("id_BasicEquipment"), $equip->get("level"), $equip->get("durability"), $db);
  26. }
  27. static function getDurabilityDetail($idBasicEquip, $level, $durability, $db)
  28. {
  29. $dbc = new DBCollection("SELECT * FROM BasicEquipment WHERE id=" . $idBasicEquip, $db);
  30. if ($dbc->get("id") >= 200 && $dbc->get("id") <= 206 && $dbc->get("id") != 205)
  31. $durTot = $level * $dbc->get("durability");
  32. else
  33. $durTot = $dbc->get("durability");
  34. $ratio = round($durability / $durTot, 2);
  35. if ($ratio == 1)
  36. return "Neuf";
  37. if ($ratio >= 0.7)
  38. return "Bon état";
  39. if ($ratio <= 0.7 and $ratio >= 0.3)
  40. return "Etat moyen";
  41. if ($ratio < 0.3 and $ratio > 0)
  42. return "Mauvais état";
  43. if ($ratio == 0)
  44. return "Cassé(e)";
  45. }
  46. static function getPriceBasicEquipment($id_BasicEquipment, $LvL, $db)
  47. {
  48. $dbbe = new DBCollection("SELECT frequency FROM BasicEquipment WHERE id=" . $id_BasicEquipment, $db);
  49. $PB = $dbbe->get("frequency");
  50. if ($LvL == 1)
  51. $price = $PB;
  52. else
  53. $price = floor($PB * pow((3 / 2), ($LvL - 1)) + pow((3 / 2), $LvL));
  54. return $price;
  55. }
  56. static function getPriceEnchant($LvL, $db)
  57. {
  58. if ($LvL == 1)
  59. $price = 50;
  60. else
  61. $price = floor(50 * pow((3 / 2), ($LvL - 1)) + pow((3 / 2), $LvL));
  62. return $price;
  63. }
  64. static function getPriceMajorEnchant($LvL, $db)
  65. {
  66. if ($LvL == 1)
  67. $price = 100;
  68. else
  69. $price = floor(100 * pow((3 / 2), ($LvL - 1)) + pow((3 / 2), $LvL));
  70. return $price;
  71. }
  72. static function getPriceEquipment($id, $db)
  73. {
  74. $dbbe = new DBCollection(
  75. "SELECT BasicEquipment.frequency,Equipment.extraname,Equipment.level FROM BasicEquipment LEFT JOIN Equipment ON Equipment.id_BasicEquipment=BasicEquipment.id WHERE Equipment.id=" .
  76. $id, $db);
  77. $LvL = $dbbe->get("level");
  78. $PB = $dbbe->get("frequency");
  79. if ($dbbe->get("extraname") != "") {
  80. $i = 0;
  81. $template = new Template();
  82. $dbt = new DBCollection(
  83. "SELECT BasicTemplate.name AS name1, BasicTemplate.name2 as name2, " . $template->getASRenamer("Template", "TP") .
  84. " FROM Template LEFT JOIN BasicTemplate ON BasicTemplate.id=Template.id_BasicTemplate WHERE id_Equipment=" . $id . " order by Template.pos asc", $db);
  85. while (! $dbt->eof()) {
  86. $i ++;
  87. $template->DBLoad($dbt, "TP");
  88. if ($i == 1)
  89. $Tlvl1 = $template->get("level");
  90. if ($i == 2)
  91. $Tlvl2 = $template->get("level");
  92. $dbt->next();
  93. }
  94. }
  95. $price = 0;
  96. if ($dbbe->get("extraname") != "") {
  97. if ($i == 1)
  98. $price += floor(50 * pow((3 / 2), ($Tlvl1 - 1)) + pow((3 / 2), $Tlvl1));
  99. if ($i == 2)
  100. $price += floor(100 * pow((3 / 2), ($Tlvl2 - 1)) + pow((3 / 2), $Tlvl2));
  101. }
  102. if ($LvL == 1)
  103. $price += $PB;
  104. else
  105. $price += floor($PB * pow((3 / 2), ($LvL - 1)) + pow((3 / 2), $LvL));
  106. return $price;
  107. }
  108. static function getPriceForSaleWithReductionDurability($id, $db)
  109. {
  110. $dbbe = new DBCollection("SELECT * FROM Equipment WHERE Equipment.id=" . $id, $db);
  111. $basePrice = floor(self::getPriceEquipment($id, $db));
  112. $price = max(1, floor(($basePrice - self::getPriceToRepair($id, $db)) * ((50 - 4 * (max(0, $dbbe->get("level") - 3))) / 100)));
  113. // Vente des outils d'artisanat à 2po*level pour éviter les abus
  114. if (($dbbe->get("id_BasicEquipment") >= 207 and $dbbe->get("id_BasicEquipment") <= 212) or $dbbe->get("id_BasicEquipment") == 220)
  115. $price = 2 * $dbbe->get("level");
  116. return $price;
  117. }
  118. static function getPriceToRepair($id, $db)
  119. {
  120. $basePrice = floor(self::getPriceEquipment($id, $db) / 2);
  121. $dbbe = new DBCollection("SELECT level, durability, id_BasicEquipment FROM Equipment WHERE Equipment.id=" . $id, $db);
  122. $dbc = new DBCollection("SELECT * FROM BasicEquipment WHERE id=" . $dbbe->get("id_BasicEquipment"), $db);
  123. if ($dbc->get("durability") == 0)
  124. return 0;
  125. if ($dbbe->get("id_BasicEquipment") >= 200 && $dbbe->get("id_BasicEquipment") <= 206 && $dbbe->get("id_BasicEquipment") != 205)
  126. $durmax = $dbbe->get("level") * $dbc->get("durability");
  127. else
  128. $durmax = $dbc->get("durability");
  129. $usure = $durmax - $dbbe->get("durability");
  130. return ceil(($basePrice / 200) * $usure * (60 / $durmax));
  131. }
  132. /* ************************************************************* POUR LE MENU ECONOMIE ****************************** */
  133. static function revokeBuilding($playerSrc, $where, &$err, $db)
  134. {
  135. $dbe = new DBCollection("DELETE FROM Building WHERE " . $where, $db, 0, 0, false);
  136. $err = "Action réussie";
  137. }
  138. static function saleEquipment($playerSrc, $eqid, $price, &$err, $db)
  139. {
  140. if ($playerSrc->get("id_BasicRace") == 263 || $playerSrc->get("id_BasicRace") == ID_BASIC_RACE_FEU_FOL) {
  141. $err = localize("Vous ne pouvez pas mettre en vente d'objet avec ce personnage.");
  142. } else {
  143. if ($price == 0 || $price < 0 || $price == "") {
  144. $err = localize("Ce prix n'est pas valide.");
  145. } else {
  146. $dbu = new DBCollection("UPDATE Equipment SET sell=" . $price . " WHERE id_Player=" . $playerSrc->get("id") . " AND id=" . $eqid, $db, 0, 0, false);
  147. if ($dbu->count() == 1)
  148. $err = localize("Les Modifications ont été réalisées avec succès.");
  149. else
  150. $err = localize("Vous devez choisir un objet valide.");
  151. }
  152. }
  153. }
  154. static function removeEquipFromForSale($playerSrc, $equipidarray, &$err, $db, $autoUpdate = 1)
  155. {
  156. $err = "";
  157. $where = self::getCondFromArray($equipidarray, "id", "OR");
  158. $dbu = new DBCollection("UPDATE Equipment SET sell=0 WHERE id_Player=" . $playerSrc->get("id") . " AND " . $where, $db, 0, 0, false);
  159. $err = localize("Les Modifications ont été réalisées avec succès.");
  160. }
  161. static function buySeveralEquipment($playerSrc, $where, $id_Seller, &$err, $db)
  162. {
  163. // $where=self::getCondFromArray($equipidarray,"id","OR");
  164. // echo $where;
  165. $dbe = new DBCollection("SELECT * FROM Equipment WHERE " . $where, $db);
  166. $price = 0;
  167. $id_Player = $dbe->get("id_Player");
  168. while (! $dbe->eof()) {
  169. $price += $dbe->get("sell");
  170. if ($id_Player != $dbe->get("id_Player")) {
  171. $err = localize("Vous ne pouvez pas acheter des objets appartement à différentes personnes en même temps");
  172. return;
  173. }
  174. $dbe->next();
  175. }
  176. if ($price > $playerSrc->get("money")) {
  177. $err = localize("Il vous est impossible d'acheter ces objets car vous n'avez pas assez d'argent.");
  178. return;
  179. }
  180. $nb = 0;
  181. $dbe->first();
  182. while (! $dbe->eof()) {
  183. if ($err == "") {
  184. $nb ++;
  185. self::buyEquipment($playerSrc, $dbe->get("id"), $err, $param, $db);
  186. $param["OBJECT_NAME"][$nb] = $param["OBJECT"];
  187. }
  188. $dbe->next();
  189. }
  190. $param["NB"] = $nb;
  191. $param["ERROR"] = 0;
  192. require_once (HOMEPATH . "/factory/BasicActionFactory.inc.php");
  193. BasicActionFactory::globalInfo($playerSrc, $param);
  194. $opponent = new Player();
  195. $opponent->load($id_Seller, $db);
  196. BasicActionFactory::globalInfoOpponent($opponent, $param);
  197. $param["TYPE_ACTION"] = BUY_PJ;
  198. $param["TYPE_ATTACK"] = BUY_PJ_EVENT;
  199. $param["PRICE"] = $price;
  200. Event::logAction($db, BUY_PJ, $param);
  201. if ($err == "")
  202. $err = localize("L'achat a été réalisé avec succès.");
  203. $playerSrc->set("ap", $playerSrc->get("ap") - BUY_AP);
  204. $playerSrc->updateDB($db);
  205. }
  206. static function buyEquipment($playerSrc, $eqid, &$err, &$param, $db)
  207. {
  208. if ($playerSrc->get("id_BasicRace") == 263 || $playerSrc->get("id_BasicRace") == ID_BASIC_RACE_FEU_FOL) {
  209. $err = localize("Vous ne pouvez pas mettre en vente d'objet avec ce personnage.");
  210. return;
  211. }
  212. $equip = new Equipment();
  213. $equip->load($eqid, $db);
  214. $param["OBJECT"] = $equip->get("name") . " niveau " . $equip->get("level") . " " . $equip->get("extraname");
  215. require_once (HOMEPATH . "/factory/PlayerFactory.inc.php");
  216. $good = 0;
  217. $param["INV"] = PlayerFactory::checkingInvfullForObject($playerSrc, $equip->get("id_EquipmentType"), $param, $db);
  218. if ($param["INV"] == - 1) {
  219. $err = localize("Certains objets n'ont pas pu être acheté car vos sacs sont pleins.") . "<br/>";
  220. return;
  221. }
  222. $dbs = new DBCollection(
  223. "SELECT Equipment.sell, Player.map, Player.x, Player.y, Player.id FROM Player LEFT JOIN Equipment ON Equipment.id_Player=Player.id WHERE Equipment.id=" . $eqid, $db);
  224. if ($dbs->get("map") != $playerSrc->get("map") || distHexa($dbs->get("x"), $dbs->get("y"), $playerSrc->get("x"), $playerSrc->get("y")) > 1) {
  225. $err = localize("Certains objets n'ont pas pu être acheté car vous vous trouvez trop loin de la personne qui les vend.");
  226. return;
  227. }
  228. if ($dbs->get("sell") > $playerSrc->get("money")) {
  229. $err = localize("Il vous est impossible d'acheter cet objet car vous n'avez pas assez d'argent.");
  230. return;
  231. }
  232. $equip->set("x", $playerSrc->get("x"));
  233. $equip->set("y", $playerSrc->get("y"));
  234. $equip->set("sell", 0);
  235. $equip->set("collected", gmdate("Y-m-d H:i:s"));
  236. $equip->set("id_Equipment\$bag", playerFactory::getIdBagByNum($playerSrc->get("id"), $param["INV"], $db));
  237. // Si l'objet est un sac, un carquois ou une ceinture, tous les objets qu'il contient sont donnés
  238. if (($equip->get("id_EquipmentType") >= 41 and $equip->get("id_EquipmentType") <= 44) or $equip->get("id_EquipmentType") == 20 or $equip->get("id_EquipmentType") == 46)
  239. $dbe = new DBCollection("UPDATE Equipment SET id_Player=" . $playerSrc->get("id") . " WHERE id_Equipment\$bag=" . $equip->get("id"), $db, 0, 0, false);
  240. $equip->set("id_Player", $playerSrc->get("id"));
  241. $equip->updateDB($db);
  242. $dbt = new DBCollection("UPDATE Player SET money=money+" . $dbs->get("sell") . " WHERE id=" . $dbs->get("id"), $db, 0, 0, false);
  243. $founded = $dbt->count();
  244. if ($founded) {
  245. $playerSrc->set("money", $playerSrc->get("money") - $dbs->get("sell"));
  246. } else {
  247. $err = localize("Certaines objets n'ont pas pu être acheté car l'argent n'a pas pu être donné au vendeur. Essayez à nouveau.");
  248. return;
  249. }
  250. $playerSrc->updateDB($db);
  251. }
  252. }
  253. ?>