/admin/planet_compensate.php

https://github.com/myrtus/SuperNova · PHP · 183 lines · 148 code · 33 blank · 2 comment · 21 complexity · 898f1589ff6dcaf980629fffb90af909 MD5 · raw file

  1. <?php
  2. define('INSIDE' , true);
  3. define('INSTALL' , false);
  4. define('IN_ADMIN', true);
  5. require('../common.' . substr(strrchr(__FILE__, '.'), 1));
  6. if($user['authlevel'] < 3)
  7. {
  8. AdminMessage($lang['adm_err_denied']);
  9. }
  10. $template = gettemplate('admin/planet_compensate', true);
  11. // http://localhost/admin/t.php?g=1&s=19&p=10&g1=1&s1=2&p1=8&u=gorlum&f=1.1&c=1
  12. $galaxy_src = sys_get_param_int('galaxy_src');
  13. $system_src = sys_get_param_int('system_src');
  14. $planet_src = sys_get_param_int('planet_src');
  15. $galaxy_dst = sys_get_param_int('galaxy_dst');
  16. $system_dst = sys_get_param_int('system_dst');
  17. $planet_dst = sys_get_param_int('planet_dst');
  18. $bonus = sys_get_param_float('bonus', 1);
  19. $username = sys_get_param_escaped('username');
  20. if($galaxy_src)
  21. {
  22. $errors = array();
  23. $owner = doquery("SELECT * FROM {{users}} WHERE username like '{$username}'", '', true);
  24. $planet = sys_o_get_updated($owner, array('galaxy' => $galaxy_src, 'system' => $system_src, 'planet' => $planet_src, 'planet_type' => 1), time());
  25. $que = $planet['que'];
  26. $planet = $planet['planet'];
  27. if(!$planet)
  28. {
  29. $errors[] = $lang['adm_pl_comp_err_0'];
  30. }
  31. if($planet['destruyed'])
  32. {
  33. $errors[] = $lang['adm_pl_comp_err_1'];
  34. }
  35. if($planet['id_owner'] != $owner['id'] || !$username)
  36. {
  37. $errors[] = $lang['adm_pl_comp_err_4'];
  38. }
  39. $destination = sys_o_get_updated($owner, array('galaxy' => $galaxy_dst, 'system' => $system_dst, 'planet' => $planet_dst, 'planet_type' => 1), time());
  40. $destination = $destination['planet'];
  41. if(!$destination)
  42. {
  43. $errors[] = $lang['adm_pl_comp_err_2'];
  44. }
  45. if($planet['id'] == $destination['id'])
  46. {
  47. $errors[] = $lang['adm_pl_comp_err_5'];
  48. }
  49. if($planet['id_owner'] != $destination['id_owner'])
  50. {
  51. $errors[] = $lang['adm_pl_comp_err_3'];
  52. }
  53. if(!empty($errors))
  54. {
  55. foreach($errors as $error)
  56. {
  57. $template->assign_block_vars('error', array(
  58. 'TEXT' => $error,
  59. ));
  60. }
  61. }
  62. else
  63. {
  64. $template->assign_var('CHECK', 1);
  65. killer_add_planet($planet);
  66. $moon = doquery("SELECT * FROM {{planets}} WHERE galaxy = '{$galaxy_src}' AND system = '{$system_src}' AND planet = '{$planet_src}' AND planet_type = 3;", '', true);
  67. if($moon)
  68. {
  69. $moon = sys_o_get_updated($owner, $moon, time());
  70. $moon = $moon['planet'];
  71. killer_add_planet($moon);
  72. }
  73. foreach($sn_data['groups']['resources_loot'] as $resource_id)
  74. {
  75. $resource_name = $sn_data[$resource_id]['name'];
  76. $template->assign_var("{$resource_name}_cost", $final_cost[$resource_id]);
  77. $final_cost[$resource_id] = floor($final_cost[$resource_id] * $bonus);
  78. $template->assign_var("{$resource_name}_bonus", $final_cost[$resource_id]);
  79. }
  80. if($_GET['btn_confirm'])
  81. {
  82. doquery("UPDATE {{planets}} SET metal = metal + '{$final_cost[RES_METAL]}', crystal = crystal + '{$final_cost[RES_CRYSTAL]}', deuterium = deuterium + '{$final_cost[RES_DEUTERIUM]}' WHERE id = {$destination['id']};");
  83. $time = time() + 24 * 60 * 60;
  84. doquery("UPDATE {{planets}} SET id_owner = 0, destruyed = '{$time}' WHERE id = {$planet['id']};");
  85. if($moon)
  86. {
  87. doquery("UPDATE {{planets}} SET id_owner = 0, destruyed = '{$time}' WHERE id = {$moon['id']};");
  88. }
  89. $template->assign_var('CHECK', 2);
  90. }
  91. }
  92. }
  93. $template->assign_vars(array(
  94. 'galaxy_src' => $galaxy_src,
  95. 'system_src' => $system_src,
  96. 'planet_src' => $planet_src,
  97. 'galaxy_dst' => $galaxy_dst,
  98. 'system_dst' => $system_dst,
  99. 'planet_dst' => $planet_dst,
  100. 'bonus' => $bonus,
  101. 'username' => $username,
  102. ));
  103. display(parsetemplate($template, $parse), $lang['adm_pl_comp_title'], false, '', true );
  104. function killer_add_planet($planet)
  105. {
  106. global $sn_data, $final_cost;
  107. $sn_groups = &$sn_data['groups'];
  108. foreach($sn_groups['build'] as $unit)
  109. {
  110. $build_level = $planet[$sn_data[$unit]['name']];
  111. if($build_level > 0)
  112. {
  113. $factor = $sn_data[$unit]['factor'];
  114. foreach($sn_groups['resources_loot'] as $resource_id)
  115. {
  116. $base_price = $sn_data[$unit][$sn_data[$resource_id]['name']];
  117. if($base_price > 0)
  118. {
  119. if($factor != 1)
  120. {
  121. $build_factor = (1 - pow($factor, $build_level)) / (1 - $factor);
  122. }
  123. else
  124. {
  125. $build_factor = $factor;
  126. }
  127. $building_cost = floor($base_price * $build_factor);
  128. $final_cost[$resource_id] += $building_cost;
  129. //pdump(pretty_number($building_cost), "{$unit}, {$resource_id}, {$base_price}");
  130. }
  131. }
  132. }
  133. }
  134. foreach(array_merge($sn_groups['defense'], $sn_groups['fleet']) as $unit)
  135. {
  136. $unit_count = $planet[$sn_data[$unit]['name']];
  137. if($unit_count)
  138. {
  139. foreach($sn_groups['resources_loot'] as $resource_id)
  140. {
  141. $final_cost[$resource_id] += floor($sn_data[$unit][$sn_data[$resource_id]['name']] * $unit_count);
  142. }
  143. }
  144. }
  145. foreach($sn_groups['resources_loot'] as $resource_id)
  146. {
  147. $final_cost[$resource_id] += floor($planet[$sn_data[$resource_id]['name']]);
  148. }
  149. }
  150. ?>