Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.32 KB | None | 0 0
  1. <?php
  2.  
  3.  
  4. class Battle {
  5.  
  6. public function procSim($post) {
  7. global $form;
  8. // Recivimos el formulario y procesamos
  9. if(isset($post['a1_v']) && (isset($post['a2_v1']) || isset($post['a2_v2']) || isset($post['a2_v3']) || isset($post['a2_v4']))) {
  10. $_POST['mytribe'] = $post['a1_v'];
  11. $target = array();
  12. if(isset($post['a2_v1'])) {
  13. array_push($target,1);
  14. }
  15. if(isset($post['a2_v2'])) {
  16. array_push($target,2);
  17. }
  18. if(isset($post['a2_v3'])) {
  19. array_push($target,3);
  20. }
  21. if(isset($post['a2_v4'])) {
  22. array_push($target,4);
  23. }
  24. $_POST['target'] = $target;
  25. if(isset($post['a1_1'])) {
  26. $sum = $sum2 = 0;
  27. for($i=1;$i<=10;$i++) {
  28. $sum += $post['a1_'.$i];
  29. }
  30. if($sum > 0) {
  31. if($post['palast'] == "") {
  32. $post['palast'] = 0;
  33. }
  34. if(isset($post['wall1']) && $post['wall1'] == "") {
  35. $post['wall1'] = 0;
  36. }
  37. if(isset($post['wall2']) && $post['wall2'] == "") {
  38. $post['wall2'] = 0;
  39. }
  40. if(isset($post['wall3']) && $post['wall3'] == "") {
  41. $post['wall3'] = 0;
  42. }
  43. $post['tribe'] = $target[0];
  44. $_POST['result'] = $this->simulate($post);
  45. $form->valuearray = $post;
  46. }
  47. }
  48. }
  49. }
  50.  
  51. private function simulate($post) {
  52. // Establecemos los arrays con las unidades del atacante y defensor
  53. $attacker = array('u1'=>0,'u2'=>0,'u3'=>0,'u4'=>0,'u5'=>0,'u6'=>0,'u7'=>0,'u8'=>0,'u9'=>0,'u10'=>0,'u11'=>0,'u12'=>0,'u13'=>0,'u14'=>0,'u15'=>0,'u16'=>0,'u17'=>0,'u18'=>0,'u19'=>0,'u20'=>0,'u21'=>0,'u22'=>0,'u23'=>0,'u24'=>0,'u25'=>0,'u26'=>0,'u27'=>0,'u28'=>0,'u29'=>0,'u30'=>0,'u31'=>0,'u32'=>0,'u33'=>0,'u34'=>0,'u35'=>0,'u36'=>0,'u37'=>0,'u38'=>0,'u39'=>0,'u40'=>0,'u41'=>0,'u42'=>0,'u43'=>0,'u44'=>0,'u45'=>0,'u46'=>0,'u47'=>0,'u48'=>0,'u49'=>0,'u50'=>0);
  54. $start = ($post['a1_v'] == 1)? 1 : (($post['a1_v'] == 2)? 11 : 21);
  55. $att_ab = array('a1'=>0,'a2'=>0,'a3'=>0,'a4'=>0,'a5'=>0,'a6'=>0,'a7'=>0,'a8'=>0);
  56. $def_ab = array('b1'=>0,'b2'=>0,'b3'=>0,'b4'=>0,'b5'=>0,'b6'=>0,'b7'=>0,'b8'=>0);
  57. $index = 1;
  58. for($i=$start;$i<=($start+9);$i++) {
  59. $attacker['u'.$i] = $post['a1_'.$index];
  60. if($index <=8) {
  61. $att_ab['a'.$index] = $post['f1_'.$index];
  62. }
  63. $index += 1;
  64. }
  65. $defender = array();
  66. for($i=1;$i<=50;$i++) {
  67. if(isset($post['a2_'.$i]) && $post['a2_'.$i] != "") {
  68. $defender['u'.$i] = $post['a2_'.$i];
  69. }
  70. else {
  71. $defender['u'.$i] = 0;
  72. }
  73. }
  74. $deftribe = $post['tribe'];
  75. $wall = 0;
  76. switch($deftribe) {
  77. case 1:
  78. for($i=1;$i<=8;$i++) {
  79. $def_ab['b'.$i] = $post['f2_'.$i];
  80. }
  81. $wall = $post['wall1'];
  82. break;
  83. case 2:
  84. for($i=11;$i<=18;$i++) {
  85. $def_ab['b'.$i] = $post['f2_'.$i];
  86. }
  87. $wall = $post['wall2'];
  88. break;
  89. case 3:
  90. for($i=21;$i<=28;$i++) {
  91. $def_ab['b'.$i] = $post['f2_'.$i];
  92. }
  93. $wall = $post['wall3'];
  94. break;
  95. }
  96. if($post['kata'] == "") {
  97. $post['kata'] = 0;
  98. }
  99. return $this->calculateBattle($attacker,$defender,$wall,$post['a1_v'],$deftribe,$post['palast'],$post['ew1'],$post['ew2'],$post['ktyp'],$def_ab,$att_ab,$post['kata'],1);
  100. }
  101.  
  102.  
  103.  
  104. //1 raid 0 normal
  105. function calculateBattle($Attacker,$Defender,$def_wall,$att_tribe,$def_tribe,$residence,$attpop,$defpop,$type,$def_ab,$att_ab,$tblevel,$stonemason) {
  106. global $bid34;
  107. // Definieer de array met de eenheden
  108. $calvary = array(4,5,6,15,16,23,24,25,26);
  109. $catapult = array(8,18,28);
  110. $rams = array(7,17,27);
  111. $catp = $ram = 0;
  112. // Array om terug te keren met het resultaat van de berekening
  113. $result = array();
  114. $involve = 0;
  115. $winner = false;
  116. // bij 0 alle deelresultaten
  117. $cap = $ap = $dp = $cdp = $rap = $rdp = 0;
  118.  
  119. //
  120. // Berekenen het totaal aantal punten van Aanvaller
  121. //
  122. $start = ($att_tribe == 1)? 1 : (($att_tribe == 2)? 11: 21);
  123. $end = ($att_tribe == 1)? 10 : (($att_tribe == 2)? 20: 30);
  124. $abcount = 1;
  125.  
  126. for($i=$start;$i<=$end;$i++) {
  127. global ${'u'.$i};
  128.  
  129. if($abcount <= 8 && $att_ab['a'.$abcount] > 0) {
  130. if(in_array($i,$calvary)) {
  131. $cap += (${'u'.$i}['atk'] + (${'u'.$i}['atk'] + 300 * ${'u'.$i}['pop'] / 7) * (pow(1.007, $att_ab['a'.$abcount]) - 1)) * $Attacker['u'.$i];
  132. }
  133. else {
  134. $ap += (${'u'.$i}['atk'] + (${'u'.$i}['atk'] + 300 * ${'u'.$i}['pop'] / 7) * (pow(1.007, $att_ab['a'.$abcount]) - 1)) * $Attacker['u'.$i];
  135. }
  136. }
  137. else {
  138. if(in_array($i,$calvary)) {
  139. $cap += $Attacker['u'.$i]*${'u'.$i}['atk'];
  140. }
  141. else {
  142. $ap += $Attacker['u'.$i]*${'u'.$i}['atk'];
  143. }
  144. }
  145.  
  146.  
  147. $abcount +=1;
  148. // Punten van de catavult van de aanvaller
  149. if(in_array($i,$catapult)) {
  150. $catp += $Attacker['u'.$i];
  151. }
  152. // Punten van de Rammen van de aanvaller
  153. if(in_array($i,$rams)) {
  154. $ram += $Attacker['u'.$i];
  155. }
  156. $involve += $Attacker['u'.$i];
  157. $units['Att_unit'][$i] = $Attacker['u'.$i];
  158. }
  159.  
  160. //
  161. // Berekent het totaal aantal punten van de Defender
  162. //
  163. $start = ($def_tribe == 1)? 1 : (($def_tribe == 2)? 11: 21);
  164. $end = ($def_tribe == 1)? 10 : (($def_tribe == 2)? 20: 30);
  165. $abcount = 1;
  166. for($y=$start;$y<=$end;$y++) {
  167. global ${'u'.$y};
  168. if($y >= $start && $y <= ($end-2) && $def_ab['b'.$abcount] > 0) {
  169. $dp += (${'u'.$y}['di'] + (${'u'.$y}['di'] + 300 * ${'u'.$y}['pop'] / 7) * (pow(1.007, $def_ab['b'.$y]) - 1)) * $Defender['u'.$y];
  170. $cdp += (${'u'.$y}['dc'] + (${'u'.$y}['dc'] + 300 * ${'u'.$y}['pop'] / 7) * (pow(1.007, $def_ab['b'.$y]) - 1)) * $Defender['u'.$y];
  171. $abcount +=1;
  172. }
  173. else {
  174. $dp += $Defender['u'.$y]*${'u'.$y}['di'];
  175. $cdp += $Defender['u'.$y]*${'u'.$y}['dc'];
  176. }
  177. $involve += $Defender['u'.$y];
  178. $units['Def_unit'][$y] = $Defender['u'.$y];
  179. }
  180. //
  181. // Formule voor de berekening van de bonus verdedigingsmuur "en" Residence ";
  182. //
  183. if($def_wall > 0) {
  184. // Stel de factor berekening voor de "Muur" als het type van de beschaving
  185. // Factor = 1030 Romeinse muur
  186. // Factor = 1020 Wall Germanen
  187. // Factor = 1025 Wall Galliers
  188. $factor = ($def_tribe == 1)? 1.030 : (($def_tribe == 2)? 1.020 : 1.025);
  189. // Defense Infanterie = infanterie * Muur (%)
  190. $dp *= ($factor^$def_wall);
  191. // Defensa Cavelerie = Cavelerie * Muur (%)
  192. $cdp *= ($factor^$def_wall);
  193.  
  194. // Berekening van de Basic defence bonus "Residence"
  195. $dp += (2*$residence^2) * $factor^$def_wall;
  196. $cdp += (2*$residence^2) * $factor^$def_wall;
  197. }
  198. else {
  199. // Berekening van de Basic defence bonus "Residence"
  200. $dp += (2*$residence^2);
  201. $cdp += (2*$residence^2);
  202. }
  203.  
  204. //
  205. // Formule voor het berekenen van punten aanvallers (Infanterie & Cavalry)
  206. //
  207. $rap = $ap+$cap;
  208. //
  209. // Formule voor de berekening van Defensive Punten
  210. //
  211. $rdp = ($dp * ($ap/$rap)) + ($cdp * ($cap/$rap)) + 10;
  212. //
  213. // En de Winnaar is....:
  214. //
  215. $result['Attack_points'] = $rap;
  216. $result['Defend_points'] = $rdp;
  217.  
  218. $winner = ($rap > $rdp);
  219.  
  220. $result['Winner'] = ($winner)? "attacker" : "defender";
  221.  
  222. // Formule voor de berekening van de Moraal
  223. if($attpop > $defpop) {
  224. if ($rap < $rdp) {
  225. $moralbonus = min(1.5, pow($attpop / $defpop, (0.2*($rap/$rdp))));
  226. }
  227. else {
  228. $moralbonus = min(1.5, pow($attpop / $defpop, 0.2));
  229. }
  230. }
  231. else {
  232. $moralbonus = 1.0;
  233. }
  234.  
  235. if($involve >= 1000) {
  236. $Mfactor = round(2*(1.8592-pow($involve,0.015)),4);
  237. }
  238. else {
  239. $Mfactor = 1.5;
  240. }
  241. // Formule voor het berekenen verloren drives
  242. // $type = 1 Raid, 0 Normal
  243. if($type) {
  244. $holder = ($winner) ? pow((($rdp*$moralbonus)/$rap),$Mfactor) : pow(($rap/($rdp*$moralbonus)),$Mfactor);
  245. $holder = $holder / (1 + $holder);
  246. // Attacker
  247. $result[1] = $winner ? $holder : 1 - $holder;
  248. // Defender
  249. $result[2] = $winner ? 1 - $holder : $holder;
  250. $catp -= round($catp*$result[1]/100);
  251. }
  252. else {
  253. // Attacker
  254. $result[1] = ($winner)? pow((($rdp*$moralbonus)/$rap),$Mfactor) : 1;
  255. $result[1] = round($result[1],8);
  256. // Defender
  257. $result[2] = (!$winner)? pow(($rap/($rdp*$moralbonus)),$Mfactor) : 1;
  258. $result[2] = round($result[2],8);
  259. // Als aangevallen met "Hero"
  260. $kings = ($att_tribe == 1)? $Attacker['u9'] : (($att_tribe == 2)? $Attacker['u19']: $Attacker['u29']);
  261. $aviables= $kings-round($kings*$result[1]);
  262. if ($aviables>0){
  263. switch($aviables){
  264. case 1:
  265. $fealthy = rand(20,30);
  266. break;
  267. case 2:
  268. $fealthy = rand(40,60);
  269. break;
  270. case 3:
  271. $fealthy = rand(60,80);
  272. break;
  273. case 4:
  274. $fealthy = rand(80,100);
  275. break;
  276. default:
  277. $fealthy = 100;
  278. break;
  279. }
  280. $result['hero_fealthy'] = $fealthy;
  281. }
  282. $catp -= ($winner)? round($catp*$result[1]/100) : round($catp*$result[2]/100);
  283. }
  284. // Formule voor de berekening van katapulten nodig
  285. if($catp > 0 && $tblevel != 0) {
  286. $wctp = ($rap/$rdp)^1.5;
  287. $wctp = ($wctp >= 1)? 1-0.5/$wctp : 0.5*$wctp;
  288. $wctp *= $catp;
  289.  
  290. //$need = round((($attpop / $defpop)^0.3 * ($tblevel^2 + $tblevel + 1) / (8 * (round(200 * 1.0205^$att_ab['a8'])/200) / (1 * $bid34[$stonemason]['attri']/100))) + 0.5);
  291. $need = round((pow(($attpop / $defpop),0.3) * (pow($tblevel,2) + $tblevel + 1) / (8 * (round(200 * pow(1.0205,$att_ab['a8']))/200) / (1 * $bid34[$stonemason]['attri']/100))) + 0.5);
  292. // Aantal katapulten om het gebouw neer te halen
  293. $result[3] = $need;
  294. // Aantal Katapulten die handeling
  295. $result[4] = $wctp;
  296. }
  297.  
  298. $result[6] = pow($rap/$rdp*$moralbonus,$Mfactor);
  299.  
  300. $total_att_units = count($units['Att_unit']);
  301. $start = ($att_tribe == 1)? 1 : (($att_tribe == 2)? 11: 21);
  302. $end = ($att_tribe == 1)? 10 : (($att_tribe == 2)? 20: 30);
  303. for($i=$start;$i <= $end;$i++){
  304. if($att_tribe == 1){
  305. $y = $i;
  306. }
  307. if($att_tribe == 2){
  308. $y = $i-10;
  309. }
  310. if($att_tribe == 3){
  311. $y = $i-20;
  312. }
  313. $result['casualties_attacker'][$y] = round($result[1]*$units['Att_unit'][$i]);
  314. }
  315.  
  316. $total_def_units = count($units['Def_unit']);
  317. $start = ($def_tribe == 1)? 1 : (($def_tribe == 2)? 11: 21);
  318. $end = ($def_tribe == 1)? 10 : (($def_tribe == 2)? 20: 30);
  319. for($i=$start;$i <= $end;$i++){
  320. if($def_tribe == 1){
  321. $y = $i;
  322. }
  323. if($def_tribe == 2){
  324. $y = $i-10;
  325. }
  326. if($def_tribe == 3){
  327. $y = $i-20;
  328. }
  329. $result['casualties_defender'][$y] = round($result[2]*$units['Def_unit'][$i]);
  330. }
  331.  
  332. return $result;
  333. }
  334.  
  335.  
  336. };
  337.  
  338. $battle = new Battle;
  339. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement