<?
session_set_cookie_params(180000, "/");
session_start();

$_db_inc_ = true;
include("cfg.php");

$save_msg_time = time();

if(!isset($_SESSION['LineageLogin']) or !isset($_SESSION['LineagePassword'])) 
{
	header("Location: ././login.php?err=2");
	exit;
}

$login = $_SESSION['LineageLogin'];
$password = $_SESSION['LineagePassword'];
$login_result = mysql_query("SELECT * FROM `user` WHERE `login`='$login' AND `password`='".$password."' AND `type`='p'");

if(!mysql_error() && @mysql_num_rows($login_result) != 1) 
{ 
	header("Location: ././login.php?err=5");
	exit; 
}
else 
{
	echo mysql_error();
}

setcookie('LineageLogin', $login, time()+1800); 
setcookie('LineagePassword', $password, time()+1800); 
$user = mysql_fetch_assoc($login_result);


if(isset($_POST['chat_msg'])) 
{
	SaveMsg($user['id'], 'c', "<b>{$user['name']}</b>: ".htmlspecialchars($_POST['chat_msg']));
}

/* user list */
$userlist_result = mysql_query("SELECT `id` FROM `user`");
$reg_users_count = @mysql_num_rows($userlist_result);
if(!$reg_users_count) $reg_users_count = 0;
$userlist_result = mysql_query("SELECT * FROM `user` WHERE `id`<>{$user['id']} AND ((".time()."-`last_update` < 300) OR `type`='m') ORDER BY `level`, `hp`");
echo mysql_error();
$online_users_count = @mysql_num_rows($userlist_result);
if(!$online_users_count) $online_users_count = 0;
$userlist = array();
$i = 0;
while($userlist[$i] = mysql_fetch_assoc($userlist_result)) 
{
	if($userlist[$i]['id'] == $user['quest']) $user['quest_name'] = $userlist[$i]['name'];
	$i++;
}

/* battle */
$battle_bool = false;

/* message delete */
mysql_query("DELETE FROM `msg` WHERE (".time()."-`date` > 240 AND `type`='b') OR (".time()."-`date` > 480 AND `type`='e') OR (".time()."-`date` > 1200)");
echo mysql_error();

/* battle delete */
mysql_query("DELETE FROM `battle` WHERE (".time()."-`date` > 600)");
echo mysql_error();
if($user['hp'] == 0) 
{
	mysql_query("DELETE FROM `battle` WHERE `user_id`={$user['id']}");
}
else
{	/* actions */
	if(!isset($_GET['action'])) $action = 'none'; else $action = $_GET['action'];
	switch($action) 
	{
		case 'battle_begin':
  		$enemy_id = $_GET['enemy'];
  		$res = mysql_query("SELECT `id` FROM `battle` WHERE `user_id`={$user['id']}");
  		if(!mysql_error() && @mysql_num_rows($res) < 1) 
		{
				$res = mysql_query("SELECT `id` FROM `battle` WHERE `user_id`={$enemy_id} AND `enemy_id`<>{$user['id']}");
				if(!mysql_error() && @mysql_num_rows($res) < 1) 
			{
				$enemy_result = mysql_query("SELECT * FROM `user` WHERE `id`={$enemy_id}");
				if(!mysql_error() && @mysql_num_rows($enemy_result) > 0) 
				{ 
					$enemy = mysql_fetch_assoc($enemy_result);
					mysql_query("INSERT INTO `battle` (`user_id`, `enemy_id`, `date`) VALUES ({$user['id']}, {$enemy_id}, ".(time() - $BATTLE_SECOND / 2).")");
					if($enemy['type'] == 'm') 
					{
						mysql_query("INSERT INTO `battle` (`user_id`, `enemy_id`, `date`) VALUES ({$enemy_id}, {$user['id']}, ".(time() - $BATTLE_SECOND / 2).")");
					}
					if(mysql_error()) echo "#1. ".mysql_error();
					$battle_bool = true;
					mysql_query("UPDATE `user` SET `last_update`=".time()." WHERE `id`={$user['id']} LIMIT 1");
				}
				else 
				{
					echo mysql_error();
				}
			}
			else 
			{
				echo mysql_error();
			}
		} 
		else 
		{
			echo mysql_error();
		}
		break;
	}
}

$time_delta = 0;
$res = mysql_query("SELECT * FROM `battle` WHERE `user_id`={$user['id']}");
if(!mysql_error() && @mysql_num_rows($res) > 0) 
{
		$battle = mysql_fetch_assoc($res);
		$enemy_id = $battle['enemy_id'];
		$time_delta = time() - $battle['date'];
	$res = mysql_query("SELECT `id` FROM `battle` WHERE `user_id`={$enemy_id} AND `enemy_id`<>{$user['id']}");
	if(!mysql_error() && @mysql_num_rows($res) < 1) 
	{
		$enemy_result = mysql_query("SELECT * FROM `user` WHERE `id`={$enemy_id}");
			if(!mysql_error() && @mysql_num_rows($enemy_result) == 1) 
		{
			$enemy = mysql_fetch_assoc($enemy_result);
        	if($enemy['hp'] > 0) 
			{
     	      $battle_bool = true;
				if($time_delta >= $BATTLE_SECOND) 
				{
					if(isset($_POST['battle_submit'])) 
					{
						$time_delta = 0;
						mysql_query("UPDATE `battle` SET `date`=".time()." WHERE `user_id`={$user['id']}");
						if($enemy['type'] == 'm') 
						{
							mysql_query("UPDATE `battle` SET `date`=".time()." WHERE `user_id`={$user['id']}");
						}
						BattleEvents(&$user, &$enemy);
						Battle($user, $enemy);
						if($enemy['type'] == 'm' AND $enemy['hp'] > 0) 
						{
							BattleEvents(&$enemy, &$user);
							Battle(&$enemy, &$user);
						}
						if($enemy['type'] == 'm' AND $enemy['hp'] <= 0) 
						{
							$e_exp = 10000;
							if(rand(0, 10) < 2) $e_exp = 37000;
							else if(rand(0, 10) < 5) $e_exp = 97000;
							$e_exp = rand(0, $e_exp);
							$e_level = GetLevel($e_exp);
							$e_hp = GetHP($e_level);
							mysql_query("UPDATE `user` SET `name`='".GenName(3, 5)."', `exp`=$e_exp, `level`=$e_level, `hp`=$e_hp, `weapon`='".GetWeapon()."', `battle_count`=0, `victory_count`=0 WHERE `id`={$enemy['id']} LIMIT 1");
							echo mysql_error();
						}
						if($user['hp'] <= 0 OR $enemy['hp'] <= 0) 
						{
							$battle_bool = false;
							mysql_query("DELETE FROM `battle` WHERE `user_id`={$enemy['id']} OR `user_id`={$user['id']} OR `enemy_id`={$enemy['id']} OR `enemy_id`={$user['id']}");
							echo mysql_error();
							if($user['quest'] == 0) QuestEvent(&$user);
						}	
					}
        		}
    		}
		else
			{
				$battle_bool = false;
			}
        }
			else
		{
        	echo mysql_error();
		}
	}
else 
	{
    	echo mysql_error();
	}	
}
	else if(mysql_error()) 
{
	echo mysql_error();
}
else 
{
	$r_hp = rand(0, (time() - $user['last_update']) / $LIFE_KOEF);
	if($r_hp > GetHP($user['level']) - $user['hp']) $r_hp = GetHP($user['level']) - $user['hp'];
	if($r_hp > 0 AND $user['hp'] < GetHP($user['level'])) 
	{
		$fast_msg = "Восстановлено <b><font color=red>{$r_hp}</font></b> жизней.";
		$user['hp'] += $r_hp;
		mysql_query("UPDATE `user` SET `hp`={$user['hp']}, `last_update`=".time()." WHERE `id`={$user['id']} LIMIT 1");
	}
}

