PageRenderTime 49ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/includes/battle.php

https://bitbucket.org/marecki/orodlin-v.1
PHP | 555 lines | 439 code | 49 blank | 67 comment | 178 complexity | ebb5fc60c572e280d1eae30725391baf MD5 | raw file
  1. <?php
  2. /**
  3. * File functions:
  4. * Function to fight PvP
  5. *
  6. * @name : battle.php
  7. * @copyright : (C) 2006,2007 Vallheru Team based on Gamers-Fusion ver 2.5
  8. * @author : thindil <thindil@users.sourceforge.net>
  9. * @author : eyescream <tduda@users.sourceforge.net>
  10. * @author : Marek 'marq' Chodor <marek.chodor@gmail.com>
  11. * @version : 1.3
  12. * @since : 02.06.2007
  13. *
  14. */
  15. //
  16. //
  17. // This program is free software; you can redistribute it and/or modify
  18. // it under the terms of the GNU General Public License as published by
  19. // the Free Software Foundation; either version 2 of the License, or
  20. // (at your option) any later version.
  21. //
  22. // This program is distributed in the hope that it will be useful,
  23. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  24. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  25. // GNU General Public License for more details.
  26. //
  27. // You should have received a copy of the GNU General Public License
  28. // along with this program; if not, write to the Free Software
  29. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  30. //
  31. // $Id: battle.php 905 2007-02-28 21:33:05Z thindil $
  32. require_once("languages/".$player -> lang."/battle.php");
  33. function doattack(&$attacker, &$defender)
  34. {
  35. global $title;
  36. $strMessage = '';
  37. $eor = 0;
  38. $damage = $attacker -> damage;
  39. if ($attacker -> clas != 'Monster' && ($attacker -> noweapon || $attacker -> usebow)) {
  40. $damage += rand($attacker -> mindamage , $attacker -> maxdamage);
  41. }
  42. if ($attacker -> clas == 'Barbarzyńca' && $defender -> usedefspell) {
  43. $damage *= 1.5;
  44. }
  45. $damage += rand(1 , 10 * $attacker -> level);
  46. //krytyk
  47. if ($attacker -> clas != 'Monster' && $title !='Portal') {
  48. $rzut = rand(1,1000)/10;
  49. if ($rzut < $attacker -> criticalhit && !$attacker -> noweapon) {
  50. $rzut = rand(1,100);
  51. if ($rzut < 60) {
  52. $damage += 2 * $attacker -> criticalstat;
  53. }
  54. else if ($rzut < 90) {
  55. $damage += 2 * $attacker -> criticalstat + $attacker -> damage;
  56. }
  57. else if ($rzut < 100) {
  58. $damage += $defender -> defence;
  59. }
  60. else {
  61. //one final shot
  62. if ($defender -> clas == 'Monster') {
  63. $defender -> hp -= $defender -> basehp;
  64. }
  65. else {
  66. $defender -> hp = 0;
  67. }
  68. if ($attacker -> usespell) {
  69. $strMessage .= '<b>'.$attacker -> user.'</b> '.P_ATTACK.' <b>'.$defender -> user.'</b> '.AND_KILL2.' ('.$defender -> hp.' '.HP_LEFT.')<br />';
  70. }
  71. else {
  72. $strMessage .= '<b>'.$attacker -> user.'</b> '.P_ATTACK.' <b>'.$defender -> user.'</b> '.AND_KILL.' ('.$defender -> hp.' '.HP_LEFT.')<br />';
  73. }
  74. if ($attacker -> usesword) {
  75. //gain attack
  76. $attacker -> gainattack += 0.01;
  77. }
  78. else if ($attacker -> usebow) {
  79. //gain shoot
  80. $attacker -> gainshoot += 0.01;
  81. }
  82. else if ($attacker -> usespell) {
  83. //gain magic
  84. $attacker -> gainmagic += 0.01;
  85. }
  86. $eor=1;
  87. }
  88. }
  89. }
  90. //pech maga
  91. if (!$eor && $attacker -> usespell) {
  92. $rzut = rand(1,100);
  93. if ($rzut < $attacker -> misspell) {
  94. $rzut = rand(1,10);
  95. if ($rzut <= 70) {
  96. $attacker -> mana -= $attacker -> usespell;
  97. $strMessage .= '<b>'.$attacker -> user.'</b> '.YOU_MISS1.' <b>'.$attacker -> usespell.'</b> '.MANA.'.<br />';
  98. }
  99. else if ($rzut <= 90) {
  100. $attacker -> mana = 0;
  101. $strMessage .= '<b>'.$attacker -> user.'</b> '.YOU_MISS2.'.<br />';
  102. }
  103. else {
  104. //hit self
  105. $strMessage .= '<b>'.$attacker -> user.'</b> '.YOU_MISS3.' '.$attacker -> damage.' '.HP.'!<br />';
  106. $attacker -> hp -= $attacker -> damage;
  107. }
  108. $eor=1;
  109. }
  110. }
  111. if (!$eor) {
  112. //trucizny
  113. if ($attacker -> poisontype == 'D' && (!isset($defender -> antidote_d) || $defender -> antidote_d == 0)) {
  114. $damage += $attacker -> poisonpower;
  115. }
  116. if ($attacker -> poisontype == 'I' && (!isset($defender -> antidote_i) || $defender -> antidote_i == 0)) {
  117. $damage += $attacker -> poisonpower;
  118. }
  119. //opponent defence
  120. if ($defender -> actionpoints > 0) {
  121. if ($defender -> clas == 'Barbarzyńca' && $attacker -> usespell) {
  122. $damage -= $defender -> defence * 1.5;
  123. }
  124. else {
  125. $damage -= $defender -> defence;
  126. }
  127. $damage -= rand(1 , 10 * $defender -> level);
  128. }
  129. $damage = (int) $damage;
  130. if ($damage < 1) {
  131. $damage = 1;
  132. }
  133. if ($defender -> clas == 'Monster' && $damage > $defender -> basehp) {
  134. $damage = $defender -> basehp;
  135. }
  136. //hit chance
  137. $chance = 100 * $attacker -> hitmodificator / ($attacker -> hitmodificator + $defender -> missmodificator);
  138. if ($chance < 10) {
  139. $chance = 10;
  140. }
  141. if ($chance > 90) {
  142. $chance = 90;
  143. }
  144. if ($defender -> actionpoints <= 0) {
  145. $chance = 90;
  146. }
  147. $rzut = rand(1,100);
  148. if ($rzut < $chance) {
  149. //trafienie
  150. //trutka z nutari
  151. if ($attacker -> poisontype == 'N' && (!isset($defender -> antidote_n) || $defender -> antidote_n == 0)) {
  152. $defender -> mana -= $attacker -> poisonpower;
  153. }
  154. $defender -> hp -= $damage;
  155. $strMessage .= '<b>'.$attacker -> user.'</b> '.P_ATTACK.' <b>'.$defender -> user.'</b> '.B_DAMAGE.' <b>'.$damage.'</b> '.DAMAGE.'! ('.$defender -> hp.' '.LEFT.')<br />';
  156. //lost mana by defender
  157. if ($defender -> usedefspell) {
  158. $defender -> mana -= ceil( ($defender -> usedefspell / 2) + ($defender -> magic / 50) );
  159. if ($defender -> mana <= 0) {
  160. if ($defender -> usespell) {
  161. $defender -> setDamage($defender -> equipment,$defender -> spell);
  162. }
  163. $defender -> setDefence($defender -> equipment,$defender -> spell);
  164. }
  165. }
  166. //lost sword
  167. if ($attacker -> usesword) {
  168. //gain attack
  169. if ($damage > 1) $attacker -> gainattack += 0.01;
  170. $attacker -> equipment[0][6]--;
  171. $attacker -> lostequip[0]++;
  172. if ($attacker -> equipment[0][6] <= 0) {
  173. $attacker -> setDamage($attacker -> equipment,$attacker -> spell);
  174. }
  175. //wytarcie trutki
  176. if ($attacker -> poisontype && rand(1,10) == 1) {
  177. $attacker -> poisontype = '';
  178. }
  179. }
  180. if ($attacker -> usebow) {
  181. //gain shoot
  182. if ($damage > 1) $attacker -> gainshoot += 0.01;
  183. }
  184. if ($attacker -> usespell) {
  185. //gain magic
  186. if ($damage > 1) $attacker -> gainmagic += 0.01;
  187. }
  188. //lost armors
  189. $rzut = rand(1,5);
  190. if ($rzut>1 && isset($defender -> equipment) && $defender -> equipment[$rzut][6] > 0) {
  191. $defender -> equipment[$rzut][6]--;
  192. $defender -> lostequip[$rzut]++;
  193. if ($defender -> equipment[$rzut][6] <= 0) {
  194. $defender -> setDefence($defender -> equipment,$defender -> spell);
  195. }
  196. }
  197. }
  198. else {
  199. //unik
  200. $strMessage .= '<b>'.$defender -> user.'</b> '.P_DODGE.' <b>'.$attacker -> user.'</b><br />';
  201. //gain miss
  202. if ($defender -> clas != 'Monster' && $defender -> actionpoints > 0) {
  203. $defender -> gainmiss++;
  204. }
  205. //zmecznie z uniku
  206. $defender -> actionpoints -= $defender -> misscost;
  207. if (isset($_SESSION['exhaust']) && $defender -> clas != 'Monster') {
  208. $_SESSION['exhaust'] += $defender -> misscost;
  209. }
  210. }
  211. }
  212. //zmecznie z ataku
  213. $attacker -> actionpoints -= $attacker -> attcost;
  214. if (isset($_SESSION['exhaust']) && $attacker -> clas != 'Monster') {
  215. $_SESSION['exhaust'] += $attacker -> attcost;
  216. }
  217. //lost mana
  218. if ($attacker -> usespell) {
  219. $attacker -> mana -= ceil( ($attacker -> usespell / 2) + ($attacker -> magic / 50) );
  220. if ($attacker -> mana <= 0) {
  221. $attacker -> setDamage($attacker -> equipment,$attacker -> spell);
  222. }
  223. }
  224. //lost arrow
  225. if ($attacker -> usebow) {
  226. $attacker -> equipment[6][6]--;
  227. $attacker -> lostequip[6]++;
  228. $attacker -> equipment[1][6]--;
  229. $attacker -> lostequip[1]++;
  230. if ($attacker -> equipment[6][6] <= 0 || $attacker -> equipment[1][6] <= 0) {
  231. $attacker -> setDamage($attacker -> equipment,$attacker -> spell);
  232. }
  233. }
  234. return $strMessage;
  235. }
  236. /**
  237. * Function for fight player vs player
  238. * zwraca stringa z przebiegiem walki
  239. */
  240. function dofight(&$attacker, &$defender)
  241. {
  242. global $smarty;
  243. $strMessage = '';
  244. $round = 0;
  245. $repeat = floor($attacker -> attackspeed / $defender -> attackspeed);
  246. if ($repeat>5) {
  247. $repeat = 5;
  248. }
  249. while ($round<24 && $attacker -> hp > 0 && $defender -> hp > 0) {
  250. //$attacker action
  251. $opponents = 1;
  252. if ($attacker -> clas == 'Monster') {
  253. $opponents = ceil($attacker -> hp / $attacker -> basehp);
  254. }
  255. if ($opponents < 1) {
  256. $opponents = 1;
  257. }
  258. for ($i=0; $i<($repeat*$opponents) && $attacker -> hp > 0 && $defender -> hp > 0 && $attacker -> actionpoints > 0; $i++) {
  259. $strMessage .= doattack($attacker, $defender);
  260. }
  261. $opponents = 1;
  262. if ($defender -> clas == 'Monster') {
  263. $opponents = ceil($defender -> hp / $defender -> basehp);
  264. }
  265. if ($opponents < 1) {
  266. $opponents = 1;
  267. }
  268. //$defender action
  269. for ($i=0; $i<$opponents && $attacker -> hp > 0 && $defender -> hp > 0 && $defender -> actionpoints > 0; $i++) {
  270. $strMessage .= doattack($defender, $attacker);
  271. }
  272. $round++;
  273. }
  274. return $strMessage;
  275. }
  276. function pvpfight(&$attacker,&$defender)
  277. {
  278. global $db;
  279. global $player;
  280. global $smarty;
  281. global $newdate;
  282. $strMessage = '';
  283. //fight
  284. if ($defender -> attackspeed > $attacker -> attackspeed) {
  285. $strMessage .= dofight($defender, $attacker);
  286. }
  287. else {
  288. $strMessage .= dofight($attacker, $defender);
  289. }
  290. $mailMessage = '<br /><b>'.$attacker -> user.' '.VERSUS.' '.$defender -> user.'</b><br />'.$strMessage;
  291. $strMessage .= '<br /><b>'.YOU_FIGHT_WITH.' '.$defender -> user.' ';
  292. if ($attacker -> hp > 0 && $defender -> hp > 0) {
  293. $strMessage .= YOU_DRAW.'</b><br />';
  294. $mailMessage .= '<br /><b>'.L_BATTLE.'!</b>';
  295. }
  296. else if ($attacker -> hp > 0) {
  297. $strMessage .= YOU_WIN.'</b><br />';
  298. $mailMessage .= '<br /><b>'.$attacker -> user.' '.B_WIN.'!</b>';
  299. }
  300. else {
  301. $strMessage .= YOU_LOSE_WITH.'</b><br />';
  302. $mailMessage .= '<br /><b>'.$defender -> user.' '.B_WIN.'!</b>';
  303. }
  304. $smarty -> assign ('Message', $strMessage);
  305. $smarty -> display ('error1.tpl');
  306. $strMessage = '';
  307. //count gained credits and experience and loststat
  308. $lostArray = array(STRENGTH,AGILITY,INTELIGENCE,CONDITION,SPEED,WISDOM);
  309. $strMap = '';
  310. if ($attacker -> hp > 0 && $defender -> hp <= 0) {
  311. loststat($defender);
  312. $ggold = $defender -> credits / 10;
  313. $ggold = (($ggold > 0)? $ggold: 0);
  314. $attacker -> gaingold = $ggold;
  315. $defender -> gaingold = - $ggold;
  316. $attacker -> gainexp = rand(5,10) * $defender -> level;
  317. if (rand (1,20) == 20 && $defender -> maps > 0) {
  318. $attacker -> maps++;
  319. $defender -> maps--;
  320. $strMap = AND_MAP;
  321. }
  322. $strMessage .= '<br /><b>'.$attacker -> user.'</b> '.HE_GET.' <b>'.$attacker -> gainexp.'</b> '.EXPERIENCE.' <b>'.$attacker -> gaingold.'</b> '.GOLD_COINS.' '.$strMap.'<br />';
  323. }
  324. else if ($attacker -> hp <= 0 && $defender -> hp > 0) {
  325. loststat($attacker);
  326. $ggold = $attacker -> credits / 10;
  327. $ggold = (($ggold > 0)? $ggold: 0);
  328. $defender -> gaingold = (int) $ggold;
  329. $attacker -> gaingold = - (int) $ggold;
  330. $defender -> gainexp = rand(5,10) * $attacker -> level;
  331. if (rand (1,20) == 20 && $attacker -> maps > 0) {
  332. $defender -> maps++;
  333. $attacker -> maps--;
  334. $strMap = AND_MAP;
  335. }
  336. $strMessage .= '<br /><b>'.$defender -> user.'</b> '.HE_GET.' <b>'.$defender -> gainexp.'</b> '.EXPERIENCE.' <b>'.$defender -> gaingold.'</b> '.GOLD_COINS.' '.$strMap.'<br />';
  337. if ($attacker -> lost > 0) {
  338. $strMessage .= YOU_LOST.' '.$attacker -> lost.' '.$lostArray[$attacker -> loststat].'<br/>';
  339. }
  340. }
  341. //prepare for writing data to db
  342. $attacker -> hp = (($attacker -> hp >= 0)? $attacker -> hp : 0);
  343. $attacker -> mana = (($attacker -> mana >= 0)? $attacker -> mana : 0);
  344. $attacker -> unsetBless();
  345. $defender -> hp = (($defender -> hp >= 0)? $defender -> hp : 0);
  346. $defender -> mana = (($defender -> mana >= 0)? $defender -> mana : 0);
  347. $defender -> unsetBless();
  348. $strMessage .= '<br /><b>'.YOU_REWARD.':</b><br /> ';
  349. $strMessage .= gainability($attacker);
  350. gainability($defender);
  351. $strMessage .= lostitem($attacker);
  352. $strMessage .= lostring($attacker);
  353. lostitem($defender);
  354. lostring($defender);
  355. $smarty -> assign ('Message', $strMessage);
  356. $smarty -> display ('error1.tpl');
  357. //herold
  358. $strDate = $db -> DBDate($newdate);
  359. if ($attacker -> battleloga) {
  360. $strSubject = T_SUBJECT.$defender -> user.T_SUB_ID.$defender -> id;
  361. $db -> Execute("INSERT INTO `mail` (`sender`, `senderid`, `owner`, `subject`, `body`, `date`) VALUES('".T_SENDER."','0',".$attacker -> id.",'".$strSubject."','".$mailMessage."', ".$strDate.")");
  362. }
  363. if ($defender -> battlelogd) {
  364. $strSubject = T_SUBJECT.$attacker -> user.T_SUB_ID.$attacker -> id;
  365. $db -> Execute("INSERT INTO `mail` (`sender`, `senderid`, `owner`, `subject`, `body`, `date`) VALUES('".T_SENDER."','0',".$defender -> id.",'".$strSubject."','".$mailMessage."', ".$strDate.")");
  366. }
  367. //dziennik & fightlogs
  368. $query = $db -> Execute("SELECT `logs` FROM `fight_logs` WHERE `owner`=".$attacker -> id);
  369. $strLogAtt = $query -> fields['logs'];
  370. $preSqlAtt = (($strLogAtt == '') ? 'INSERT INTO `fight_logs` (`logs`,`owner`) VALUES (\'' : 'UPDATE `fight_logs` SET `logs`=\'');
  371. $midSqlAtt = (($strLogAtt == '') ? '\',' : '\' WHERE `owner`=');
  372. $postSqlAtt = (($strLogAtt == '') ? ');' : ';');
  373. $strLogAtt = (($strLogAtt == '') ? $strLogAtt : $strLogAtt.'\n');
  374. $query = $db -> Execute("SELECT `logs` FROM `fight_logs` WHERE `owner`=".$defender -> id);
  375. $strLogDef = $query -> fields['logs'];
  376. $preSqlDef = (($strLogDef == '') ? 'INSERT INTO `fight_logs` (`logs`,`owner`) VALUES (\'' : 'UPDATE `fight_logs` SET `logs`=\'');
  377. $midSqlDef = (($strLogDef == '') ? '\',' : '\' WHERE `owner`=');
  378. $postSqlDef = (($strLogDef == '') ? ');' : ';');
  379. $strLogDef = (($strLogDef == '') ? $strLogDef : $strLogDef.'\n');
  380. $strLogBase = date("y-m-d").'\t';
  381. if ($attacker -> hp > 0 && $defender -> hp > 0) {
  382. $attacktext = YOU_ATTACK_BUT.' '.L_BATTLE2.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b>';
  383. $defendtext = YOU_ATTACKED_BUT.' '.L_BATTLE2.' <b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</a></b> ';
  384. $strLogAtt .= $strLogBase.YOU_ATTACKED_PLAYER.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b> '.YOU_DRAW;
  385. $strLogDef .= $strLogBase.'<b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</b></a> '.YOU_ATTACKED_BY.' '.YOU_DRAW;
  386. }
  387. else if ($attacker -> hp > 0) {
  388. $attacktext = YOU_ATTACK_AND.' '.YOU_DEFEAT.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b> '.YOU_REWARD.' <b>'.$attacker -> gainexp.'</b> '.EXPERIENCE.' '.ORAZ.' <b>'.$attacker -> gaingold.'</b> '.GOLD_COINS;
  389. $defendtext = YOU_ATTACKED.' '.YOU_LOSE.' <b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</a></b> '.YOU_LOST.' <b>'.$attacker -> gaingold.'</b> '.GOLD_COINS;
  390. if ($defender -> lost > 0) {
  391. $defendtext .= ' '.ORAZ.' <b>'.$defender -> lost.'</b> '.$lostArray[$defender -> loststat];
  392. }
  393. $strLogAtt .= $strLogBase.YOU_ATTACKED_PLAYER.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b> '.YOU_WIN;
  394. $strLogDef .= $strLogBase.'<b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</b></a> '.YOU_ATTACKED_BY.' '.YOU_LOSE_WITH;
  395. }
  396. else {
  397. $attacktext = YOU_ATTACK_AND.' '.YOU_LOSE.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b> '.YOU_LOST.' <b>'.$defender -> gaingold.'</b> '.GOLD_COINS;
  398. if ($attacker -> lost > 0) {
  399. $attacktext .= ' '.ORAZ.' <b>'.$attacker -> lost.'</b> '.$lostArray[$attacker -> loststat];
  400. }
  401. $defendtext = YOU_ATTACKED.' '.YOU_DEFEAT.' <b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</a></b> '.YOU_REWARD.' <b>'.$defender -> gainexp.'</b> '.EXPERIENCE.' '.ORAZ.' <b>'.$defender -> gaingold.'</b> '.GOLD_COINS;
  402. $strLogAtt .= $strLogBase.YOU_ATTACKED_PLAYER.' <b><a href="view.php?view='.$defender -> id.'">'.$defender -> user.'</a></b> '.YOU_LOSE_WITH;
  403. $strLogDef .= $strLogBase.'<b><a href="view.php?view='.$attacker -> id.'">'.$attacker -> user.'</b></a> '.YOU_ATTACKED_BY.' '.YOU_WIN;
  404. }
  405. $db -> Execute($preSqlAtt.$strLogAtt.$midSqlAtt.$attacker -> id.$postSqlAtt);
  406. $db -> Execute($preSqlDef.$strLogDef.$midSqlDef.$defender -> id.$postSqlDef);
  407. $db -> Execute('INSERT INTO `log` (`owner`, `log`, `czas`) VALUES('.$attacker -> id.', \''.$attacktext.'\', '.$strDate.');');
  408. $db -> Execute('INSERT INTO `log` (`owner`, `log`, `czas`) VALUES('.$defender -> id.', \''.$defendtext.'\', '.$strDate.');');
  409. require_once('includes/checkexp.php');
  410. if ($attacker -> gainexp > 0) {
  411. checkexp ($attacker -> exp, $attacker -> gainexp, $attacker -> level, $attacker -> race, $attacker -> user, $attacker -> id, $defender -> id, $defender -> user, $attacker -> id,'',0);
  412. }
  413. else if ($defender -> gainexp > 0) {
  414. checkexp ($defender -> exp, $defender -> gainexp, $defender -> level, $defender -> race, $defender -> user, $defender -> id, $attacker -> id, $attacker -> user, $attacker -> id,'',0);
  415. }
  416. $attacker -> savetodb($defender);
  417. $defender -> savetodb($attacker);
  418. $smarty -> assign('Message','<a href="battle.php">'.BACK.'</a>');
  419. $smarty -> display('error1.tpl');
  420. }
  421. function pvmfastfight(&$attacker,&$monster,$times,$razy)
  422. {
  423. global $db;
  424. global $player;
  425. global $smarty;
  426. global $title;
  427. $strMessage = '';
  428. for ($j=1; ($j<=$times && $attacker -> hp > 0); $j++) {
  429. if ($monster -> attackspeed > $attacker -> attackspeed) {
  430. $strMessage = dofight($monster,$attacker);
  431. }
  432. else {
  433. $strMessage = dofight($attacker,$monster);
  434. }
  435. if ($attacker -> hp <= 0) {
  436. $strMessage .= '<br/>'.LOST_FIGHT_MON.'<br/>';
  437. }
  438. if($times == 1) {
  439. $strMessage .= '<br /><b>'.YOU_FIGHT_WITH.' '.$razy.' '.$monster -> user.' ';
  440. }
  441. else {
  442. $strMessage = '<br /><b>'.YOU_FIGHT_WITH.' '.$razy.' '.$monster -> user.' ';
  443. }
  444. if ($attacker -> hp > 0 && $monster -> hp > 0) {
  445. $strMessage .= YOU_DRAW.'</b><br />';
  446. }
  447. else if ($attacker -> hp > 0) {
  448. $strMessage .= YOU_WIN.'</b><br />';
  449. }
  450. else {
  451. $strMessage .= YOU_LOSE_WITH.'</b><br />';
  452. }
  453. //count gained credits and experience and loststat
  454. if ($attacker -> hp > 0 && $monster -> hp <= 0) {
  455. $attacker -> gaingold = ceil($monster -> credits * $razy);
  456. $span = ($monster -> level / $attacker -> level);
  457. $span2 = ($razy + 37) / 38;
  458. if ($span > 2) {
  459. $span = 2;
  460. }
  461. $baseexp = $span * $monster -> exp;
  462. $attacker -> gainexp = ceil($razy * $span2 * $baseexp);
  463. $strMessage .= '<br /><b>'.$attacker -> user.'</b> '.HE_GET.' <b>'.$attacker -> gainexp.'</b> '.EXPERIENCE.' '.ORAZ.' <b>'.$attacker -> gaingold.'</b> '.GOLD_COINS.'<br />';
  464. }
  465. $attacker -> unsetBless();
  466. $strMessage .= '<br /><b>'.YOU_REWARD.':</b><br /> ';
  467. $strMessage .= gainability($attacker);
  468. $strMessage .= lostring($attacker);
  469. $smarty -> assign ('Message', $strMessage);
  470. $smarty -> display ('error1.tpl');
  471. if ($attacker -> hp < 0) {
  472. $attacker -> hp = 0;
  473. }
  474. else {
  475. $attacker -> resetAll();
  476. $monster -> resetAll();
  477. }
  478. }
  479. $db -> Execute('UPDATE `players` SET `energy` = `energy` - '.(($j-1)*$razy).' WHERE `id` = '.$attacker -> id);
  480. if (($attacker -> gainexp + $attacker -> cumulateexp) > 0) {
  481. require_once('includes/checkexp.php');
  482. checkexp ($attacker -> exp, ($attacker -> gainexp + $attacker -> cumulateexp), $attacker -> level, $attacker -> race, $attacker -> user, $attacker -> id, 0, 0, $attacker -> id,'',0);
  483. }
  484. $strMessage = lostitem($attacker);
  485. $smarty -> assign ('Message', $strMessage);
  486. $smarty -> display ('error1.tpl');
  487. if ($title != 'Arena Walk') {
  488. $db -> Execute("UPDATE `players` SET `fight`=0 WHERE `id`=".$player -> id);
  489. if ($attacker -> hp <= 0) {
  490. $lostArray = array(STRENGTH,AGILITY,INTELIGENCE,CONDITION,SPEED,WISDOM);
  491. loststat($attacker);
  492. if ($attacker -> lost > 0) {
  493. $strMessage = '<br/>'.YOU_LOST.' '.$attacker -> lost.' '.$lostArray[$attacker -> loststat].'<br/>';
  494. $smarty -> assign ('Message', $strMessage);
  495. $smarty -> display ('error1.tpl');
  496. }
  497. }
  498. }
  499. $attacker -> savetodb(0);
  500. $FileName = explode('?', basename ($_SERVER['REQUEST_URI']));
  501. if ($FileName[0] != 'explore.php') {
  502. $smarty -> assign('Message','<a href="'.$FileName[0].'">'.BACK.'</a>');
  503. $smarty -> display('error1.tpl');
  504. }
  505. }
  506. ?>