Вход Регистрация
Файл: game.php
Строк: 606
<?php
extract
($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
extract($HTTP_COOKIE_VARS);
extract($HTTP_SERVER_VARS);
//extract($HTTP_SESSION_VARS);
session_name('sid');
//получяем ip
$ip = ("$REMOTE_ADDR");
//получяем браузер
$brouzer=$_SERVER["HTTP_USER_AGENT"];
require (
'gzip.php');
include 
"header.php";
require 
"uncluds/admins.php";
require 
"settings.php";
if (
file_exists("flag_usesession")) $usesession=1;

$page_main "";
$page_desc "";

$tmp=$QUERY_STRING; if($tmp=='')$tmp=$_SERVER['QUERY_STRING'];
$tmp=urldecode($tmp);
$tmp=preg_replace("/[^ -}А-я]/e","",$tmp);
parse_str($tmp);
$g_tmp=$tmp;
$PHP_SELF='index.php';
require
"locations.php";
// игнорируем нефатальные ошибки
error_reporting (E_ERROR E_WARNING);
function 
myErrorHandler ($errno$errstr$errfile$errline) {}
set_error_handler("myErrorHandler");


if (
$usesession) {
ini_set('session.use_trans_sid','0');
ini_set('url_rewriter.tags','');
if (
$sid) {session_id($sid);session_start(); $login $_SESSION["login"];}// надо вызывать перед стартом
if (!$login && !$site$tmp='';// откроется основная страница, если не явно страница сайта
} else {
if (!
$login$login=$sid; else {if (substr($login,0,5)!='user.'$login='user.'.$login$sid=$login;}// FIX: временно
$sid=$login."&p=$p";
}
$login=str_replace('$','',$login);// чтобы PHP не принимал за переменные
if ($sid$sid.="&r=".rand(1,99);// это чтобы каждая страница загружалась заново, а не бралась из кэша

if (file_exists($game_file)) {
$file_save fopen($game_file,"r+");
if (
$file_save===FALSE) {usleep(100000); $file_save fopen($game_file,"r+");} // ждем по 100 миллисекунд, пока скрипт не прикроют по таймауту
flock($file_save,2);// пока не закроем файл при сохранении или скрипт не завершится
$game="";
while (!
feof ($file_save)) $game.= fgets($file_savefilesize($game_file));
$game unserialize($game);
} else {
$file_save fopen($game_file,"w+");require "blank.php";}
//Обнуление файла игры

if ($site || $tmp=='') require"site.php"// все что касается сайта
if (!$login || !isset($game["players"][$login])) {$site="";require"site.php";}

if (!
$usesession) {
$info=split("|",$game["loc"][$game["players"][$login]][$login]["info"]);
if (!
$info[0]) msg("Ваш игрок вышел с игры, либо такого персонажа нет в игре!<br/><a href="$PHP_SELF">На главную</a><br/>",$game_title,0,'none');
if (
$info[0]!=$pmsg("Не правильный пароль!<br/><a href="$PHP_SELF">На главную</a><br/>",$game_title,0,'none');
}
$player=&$game["loc"][$game["players"][$login]][$login];
$player["time"]=time();
//USER_AGENT
//require "agent.php";
$player=&$game["loc"][$game["players"][$login]][$login];
$player["time"]=time();


if ( 
$login && !$site ){
    
$myt_f "time/players/".$login;
    if ( 
file_exists($myt_f) && filemtime($myt_f)+4>time() ){
        
// $stmp = '';
        // $tmg = 10 * (2 - time() + filemtime($myt_f));
        
$tmg time() + filemtime($myt_f);
        
sleep($tmg);
        
// $stmp.= "<onevent type="ontimer"><go href="$PHP_SELF?$tmp"/></onevent><timer value="$tmg"/><p align="center">loading...";
        // msg($stmp,"- loading -",0,'break');
    
}
    
fclose(fopen($myt_f,"w+"));
}





// НАСТРОЙКИ
if (isset($player["pd"])){
    
$pnas=split("|",$player["pd"]);
    if ( isset(
$pnas[1]) ) if ( $pnas[1] ) $count_show $pnas[1];
    if ( isset(
$pnas[2]) ) if ( $pnas[2] ) $page_size =$pnas[2];
    if ( isset(
$pnas[3]) ) if ( $pnas[3]==$page_font $pnas[3];
    if ( isset(
$pnas[4]) ) if ( $pnas[4] ) $points_limit_skills 1000;
    if ( isset(
$pnas[5]) ) if ( $pnas[5] ) $journal_count $pnas[5];
}

//БАН
if (file_exists('data/ban/'.$login.'.dat')){
$file file("data/ban/$login.dat");    //открываем файл
$bn implode($file);
$vr=$bn-time()-10800;    //оставшееся время
$dt=date("d",$vr);
$dt0=$dt-1;
$dt1=date("H",$vr);
$dt2=date("s",$vr);
$dt3=date("i",$vr);
$ssd="$dt0 дней $dt1 часов $dt3 минут $dt2 секунд";
if (
time()<$bn && $login!==$adminmsg ("Ваш персонаж забанен еще на $ssd!</b>"); else unlink(".data/ban/$login.dat");
}
// искусственный интелект
ai();

// подгружаемые модули

if ($scan) require"./data/scan.php";
if (
$spus) require"spus.php";
if (
$golos) require"golos.php";// голосование
if ($smiles){ 
if (
$player['style']!=='0') require"smiles.php"; }
if (
$smiles_klan) require"smiles_klan.php";
if (
$chat) require"chat.php";
if (
$chat_klan) require"chat_klan.php";
if (
$adm) require"admin.php";
if (
$moder) require"moder.php";
if (
$look) require"look.php"
if (
$speak) require"speak.php";
if (
$menu) require"menu.php";
if (
$inventar) require"inventar.php";
if (
$say) require"say.php";
if (
$save) require"save.php";
if (
$msg) require"msg.php";
if (
$servis) require"servis.php";
if (
$hist) require "./list/history.php";
if (
$hist1) require "./list/history1.php";
if (
$set) require "set.php";
if (
$banlist) require"ban.php";
if (
$attack) require"attack.php";
if (
$tos) require"peredacha.php";
if (
$castle) require"castle.php";
if (
$npass) require"npass.php";
if (
$how) require"how.php";
if (
$take) require"take.php";
if (
$drop) require"drop.php";
if (
$red) require "redpers.php";
if (
$use) require"use.php";// $use обязательно раньше $list!
if ($list) {
if (
$list=='skill') require"listskill.php";
if (
$list=='magic') require"listmagic.php";
if (
$list=='inv') require"listinv.php";
if (
$list=='par') require"listpar.php";
if (
$list=='all') require"listall.php";
}
if (
$go) require"go.php";
if (
$new3) require"news.php";
if (
$onl) require"online.php";
if (
$rating) require"rating.php";
if (
$exit) require"exit.php";
if (
$item=="del"){ unset($player['items']); msg ("Ваш рюкзак пуст!"); }
if (
$bank=="del"){ unset($player['bank']); msg ("Ваш банк пуст!"); }// собственно игра
//linkИгра

// новые сообщения
$count 0;
if ( isset(
$player["msg"]) && count($player["msg"]) ) foreach (array_keys($player["msg"]) as $i) if ( $player["msg"][$i] && isset($game["players"][$i]) ) $count++;
if (
$count$page_main.= "<a href="$PHP_SELF?sid=$sid&msg=1">Сообщение: $count</a><br>
"
;

// MAIN PAGE

if ($count

$page_main.= "n<br/>"; else $page_main.= "<p>";
if (
$player["ghost"]) $page_main.= "Вы призрак<br/>";
if (
$player["crim"]) $page_main.= "Вы преступник".date("i",$player["time_crim"]-time())." мин<br/>";
$page_main.="
"
.$ff."


Hp["
.$player["life"]."|".$player["life_max"]."] 
Mp["
.$player["mana"]."|".$player["mana_max"]."]";
$skills=split("|",$player["skills"]);
$war=split("|",$player["war"]);
$ffdate("H:i");


// SOUNDS
$stmp="";
$loc=split("|",$locations[$player["loc"]]);

$zv=array();
for (
$i=3;$i<count($loc);$i++) {
if (
substr($loc[$i],0,4)=='loc.') if (count($game["loc"][$loc[$i]])>0) foreach(array_keys($game["loc"][$loc[$i]]) as $j) if ((substr($j,0,5)=='user.') || substr($j,0,4)=='npc.') { if ( !isset( $zv[$loc[$i]] ) ) $zv$loc[$i] ]=''$zv$loc[$i] ].="!";}
};
// Объекты
$stmp="";
$ind=0$count=0; if(!$start$start=0;
if (
$game["loc"][$player["loc"]]) foreach (array_keys($game["loc"][$player["loc"]]) as $i) if ($i!=$login) {
if (
$ind>=$start && $ind<$start+$count_show) {//FIX: может +1?
// определим видимое название предметов и игроков/npc (включая кол-во и статус)
if (substr($i,0,5)=='item.') {
$k=split("|",$game["loc"][$player["loc"]][$i]);
if (
substr($i,0,11)!='item.stand.' && $k[1]>1$k=$k[0]." (".$k[1].")"; else $k=$k[0];
} else {
$k=$game["loc"][$player["loc"]][$i]["title"];
$ktemp='';
if (
$game["loc"][$player["loc"]][$i]["lag"]=="1"$ktemp=" [гор]";
if (
$game["loc"][$player["loc"]][$i]["lag"]=="2"$ktemp=" [раз]";
if (
substr($i,0,5)=="user."){
if ( isset(
$game["loc"][$player["loc"]][$i]["klan_i"]) ){
$kl_data=split("|",$game["loc"][$player["loc"]][$i]["klan_i"]);
$ktemp=" [".$kl_data[1]."*".$kl_data[2]."]";
                }
            }
$k.=$ktemp;
if (
$game["loc"][$player["loc"]][$i]["life_max"]>0$ltmp=round($game["loc"][$player["loc"]][$i]["life"]*100/$game["loc"][$player["loc"]][$i]["life_max"]);
$st='';
if (
$ltmp<100$st.=$ltmp."%";

if (
$game["loc"][$player["loc"]][$i]["ghost"]) $st.=" призрак";
    if (
substr($i,0,5)=='user.' && $game["loc"][$player["loc"]][$i]["crim"]) $st.=" преступник";
    if (
$game["loc"][$player["loc"]][$i]["animag"]) { $st.=" анимаг"$not=1; };
$att=$game["loc"][$player["loc"]][$i]["attack"];
if (
$att && isset($game["loc"][$player["loc"]][$att]) && !$game["loc"][$player["loc"]][$att]["ghost"] && !$game["loc"][$player["loc"]][$i]["ghost"]) $st.=" атак. ".$game["loc"][$player["loc"]][$att]["title"];
if (
$st) {if ($st{0}==' '$st=substr($st,1); $k.=" [".$st."]";}
$not=0;
}
if (
$player['style']=='0') { 
$stmp.= "n<br/><anchor>".$k."<go href="#menu"><setvar name="to" value="".$i.""/></go></anchor>";
}else { 
$stmp.= "n<br/>
<a href="
$PHP_SELF?sid=$sid&menu=to&to=$i">".$k."</a>"
}


}
$ind++;
}
if (
$start) {$stmp.= "n<br/><a href="$PHP_SELF?sid=$sid">^ </a>";}
if (
$start+$count_show<count($game["loc"][$player["loc"]])-1) {if (!$start$stmp.="n<br/>"$stmp.= "<a href="$PHP_SELF?sid=$sid&start=".($start+$count_show)."">+ (".(count($game["loc"][$player["loc"]])-1-$start-$count_show).")</a>";}
$page_main.=$stmp;
//EXIT
$page_main.="<br>";
$loc=split("|",$locations[$player["loc"]]);
for (
$i=3;$i<count($loc);$i++) {
if (
substr($loc[$i],0,4)=='loc.') {
if ( !isset(
$zv[$loc[$i]]) ) $zv[$loc[$i]]='';
$zv[$loc[$i]]=substr($zv[$loc[$i]],0,3);
$page_main.= "n<br/><a href="$PHP_SELF?sid=$sid&go=".$loc[$i]."">".$loc[$i-1]." ".$zv[$loc[$i]]."</a>";
}
};
$vremya date("H:i");
if (!
strpos($player["loc"],"oc.k.") && !strpos($player["loc"],"oc.L.")) 
$page_main.="<hr>$vremya";
 
 

else 
$page_main.="<br><a href="$PHP_SELF?sid=$sid&map=1">Карта</a><br>";
$udir opendir ("data/profil");
while (
$ufile readdir ($udir))
{if ((
$ufile !="index.php"))
{
$ufa[]=$ufile;}}
closedir ($udir);
$utotal count($ufa);
print<<<QQ
<script language="javascript"> 
function link(n) { 
if (n !="")  
{top.location=n;} 

</script> 
<select name="select" onChange="link(this.options[this.selectedIndex].value)"> 
<option value="">[меню]</option>
<option value="
$PHP_SELF?sid=$sid&look=$login">герой</option> 
<option value="
$PHP_SELF?sid=$sid&list=skill">умения</option>
<option value="
$PHP_SELF?sid=$sid&list=inv">Инвентарь</option>
<option value="
$PHP_SELF?sid=$sid&list=magic">заклинания</option> 
<option value="
$PHP_SELF?sid=$sid&msg=1">контакты</option> 
<option value="
$PHP_SELF?sid=$sid&servis=1">сервисы</option>
</select><br/>
 


<a href="
$PHP_SELF?sid=$login&p=$p&r=$r">обновить</a>
QQ;



$dat date("d.m.y");

//$page_main.= "Кто где?<a href="$PHP_SELF?sid=$sid&onl=1">".count($game["players"])."</a>

//";



//админка
if ($login==$admin || $login==$admin2 || $login==$admin3 $page_main.="
<br><a href="
$PHP_SELF?sid=$sid&adm=res">Восстановление</a>n<br/>
<a href="
$PHP_SELF?sid=$sid&adm=1">Админ-панель</a>n<br/>";
//модерка
if ($login==$moder || $login==$moder2 || $login==$moder3 $page_main.="
<a href="
$PHP_SELF?sid=$sid&moder=1">[Модер-Панель]</a><br>";
// карта меню
msg($page_main,$loc[0],1,'main');

$dir opendir ("./users");
while (
$file readdir ($dir)) 
{if ((
$file !="index.php") &&($file !="zip.php") &&($file !=".htaccess"))
{
$a[]=$file;}}
closedir ($dir);
$total count($a);

// служебные функции
function savegame() {// сохранение игры
global $file_save,$game;
rewind($file_save);// в начало файла
fputs($file_save,serialize($game));
fflush($file_save);
fclose($file_save);
}


function 
getrandname() {// генерирует случайное имя
require "getrandname.php";
return 
$stmp;
}

function 
addjournal($to,$msg) {// добавляет в журнал и следит, чтоб не переполнился
global $game,$journal_count;
if (isset(
$game["players"][$to])) {
$j=&$game["loc"][$game["players"][$to]][$to]["journal"];
$j[]=$msg;
if (
count($j)>$journal_countarray_splice($j,0,count($j)-$journal_count);// оставляем только n последних записей
}
}
function 
addjournalall($loc,$msg,$no1="",$no2="") {// добавляет запись всем в журнал, кроме $no1 и $no2
global $game;
if (
$game["loc"][$loc]) foreach (array_keys($game["loc"][$loc]) as $i) if ($i!=$no1 && $i!=$no2) if (isset($game["players"][$i])) addjournal($i,$msg);
}

function 
msg($msg,$title='World of Death',$journal=1,$menu='') {//linkMsg// вывод текста и выход
// journal==1, то выведем карту с алертами
// menu=='', кнопка "В игру" и "Назад"
// menu=='none', без кнопок
// menu=='main', основное меню
global $game,$login,$page_size,$page_desc,$page_main,$debug,$PHP_SELF,$sid,$player,$page_size;
ob_start("translate");

if (
$player['style']=='0'$wml ="n<wml>"; else $wml "n<html>";
    
$wml.="n<head>n<meta forua="true" http-equiv="Cache-Control" content="must-revalidate"/>n<meta forua="true" http-equiv="Cache-Control" content="no-cache"/>n<meta forua="true" http-equiv="Cache-Control" content="no-store"/>n</head>";;


if (
$journal=='1' && $player["journal"] && count($player["journal"])>0) {// FIX: почему-то даже пустой массив имеет count=1
if ($player['style']=='0') {    //WML ЖУРНАЛ
$page_journal=implode("<br/>",$player["journal"]);
$wml.= "n<card title="Журнал">n<do type="accept" label="Дальше"><go href="#";
if ($page_desc$wml.= "desc";else $wml.= "main";
$wml.= ""/></do>n<p>n".$page_journal."n</p>n</card>";
$player["journal"]=array();
} else {
$page_journal=implode("<br/>",$player["journal"]);
$wml.= "<title>".date("H:i")."*журнал</title>n<a href="$PHP_SELF?sid=$sid">>>></a><br/>";
if (
$page_desc$wml.= "";else $wml.= "";
$wml.= "n".$page_journal."nn<br/></body>";
$player["journal"]=array();
}
}
    
$sizeok=1; 
    if (
$player["look"]==$player["loc"]) {unset($player["look"]);$page_desc=0;}    // FIX: чтобы большое описание не вешало игрока
    if (
$page_desc) {
        
$player["look"]=$player["loc"];
        require "
desc.php";
        if (strlen(
$wml.$msg.$desc[$player["loc"]])>$page_size$sizeok=0;
        echo "
n<title>".$title."</title>";
        if (
$player['style']=='0') {    //WML
        
$wml.= "n<card id="desc" title="".$title."">n<do type="accept" label=">>>"><go href="";
        if (
$sizeok$wml.= "#main"; else $wml.= "$PHP_SELF?sid=$sid";
        
$wml.= ""/></do>n<p>n".$desc[$player["loc"]]."n</p>n</card>";
        } else {
        
$wml.= "nn<a href="$PHP_SELF?sid=$sid">>>></a><br/>";
        if (
$sizeok$wml.= ""; else $wml.= "";
        
$wml.= "n".$desc[$player["loc"]]."nn</body>";
        }
        }
// ОСНОВНОЙ ЭКРАН
if (
$sizeok) {// только если размер меньше или равен
$wml.= "<title>$title</title>";
if (
$menu=='main') $wml.= "";
$wml.= "";
if (
$menu=='') {
$wml.= "<br><a href="$PHP_SELF?sid=$sid">В игру</a>";
}
//| <a href="".
$_SERVER["HTTP_REFERER"]."">Назад</a><br>
if (
$menu=='main') {




$wml.= "";
$wml.= "";
$wml.= "";

$dolj=split("|",$game['loc'][$game[players][$login]][$login]['gild']);
if (
$dolj[0] == "Глава гильдии" || $dolj[0] == "Замглавы"){
$wml.="[<a href="$PHP_SELF?sid=$sid&gild=1">Меню гильдии</a>]<br>";
}


$j=0;
}
if (substr(
$msg,strlen($msg)-4)!="</p>") $msg.="n</p>";
if (substr(
$msg,0,2)!="<p") $msg="<p>n".$msg;
$wml.= "n".$msg."n</body>";
};// if sizeok

$wml.= "</html>";
$wml=str_replace("&amp;","&",$wml);// чтобы привести к одному виду
$wml=str_replace("&","&amp;",$wml);
$wml=str_replace("<p>","<p><small>",$wml);
$wml=str_replace("<p align="left">","<p align="left"><small>",$wml);
$wml=str_replace("</p>","</small></p>",$wml);
$wml=ereg_replace("(<input[[:print:]]*/>)","</small>\1<small>",$wml);
$wml=ereg_replace("(<select.*</select>)","</small>\1<small>",$wml);
savegame();// чтобы пока выводится клиенту, другие могли играть

echo 
$wml;
$simvol=$wml;
    
$traff=strlen($simvol)/3;
$Contents = ob_get_contents();
$gzib_file = strlen($Contents);
$support_gzip ='header("Content-Encodinggzip")' ;
$support_deflate = 'header("Content-Encodingdeflate")' ;
$support_x_gzip = 'header("Content-Encodingx_gzip")' ;

if (
$support_deflate) {
$gzib_file_out = strlen(gzdeflate($Contents,9));
} else{
if(
$support_gzip){
$gzib_file_out = strlen(gzencode($Contents,9));
} else {
if(
$support_x_gzip){
$gzib_file_out = strlen(gzcompress($Contents,9));
}else {
$gzib_file_out = strlen($Contents);
}}}
if(!
$_SESSION[traffic]){
        session_register("
traffic");
}
$traff=$gzib_file_out;
$traff=strlen(gzencode($Contents,9));
$_SESSION['traffic']=$_SESSION[traffic]+$traff;
die("");
exit;
}

function savep (
$gtemp,$j){
     if (
$gtemp['title'] && $gtemp['info']) {
        
$f=fopen("users/$j.dat", "w+");
        fwrite(
$f, serialize($gtemp));
        fclose(
$f);
        }
        }
function ai() {    // новый AI//linkAI
global 
$game,$locations,$login,$player,$time_logout;
// проверим список онлайн и поудаляем кого долго не было
if (time()>
$game["lastai"]+60) {
foreach(array_keys(
$game["players"]) as $j) if ($j!=$login) { // раз в минуту
if (time()>
$game["loc"][$game["players"][$j]][$j]["time"]+$time_logout) {
if (isset(
$game["loc"][$game["players"][$j]][$j])) {
// в оффлайн
$gtemp=$game["loc"][$game["players"][$j]][$j];
$gtemp["journal"]=array();
$gtemp["loc"]=$game["players"][$j];
savep (
$gtemp,$j);
unset(
$game["loc"][$game["players"][$j]][$j]);
if (
$info[2]=='f') addjournalall($game["players"][$j],$gtemp["title"]." исчезла",$j); 
else addjournalall(
$game["players"][$j],$gtemp["title"]." исчез",$j);
unset(
$game["players"][$j]);
} else unset(
$game["players"][$j]);
}
}
$game["lastai"]=time();
}

if (!
$login || !$player) return;// это когда только смотрят список онлайн

// проверяем только текущую и соседние локации
doai(
$player["loc"]);
$ok=array($player["loc"]=>1);// эту проверили
$loc=split("|",$locations[$player["loc"]]);
for (
$i=3;$i<count($loc);$i++) if (substr($loc[$i],0,4)=='loc.') {
doai(
$loc[$i]);
$ok[$loc[$i]]=1;
$loc1=split("|",$locations[$loc[$i]]);
for (
$j=3;$j<count($loc1);$j++) if (substr($loc1[$j],0,4)=='loc.') if (!isset($ok[$loc1[$j]])) {doai($loc1[$j]); $ok[$loc1[$j]]=1;}
}
}

function doai(
$i) {// искусственный интеллект, проверяем локацию с именем $i
global 
$game,$locations,$time_logout,$time_regenerate,$time_objects_destroy,$time_crim,$time_ban,$time_ban1,$time_castle;

$loc=split("|",$locations[$i]);

// таймеры локации
if (isset(
$game["loc_del"][$i])) foreach (array_keys($game["loc_del"][$i]) as $j) {
if (time()>
$game["loc_del"][$i][$j]) {// удаление предмета/npc
if (substr(
$j,0,4)=='npc.') addjournalall($i,$game["loc"][$i][$j]["title"]." исчез");
unset(
$game["loc"][$i][$j]);
unset(
$game["loc_del"][$i][$j]);
if (count(
$game["loc_del"][$i])==0) unset($game["loc_del"][$i]);
}
}
if (isset(
$game["loc_add"][$i])) foreach (array_keys($game["loc_add"][$i]) as $j) {
if (time()>
$game["loc_add"][$i][$j]["time"]) {// добавление предмета/npc
if (
$game["loc_add"][$i][$j]["respawn"]) {
$respawn=split("|",$game["loc_add"][$i][$j]["respawn"]);
$game["loc_add"][$i][$j]["time"]=time()+rand($respawn[0],$respawn[1]);
if (
$respawn[2] && $respawn[3] && substr($j,0,5)=='item.') {// обновим кол-во
$item=split("|",$game["loc_add"][$i][$j]["item"]);
$item[1]=rand($respawn[2],$respawn[3]);
$game["loc_add"][$i][$j]["item"]=implode("|",$item);
}
}
$game["loc"][$i][$j]=$game["loc_add"][$i][$j]["item"];
if (substr(
$j,0,4)=='npc.') {
addjournalall(
$i,"Появился ".$game["loc_add"][$i][$j]["item"]["title"]);
unset(
$game["loc_add"][$i][$j]);// npc удаляем, для предметов только обновляем время
if (count(
$game["loc_add"][$i])==0) unset($game["loc_add"][$i]);
}
}
}

// удалим стражу, если вышло время
if (
$game["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $j) if (substr($j,0,9)=='npc.guard') if (time()>$game["loc"][$i][$j]["delete"]) {unset($game["loc"][$i][$j]); addjournalall($i,$game["loc"][$i][$j]["title"]." исчез");}

// есть ли лекарь, есть ли гарды, список кримов (монстры и крим игроки) и список игроков
$crim=array();
$users=array();
if (
$game["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $j) if (substr($j,0,5)=='user.' || substr($j,0,4)=='npc.') {
if (
$game["loc"][$i][$j]["healer"]) $healer=$game["loc"][$i][$j]["title"];
if (substr(
$j,0,9)=='npc.crim.' || $game["loc"][$i][$j]["crim"]) if (!$game["loc"][$i][$j]["ghost"]) $crim[]=$j;// криme["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $j) if (substr($j,0,5)=='user.' || substr($j,0,4)=='npc.') {
if (
$game["loc"][$i][$j]["healer"]) $healer=$game["loc"][$i][$j]["title"];
if (substr(
$j,0,9)=='npc.crim.' || $game["loc"][$i][$j]["crim"]) if (!$game["loc"][$i][$j]["ghost"]) $crim[]=$j;// криимов-призраков не добавляем
if (substr(
$j,0,9)=="npc.guard") $guard=1;
if (substr(
$j,0,5)=="user." && !$game["loc"][$i][$j]["ghost"]) $users[]=$j;
}
// добавляем стражу от 1 до 3 гардов
if (
$loc[1] && count($crim)>0 && !$guard) for ($k=0;$k<rand(1,3);$k++) {
srand ((float) microtime() * 10000000);
$id = "npc.guard.".rand(5,9999);
$title = getrandname()." [стража]";
  
$game["loc"][$i][$id]=array("title"=>$title,"life"=>"1000","life_max"=>"1000","speak"=>"npc.guard","war"=>"100|180|220|2|0|60|50|30|20|60|60|90|клинком света|1000||","delete"=>time()+$time_logout);
//
$game["loc_del"][$i][$id]=time()+$time_logout;// когда удалить стражу
addjournalall(
$i,"Появился ".$title);
}

// теперь обработаем игроков и npc
if (
$game["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $j) if (isset($game["loc"][$i][$j]) && (substr($j,0,5)=='user.' || substr($j,0,4)=='npc.')) {
// восстановим жизнь и ману согласно прошедшему времени
$tm=time()-$game["loc"][$i][$j]["time_regenerate"];
if (
$tm>$time_regenerate && !$game["loc"][$i][$j]["ghost"]) {
$life=0; $mana=0;
if (substr(
$j,0,5)=='user.') {// проверим скиллы регенерация и медитация
$skills=split("|",$game["loc"][$i][$j]["skills"]);
$life=$skills[16];
$mana=$skills[5];
}
$game["loc"][$i][$j]["life"]+=round($tm/($time_regenerate-$life));
$game["loc"][$i][$j]["mana"]+=round($tm/($time_regenerate-$mana));
if (
$game["loc"][$i][$j]["life"]>$game["loc"][$i][$j]["life_max"]) $game["loc"][$i][$j]["life"]=$game["loc"][$i][$j]["life_max"];
if (
$game["loc"][$i][$j]["mana"]>$game["loc"][$i][$j]["mana_max"]) $game["loc"][$i][$j]["mana"]=$game["loc"][$i][$j]["mana_max"];
$game["loc"][$i][$j]["time_regenerate"]=time();
}

// игроки
if (substr(
$j,0,5)=="user.") {
// проверим, не прошло ли время крима,бана,приглашения в замок
if (time()>
$game["loc"][$i][$j]["time_crim"]) {unset($game["loc"][$i][$j]["crim"]); unset($game["loc"][$i][$j]["time_crim"]);}
if (time()>
$game["loc"][$i][$j]["time_ban"]) {unset($game["loc"][$i][$j]["ban"]); unset($game["loc"][$i][$j]["time_ban"]);}
if (time()>
$game["loc"][$i][$j]["time_ban1"]) {unset($game["loc"][$i][$j]["ban1"]); unset($game["loc"][$i][$j]["time_ban1"]);}
if (time()>
$game["loc"][$i][$j]["time_castle"]) {unset($game["loc"][$i][$j]["cast"]); unset($game["loc"][$i][$j]["time_castle"]);}
// если есть лекарь, то воскресимся...
if (
$game["loc"][$i][$j]["ghost"] && $healer) {addjournalall($i,$healer."Возвращайся к живым".$game["loc"][$i][$j]["title"]."!");ressurect($j);}
}

// NPC
if (substr(
$j,0,4)=='npc.') {
$b=0;// надо ли continue, если ушли в др. локацию
// первым делом следуем за хозяином
$owner=$game["loc"][$i][$j]["owner"];
$follow=$game["loc"][$i][$j]["follow"];
$guard=$game["loc"][$i][$j]["guard"];
$attack=$game["loc"][$i][$j]["attack"];
if (
$owner) {
// хозяин крима тоже крим
if (
$game["loc"][$i][$j]["crim"] && isset($game["loc"][$i][$owner])) docrim($owner);
// если вышло время служения
if (time()>
$game["loc"][$i][$j]["time_owner"]) {
addjournal(
$owner,$game["loc"][$i][$j]["title"]." покинул вас");
if (
$game["loc"][$i][$j]["destroyonfree"]) {addjournalall($i,$game["loc"][$i][$j]["title"]." исчез"); unset($game["loc"][$i][$j]); continue;}// дальше не обрабатываем его
else {unset(
$game["loc"][$i][$j]["time_owner"]); unset($game["loc"][$i][$j]["owner"]);unset($game["loc"][$i][$j]["follow"]); unset($game["loc"][$i][$j]["guard"]);}
}
}
if (
$follow && !isset($game["loc"][$i][$follow])) for ($k=3;$k<count($loc);$k++) if (substr($loc[$k],0,4)=='loc.' && isset($game["loc"][$loc[$k]][$follow])) {
// нашли в соседней локации 
$follow, идем туда
$game["loc"][$loc[$k]][$j] = $game["loc"][$i][$j];
unset(
$game["loc"][$i][$j]);
unset(
$game["loc"][$k][$j]["attack"]);
addjournalall(
$i,$game["loc"][$loc[$k]][$j]["title"]." ушел ".$loc[$k-1]);
addjournalall(
$loc[$k],"Пришел ".$game["loc"][$loc[$k]][$j]["title"]);
$b=1;// больше не обрабатывать в текущей локации
break;
}
if (
$b) continue;//$j ушел из этой локации

// пытаемся преследовать (если ни за кем не следуем)
if (
$attack && !$game["loc"][$i][$j]["follow"] && !isset($game["loc"][$i][$attack])) for ($k=3;$k<count($loc);$k++) if (substr($loc[$k],0,4)=='loc.' && isset($game["loc"][$loc[$k]][$attack])) {// нашли!
// хорошие не будут преследовать в неохраняему зону, а плохие не сунутся в гард зону, а гарды всегда преследуют!
$crimj=$game["loc"][$i][$j]["crim"] || substr($j,0,9)=='npc.crim.';
$loc1=split("|",$locations[$loc[$k]]);
$b=0;
if ((
$crimj && !$loc1[1]) || (!$crimj && $loc1[1]) || substr($j["id"],0,9)=="npc.guard") $b=1;// продолжить погоню
// проверим скилл игрока skill.hiding, может спрятался (от гардов не действует)
if (substr(
$attack,0,5)=='user.' && !substr($j,0,9)=="npc.guard") {
$skills=split("|",$game["loc"][$loc[$k]][$attack]);
if (rand(0,100)<=(
$skills[17]+$skills[1])*10) {$b=0;addjournal($attack,"Вы скрылись от погони!");}
}

if (
$b) {// погоня!
$game["loc"][$loc[$k]][$j] = $game["loc"][$i][$j];
unset(
$game["loc"][$i][$j]);
addjournalall(
$i,$game["loc"][$loc[$k]][$j]["title"]." ушел ".$loc[$k-1]);
addjournalall(
$loc[$k],"Пришел ".$game["loc"][$loc[$k]][$j]["title"]);
} else unset(
$game["loc"][$i][$j]["attack"]);
break;
}
if (
$b) continue;//$j ушел из этой локации
// если на того, кого охраняем guard=id кто-то нападает, атакуем его
if (
$guard && isset($game["loc"][$i][$guard])) {
if (
$game["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $k) if ($game["loc"][$i][$k]["attack"]==$guard{$game["loc"][$i][$j]["attack"]=$k; break;}
}

// гарды атакуют кримов, кримы игроков
if (!
$game["loc"][$i][$j]["attack"]) {
if (substr(
$j,0,9)=="npc.guard" && count($crim)>0) $game["loc"][$i][$j]["attack"]=$crim[rand(0,count($crim)-1)];
if ((
$game["loc"][$i][$j]["crim"] || substr($j,0,9)=='npc.crim.') && count($users)>0) {
$b=0;
$attack=$users[rand(0,count($users)-1)];
if (substr(
$attack,0,5)=='user.') {$skills=split("|",$game["loc"][$i][$attack]); if (rand(0,100)<=$skills[1]*5) {$b=1;addjournal($attack,"Вы уклонились ".$game["loc"][$i][$j]["title"]);}}
if (!
$b$game["loc"][$i][$j]["attack"]=$attack;
}

// если все еще не атакуем, то атакуем того, кто атакует нас
//if (!
$game["loc"][$i][$j]["attack"]) if ($game["loc"][$i]) foreach (array_keys($game["loc"][$i]) as $k) if ($game["loc"][$i][$k]["attack"]==$j{$game["loc"][$i][$j]["attack"]=$k; break;}
}

// проверяем случайное движение NPC
if (!
$game["loc"][$i][$j]["attack"] && $game["loc"][$i][$j]["move"]) {
$move=split("|",$game["loc"][$i][$j]["move"]);
$b=0;
if (time()>
$game["loc"][$i][$j]["time_nextmove"]) {// идем...
$k=$loc[2+2*rand(0,(count($loc)-2)/2-1)+1];// случайный выход
// плохие не идут в гард зону, а хорошие из нее
$crimj=$game["loc"][$i][$j]["crim"] || substr($j,0,9)=='npc.crim.';
$loc1=split("|",$locations[$loc[$k]]);
if ((
$crimj && !$loc1[1]) || (!$crimj && $loc1[1])) $b=1;// идти
if (
$k==$i$b=0;
if (
$b) {
// переход
$game["loc"][$k][$j]=$game["loc"][$i][$j];
unset(
$game["loc"][$i][$j]);
addjournalall(
$k,"Пришел ".$game["loc"][$k][$j]["title"]);
$s=$game["loc"][$k][$j]["title"]." ушел ";
if (array_search(
$k,$loc)) $s.=$loc[array_search($k,$loc)-1];
addjournalall(
$i,$s);
$game["loc"][$k][$j]["time_nextmove"]=time()+rand($move[1],$move[2]);// след. ход
}
}
}
if (
$b) continue;//$j ушел из этой локации
// проверяем атаку NPC
if (
$game["loc"][$i][$j]["attack"] && $game["loc"][$i][$game["loc"][$i][$j]["attack"]]["ghost"]) unset($game["loc"][$i][$j]["attack"]);
if (
$game["loc"][$i][$j]["attack"]) attack($i,$j,$game["loc"][$i][$j]["attack"]);
}//npc
}//foreach user & npc
}

function ressurect(
$to) {
require"
ressurect.php";
}

function tsdecode(
$s) {
if (
$s!='') {
$s1=$s;
$s = str_replace("%D0%81","Ё",$s);
$s = str_replace("%d0%81","Ё",$s);
$s = str_replace("%D1%91","ё",$s);
$s = str_replace("%d1%91","ё",$s);
for (
$i=144;$i<192;$i++) {$stmp "%D0".urlencode(chr($i)); $s str_replace(strtoupper($stmp),chr($i+48),$s); $s str_replace(strtolower($stmp),chr($i+48),$s);}
for (
$i=128;$i<144;$i++) {$stmp "%D1".urlencode(chr($i)); $s str_replace(strtoupper($stmp),chr($i+112),$s);$s str_replace(strtolower($stmp),chr($i+112),$s);}
//if (
$s==$s1)
$s = urldecode($s);
}
return 
$s;
}

function docrim(
$login) {
require"
docrim.php";
}
function calcparam(
$login) {
require"
calcparam.php";
};

function attack(
$loc,$fromid,$toid,$magic='',$answer=1) {//linkAttack// answer=1 - обороняющийся отвечает, 0 -нет
global 
$attackf;
global 
$game,$locations,$login,$time_crim,$points_levelup,$time_objects_destroy,$time_logout,$time_defspeed;
if (!
$attackf$attackf=implode('',file("attackf.php"));
eval(
$attackf);
}

function view(
$file) {require"view.php";}
?>
Онлайн: 0
Реклама