/* user list continue */
$i = 0;
while($userlist[$i]) 
{
	$res = mysql_query("SELECT `id` FROM `battle` WHERE `user_id`={$userlist[$i]['id']} AND `enemy_id`<>{$user['id']}");
	$userlist[$i]['battle'] = false;
	if(!mysql_error() && @mysql_num_rows($res) > 0) 
	{
		$userlist[$i]['battle'] = true;
	}
	else 
	{
		echo mysql_error();
	}
	$i++;
}

/* events */
if(rand(0, $EVENT_KOEF * sizeof($userlist)) < 10) 
{
	$rnd_msg = GetEvent();
	SaveMsg($user['id'], 'e', "<i>$rnd_msg</i>");
}

/* msg */
$msg_result = mysql_query("SELECT * FROM `msg` WHERE ((`type`='b' OR `type`='e') AND `user_id`={$user['id']}) OR (`type`='c') ORDER BY `date` DESC");
$i = 0;
$msg = array();
while($msg_data = mysql_fetch_assoc($msg_result)) 
{
	$msg[$i] = $msg_data;
	$i++;
	if($i > $MESSAGE_COUNT) break;
}

echo $roboverh;

/* Процесс атаки */
function BattleEvents(&$user, &$enemy) 
{
	global $WEAPON_EVENT_KOEF;
	$rnd = rand(0, $WEAPON_EVENT_KOEF);
	if($rnd < 10) 
	{
	$rnd = rand(0, 6);
	switch($rnd) 
		{
			case 0: /* уронили оружие */
			if($user['weapon'] != '') 
			{
				SaveMsg($user['id'], 'e', "<i><font color=blue>Вы потеряли</font> <b>{$user['weapon']}.</b></i>");
				$user['weapon'] = '';
			}
			break;
			case 1: /* нашли оружие */
			if($user['weapon'] == '') 
			{
				$user['weapon'] = GetWeapon();
				SaveMsg($user['id'], 'e', "<i><font color=blue>Вы подобрали</font> <b>{$user['weapon']}.</b></i>");
			}
			break;
			case 2: /* выбили у противника оружие */
			if($enemy['weapon'] != '') 
			{
				$enemy['weapon'] = '';
				SaveMsg($user['id'], 'e', "<i>Вы выбили оружие у противника.</i>");
				if($enemy['type'] != 'm') SaveMsg($enemy['id'], 'e', "<i>Противник выбил оружие у вас.</i>");
			}
			break;
			case 3: /* противник выбивает оружие */
			if($user['weapon'] != '') 
			{
				$user['weapon'] = '';
				SaveMsg($user['id'], 'e', "<i>Противник выбил оружие у вас.</i>");
				if($enemy['type'] != 'm') SaveMsg($enemy['id'], 'e', "<i>Вы выбили оружие у противника.</i>");
			}
			break;
			case 4: /* таинственные превращения */
			if($user['weapon'] != '') 
			{
				$weapon = GetWeapon();
				SaveMsg($user['id'], 'e', "<i> <b>{$user['weapon']}</b> исчезает.<br> <font color=blue>Вы подобрали</font><b>{$weapon}</b>.</i>");
				$user['weapon'] = $weapon;
			}
			break;
			case 5: /* вырвать из рук противника */
			if($user['weapon'] == '' AND $enemy['weapon'] != '') 
			{
				$user['weapon'] = $enemy['weapon'];
				$enemy['weapon'] = '';
				SaveMsg($user['id'], 'b', "<i><b>{$enemy['name']}</b> нанес критически удар, и выбил оружие из рук.</i>");
				if($enemy['type'] != 'm') SaveMsg($enemy['id'], 'b', "<i><b>{$user['name']}</b> нанес критически удар, и выбил оружие из рук.</i>");
			}
			break;
			case 6: /* повредил себя */
			if($user['weapon'] != '') 
			{
				$hit = rand(1, 25);
				SaveMsg($user['id'], 'c', "<i>Размахивая своим оружием почём зря <b>{$user['name']}</b> случайно ударил себя и нанёс <b>{$hit}</b> урона.</i>");
				$user['hp'] -= $hit;
				if($user['hp'] <= 0) 
				{
					$user['hp'] = 0;
					if($user['type'] != 'm') SaveMsg($user['id'], 'b', "<i>Небесная концелярия зафиксировала акт суицида. Это самопожертвование зачтётся вам, когда будут подсчитывать вашу карму.</i>");
				}
			}
      break;
		}
	}
}

