PageRenderTime 42ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/src/2.10.5/upload/includes/pages/class.ShowTraderPage.php

https://github.com/SantiHarry/XG-Proyect-v2.10.x
PHP | 272 lines | 227 code | 33 blank | 12 comment | 28 complexity | f43c2d2eb0edcda7ca9c398e4c853241 MD5 | raw file
  1. <?php
  2. /**
  3. * @project XG Proyect
  4. * @version 2.10.x build 0000
  5. * @copyright Copyright (C) 2008 - 2012
  6. */
  7. if(!defined('INSIDE')){ die(header("location:../../"));}
  8. class ShowTraderPage
  9. {
  10. function __construct ( $CurrentUser , $CurrentPlanet )
  11. {
  12. global $lang;
  13. $parse = $lang;
  14. if($CurrentUser['darkmatter'] < TR_DARK_MATTER)
  15. {
  16. message(str_replace('%s',TR_DARK_MATTER,$lang['tr_darkmatter_needed']), '', '', TRUE);
  17. die();
  18. }
  19. if (isset($_POST['ress']) && $_POST['ress'] != '')
  20. {
  21. switch ($_POST['ress'])
  22. {
  23. case 'metal':
  24. {
  25. if ($_POST['cristal'] < 0 or $_POST['deut'] < 0)
  26. {
  27. message($lang['tr_only_positive_numbers'], "game.php?page=trader",1);
  28. }
  29. else
  30. {
  31. $necessaire = (($_POST['cristal'] * 2) + ($_POST['deut'] * 4));
  32. $amout = array ( 'metal' => 0,
  33. 'crystal' => $_POST['cristal'],
  34. 'deuterium' => $_POST['deut']
  35. );
  36. $storage = $this->check_storage ( $CurrentPlanet , $amout );
  37. if ( is_string ( $storage ) )
  38. {
  39. die ( message ( $storage , 'game.php?page=trader' , '2' ) );
  40. }
  41. if ($CurrentPlanet['metal'] > $necessaire)
  42. {
  43. $QryUpdatePlanet = "UPDATE {{table}} SET ";
  44. $QryUpdatePlanet .= "`metal` = `metal` - ".round($necessaire).", ";
  45. $QryUpdatePlanet .= "`crystal` = `crystal` + ".round($_POST['cristal']).", ";
  46. $QryUpdatePlanet .= "`deuterium` = `deuterium` + ".round($_POST['deut'])." ";
  47. $QryUpdatePlanet .= "WHERE ";
  48. $QryUpdatePlanet .= "`id` = '".$CurrentPlanet['id']."';";
  49. doquery($QryUpdatePlanet , 'planets');
  50. $planetrow['metal'] -= $necessaire;
  51. $CurrentPlanet['cristal'] += $_POST['cristal'];
  52. $CurrentPlanet['deuterium'] += $_POST['deut'];
  53. doquery("UPDATE `{{table}}` SET `darkmatter` = `darkmatter` - ".TR_DARK_MATTER." WHERE `id` = ".$CurrentUser['id']."", 'users');
  54. }
  55. else
  56. {
  57. message($lang['tr_not_enought_metal'], "game.php?page=trader",1);
  58. }
  59. }
  60. break;
  61. }
  62. case 'cristal':
  63. {
  64. if ($_POST['metal'] < 0 or $_POST['deut'] < 0)
  65. {
  66. message($lang['tr_only_positive_numbers'], "game.php?page=trader",1);
  67. }
  68. else
  69. {
  70. $necessaire = ((abs($_POST['metal']) * 0.5) + (abs($_POST['deut']) * 2));
  71. $amout = array ( 'metal' => $_POST['metal'],
  72. 'crystal' => 0,
  73. 'deuterium' => $_POST['deut']
  74. );
  75. $storage = $this->check_storage ( $CurrentPlanet , $amout );
  76. if ( is_string ( $storage ) )
  77. {
  78. die ( message ( $storage , 'game.php?page=trader' , '2' ) );
  79. }
  80. if ($CurrentPlanet['crystal'] > $necessaire)
  81. {
  82. $QryUpdatePlanet = "UPDATE {{table}} SET ";
  83. $QryUpdatePlanet .= "`metal` = `metal` + ".round($_POST['metal']).", ";
  84. $QryUpdatePlanet .= "`crystal` = `crystal` - ".round($necessaire).", ";
  85. $QryUpdatePlanet .= "`deuterium` = `deuterium` + ".round($_POST['deut'])." ";
  86. $QryUpdatePlanet .= "WHERE ";
  87. $QryUpdatePlanet .= "`id` = '".$CurrentPlanet['id']."';";
  88. doquery($QryUpdatePlanet , 'planets');
  89. $CurrentPlanet['metal'] += $_POST['metal'];
  90. $CurrentPlanet['cristal'] -= $necessaire;
  91. $CurrentPlanet['deuterium'] += $_POST['deut'];
  92. doquery("UPDATE `{{table}}` SET `darkmatter` = `darkmatter` - ".TR_DARK_MATTER." WHERE `id` = ".$CurrentUser['id']."", 'users');
  93. }
  94. else
  95. {
  96. message($lang['tr_not_enought_crystal'], "game.php?page=trader",1);
  97. }
  98. }
  99. break;
  100. }
  101. case 'deuterium':
  102. {
  103. if ($_POST['cristal'] < 0 or $_POST['metal'] < 0)
  104. {
  105. message($lang['tr_only_positive_numbers'], "game.php?page=trader",1);
  106. }
  107. else
  108. {
  109. $necessaire = ((abs($_POST['metal']) * 0.25) + (abs($_POST['cristal']) * 0.5));
  110. $amout = array ( 'metal' => $_POST['metal'],
  111. 'crystal' => $_POST['cristal'],
  112. 'deuterium' => 0
  113. );
  114. $storage = $this->check_storage ( $CurrentPlanet , $amout );
  115. if ( is_string ( $storage ) )
  116. {
  117. die ( message ( $storage , 'game.php?page=trader' , '2' ) );
  118. }
  119. if ($CurrentPlanet['deuterium'] > $necessaire)
  120. {
  121. $QryUpdatePlanet = "UPDATE {{table}} SET ";
  122. $QryUpdatePlanet .= "`metal` = `metal` + ".round($_POST['metal']).", ";
  123. $QryUpdatePlanet .= "`crystal` = `crystal` + ".round($_POST['cristal']).", ";
  124. $QryUpdatePlanet .= "`deuterium` = `deuterium` - ".round($necessaire)." ";
  125. $QryUpdatePlanet .= "WHERE ";
  126. $QryUpdatePlanet .= "`id` = '".$CurrentPlanet['id']."';";
  127. doquery($QryUpdatePlanet , 'planets');
  128. $CurrentPlanet['metal'] += $_POST['metal'];
  129. $CurrentPlanet['cristal'] += $_POST['cristal'];
  130. $CurrentPlanet['deuterium'] -= $necessaire;
  131. doquery("UPDATE `{{table}}` SET `darkmatter` = `darkmatter` - ".TR_DARK_MATTER." WHERE `id` = ".$CurrentUser['id']."", 'users');
  132. }
  133. else
  134. {
  135. message($lang['tr_not_enought_deuterium'], "game.php?page=trader",1);
  136. }
  137. }
  138. break;
  139. }
  140. }
  141. message($lang['tr_exchange_done'],"game.php?page=trader",1);
  142. }
  143. else
  144. {
  145. if ($_POST['action'] != 2)
  146. {
  147. $template = gettemplate('trader/trader_main');
  148. }
  149. else
  150. {
  151. $parse['mod_ma_res'] = '1';
  152. switch ($_POST['choix'])
  153. {
  154. case 'metal':
  155. $template = gettemplate('trader/trader_metal');
  156. $parse['mod_ma_res_a'] = '2';
  157. $parse['mod_ma_res_b'] = '4';
  158. break;
  159. case 'cristal':
  160. $template = gettemplate('trader/trader_cristal');
  161. $parse['mod_ma_res_a'] = '0.5';
  162. $parse['mod_ma_res_b'] = '2';
  163. break;
  164. case 'deut':
  165. $template = gettemplate('trader/trader_deuterium');
  166. $parse['mod_ma_res_a'] = '0.25';
  167. $parse['mod_ma_res_b'] = '0.5';
  168. break;
  169. }
  170. }
  171. }
  172. display(parsetemplate($template,$parse));
  173. }
  174. /**
  175. * method check_storage
  176. * param $current_planet
  177. * param $amount
  178. * param $force
  179. * return amount of resource production
  180. */
  181. public static function check_storage ( $current_planet , $amount , $force = NULL )
  182. {
  183. global $resource, $lang;
  184. if ( !is_array ( $amount ) )
  185. {
  186. throw new Exception ( "Must be array" , 1 );
  187. }
  188. $hangar = array ( 'metal' => 22 , 'crystal' => 23 , 'deuterium' => 24 );
  189. $check = array();
  190. foreach ( $hangar as $k => $v )
  191. {
  192. if ( $amount[$k] == 0 )
  193. {
  194. unset ( $amount[$k] );
  195. }
  196. if ( array_key_exists ( $k , $amount ) )
  197. {
  198. if ( $current_planet[$k] + $amount[$k] >= Production::max_storable ( $current_planet[$resource[$v]] ) )
  199. {
  200. $check[$k] = FALSE;
  201. }
  202. else
  203. {
  204. $check[$k] = TRUE;
  205. }
  206. }
  207. else
  208. {
  209. $check[$k] = TRUE;
  210. }
  211. }
  212. if ( $check['metal'] === true && $check['crystal'] === true && $check['deuterium'] === true )
  213. {
  214. return FALSE;
  215. }
  216. else
  217. {
  218. if ( is_null ( $force ) )
  219. {
  220. foreach ( $hangar as $k => $v )
  221. {
  222. if ( $check[$k] === false )
  223. {
  224. return sprintf ( $lang['tr_full_storage'] , strtolower ( $lang['info'][$v]['name'] ) );
  225. }
  226. else
  227. {
  228. continue;
  229. }
  230. }
  231. }
  232. else
  233. {
  234. return $check;
  235. }
  236. }
  237. }
  238. }
  239. ?>