PageRenderTime 48ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/solar27/include/init.php

https://bitbucket.org/sebs/mosolar
PHP | 443 lines | 294 code | 131 blank | 18 comment | 66 complexity | 5353450af0fd60893354a24d21db2384 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. $path_prefix = "";
  4. if (defined("CALLED_FROM_GAME_INIT")) $path_prefix = "../";
  5. if (!file_exists($path_prefix."include/config.php")) {
  6. if (!file_exists($path_prefix."install.php")) die("No server set but installer not available too, reinstall the entire software.");
  7. die(header("Location: ".$path_prefix."install.php"));
  8. }
  9. require_once($path_prefix."include/xss_block.php");
  10. require_once($path_prefix."include/config.php");
  11. require_once($path_prefix."include/thirdparty/smarty/Smarty.class.php");
  12. require_once($path_prefix."include/thirdparty/adodb/adodb.inc.php");
  13. if (isset($_POST["magickey"])) {
  14. if (!session_start($_POST["magickey"])) die("Unable to create session object!");
  15. } else {
  16. if (!session_start()) die("Unable to create session object!");
  17. }
  18. require_once($path_prefix."include/languages.php");
  19. $TPL = new Smarty();
  20. $TPL->assign("LANGUAGES",$LANGUAGES);
  21. if (isset($_GET["XML"])) {
  22. $TPL->template_dir = "templates/xml/system/";
  23. $TPL->compile_dir = "templates_c/xml/system/";
  24. } else {
  25. $TPL->template_dir = "templates/system/";
  26. $TPL->compile_dir = "templates_c/system/";
  27. }
  28. if (isset($_GET["WARNING"])) $TPL->assign("warning_message",$_GET["WARNING"]);
  29. // basic PHP initialization
  30. function phpnum() {
  31. $version = explode('.', phpversion());
  32. return (int) $version[0];
  33. }
  34. function is_php5() { return phpnum() == 5; }
  35. function is_php4() { return phpnum() == 4; }
  36. if (is_php5()) {
  37. date_default_timezone_set(CONF_TIMEZONE);
  38. }
  39. if(!function_exists('make_seed')) {
  40. function make_seed()
  41. {
  42. list($usec, $sec) = explode(' ', microtime());
  43. return (float) $sec + ((float) $usec * 100000);
  44. }
  45. }
  46. function dieError($content) {
  47. if (isset($_GET["XML"]))
  48. die("<xml><Error>$content</Error></xml>");
  49. die($content);
  50. }
  51. srand(make_seed());
  52. ob_start(); // output buffering
  53. // if 'register_globals' directive is active, halt the process
  54. if (ini_get("register_globals")==1)
  55. {
  56. die("Disable register_globals PHP Directive!");
  57. }
  58. // Initialize database
  59. $DB = NewADOConnection(CONF_DATABASE_DRIVER);
  60. if (!@$DB->Connect(CONF_DATABASE_HOSTNAME,CONF_DATABASE_USERNAME,CONF_DATABASE_PASSWORD,CONF_DATABASE_NAME))
  61. die("Database is currently offline, come back in few minutes. Thank you.");
  62. require_once($path_prefix."include/thirdparty/error_handler.php");
  63. // Do cron update here
  64. if (isset($_SESSION["game"])) {
  65. $rs = $DB->Execute("SELECT GET_LOCK('cron_update',30);");
  66. if ($rs->fields[0] == 1) {
  67. $rs = $DB->Execute("SELECT * FROM system_tb_games WHERE id=".addslashes($_SESSION["game"]));
  68. if (!$rs) {
  69. session_destroy();
  70. die(T_("Invalid game ID while doing update!"));
  71. }
  72. if ($rs->EOF) {
  73. session_destroy();
  74. die(T_("Invalid game ID while doing update!"));
  75. }
  76. $cron_game_id = $rs->fields["id"];
  77. $cron_victory_condition = $rs->fields["victory_condition"];
  78. $cron_game_name = $rs->fields["name"];
  79. $cron_lifetime = $rs->fields["lifetime"];
  80. $cron_turns_per_day = $rs->fields["turns_per_day"];
  81. $rs = $DB->Execute("SELECT * FROM game".addslashes($_SESSION["game"])."_tb_coordinator");
  82. if (!$rs) die(T_("Invalid game ID while doing update!"));
  83. if ($rs->EOF) die(T_("Invalid game ID while doing update!"));
  84. require_once($path_prefix."include/update/victory_condition.php");
  85. $cron_now = time(NULL);
  86. $cron_timeslice = floor((60 * 60 * 24) / $cron_turns_per_day);
  87. $cron_elapsed1 = $cron_now - $rs->fields["last_turns_update"];
  88. $cron_elapsed2 = $cron_now - $rs->fields["last_time_update"];
  89. $cron_game_status = $rs->fields["game_status"];
  90. $cron_daily = $rs->fields["last_daily_update"];
  91. $cron_last_master = $rs->fields["last_master"];
  92. // 60 second update)
  93. $cron_delay = $cron_timeslice;
  94. if ($cron_delay > 60) $cron_delay = 60;
  95. if ($cron_elapsed2 >= $cron_delay) {
  96. require_once($path_prefix."include/game/games_config/".addslashes($_SESSION["game"]).".php");
  97. require_once($path_prefix."include/game/games_rules/".addslashes($_SESSION["game"]).".php");
  98. if (CheckVictoryCondition(addslashes($_SESSION["game"]),$cron_victory_condition,$cron_game_name,$cron_lifetime)) {
  99. require_once($path_prefix."include/game/classes/event_creator.php");
  100. require_once($path_prefix."include/game/classes/empire.php");
  101. require_once($path_prefix."include/game/classes/army.php");
  102. require_once($path_prefix."include/game/classes/invasion.php");
  103. require_once($path_prefix."include/game/classes/planets.php");
  104. require_once($path_prefix."include/game/classes/coalition.php");
  105. require_once($path_prefix."include/game/classes/production.php");
  106. require_once($path_prefix."include/game/classes/supply.php");
  107. require_once($path_prefix."include/game/classes/diplomacy.php");
  108. require_once($path_prefix."include/game/classes/research.php");
  109. require_once($path_prefix."include/game/classes/template.php");
  110. require_once($path_prefix."include/game/classes/gameplay_costs.php");
  111. require_once($path_prefix."include/update/sanitycheck.php");
  112. require_once($path_prefix."include/update/trade_convoy.php");
  113. require_once($path_prefix."include/update/army_convoy.php");
  114. $GAME = array();
  115. $GAME["template"] = new Template($DB,$_SESSION["game"]);
  116. $GAME["gameplay_costs"] = new GameplayCosts($DB);
  117. CheckGameSanity(addslashes($_SESSION["game"]));
  118. HandleTradeConvoys(addslashes($_SESSION["game"]));
  119. HandleArmyConvoys(addslashes($_SESSION["game"]));
  120. $query = "UPDATE game".addslashes($_SESSION["game"])."_tb_coordinator SET last_time_update=" . $cron_now;
  121. if (!$DB->Execute($query)) die($DB->ErrorMsg());
  122. unset($GAME);
  123. }
  124. }
  125. if ($cron_elapsed1 >= $cron_timeslice) {
  126. $cron_turns = floor($cron_elapsed1 / $cron_timeslice);
  127. $query = "UPDATE game".addslashes($_SESSION["game"])."_tb_coordinator SET last_turns_update=" . $cron_now;
  128. if (!$DB->Execute($query)) die($DB->ErrorMsg());
  129. $rs = $DB->Execute("SELECT * FROM game".addslashes($_SESSION["game"])."_tb_empire WHERE active=1");
  130. while (!$rs->EOF) {
  131. $cron_newturns = $rs->fields["turns_left"] + $cron_turns;
  132. if ($cron_newturns > $cron_turns_per_day)
  133. $cron_newturns = $cron_turns_per_day;
  134. $query = "UPDATE game".addslashes($_SESSION["game"])."_tb_empire SET turns_left=$cron_newturns WHERE id=" . $rs->fields["id"];
  135. if (!$DB->Execute($query)) die($DB->ErrorMsg());
  136. $rs->MoveNext();
  137. }
  138. }
  139. // daily update
  140. if ($cron_now - $cron_daily >= (60*60*24)) {
  141. // broadcast a NOTICE about who is the galactic master and who was the last one.
  142. $rs = $DB->Execute("SELECT emperor,name FROM game".addslashes($_SESSION["game"])."_tb_empire WHERE active=1 ORDER BY networth DESC LIMIT 0,1");
  143. $cron_master_name = $rs->fields["emperor"]."@".$rs->fields["name"];
  144. if ($cron_master_name != $cron_last_master) {
  145. $DB->Execute("UPDATE game".addslashes($_SESSION["game"])."_tb_coordinator SET last_master='".addslashes($cron_master_name)."'");
  146. require_once($path_prefix."include/game/classes/event_creator.php");
  147. $evt = new EventCreator($DB);
  148. $evt->type = CONF_EVENT_NOTICE;
  149. $evt->from = -1;
  150. if ($cron_master_name != "") {
  151. if ($cron_last_master == "@")
  152. $evt->params = array ("notice_data" => "<font style=\"color:#cacaca\">".T_("The new galactic master is: ")."</font>".$cron_master_name);
  153. else
  154. $evt->params = array ("notice_data" => "<font style=\"color:#cacaca\">".T_("The new galactic master is: ")."</font>".$cron_master_name."<font style=\"color:#cacaca\">".T_(", previous master was: ")."</font>".$cron_last_master);
  155. $evt->broadcast();
  156. }
  157. }
  158. // add 1 extra turn to all premium members
  159. $rs = $DB->Execute("SELECT * FROM game".addslashes($_SESSION["game"])."_tb_empire WHERE active=1 AND premium=1");
  160. while (!$rs->EOF) {
  161. $cron_newturns = $rs->fields["turns_left"] + 1;
  162. if ($cron_newturns > $cron_turns_per_day)
  163. $cron_newturns = $cron_turns_per_day;
  164. $query = "UPDATE game".addslashes($_SESSION["game"])."_tb_empire " .
  165. "SET turns_left=$cron_newturns WHERE id=" . $rs->fields["id"];
  166. $DB->Execute($query);
  167. if (!$DB) die($DB->ErrorMsg());
  168. $rs->MoveNext();
  169. }
  170. $query = "UPDATE game".$_SESSION["game"]."_tb_coordinator SET last_daily_update=" . $cron_now;
  171. $DB->Execute($query);
  172. }
  173. $DB->Execute("SELECT RELEASE_LOCK('cron_update');");
  174. }
  175. }
  176. $DB->StartTrans();
  177. // do basic cleanup //
  178. $expiration = time(NULL) - CONF_SESSION_CHAT_TIMEOUT;
  179. $rs = $DB->Execute("SELECT * FROM system_tb_chat_sessions WHERE timestamp < $expiration");
  180. while(!$rs->EOF)
  181. {
  182. $rs2 = $DB->Execute("SELECT last_login_date FROM system_tb_players WHERE nickname='".addslashes($rs->fields["nickname"])."'");
  183. $elapsed = 0;
  184. if(!$rs2->EOF) {
  185. $elapsed = time(NULL) - $rs2->fields["last_login_date"];
  186. $elapsed = round($elapsed / 60,2);
  187. }
  188. // $DB->Execute("INSERT INTO system_tb_chat_log (timestamp,message) VALUES(".time(NULL).",'<b style=\"color:yellow\">[".date("H:i:s")."] ".$rs->fields["nickname"]." ".T_("has left the chatroom. [timeout] (Stayed for")." ".$elapsed." ".T_("minutes").")</b>')");
  189. $DB->Execute("DELETE FROM system_tb_chat_sessions WHERE id=".addslashes($rs->fields["id"]));
  190. $rs->MoveNext();
  191. }
  192. $rs = $DB->Execute("SELECT * FROM system_tb_sessions WHERE date < $expiration");
  193. while(!$rs->EOF)
  194. {
  195. $DB->Execute("DELETE FROM system_tb_sessions WHERE id=".addslashes($rs->fields["id"]));
  196. $rs->MoveNext();
  197. }
  198. $DB->Execute("DELETE FROM system_tb_chat_sessions WHERE timestamp < ".$expiration);
  199. if ((isset($_SESSION["player"])) && (isset($_SESSION["player"]["id"]))) {
  200. $rs = $DB->Execute("SELECT * FROM system_tb_sessions WHERE player=".$_SESSION["player"]["id"]);
  201. if ($rs->EOF) {
  202. $DB->Execute("INSERT INTO system_tb_sessions (player,date) VALUES(".$_SESSION["player"]["id"].",".time(NULL).")");
  203. } else {
  204. $DB->Execute("UPDATE system_tb_sessions SET date=".time(NULL)." WHERE player=".$_SESSION["player"]["id"]);
  205. }
  206. $TPL->assign("user_is_admin",$_SESSION["player"]["admin"]);
  207. // updating fields
  208. $rs = $DB->Execute("SELECT * FROM system_tb_players WHERE id=".$_SESSION["player"]["id"]);
  209. $_SESSION["player"] = $rs->fields;
  210. $TPL->assign("score",$_SESSION["player"]["score"]);
  211. $rs = $DB->Execute("SELECT id FROM system_tb_players ORDER BY score DESC");
  212. $rank = 0;
  213. while(!$rs->EOF) {
  214. $rank++;
  215. if ($rs->fields["id"] == $_SESSION["player"]["id"]) break;
  216. $rs->MovENext();
  217. }
  218. $TPL->assign("rank",$rank);
  219. } else {
  220. $TPL->assign("user_is_admin",0); // false
  221. }
  222. $rs = $DB->Execute("SELECT COUNT(*) FROM system_tb_sessions");
  223. $online_players = $rs->fields[0];
  224. $rs = $DB->Execute("SELECT COUNT(*) FROM system_tb_chat_sessions");
  225. $online_chatters = $rs->fields[0];
  226. // cleanup timed out games sessions
  227. $rs = $DB->Execute("SELECT id FROM system_tb_games");
  228. if (!$rs) trigger_error($DB->ErrorMsg());
  229. $timeout_date = time(NULL) - (60*5);
  230. while(!$rs->EOF) {
  231. $DB->Execute("DELETE FROM game".$rs->fields["id"]."_tb_session WHERE lastdate <= $timeout_date");
  232. if (!$DB) trigger_error($DB->ErrorMsg());
  233. $rs->MoveNext();
  234. }
  235. $TPL->assign("online_players",$online_players);
  236. if ((isset($_SESSION["player"])) && (isset($_SESSION["player"]["id"]))) {
  237. // display connected player information
  238. $TPL->assign("user_is_connected", 1);
  239. $TPL->assign("nickname",$_SESSION["player"]["nickname"]);
  240. $TPL->assign("online_chatters",$online_chatters);
  241. // destroy empire
  242. if (isset($_GET["DESTROY_EMPIRE"])) {
  243. $_SESSION["game"] = intval($_GET["GAME"]);
  244. $game_id = $_SESSION["game"];
  245. $rs = $DB->Execute("SELECT id FROM game".$game_id."_tb_empire WHERE active < 3 AND player_id=".addslashes($_SESSION["player"]["id"]));
  246. if ($rs->EOF) {
  247. die(T_("Invalid empire ID!"));
  248. }
  249. $_SESSION["empire_id"] = $rs->fields["id"];
  250. die(header("Location: game/destroy_empire.php"));
  251. }
  252. if (isset($_GET["DELETE_MSG"])) {
  253. $id = intval($_GET["DELETE_MSG"]);
  254. $rs = $DB->Execute("SELECT * FROM system_tb_messages WHERE id='$id'");
  255. if ($rs->fields["player_id"] == $_SESSION["player"]["id"]) {
  256. $DB->Execute("DELETE FROM system_tb_messages WHERE id='$id'");
  257. }
  258. }
  259. $msgs = array();
  260. $rs = $DB->Execute("SELECT * FROM system_tb_messages WHERE player_id='".addslashes($_SESSION["player"]["id"])."'");
  261. while(!$rs->EOF) {
  262. $msgs[] = $rs->fields;
  263. $rs->MoveNext();
  264. }
  265. $TPL->assign("msgs",$msgs);
  266. } else {
  267. $TPL->assign("user_is_connected", 0);
  268. $TPL->assign("score",0);
  269. $TPL->assign("nickname","");
  270. $TPL->assign("rank",0);
  271. $TPL->assign("msgs",array());
  272. $TPL->assign("online_chatters",0);
  273. unset($_SESSION["player"]);
  274. }
  275. // this is a custom date formatter
  276. function formatTime($date)
  277. {
  278. $days = floor($date / (60*60*24));
  279. $date -= ($days * 60*60*24);
  280. $hours = str_pad(floor($date / (60*60)),2,"0",STR_PAD_LEFT);
  281. $date -= ($hours * 60*60);
  282. $minutes = str_pad(floor($date / (60)),2,"0",STR_PAD_LEFT);
  283. return $days."d ".$hours.":".$minutes;
  284. }
  285. if (isset($_SESSION["player"])) {
  286. // verify kick/ban warrants
  287. $rs = $DB->Execute("SELECT * FROM system_tb_warrant WHERE player='".addslashes($_SESSION["player"]["nickname"])."'");
  288. while(!$rs->EOF) {
  289. // you have been naughty :)
  290. switch($rs->fields["kind"]) {
  291. case "kick":
  292. $DB->Execute("DELETE FROM system_tb_chat_sessions WHERE nickname='".addslashes($_SESSION["player"]["nickname"])."'");
  293. $DB->Execute("DELETE FROM system_tb_sessions WHERE player=".$_SESSION["player"]["id"]);
  294. session_destroy();
  295. $DB->Execute("DELETE FROM system_tb_warrant WHERE id=".$rs->fields["id"]);
  296. $DB->CompleteTrans();
  297. die("<b>".T_("You have been kicked out of the game!")." (".stripslashes($rs->fields["description"]).")</b>");
  298. break;
  299. case "ban":
  300. $DB->Execute("DELETE FROM system_tb_chat_sessions WHERE nickname='".addslashes($_SESSION["player"]["nickname"])."'");
  301. $DB->Execute("DELETE FROM system_tb_sessions WHERE player=".$_SESSION["player"]["id"]);
  302. $DB->Execute("UPDATE system_tb_players SET active=0 WHERE id=".$_SESSION["player"]["id"]);
  303. session_destroy();
  304. $DB->Execute("DELETE FROM system_tb_warrant WHERE id=".$rs->fields["id"]);
  305. $DB->CompleteTrans();
  306. die("<b>".T_("You have been banned from this game (forever)")." (".stripslashes($rs->fields["description"]).")</b>");
  307. break;
  308. }
  309. $rs->MoveNext();
  310. }
  311. }
  312. ?>