/* Оружие */
function GetWeapon() 
{
$rnd = rand(0, 15);
	switch($rnd) 
	{
		case  0: return '<img src=img/textures/weapon/0.png></img>';
		case  1: return '<img src=img/textures/weapon/1.png></img>';
		case  2: return '<img src=img/textures/weapon/2.png></img>';
		case  3: return '<img src=img/textures/weapon/3.png></img>';
		case  4: return '<img src=img/textures/weapon/4.png></img>';
		case  5: return '<img src=img/textures/weapon/5.png></img>';
		case  6: return '<img src=img/textures/weapon/6.png></img>';
		case  7: return '<img src=img/textures/weapon/7.png></img>';
		case  8: return '<img src=img/textures/weapon/8.png></img>';
		case  9: return '<img src=img/textures/weapon/9.png></img>';
		case 10: return '<img src=img/textures/weapon/10.png></img>';
		case 11: return '<img src=img/textures/weapon/11.png></img>';
		case 12: return '<img src=img/textures/weapon/12.png></img>';
		case 13: return '<img src=img/textures/weapon/13.png></img>';
		case 14: return '<img src=img/textures/weapon/14.png></img>';
		case 15: return '<img src=img/textures/weapon/15.png></img>';
	}
return $rnd;
}

/* даём квест */
function QuestEvent(&$user) 
{
global $online_users_count, $userlist;
	$rnd = rand(0, 10);
if($rnd < 2) 
	{
	$eid = rand(0, $online_users_count - 1);
	mysql_query("UPDATE `user` SET `quest`={$userlist[$eid]['id']} WHERE `id`={$user['id']} LIMIT 1");
		SaveMsg($user['id'], 'e', "<i><font color=cc7722>Начался ивент.<br> вы должны убить<b>{$userlist[$eid]['name']}</b> и вы получите в двое больше опыта.</font> </i>");
	}
}

/* Событие */
function GetEvent() 
{
$rnd = rand(0, 14);
	switch($rnd) 
	{
		case  0: return "Вы услышали жуткий вой, доносившийся со стороны кладбища.";
		case  1: return "Луна осветила человеческие кости под ногами.";
		case  2: return "Луну заволокло тучами и стало совсем темно.";
		case  3: return "Мимо пробежала собака без уха и одной ноги, вся заляпанная кровью.";
		case  4: return "Ветер зловеще пошевелил мёртвые деревья завывая в ветках свои загробные псалмы.";
		case  5: return "Земля над одной из могил дрогнула и осыпалась. В проломе вы увидели мёртвую человеческую плоть, покрытую червями.";
		case  6: return "Мимо проскользнула еле заметная тень.";
		case  7: return "Кто-то истошно закричал вдалеке.";
		case  8: return "Под ногой хрустнул череп.";
		case  9: return "Неподалёку противно пискнула крыса.";
		case 10: return "Дикий хохот огласил небеса.";
		case 11: return "Сверкнула молния.";
		case 12: return "Неожиданно начался ливень.";
		case 13: return "Вы наступили в зловонную жижу.";
		case 14: return "Вы почувствовали резкий запах гнилой плоти.";
	}
return $rnd;
}

/* Выбор класса */
function GetClassName($class) 
{
	switch($class) 
	{
		case 'a': return '<img src=img/textures/class/warior.png></img> Воин';
		case 'b': return '<img src=img/textures/class/magic.png></img> Маг';
	}
}

/* Выбор расы */
function GetRaceName($race) 
{
	switch($race) 
	{
		case 'human': return '<img src=img/textures/race/human.png></img> Человек';
		case 'elf': return '<img src=img/textures/race/elf.png></img> Св.Эльф';
		case 'darkelf': return '<img src=img/textures/race/darkelf.png></img> Тёмн.Эльф';
		case 'orc': return '<img src=img/textures/race/orc.png></img> Орк';
		case 'dwarf': return '<img src=img/textures/race/dwarf.png></img> Гном';
	}
}

