PageRenderTime 52ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/solar27/include/game/classes/diplomacy.php

https://bitbucket.org/sebs/mosolar
PHP | 165 lines | 108 code | 30 blank | 27 comment | 23 complexity | 2fabddd1327767411f4633b5b42899c8 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 Diplomacy {
  4. var $DB;
  5. var $data;
  6. var $data_footprint;
  7. var $game_id;
  8. ///////////////////////////////////////////////////////////////////////////
  9. // Constructor
  10. ///////////////////////////////////////////////////////////////////////////
  11. function Diplomacy($DB) {
  12. $this->DB = $DB;
  13. $this->data = array ();
  14. $this->data_footprint = array ();
  15. $this->game_id = round($_SESSION["game"]);
  16. }
  17. ///////////////////////////////////////////////////////////////////////////
  18. // load
  19. ///////////////////////////////////////////////////////////////////////////
  20. function load($empire_id) {
  21. $rs = $this->DB->Execute("SELECT * FROM game".$this->game_id."_tb_treaty WHERE empire_from='" . intval($empire_id) ."' ".
  22. " OR empire_to='" . intval($empire_id)."'");
  23. if (!$rs) trigger_error($this->DB->ErrorMsg());
  24. while (!$rs->EOF) {
  25. // verify if the other empire still exists :)
  26. $empire = $rs->fields["empire_from"];
  27. if ($empire == $empire_id)
  28. $empire = $rs->fields["empire_to"];
  29. $rs2 = $this->DB->Execute("SELECT id FROM game".$this->game_id."_tb_empire WHERE active='1' AND id='$empire'");
  30. if (!$rs2) trigger_error($this->DB->ErrorMsg());
  31. if ($rs2->EOF) {
  32. // empire is not here or dead
  33. if (!$this->DB->Execute("DELETE FROM game".$this->game_id."_tb_treaty WHERE id='" . $rs->fields["id"]."'")) trigger_error($this->DB->ErrorMsg());
  34. } else {
  35. $this->data[] = $rs->fields;
  36. $this->data_footprint[] = md5(serialize($this->data));
  37. }
  38. $rs->MoveNext();
  39. }
  40. return true;
  41. }
  42. ///////////////////////////////////////////////////////////////////////////
  43. // save
  44. ///////////////////////////////////////////////////////////////////////////
  45. function save() {
  46. for ($i = 0; $i < count($this->data); $i++) {
  47. if (md5(serialize($this->data[$i])) != $this->data_footprint[$i]) {
  48. $query = "UPDATE game".$this->game_id."_tb_treaty SET " .
  49. "empire_from='" . $this->data[$i]["empire_from"] . "'," .
  50. "empire_to='" . $this->data[$i]["empire_to"] . "'," .
  51. "type='" . $this->data[$i]["type"] . "'," .
  52. "date='" . $this->data[$i]["date"] . "'," .
  53. "status='" . $this->data[$i]["status"] . "' WHERE id='" . $this->data[$i]["id"]."'";
  54. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  55. }
  56. }
  57. }
  58. ///////////////////////////////////////////////////////////////////////////
  59. // treatyFrom
  60. ///////////////////////////////////////////////////////////////////////////
  61. function treatyFrom($empire_id) {
  62. for ($i = 0; $i < count($this->data); $i++) {
  63. $empire = $this->data[$i]["empire_from"];
  64. if ($empire != $empire_id)
  65. $empire = $this->data[$i]["empire_to"];
  66. if ($empire == $empire_id)
  67. return array (
  68. $this->data[$i]["type"],
  69. $this->data[$i]["status"]
  70. );
  71. }
  72. return null;
  73. }
  74. ///////////////////////////////////////////////////////////////////////////
  75. // sendTreaty
  76. ///////////////////////////////////////////////////////////////////////////
  77. function sendTreaty($treaty, $empire_data, $target_data) {
  78. $query = "INSERT INTO game".$this->game_id."_tb_treaty (empire_from,empire_to,type,date,status) " .
  79. "VALUES('" . $empire_data["id"] . "'," .
  80. "'".$target_data["id"] . "'," .
  81. "'".addslashes($treaty) . "'," .
  82. "'".time(NULL) . "','" . CONF_TREATY_ACCEPT_PENDING . "');";
  83. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  84. $evt = new EventCreator($this->DB);
  85. $evt->from = $empire_data["id"];
  86. $evt->to = $target_data["id"];
  87. $evt->type = CONF_EVENT_PENDINGTREATY;
  88. $evt->params = array (
  89. "empire_id" => $empire_data["id"],
  90. "empire_name" => $empire_data["name"],
  91. "empire_emperor" => $empire_data["emperor"],
  92. "gender" => $empire_data["gender"],
  93. "treaty" => $treaty
  94. );
  95. $evt->sticky = true;
  96. $evt->send();
  97. $this->load($empire_data["id"]);
  98. }
  99. ///////////////////////////////////////////////////////////////////////////
  100. // sendTreaty
  101. ///////////////////////////////////////////////////////////////////////////
  102. function getTreaty($treaty_id) {
  103. for ($i = 0; $i < count($this->data); $i++) {
  104. if ($this->data[$i]["id"] == $treaty_id)
  105. return $this->data[$i];
  106. }
  107. return null;
  108. }
  109. ///////////////////////////////////////////////////////////////////////////
  110. // breakTreaty
  111. ///////////////////////////////////////////////////////////////////////////
  112. function breakTreaty($treaty_id,$empire_data,$target_id) {
  113. $query = "UPDATE game".$this->game_id."_tb_treaty SET status='" . CONF_TREATY_BREAK_PENDING . "' WHERE id='" . intval($treaty_id)."'";
  114. if (!$this->DB->Execute($query)) trigger_error($this->DB->ErrorMsg());
  115. $evt = new EventCreator($this->DB);
  116. $evt->from = $empire_data["id"];
  117. $evt->to = $target_id;
  118. $evt->type = CONF_EVENT_BREAKTREATY;
  119. $evt->params = array (
  120. "empire_id"=>$empire_data["id"],
  121. "empire_name" => $empire_data["name"],
  122. "empire_emperor" => $empire_data["emperor"],
  123. "gender" => $empire_data["gender"]
  124. );
  125. $evt->send();
  126. }
  127. ///////////////////////////////////////////////////////////////////////////
  128. // deleteTreaty
  129. ///////////////////////////////////////////////////////////////////////////
  130. function deleteTreaty($treaty_id)
  131. {
  132. if (!$this->DB->Execute("DELETE FROM game".$this->game_id."_tb_treaty WHERE id='".intval($treaty_id)."'")) trigger_error($this->DB->ErrorMsg());
  133. }
  134. }
  135. ?>