PageRenderTime 59ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/solar27/include/game/classes/coalition.php

https://bitbucket.org/sebs/mosolar
PHP | 359 lines | 232 code | 79 blank | 48 comment | 59 complexity | 782732b9f343d9bb09d10b3c0a3ef655 MD5 | raw file
Possible License(s): LGPL-2.1, AGPL-3.0, BSD-3-Clause, LGPL-2.0, MIT, GPL-2.0
  1. <?php
  2. // Solar Imperium is licensed under GPL2, Check LICENSE.TXT for mode details //
  3. class Coalition
  4. {
  5. var $DB;
  6. var $member;
  7. var $data;
  8. var $data_footprint;
  9. var $members;
  10. var $game_id;
  11. ///////////////////////////////////////////////////////////////////////
  12. // constructor
  13. ///////////////////////////////////////////////////////////////////////
  14. function Coalition($DB)
  15. {
  16. $this->DB = $DB;
  17. $this->member = null;
  18. $this->game_id = round($_SESSION["game"]);
  19. }
  20. ///////////////////////////////////////////////////////////////////////
  21. //
  22. ///////////////////////////////////////////////////////////////////////
  23. function load($empire_id)
  24. {
  25. $this->member = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_member WHERE empire='".addslashes($empire_id)."'");
  26. if (!$this->member) trigger_error($this->DB->ErrorMsg());
  27. if ($this->member->EOF) {
  28. $this->member = null;
  29. return true;
  30. }
  31. $this->member = $this->member->fields;
  32. $this->data = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_coalition WHERE id='".$this->member["coalition"]."'");
  33. if (!$this->data) trigger_error($this->DB->ErrorMsg());
  34. $this->data = $this->data->fields;
  35. $this->data_footprint = md5(serialize($this->data));
  36. $this->members = array();
  37. $rs = $this->DB->Execute("SELECT game".$this->game_id."_tb_member.*,game".$this->game_id."_tb_empire.networth FROM game".$this->game_id."_tb_member,game".$this->game_id."_tb_empire WHERE game".$this->game_id."_tb_empire.id = game".$this->game_id."_tb_member.empire AND game".$this->game_id."_tb_member.coalition='".$this->data["id"]."'");
  38. if (!$rs) trigger_error($this->DB->ErrorMsg());
  39. while(!$rs->EOF)
  40. {
  41. if ($rs->fields["empire"] != $this->member["empire"])
  42. $this->members[] = $rs->fields;
  43. $rs->MoveNext();
  44. }
  45. return true;
  46. }
  47. ///////////////////////////////////////////////////////////////////////
  48. //
  49. ///////////////////////////////////////////////////////////////////////
  50. function save()
  51. {
  52. if ($this->member == null) return;
  53. if (md5(serialize($this->data)) == $this->data_footprint) return;
  54. $query = "UPDATE game".$this->game_id."_tb_coalition SET ";
  55. reset($this->data);
  56. while (list($key,$value) = each($this->data))
  57. {
  58. if ($key == "id") continue;
  59. if (is_numeric($key)) continue;
  60. if ((is_numeric($value)) && ($key != "logo"))
  61. $query .= "$key=$value,";
  62. else
  63. $query .= "$key='".addslashes($value)."',";
  64. }
  65. $query = substr($query,0,strlen($query)-1); // removing remaining ,
  66. $query .= " WHERE id='".$this->data["id"]."'";
  67. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  68. }
  69. ///////////////////////////////////////////////////////////////////////
  70. //
  71. ///////////////////////////////////////////////////////////////////////
  72. function updateNetworth($your_networth)
  73. {
  74. $this->data["networth"] = $your_networth;
  75. for ($i=0;$i<count($this->members);$i++)
  76. {
  77. $this->data["networth"] += $this->members[$i]["networth"];
  78. }
  79. $this->updatePlanetsCount();
  80. }
  81. ///////////////////////////////////////////////////////////////////////
  82. //
  83. ///////////////////////////////////////////////////////////////////////
  84. function updatePlanetsCount()
  85. {
  86. $this->data["planets"] = 0;
  87. $query = "SELECT * FROM game".$this->game_id."_tb_planets WHERE empire='".$this->member["empire"]."'";
  88. $rs = $this->DB->Execute($query);
  89. $this->data["planets"] += $rs->fields["food_planets"];
  90. $this->data["planets"] += $rs->fields["ore_planets"];
  91. $this->data["planets"] += $rs->fields["tourism_planets"];
  92. $this->data["planets"] += $rs->fields["supply_planets"];
  93. $this->data["planets"] += $rs->fields["gov_planets"];
  94. $this->data["planets"] += $rs->fields["edu_planets"];
  95. $this->data["planets"] += $rs->fields["research_planets"];
  96. $this->data["planets"] += $rs->fields["urban_planets"];
  97. $this->data["planets"] += $rs->fields["petro_planets"];
  98. $this->data["planets"] += $rs->fields["antipollu_planets"];
  99. for ($i=0;$i<count($this->members);$i++)
  100. {
  101. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_planets WHERE empire='".$this->members[$i]["empire"]."'");
  102. $this->data["planets"] += $rs->fields["food_planets"];
  103. $this->data["planets"] += $rs->fields["ore_planets"];
  104. $this->data["planets"] += $rs->fields["tourism_planets"];
  105. $this->data["planets"] += $rs->fields["supply_planets"];
  106. $this->data["planets"] += $rs->fields["gov_planets"];
  107. $this->data["planets"] += $rs->fields["edu_planets"];
  108. $this->data["planets"] += $rs->fields["research_planets"];
  109. $this->data["planets"] += $rs->fields["urban_planets"];
  110. $this->data["planets"] += $rs->fields["petro_planets"];
  111. $this->data["planets"] += $rs->fields["antipollu_planets"];
  112. }
  113. }
  114. ///////////////////////////////////////////////////////////////////////
  115. //
  116. ///////////////////////////////////////////////////////////////////////
  117. function isMember()
  118. {
  119. if ($this->member == null) return false; else return true;
  120. }
  121. ///////////////////////////////////////////////////////////////////////
  122. //
  123. ///////////////////////////////////////////////////////////////////////
  124. function isMemberFromId($empire_id)
  125. {
  126. for ($i=0;$i<count($this->members);$i++) {
  127. if ($this->members[$i]["empire"] == $empire_id) return true;
  128. }
  129. if ($this->member["empire"] == $empire_id) return true;
  130. return false;
  131. }
  132. ///////////////////////////////////////////////////////////////////////
  133. //
  134. ///////////////////////////////////////////////////////////////////////
  135. function isOwner()
  136. {
  137. if (!$this->isMember()) return false;
  138. if ($this->member["level"] != 1) return false;
  139. return true;
  140. }
  141. ///////////////////////////////////////////////////////////////////////
  142. //
  143. ///////////////////////////////////////////////////////////////////////
  144. function isOwnerFromId($empire_id)
  145. {
  146. if (!$this->isMemberFromId($empire_id)) return false;
  147. for ($i=0;$i<count($this->members);$i++)
  148. {
  149. if (($this->members[$i]["empire"] == $empire_id) && ($this->members[$i]["level"] == 1))
  150. return true;
  151. }
  152. if (($this->member["empire"] == $empire_id) && ($this->member["level"] == 1))
  153. return true;
  154. return false;
  155. }
  156. ///////////////////////////////////////////////////////////////////////
  157. //
  158. ///////////////////////////////////////////////////////////////////////
  159. function transferOwnership($id)
  160. {
  161. if (!$this->isOwner()) return false;
  162. $empire_id = $id;
  163. if ($empire_id == -1) {
  164. // Find another member
  165. for ($i=0;$i<count($this->members);$i++) {
  166. if (($this->members[$i]["empire"] ==$this->member["empire"]) && ($this->members[$i]["level"] == 1))
  167. continue;
  168. $empire_id = $this->members[$i]["empire"];
  169. break;
  170. }
  171. }
  172. if ($empire_id == -1) {
  173. // no more coalition members, delete the coalition
  174. disband();
  175. return true;
  176. }
  177. // remove my ownership
  178. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_member SET level='0' WHERE empire='".$this->member["empire"]."'")) trigger_error($this->DB->ErrorMsg());
  179. // set the ownership
  180. if (!$this->DB->Execute("UPDATE game".$this->game_id."_tb_member SET level='1' WHERE empire='".addslashes($empire_id)."' AND coalition='".$this->member["coalition"]."'")) trigger_error($this->DB->ErrorMsg());
  181. // send a event
  182. $evt = new EventCreator($this->DB);
  183. $evt->type = CONF_EVENT_COALITION_OWNERSHIP_CHANGED;
  184. $evt->from = -1;
  185. $empire_data = $this->DB->Execute("SELECT id,emperor,name,gender FROM game".$this->game_id."_tb_empire WHERE id='".intval($id)."'");
  186. if (!$empire_data) trigger_error($this->DB->ErrorMsg());
  187. $empire_data = $empire_data->fields;
  188. $evt->params = array("empire_id"=>$empire_data["id"],"empire_name"=>$empire_data["name"],"empire_emperor"=>$empire_data["emperor"],"gender"=>$empire_data["gender"],"coalition_name"=>$this->data["name"]);
  189. $evt->broadcast();
  190. $this->load($this->member["empire"]);
  191. return true;
  192. }
  193. ///////////////////////////////////////////////////////////////////////
  194. //
  195. ///////////////////////////////////////////////////////////////////////
  196. function transferRandomOwnership()
  197. {
  198. srand(time(NULL));
  199. $this->transferOwnership(rand(0,count($this->members)-1));
  200. }
  201. ///////////////////////////////////////////////////////////////////////
  202. //
  203. ///////////////////////////////////////////////////////////////////////
  204. function kickMember($empire_id)
  205. {
  206. $query = "DELETE FROM game".$this->game_id."_tb_member WHERE empire='".intval($empire_id)."'";
  207. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  208. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_empire WHERE id='".intval($empire_id)."'");
  209. $params = array("empire_id"=>$rs->fields["id"],
  210. "empire_emperor"=>$rs->fields["emperor"],
  211. "empire_name"=>$rs->fields["name"],
  212. "gender"=>$rs->fields["gender"],
  213. "coalition_name"=>$this->data["name"]);
  214. $evt = new EventCreator($this->DB);
  215. $evt->from = $_SESSION["empire_id"];
  216. $evt->type = CONF_EVENT_COALITION_KICKED;
  217. $evt->params = $params;
  218. $evt->broadcast();
  219. $this->load($this->member["empire"]);
  220. }
  221. ///////////////////////////////////////////////////////////////////////
  222. //
  223. ///////////////////////////////////////////////////////////////////////
  224. function disband()
  225. {
  226. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_empire WHERE id='".intval($_SESSION["empire_id"])."'");
  227. if (!$rs) trigger_error($this->DB->ErrorMsg());
  228. $this->DB->Execute("DELETE FROM game".$this->game_id."_tb_member WHERE coalition='".$this->data["id"]."'");
  229. $this->DB->Execute("DELETE FROM game".$this->game_id."_tb_coalition WHERE id='".$this->data["id"]."'");
  230. $params = array("empire_id"=>$rs->fields["id"],
  231. "empire_emperor"=>$rs->fields["emperor"],
  232. "empire_name"=>$rs->fields["name"],
  233. "gender"=>$rs->fields["gender"],
  234. "coalition_name"=>$this->data["name"]);
  235. $evt = new EventCreator($this->DB);
  236. $evt->from = $_SESSION["empire_id"];
  237. $evt->type = CONF_EVENT_COALITION_DISBANDED;
  238. $evt->params = $params;
  239. $evt->broadcast();
  240. $this->load($this->member["empire"]);
  241. }
  242. ///////////////////////////////////////////////////////////////////////
  243. //
  244. ///////////////////////////////////////////////////////////////////////
  245. function create($coalition_name,$empire_id)
  246. {
  247. $query = "INSERT INTO game".$this->game_id."_tb_coalition (date,name,planets,networth,logo)".
  248. "VALUES(".time(NULL).",".
  249. "'".addslashes($coalition_name)."',".
  250. "0,".
  251. "0,".
  252. "'5488888888888845554888881888845545549991199945548459222112229548889222211222298888922221122229888892222112222988888922211222988888892221122298888889233333329888888922244222988888459224422954888455492002945548455488922988455455488889988884555488888888888845'".
  253. ")";
  254. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  255. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_coalition WHERE name='".addslashes($coalition_name)."'");
  256. if (!$rs) trigger_error($this->DB->ErrorMsg());
  257. $id = $rs->fields["id"];
  258. $query = "INSERT INTO game".$this->game_id."_tb_member (date,empire,coalition,level) ".
  259. "VALUES(".
  260. time(NULL).",".
  261. $empire_id.",".
  262. $id.",".
  263. "1)";
  264. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg()." QUERY:".$query);
  265. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_empire WHERE id='".intval($empire_id)."'");
  266. $params = array("empire_id"=>$rs->fields["id"],
  267. "empire_emperor"=>$rs->fields["emperor"],
  268. "empire_name"=>$rs->fields["name"],
  269. "gender"=>$rs->fields["gender"],
  270. "coalition_name"=>$coalition_name);
  271. if (!$rs) trigger_error($this->DB->ErrorMsg());
  272. $evt = new EventCreator($this->DB);
  273. $evt->from = $_SESSION["empire_id"];
  274. $evt->type = CONF_EVENT_COALITION_CREATED;
  275. $evt->params = $params;
  276. $evt->broadcast();
  277. $this->load($empire_id);
  278. }
  279. }
  280. ?>