/* Выбор пола */
function GetSexName($sex) 
{
	switch($sex) 
	{
		case 'male': return '<img src=img/textures/sex/male.png></img> Парень';
		case 'female': return '<img src=img/textures/sex/female.png></img> Девушка';
	}
}

function GetDamage($rnd, $user_rnd, $enemy_rnd) 
{
	$r1 = (int)(abs($rnd - $user_rnd) / 2);
	$r2 = abs($rnd - $enemy_rnd);
	if($r1 < $r2) 
	{
		return ($r2 - $r1);
	}
	return 0;
}

function GetBody() 
{
$rnd = rand(0, 10);
	switch($rnd) 
	{
		case  0: return " ";
		case  1: return " ";
		case  2: return " ";
		case  3: return " ";
		case  4: return " ";
		case  5: return " ";
		case  6: return " ";
		case  7: return " ";
		case  8: return " ";
		case  9: return " ";
		case 10: return " ";
	}
	return $rnd;
}

function GetLevel($exp) 
{	
	$level = 0;
		if($exp > 1000) $level = 1;
		if($exp > 3000) $level = 2;
		if($exp > 6000) $level = 3;
		if($exp > 10000) $level = 4;
		if($exp > 15000) $level = 5;
		if($exp > 21000) $level = 6;
		if($exp > 29000) $level = 7;
		if($exp > 37000) $level = 8;
		if($exp > 46000) $level = 9;
		if($exp > 56000) $level = 10;
		if($exp > 67000) $level = 11;
		if($exp > 97000) $level = 12;
		if($exp > 150000) $level = 13;
	return $level;
}

function GetHP($level) 
{
if($level == 13) return 666;
return 100 + $level * 30;
}

