Файл: battle_mobs.php
Строк: 169
<?php
include_once("settings.php");
include_once("game_header.php");
include_once("player_battle.php");
include_once("player.php");
include_once("creature.php");
include_once("thing.php");
include_once("player_thing.php");
if(!isset($mode)) $mode="";
//get current round
$round = $player->getRound();
$round++;
$player->setRound($round);
//get mobs for fight
$mob = $player->getObject();
$creature = new CCreature($db,$mob);
//get all player things
$player_things = new CPlayerThings($db,$vnum);
//get uuid player
$uuid=$player->getUuid();
$log_player = new CLogPlayers($db,$vnum,$uuid);
//check mobs alive
if($creature->mobExists()==false){
$player->setState(STATE_STAND);
header("Location: area.php");
exit();
}
switch ($mode)
{
//player try flee
case "flee":
$player->setState(STATE_STAND);
$creature->setState(STATE_STAND);
header("Location: area.php");
exit();
break;
}
//get info about round
$smarty->assign('ROUND',$round);
//get player info
$player_hp = $player->getHP();
$player_max_hp = $player->getMaxHP();
$smarty->assign('PLAYER_MAX_HP',$player_max_hp);
//get creature
$creature_name = $creature->getName();
$smarty->assign('MOB_NAME',$creature_name);
$creature_hp = $creature->getCurHP();
$creature_hp_max = $creature->getMaxHP();
$smarty->assign('MOB_HP_MAX',$creature_hp_max);
//calculate battle damage
$player_battle = new CPlayerBattle($db,$vnum);
$weapon = $player_battle->getWeaponDamage();
$ac_player = $player_battle->getAC();
$ac_mob = $creature->getAC();
//player hit mobs
//check player have 2 hand weapon
if(isset($weapon[WEAR_TWO_HAND])){
$dm=phpmud_get_d_value($weapon[WEAR_TWO_HAND][3]);
$chance_player=$weapon[WEAR_TWO_HAND][2];
$chance_cubic=rand(0,100);
if($chance_cubic<=$chance_player){
//player hit mobs
$ac_mob_cur=mt_rand(0,$ac_mob);
$dm_diff=$dm-$ac_mob_cur;
//descrease tool durability
$tool = $player_things->getWearThing(WEAR_TWO_HAND);
$player_things->decreaseDurability($tool);
if($dm_diff<1){
//armor mobs take damage on it
$msg="фПМУФБС ЫЛХТБ РТПФЙЧОЙЛБ ЧЩДЕТЦБМБ ХДБТ";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
}else{
//calculate damage
$msg="чЩ ОБОЕУМЙ ЧТБЗХ РПЧТЕЦДЕОЙК ОБ <b>$dm_diff hp</b>.";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
//update player exp
$player_battle->updateExp($weapon[WEAR_TWO_HAND][1],$dm_diff);
$creature_hp=$creature_hp-$dm_diff;
}
}else{
//player fail hit mobs
$msg="чЩ РТПНБИОХМЙУШ";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
}
}else{
$battle_msg="";
$dm_left=phpmud_get_d_value($weapon[WEAR_LEFT_HAND][3]);
$dm_right=phpmud_get_d_value($weapon[WEAR_RIGHT_HAND][3]);
$chance_player_left=$weapon[WEAR_LEFT_HAND][2];
$chance_player_right=$weapon[WEAR_RIGHT_HAND][2];
$chance_cubic_left=mt_rand(0,100);
$chance_cubic_right=mt_rand(0,100);
//check damage left hand
if($chance_cubic_left<=$chance_player_left){
//player hit mobs left hand
$ac_mob_cur=mt_rand(0,$ac_mob);
$dm_diff=$dm_left-$ac_mob_cur;
//descrease tool durability
$tool = $player_things->getWearThing(WEAR_LEFT_HAND);
$player_things->decreaseDurability($tool);
if($dm_diff<1){
//armor mobs take damage on it
$battle_msg.="чБЫ ХДБТ У МЕЧПК ТХЛЙ ПЛБЪБМУС ОБРТБУОЩН. <br><br>";
}else{
//calculate damage
$battle_msg.="чЩ ОБОЕУМЙ ЧТБЗХ РПЧТЕЦДЕОЙК ОБ <b>$dm_diff hp</b> МЕЧПК ТХЛПК. <br><br>";
//update player exp
$player_battle->updateExp($weapon[WEAR_LEFT_HAND][1],$dm_diff);
$creature_hp=$creature_hp-$dm_diff;
}
}else{
$battle_msg.="чЩ РЩФБМЙУШ ХДБТЙФШ УМЕЧБ, ОП РТПНБИОХМЙУШ. <br><br>";
}
//check damage left hand
if($chance_cubic_right<=$chance_player_right){
//player hit mobs left hand
$ac_mob_cur=mt_rand(0,$ac_mob);
$dm_diff=$dm_right-$ac_mob_cur;
//descrease tool durability
$tool = $player_things->getWearThing(WEAR_RIGHT_HAND);
$player_things->decreaseDurability($tool);
if($dm_diff<1){
//armor mobs take damage on it
$battle_msg.="чБЫ ХДБТ У РТБЧПК ТХЛЙ ПЛБЪБМУС ОБРТБУОЩН. <br><br>";
}else{
//calculate damage
$battle_msg.="чЩ ОБОЕУМЙ ЧТБЗХ РПЧТЕЦДЕОЙК ОБ <b>$dm_diff hp</b> РТБЧПК ТХЛПК. <br><br>";
//update player exp
$player_battle->updateExp($weapon[WEAR_RIGHT_HAND][1],$dm_diff);
$creature_hp=$creature_hp-$dm_diff;
}
}else{
$battle_msg.="чЩ РЩФБМЙУШ ХДБТЙФШ РТБЧБ, ОП РТПНБИОХМЙУШ. <br><br>";
}
$smarty->append("battle_msg",$battle_msg);
$log_player->addLogMsg($battle_msg,$round);
}
//check mobs dead
//player kill mobs
if($creature_hp<1){
session_register("creature_name");
//add player mob things
$thing_id = $creature->getMobThings();
//creature dead
$creature->removeMob();
//stop player battle
$player->setState(STATE_STAND);
if($thing_id!=0){
$player_things = new CPlayerThings($db,$vnum);
$player_things->addThing($thing_id);
$thing = new CThing($db,$thing_id);
$thing_name = $thing->getName();
session_register("thing_name");
}
header("location: battle_ok.php");
exit();
}else{
$creature->setCurHP($creature_hp);
}
//mobs attack
$dm_mob = $creature->getDM();
//calculate ramdomize
$ac_player_cur=mt_rand(0,$ac_player);
$chance_mob=50;
$chance_cubic=mt_rand(0,100);
if($chance_cubic<=$chance_mob){
//mobs hit player
$diff_dm=$dm_mob-$ac_player;
//damage armor player
$wear_things=$player_things->getWearThings();
//take only armor
$armor_things=array();
foreach($wear_things as $v){
$thing = new CThing($db,$v['obj_id']);
$thing_type = $thing->getType();
if($thing_type=="armor"){
$armor_things[]=$v;
}
}
$count_player_armor=count($armor_things);
if($count_player_armor>0){
//player have armor
$armor_id=mt_rand(0,$count_player_armor-1);
$armor_id=$armor_things[$armor_id]['vnum'];
//take damage armor
$player_things->decreaseDurability($armor_id);
}
if($diff_dm<1){
$msg="чТБЗ РПРЩФБМУС ХДБТЙФШ РП ЧБН, ОП ЧБЫБ ВТПОС ЧЩДЕТЦБМБ ХДБТ.";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
}else{
$msg="чТБЗ ХДБТЙМ РП ЧБН Й ОБОЕУ РПЧТЕЦДЕОЙК ОБ <b>$diff_dm hp</b>.";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
$player_hp=$player_hp-$diff_dm;
//mobs kill player
if($player_hp<1){
session_register("creature_name");
$player_hp=1;//player dead
//transform player into start room
$player->setHP($player_hp);
$player->setRoom(1);
$player->setState(STATE_STAND);
$creature->setState(STATE_STAND);
header("location: battle_fail.php");
exit();
}else{
$player->setHP($player_hp);
}
}
}else{
//mob fail hit player
$msg="чБЫ ЧТБЗ РТПНБИОХМУС.";
$smarty->append("battle_msg",$msg);
$log_player->addLogMsg($msg,$round);
}
$smarty->assign('MOB_HP',$creature_hp);
$smarty->assign('PLAYER_HP',$player_hp);
$battle_txt=$smarty->fetch($templ_path.'/battle_mobs.tpl');
$smarty->assign('MAIN',$battle_txt);
echo($smarty->fetch($templ_path.'/game.tpl'));
?>