<?
$afile=file_get_contents("data/ataka.dat");
$like=date("d/m/y H:i:s");
	if ((substr($fromid,0,5)!='user.' && substr($fromid,0,4)!='npc.') || (substr($toid,0,5)!='user.' && substr($toid,0,4)!='npc.')) return;	// только игроки и нпс
	$from=&$game["loc"][$loc][$fromid];
	if (!$from || $from["ghost"]) return;
	//проверим время отдыха (кроме когда отвечаем)
	if (!$answer && time()<=$from["time_speed"]) return;
	if ($magic) $fromwar=split("\|",$magic); else $fromwar=split("\|",$from["war"]);
	if ($answer) $from["time_speed"]=time()+$fromwar[3];	// время для отдыха
	$hit=$fromwar[0];
	$b=0;
	$loc1=split("\|",$locations[$loc]);
	if (!isset($game["loc"][$loc][$toid]) && $fromwar[4]) {	// если ranged и не магией, то ищем в соседних локациях
		for ($i=3;$i<count($loc1);$i+=2) if (isset($game["loc"][$loc1[$i]][$toid])) {$b=1; $to=&$game["loc"][$loc1[$i]][$toid]; $hit-=10; if ($hit<0) $hit=0; break;}	//нашли, штраф к меткости
		}
	if (!$b && !isset($game["loc"][$loc][$toid])) {addjournal($fromid,"Цель недоступна"); return;}
	$to=&$game["loc"][$loc][$toid];
	if ($to["ghost"]) return;
	$towar=split("\|",$to["war"]);

if ($magic) {
	$uklon 	= $towar[9];	// вероятность уклониться 0..100%
	$parring 	= $towar[10];	// вероятность уменьшить урон на $shield
	$shield	= $towar[11];
	} else {
		$uklon 	= $towar[6];
		$parring 	= $towar[7];
		$shield	= $towar[8];
		}

	// если напали на хорошего (не крим и не атакует вас), кроме животных вне охраняемой зоны (для охоты), то становимся кримами
	$crim=$to["crim"] || substr($toid,0,9)=='npc.crim.' || (substr($toid,0,11)=='npc.animal.' && !$loc1[1]);
	if (!$crim && $to["attack"]!=$fromid) docrim($fromid);

	// проверим, а есть ли стрелы или что там нужно...
	$needok=1;
	if ($fromwar[14]) {
		if (isset($from["items"][$fromwar[14]])) {
			// тратим 1 патрон
			$item=split("\|",$from["items"][$fromwar[14]]);
			$item[1]=$item[1]-1;
			if ($item[1]>=1) {
				$from["items"][$fromwar[14]]=implode("|",$item);
				}else {	// патроны кончились, заново расчет параметров
					unset($from["items"][$fromwar[14]]);
					unset($from["equip"]["arm"]);	// убираем с рук
					calcparam($fromid);
					}
			} else $needok=0;
		}

	if ($needok) {
		// проверим, попали ли
		if (rand(0,100)<=$hit) {
			// урон
			$damage=rand($fromwar[1],$fromwar[2]);
			// уклон
			if (rand(0,100)>$uklon) {
				// щит
				if ($parring && $shield) if (rand(0,100)<=$parring) {if (!$magic) {$damage-=$shield; addjournalall($loc,$to["title"]." парировал щитом");
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|".$to["title"]." парировал щитом (".$from["title"].")");
				fclose($fp);}
				} 
				else {$damage-=$damage*$shield/100; addjournalall($loc,$to["title"]." сопротивляется магии\n");}
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|".$to["title"]." сопротивляется магии (".$from["title"].")\n");
				fclose($fp);}
				}
				// броня
				if (!$magic && $towar[5]) $damage-=$towar[5];	// есть броня, гасим на armor, но не для магии
				if ($damage<0) $damage=0;
				if ($to["god"]) $damage=0;	// режим БОГА
				// наносим урон
				$to["life"]-=$damage;
				if ($to["life"]<0) $to["life"]=0;
addjournal($fromid,"+".$damage." урон ".$to["title"]." ".$fromwar[12]."");
addjournal($toid,"-".$damage." ".$from["title"]."  ".$fromwar[12]."");
addjournalall($loc,$to["title"]." - ".$damage." (".$from["title"].")",$fromid,$toid);
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|+ ".$damage." урон ".$to["title"]." ".$fromwar[12]." (".$from["title"].")\n");
				fclose($fp);}
				// если убили, добавим труп
				if ($to["life"]<1) {
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|".$to["title"]." погиб (".$from["title"].")\n");
				fclose($fp);}
					require"kill.php";
					}
				} else {addjournal($toid,"Вы уклонились"); addjournalall($loc,$to["title"]." уклонился",$toid);
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|".$to["title"]." уклонился (".$from["title"].")\n");
				fclose($fp);}}
			} else {addjournal($fromid,"Вы промахнулись");addjournalall($loc,$from["title"]." промахнулся",$fromid);
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|".$to["title"]." промахнулся (".$from["title"].")\n");
				fclose($fp);}}
		} else {addjournal($fromid,"Нет патронов: ".$fromwar[15]);
				if ($afile){
				$fp=@fopen("data/attack.dat","a+");
				fwrite($fp, "$like|Нет патронов (".$from["title"].")\n");
				fclose($fp);}}

	// если оба живы, то обороняющийся отвечает (кроме магии)
	if(isset($game["loc"][$loc][$fromid]) && isset($game["loc"][$loc][$toid]) && $fromid!=$toid) {
		if (!isset($to["attack"])) $to["attack"]=$fromid;
		if ($answer && !$magic) attack($loc,$toid,$fromid,0,0);
		}
		?>