function Battle(&$user, &$enemy) 
{
	$rnd = rand(0, 99);
		$user_rnd = rand(0, 99);
		$enemy_rnd = rand(0, 99);
		$damage = GetDamage($rnd, $user_rnd, $enemy_rnd);
			$body = GetBody();
	if($damage > 0) 
	{
	if($user['weapon'] != '') $damage += rand(1, 25);
    $exp = $enemy['level'] - $user['level'];
    if($exp < 0) $exp = 0;
		$exp = (int)(($damage / 5) * ($exp + 1));
		if($exp <= 0) $exp = 1;
		$user['exp'] += $exp;
		if($user['type'] != 'm') SaveMsg($user['id'], 'b', "<font color=00ff00>Вы ударили <b>{$enemy['name']}</b> ".$body." и нанесли <b>{$damage}</b> урона. Получено <b>$exp</b> опыта.</font>");
		if($enemy['type'] != 'm') 
		{
		if($user['type'] == 'm')
		SaveMsg($enemy['id'], 'b', "<font color=red><b>{$user['name']}</b> ударил вас ".$body." и нанёс <b>{$damage}</b> урона.</font>");
		else
		SaveMsg($enemy['id'], 'b', "<a href=\"l2.php?action=battle_begin&enemy={$user['id']}\">{$user['name']}</a> ударил вас ".$body." и нанёс <b>{$damage}</b> урона.");
		}
	$enemy['hp'] -= $damage;
	if($enemy['hp'] <= 0) 
		{
  		$enemy['hp'] = 0;
 
		$exp = $enemy['level'] - $user['level'];
		if($exp < 0) $exp = 0;
		$exp = ($exp + 1) * 100;
  		if($user['type'] != 'm') SaveMsg($user['id'], 'b', "<font color=ffdb58><b>{$enemy['name']}</b> умер. Получено <b>$exp</b> опыта.</font>");

		if($enemy['type'] != 'm') 
			{
			$enemy['exp'] = (int)($enemy['exp'] * 0.95);
			$enemy['level'] = GetLevel($enemy['exp']);
			SaveMsg($enemy['id'], 'b', "<font color=red>Вы погибли, в следующий раз повезет больше.</font>");
			}
      
  		$user['exp'] += $exp;
  		if($user['quest'] == $enemy['id']) 
			{
			$exp = 500;
			SaveMsg($user['id'], 'b', "<font color=21cc84>Квест завершен. Получено <b>$exp</b> опыта.</font>");
			$user['exp'] += $exp;
			$user['quest'] = 0;
			}
		}
	$level = GetLevel($user['exp']);
	if($level > $user['level']) 
		{
		$user['hp'] = GetHP($level);
		if($user['type'] != 'm') SaveMsg($user['id'], 'b', "<font color=21cc84>Поздравляем, вы получили <b>$level</b> уровень.</font>");
		}
  	$user['level'] = $level;

	if($user['hp'] <= 0) 
		{
		$enemy['victory_count']++;
		}
    if($enemy['hp'] <= 0) 
		{
		$user['victory_count']++;
		}
    if($user['hp'] <= 0 OR $enemy['hp'] <= 0) 
		{
		$user['battle_count']++;
		$enemy['battle_count']++;
		}
	}
	else 
	{
	if($user['type'] != 'm') SaveMsg($user['id'], 'b', "Вы попытались ударить <b>{$enemy['name']}</b> ".$body.", но промахнулись.");
	if($enemy['type'] != 'm') 
		{
		if($user['type'] == 'm')
			SaveMsg($enemy['id'], 'b', "<b>{$user['name']}</b> попытался ударить вас ".$body.", но промахнулся.");
		else
			SaveMsg($enemy['id'], 'b', "<a href=\"l2.php?action=battle&enemy={$user['id']}\">{$user['name']}</a> попытался ударить вас ".$body.", но промахнулся.");
		}
	}
mysql_query("UPDATE `user` SET `hp`={$user['hp']}, `exp`={$user['exp']}, `level`={$user['level']}, `weapon`='{$user['weapon']}', `quest`={$user['quest']}, `last_update`=".time().", `battle_count`={$user['battle_count']}, `victory_count`={$user['victory_count']} WHERE `id`={$user['id']} LIMIT 1");
	echo mysql_error();
mysql_query("UPDATE `user` SET `hp`={$enemy['hp']}, `exp`={$enemy['exp']}, `level`={$enemy['level']}, `weapon`='{$enemy['weapon']}', `last_update`=".time().", `battle_count`={$enemy['battle_count']}, `victory_count`={$enemy['victory_count']} WHERE `id`={$enemy['id']} LIMIT 1");
	echo mysql_error();
}

/* Отоброжение событий */
function SaveMsg($id, $type, $msg) 
{
  global $save_msg_time;
  $save_msg_time++;
	mysql_query("INSERT INTO `msg` (`type`, `user_id`, `date`, `message`) VALUES ('{$type}', '{$id}', '{$save_msg_time}', '{$msg}')");
  if(mysql_error()) echo "#3. ".mysql_error();
}

/* Игровые монстры */
function GenName($i0, $i1) 
{
$name = '';
	switch(rand(0, 9)) 
	{
		case 0: $name = "<img src=img/textures/npc/Hare.png></img> Hare"; 
		break;
		case 1: $name = "<img src=img/textures/npc/Wolf.png></img> Wolf"; 
		break;
		case 2: $name = "<img src=img/textures/npc/Imp.png></img> Imp"; 
		break;
		case 3: $name = "<img src=img/textures/npc/Zombie.png></img> Zombie"; 
		break;
		case 4: $name = "<img src=img/textures/npc/Golem.png></img> Golem"; 
		break;
		case 5: $name = "<img src=img/textures/npc/Orc.png></img> Orc"; 
		break;
		case 6: $name = "<img src=img/textures/npc/Wyvern.png></img> Wyvern"; 
		break;
		case 7: $name = "<img src=img/textures/npc/Grandis.png></img> Grandis"; 
		break;
		case 8: $name = "<img src=img/textures/npc/Wave.png></img> Wave"; 
		break;
		case 9: $name = "<img src=img/textures/npc/Karik.png></img> Karik"; 
		break;
	}
return $name;
}
?>