PageRenderTime 79ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/nacridan/factory/GdCFactory.inc.php

https://gitlab.com/nacridan/Nacridan
PHP | 276 lines | 234 code | 29 blank | 13 comment | 19 complexity | 6cbfc7edcd1bd6a34dc987bd988cb03c MD5 | raw file
  1. <?php
  2. // require_once(HOMEPATH."/economy/ddef.inc.php");
  3. require_once (HOMEPATH . "/class/FighterGroup.inc.php");
  4. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  5. class GdCFactory
  6. {
  7. static function askJoinGdC($playerSrc, $name, $type, &$err, $db)
  8. {
  9. $err = "";
  10. if (is_numeric($name))
  11. $dbp = new DBCollection("SELECT id, name FROM Player WHERE id=" . quote_smart($name), $db);
  12. else
  13. $dbp = new DBCollection("SELECT id, name FROM Player WHERE name='" . quote_smart($name) . "'", $db);
  14. if ($dbp->eof()) {
  15. $err = localize("Erreur : Ce joueur n'existe pas.");
  16. return;
  17. }
  18. if ($dbp->get("id") == $playerSrc->get("id")) {
  19. $err = localize("Erreur : Vous ne pouvez pas vous inviter vous même !");
  20. return;
  21. }
  22. if ($playerSrc->get("id_FighterGroup") != 0) {
  23. $dbx = new DBCollection("SELECT id_FighterGroup FROM Player WHERE id=" . $dbp->get("id"), $db);
  24. if ($dbx->get("id_FighterGroup") == $playerSrc->get("id_FighterGroup")) {
  25. $err = localize("Erreur : Ce joueur fait déjà partie de votre groupe de chasse !");
  26. return;
  27. }
  28. }
  29. $dbx = new DBCollection("SELECT id FROM FighterGroupAskJoin WHERE id_Player=" . $playerSrc->get('id') . " AND id_Guest=" . $dbp->get('id'), $db);
  30. if (! $dbx->eof()) {
  31. $err = localize("Erreur : Cette demande a déjà été faite. Vous devez attendre la réponse");
  32. return;
  33. }
  34. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  35. $dest = array();
  36. $dest[$dbp->get("name")] = $dbp->get("name");
  37. $type = 2;
  38. MailFactory::sendSingleDestMsg($playerSrc, localize("Invitation GDC"),
  39. localize($playerSrc->get("name") . " vous a proposé de rejoindre son groupe. Pour accepter, rendez-vous dans l'onglet diplomatie/groupe de chasse."), $dest, $type, $err,
  40. $db, - 1, 0);
  41. $datetime = time();
  42. $dbi = new DBCollection(
  43. "INSERT INTO FighterGroupAskJoin (id_Player,id_Guest,date) VALUES (" . $playerSrc->get("id") . "," . $dbp->get("id") . ",'" . gmdate("Y-m-d H:i:s", $datetime) . "')",
  44. $db, 0, 0, false);
  45. $err = localize("Votre invitation a été envoyée au joueur.");
  46. $playerSrc->updateDB($db);
  47. }
  48. static function validateJoinGdC($playerSrc, $id, $type, &$err, $db)
  49. {
  50. $master = new Player();
  51. $master->externDBObj("Modifier");
  52. $master->load($id, $db);
  53. $datetime = time();
  54. // Si le personnage est déjà dans un groupe
  55. if ($playerSrc->get("id_FighterGroup") != 0) {
  56. $err = "Vous devez d'abord quitter votre groupe avant de pouvoir en rejoindre un autre";
  57. return;
  58. }
  59. // S'il n'y a pas de groupe existant alors création d'un groupe
  60. if ($master->get("id_FighterGroup") == 0) {
  61. $group = new FighterGroup();
  62. $group->set("date", gmdate("Y-m-d H:i:s", $datetime));
  63. $group->set("id_Player", $master->get("id"));
  64. $id_Group = $group->addDB($db);
  65. if ($id_Group == - 1) {
  66. $err = "Erreur : le groupe de chasse n'a pas pu être créé. ";
  67. return;
  68. } else
  69. $dbc = new DBCollection("UPDATE Player SET id_FighterGroup=" . $id_Group . " WHERE id=" . $id, $db, 0, 0, false);
  70. } else { // Si le groupe existe déjà, ajout du nouveau membre
  71. $id_Group = $master->get("id_FighterGroup");
  72. }
  73. $playerSrc->set("id_FighterGroup", $id_Group);
  74. $playerSrc->updateDBr($db);
  75. // Suppression des invitations du joueur ayant accepté de rejoindre le groupe
  76. $dbc = new DBCollection("DELETE FROM FighterGroupAskJoin WHERE id_Player=" . $playerSrc->get("id"), $db, 0, 0, false);
  77. // Suppression de l'invitation acceptée
  78. $dbc = new DBCollection("DELETE FROM FighterGroupAskJoin WHERE id_Player=" . $master->get("id") . " AND id_Guest=" . $playerSrc->get("id"), $db, 0, 0, false);
  79. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  80. $dest = array();
  81. $dest[$master->get("name")] = $master->get("name");
  82. $type = 2;
  83. MailFactory::sendSingleDestMsg($playerSrc, localize("Invitation GDC"), localize($playerSrc->get("name") . " a rejoint votre groupe de chasse."), $dest, $type, $err, $db,
  84. - 1, 0);
  85. $err = "Vous avez rejoint le groupe de chasse avec succès. Vos invitations ont été par conséquent annulées.";
  86. }
  87. static function refuseJoinGdC($playerSrc, $id, $type, $err, $db)
  88. {
  89. $master = new Player();
  90. $master->externDBObj("Modifier");
  91. $master->load($id, $db);
  92. $dbc = new DBCollection("DELETE FROM FighterGroupAskJoin WHERE id_Player=" . $master->get("id") . " AND id_Guest=" . $playerSrc->get("id"), $db, 0, 0, false);
  93. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  94. $dest = array();
  95. $dest[$master->get("name")] = $master->get("name");
  96. $type = 2;
  97. MailFactory::sendSingleDestMsg($playerSrc, localize("Invitation GDC"), localize($playerSrc->get("name") . " a refusé votre invitation dans votre groupe de chasse."), $dest,
  98. $type, $err, $db, - 1, 0);
  99. }
  100. static function banGdCMember($playerSrc, $playeridarray, $type, &$err, $db, $autoUpdate = 1)
  101. {
  102. $err = "";
  103. if ($playerSrc->getSub("FighterGroup", "id_Player") != $playerSrc->get("id"))
  104. return "Vous devez être le leader du groupe pour bannir un membre";
  105. foreach ($playeridarray as $key => $val) {
  106. $dbu = new DBCollection("UPDATE Player SET id_FighterGroup=0 WHERE id=" . $val, $db, 0, 0, false);
  107. $dbx = new DBCollection("SELECT name FROM Player WHERE id=" . $val, $db);
  108. $dest[$dbx->get("name")] = $dbx->get("name");
  109. }
  110. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  111. $type = 2;
  112. MailFactory::sendSingleMsgById($playerSrc, localize("Information"), localize("Vous avez été exclu de votre groupe de chasse par le leader."), $playeridarray, $type, $err,
  113. $db, - 1, 0);
  114. // S'il n'y avait que le chef dans le groupe alors dissolution
  115. $info = "";
  116. $dbf = new DBCollection("SELECT id FROM Player WHERE id_FighterGroup=" . $playerSrc->get("id_FighterGroup"), $db);
  117. if ($dbf->count() == 1) {
  118. $type = 2;
  119. self::dissolGdC($playerSrc, $type, $err, $db, 1);
  120. $info = "Vous avez banni tous les membres, le groupe a donc été dissous.";
  121. }
  122. $err = localize("Les personnages séléctionnés ont été exclu de votre groupe de chasse. " . $info);
  123. return $err;
  124. }
  125. static function dissolGdC($playerSrc, $type, &$err, $db, $quit = 0)
  126. {
  127. $err = "";
  128. $dest = array();
  129. // Récupération des noms des joueurs appartenant au GdC pour envoi mail
  130. $dbu = new DBCollection("SELECT * FROM Player WHERE id_FighterGroup=" . $playerSrc->get("id_FighterGroup"), $db);
  131. while (! $dbu->eof()) {
  132. $dest[$dbu->get("name")] = $dbu->get("name");
  133. // suppression des auras
  134. $dbbm = new DBCollection("DELETE FROM BM WHERE name='Aura de courage' AND id_Player\$src=" . $dbu->get("id") . " AND id_Player <> " . $dbu->get("id"), $db, 0, 0, false);
  135. $dbbm = new DBCollection("DELETE FROM BM WHERE name='Aura de résistance' AND id_Player\$src=" . $dbu->get("id") . " AND id_Player <> " . $dbu->get("id"), $db, 0, 0,
  136. false);
  137. $dbu->next();
  138. }
  139. // Suppression des messages de la tribune.
  140. $dbd = new DBCollection("DELETE FROM FighterGroupMsg WHERE id_FighterGroup=" . $playerSrc->get("id_FighterGroup"), $db, 0, 0, false);
  141. $dbu = new DBCollection("DELETE FROM FighterGroup WHERE id=" . $playerSrc->get("id_FighterGroup"), $db, 0, 0, false);
  142. $dbu = new DBCollection("UPDATE Player SET id_FighterGroup=0 WHERE id_FighterGroup=" . $playerSrc->get("id_FighterGroup"), $db, 0, 0, false);
  143. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  144. // Si dissolution par le leader
  145. if (! $quit) {
  146. $type = 2;
  147. MailFactory::sendSingleDestMsg($playerSrc, localize("Information"), localize("Le groupe de chasse a été dissous par le leader."), $dest, $type, $err, $db, - 1, 0);
  148. $err = "Le groupe de chasse a été dissous";
  149. } // Si dernier membre qui quitte le groupe
  150. else
  151. $err = "Vous ne faites plus partie d'aucun groupe de chasse.";
  152. return $err;
  153. }
  154. static function quitGdC($playerSrc, $type, &$err, $db, $autoUpdate = 1)
  155. {
  156. $err = "";
  157. $info = "";
  158. $dest = array();
  159. $idf = $playerSrc->get("id_FighterGroup");
  160. // S'il n'y avait que 2 joueurs dans le groupe alors dissolution
  161. $dbx = new DBCollection("SELECT id FROM Player WHERE id_FighterGroup=" . $idf, $db);
  162. if ($dbx->count() == 2) {
  163. $type = 2;
  164. self::dissolGdC($playerSrc, $type, $err, $db, 1);
  165. $info = "Le groupe a été dissous.";
  166. } else { // Si plus de 2 joueurs dans le GdC
  167. // suppression des auras
  168. $dbbm = new DBCollection("DELETE FROM BM WHERE name='Aura de courage' AND id_Player\$src=" . $playerSrc->get("id") . " AND id_Player <> " . $playerSrc->get("id"), $db,
  169. 0, 0, false);
  170. $dbbm = new DBCollection("DELETE FROM BM WHERE name='Aura de résistance' AND id_Player\$src=" . $playerSrc->get("id") . " AND id_Player <> " . $playerSrc->get("id"),
  171. $db, 0, 0, false);
  172. $playerSrc->set("id_FighterGroup", 0);
  173. $playerSrc->updateDB($db);
  174. $err = "Vous ne faites plus partie d'aucun groupe de chasse";
  175. }
  176. // Envoi d'un message au leader du groupe
  177. $dbu = new DBCollection(
  178. "SELECT id_Player, name FROM FighterGroup LEFT JOIN Player ON Player.id_FighterGroup=FighterGroup.id WHERE Player.id_FighterGroup=" . $idf .
  179. " AND Player.id=FighterGroup.id_Player", $db);
  180. if ($dbu->count() > 0) {
  181. $dest = array();
  182. $dest[$dbu->get("name")] = $dbu->get("name");
  183. $type = 2;
  184. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  185. MailFactory::sendSingleDestMsg($playerSrc, localize("Information GdC"), localize($playerSrc->get("name") . " a quitté le groupe de chasse." . $info), $dest, $type,
  186. $err2, $db, - 1, 0);
  187. // $err=$err2;
  188. }
  189. }
  190. static function transfertGdC($playerSrc, $id_Successor, $type, &$err, $db, $autoUpdate = 1)
  191. {
  192. $err = "";
  193. $info = "";
  194. $dest = array();
  195. $type = 2;
  196. // Changement de leader
  197. $dbt = new DBCollection("SELECT * FROM Player WHERE id=" . $id_Successor, $db);
  198. $dbc = new DBCollection("UPDATE FighterGroup SET id_Player=" . $id_Successor . " WHERE id=" . $playerSrc->get("id_FighterGroup"), $db, 0, 0, false);
  199. // Envoi d'un message au nouveau leader du groupe
  200. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  201. $mast = array();
  202. $mast[$dbt->get("name")] = $dbt->get("name");
  203. MailFactory::sendSingleDestMsg($playerSrc, localize("Information GdC"),
  204. localize($playerSrc->get("name") . " vous a passé ses pouvoirs. Vous êtes le nouveau leader du groupe de chasse"), $mast, $type, $err, $db, - 1, 0);
  205. // Récupération des noms des joueurs appartenant au GdC pour envoi mail
  206. $dbu = new DBCollection("SELECT * FROM Player WHERE id_FighterGroup=" . $playerSrc->get("id_FighterGroup"), $db);
  207. while (! $dbu->eof()) {
  208. if ($dbu->get("name") != $dbt->get("name"))
  209. $dest[$dbu->get("name")] = $dbu->get("name");
  210. $dbu->next();
  211. }
  212. require_once (HOMEPATH . "/factory/MailFactory.inc.php");
  213. MailFactory::sendSingleDestMsg($playerSrc, localize("Information GdC"), localize($dbt->get("name") . " est le nouveau leader du groupe de chasse"), $dest, $type, $err, $db,
  214. - 1, 0);
  215. // Message retour
  216. $err = "Vous avez passé vos pouvoirs avec succès. " . $dbt->get("name") . " est le nouveau leader du groupe de chasse.";
  217. }
  218. static function cancelInviteGdC($playerSrc, $arr, $type, &$err, $db, $autoUpdate = 1)
  219. {
  220. $err = "";
  221. $type = 2;
  222. $cond = self::getCondFromArray($arr, "id_Guest", "OR");
  223. $dbc = new DBCollection("DELETE FROM FighterGroupAskJoin WHERE id_Player=" . $playerSrc->get("id") . " AND " . $cond, $db, 0, 0, false);
  224. }
  225. static protected function getCondFromArray($arr, $fieldname, $cond)
  226. {
  227. $msg = "";
  228. $first = 1;
  229. foreach ($arr as $key => $val) {
  230. if ($first)
  231. $msg = $fieldname . "=" . $val;
  232. else
  233. $msg .= " " . $cond . " " . $fieldname . "=" . $val;
  234. $first = 0;
  235. }
  236. return $msg;
  237. }
  238. }
  239. ?>