<?
if ($player["loc"]=="loc.arena") $time_crim=0;
// навык магия мин. 3
$sk=split("\|",$player["skills"]);
if ($sk[13]<3) msg("Вы должны иметь навык магия минимум 3");
// кастинг заклинаний 
                require"magic.php";        // загружаем всю магию

                $magic=split("\|",$arr_magic[$use]);

                // проверяем, нужна ли цель
                if (($magic[6] && $to) || !$magic[6]) {

                        // проверяем, хватает ли маны
                        if ($player["mana"]>=$magic[1]) {
                        $regsok=1;
                        if (!$scroll) {                // проверяем и удаляем реги
if (!isset($player["magic"][$use])) msg("У вас нет такого заклинания!");
                                $st="";
                                for ($i=9;$i<count($magic);$i++) {
                                        $reg=split(":",$magic[$i]);
                                        if (!isset($player["items"][$reg[0]])) {$regsok=0; $st.="<br/>".$reg[2];}
                                                else {$item=split("\|",$player["items"][$reg[0]]); if ($item[1]<$reg[1]) {$regsok=0; if ($st) $st.=", ".$reg[2]; else $st=$reg[2];}}
                                        }
                                }
                        if ($regsok) {                        // мана и реги ок, кастуем
                                $skills=split("\|",$player["skills"]);
                                // вероятность кастинга
                                $cast=10*((($skills[13]+10)*2-$magic[2]));
                                if ($cast>0) {                // пытаемся колдовать
                                // уменьшаем ману
                                $player["mana"]-=$magic[1];
                                // если требовались реги, удаляем их
                                if (!$scroll) for ($i=9;$i<count($magic);$i++) {
                                        $reg=split(":",$magic[$i]);
                                        $item=split("\|",$player["items"][$reg[0]]);
                                        $item[1]-=1;
                                        if ($item[1]<1) unset($player["items"][$reg[0]]); else $player["items"][$reg[0]]=implode("|",$item);
                                        }
                                // если кастовали со скролла, удаляем его
                                if ($scroll && substr($scroll,0,12)=='item.scroll.') {
                                        $item=split("\|",$player["items"][$scroll]);
                                        $item[1]-=1;
                                        if ($item[1]<1) unset($player["items"][$scroll]); else $player["items"][$scroll]=implode("|",$item);
                                        addjournal($login,"Вы потеряли 1 ".$item[0]);
                                        }
                                // произносим заклинание
                                addjournalall($player["loc"],$player["title"].": ".$magic[3]);
                                if (rand(0,100)<=$cast) {                // удалось!
                                        // перебираем каждое заклинание и эффект от него
                                        if ($use=='magic.mark') {        // Пометить
$loc=split("\|",$locations[$player["loc"]]);
if ($loc[1]) msg("Помечать руну на охраняемой зоне нельзя!");
if ($player["loc"]=="loc.t.1.0" || $player["loc"]=="loc.t.1.1" || $player["loc"]=="loc.t.1.2" || $player["loc"]=="loc.t.1.3" || $player["loc"]=="loc.t.1.4") msg("Помечать руну здесь запрещено!");

if ($player["loc"]=="loc.t.2.0" || $player["loc"]=="loc.t.2.1" || $player["loc"]=="loc.t.2.2" || $player["loc"]=="loc.t.2.3" || $player["loc"]=="loc.t.2.4") msg("Помечать руну здесь запрещено!");

if ($player["loc"]=="loc.t.3.0" || $player["loc"]=="loc.t.3.1" || $player["loc"]=="loc.t.3.2" || $player["loc"]=="loc.t.3.3" || $player["loc"]=="loc.t.3.4") msg("Помечать руну здесь запрещено!");
                                                if (isset($player["items"][$to]) && substr($to,0,15)=='item.recallrune') {
                                                        $id="item.recallrune.".$player["loc"];
                                                        $loc=split("\|",$locations[$player["loc"]]);
                                                        // удаляем пустую руну
                                                        $item=split("\|",$player["items"][$to]);
                                                        $item[1]-=1;
                                                        if ($item[1]<1) unset($player["items"][$to]); else $player["items"][$to]=implode("|",$item);
                                                        // добавляем новую руну
                                                        if (isset($player["items"][$id])) $item=split("\|",$player["items"][$id]); else $item=split("\|","руна ".$loc[0]."|0|100");
                                                        $item[1]+=1;
                                                        $player["items"][$id]=implode("|",$item);
                                                        addjournal($login,"Руна помечена как ".$loc[0]);
                                                        } else addjournal($login,"Заклинание можно использовать только на руну телепортации");
                                                }

                                        if ($use=='magic.recall') {        // Возвращение
                                                if (isset($player["items"][$to]) && substr($to,0,15)=='item.recallrune') {
                                                        if (substr($to,0,21)!='item.recallrune.empty') {
                                                                $go=substr($to,16,strlen($to)-16);



                                                                
																$old=split("\|",$locations[$player["loc"]]);
                                                                $oldd=$player["loc"];
                                                                if ($oldd!=$go) {
                                                                if (isset($locations[$go])) {
                                                                        $new=split("\|",$locations[$go]);
                                                                        if (!$old[1] && $new[1]) addjournal($login,"Вы на охраняемой территории");
                                                                        if ($old[1] && !$new[1]) addjournal($login,"Вы покинули охраняемую территорию");
                                                                        addjournalall($player["loc"],$player["title"]." исчез ",$login);


                                                                        $game["loc"][$go][$login]=$game["loc"][$player["loc"]][$login];
                                                                        unset($game["loc"][$oldd][$login]);


                                                                        unset($player);
                                                                        $player=&$game["loc"][$go][$login];
                                                                        unset($player["attack"]);
                                                                        $game["players"][$login]=$go;
                                                                        $player["loc"]=$go;
                                                                        addjournalall($go,"Появился ".$player["title"],$login);
                                                                        $page_desc = "1";        // вывести описание локации
                                                                        }
                                                                        }
                                                                } else addjournal($login,"Руна не помечена ни в одно место");
                                                        } else addjournal($login,"Заклинание можно использовать только на руну телепортации");
                                                }
if ($use=='magic.portal') {
$locr=rand(1,10);
if ($locr=="1"){ $loct="loc.new.34"; // Сев.лес - НМ
$op="Скверный Лес";
}
if ($locr=="2"){ $loct="loc.br"; // магазин брони
$op="Магазин брони";
}
if ($locr=="3"){ $loct="loc.ak4"; // волш.магазин
$op="Волшебний магазин";
}
if ($locr=="4"){ $loct="loc.vl.27"; // вост.лес зарод
$op="Восточный лес";
}
if ($locr=="5"){ $loct="loc.skal.9"; // скалы
$op="Скалы";
}
if ($locr=="6"){ $loct="loc.os.30"; // острова
$op="острова";
}
if ($locr=="7"){ $loct="loc.bawnzamokdr.1"; // замок
$op="Замок";
}
if ($locr=="8"){ $loct="loc.kl.12"; // калитка
$op="Кладбище";
}
if ($locr=="9"){ $loct="loc.dvr3"; // мишень
$op="Двор рыцарей";
}
if ($locr=="10"){ $loct="loc.zl.3"; // 
$op="Западный лес";
}
if ($player["port"]) addjournal($login,"Заклинания не получилось");
if ($player["port"]) msg("Вы сможете еще создать порт,<br/>через
 <strong>".date("i мин s сек",$player["time_port"]-time())."</strong>");
$player["port"]=1;
$player["time_port"]=time()+1800; // 30 мин
// добовляем предмет в локу и удаляем через  1 час
$val="Порт ($op)|перемещяет...";
$game["loc"][$player["loc"]]["item.stand.port.$loct"]=$val;
if (!isset($game["loc_add"][$player["loc"]]["item.stand.port.$loct"])) $game["loc_del"][$player["loc"]]["item.stand.port.$loct"]=time()+3599;
addjournal($login,"Порт успешно создан!");

}
                                        if ($use=='magic.port') {
                                             if (isset($player["items"][$to]) && substr($to,0,15)=='item.recallrune') {
                                               if (substr($to,0,21)!='item.recallrune.empty') {
                                                    $go=substr($to,16,strlen($to)-16);
                                                           // echo $go;
                                                        $l=explode("|", $locations[$go]);

                                                         // print_r($l);
                                                   $game["loc"][$player["loc"]]['item.port'.time()]="Телепорт ".$l[0]."|".$login."|".$go;
                                                   $game["loc_del"][$player["loc"]]['item.port'.time()]=time()+$time_objects_destroy;
                                                } else addjournal($login,"Руна не помечена ни в одно место");
                                                        } else addjournal($login,"Заклинание можно использовать только на руну телепортации");

                                                };

                                        if ($use=='magic.createfood') {        // создать еду
                                                $rnd=rand(0,100);
                                                if ($rnd<=20) {$id="item.food.apple"; $item="яблоко|1|4|2|0|";}
                                                if ($rnd>20 && $rnd<=35) {$id="item.food.cabbage"; $item="капуста|1|10|1|0|";}
                                                if ($rnd>35 && $rnd<=55) {$id="item.food.bread"; $item="хлеб|1|16|6|0|";}
                                                if ($rnd>55 && $rnd<=75) {$id="item.food.sandwich"; $item="бутерброд|1|15|5|0|";}
                                                if ($rnd>75 && $rnd<=85) {$id="item.food.mushroom"; $item="гриб|1|10|2|2|";}
                                                if ($rnd>85 && $rnd<=100) {$id="item.food.sausage"; $item="колбаса|1|20|9|0|";}
                                                // добавляем новый предмет в локацию
                                                if (isset($game["loc"][$player["loc"]][$id])) $item=split("\|",$game["loc"][$player["loc"]][$id]); else $item=split("\|",$item);
                                                $game["loc"][$player["loc"]][$id]=implode("|",$item);
                                                addjournalall($player["loc"],"Появился 1 ".$item[0]);
                                                }
                           if (substr($use,0,10)=='magic.heal') {        // лечить
						   if (isset($game["loc"][$player["loc"]][$to]) && (substr($to,0,4)=='npc.' || substr($to,0,5)=='user.')) {
                             $heal=rand($magic[4],$magic[5]);        // только не повреждает, а лечит
                          if ($game["loc"][$player["loc"]][$to]["life"]+$heal>$game["loc"][$player["loc"]][$to]["life_max"]) $heal=$game["loc"][$player["loc"]][$to]["life_max"]-$game["loc"][$player["loc"]][$to]["life"];
						  
                            $game["loc"][$player["loc"]][$to]["life"]+=$heal;
                            addjournal($to,"Жизнь +".$heal." (".$player["title"].")");
							addjournal($login,"Лечим игрока...");
                             // если лечим крима, сами станомся кримом
                         $crim=$game["loc"][$player["loc"]][$to]["crim"] || substr($to,0,9)=='npc.crim.';
                             if ($crim && $login!=$to) {  docrim($login); }
                                 }else addjournal($login,"Некого лечить");
                              }

                                        if ($use=='magic.ressurect') {        // воскресить
                                                if (isset($game["loc"][$player["loc"]][$to]) && substr($to,0,5)=='user.' && $game["loc"][$player["loc"]][$to]["ghost"]) {
                                                        ressurect($to);
														if ($crim && $login!=$to) {  docrim($login); }
                                                        }else addjournal($login,"Воскресить можно только игрока");
                                                }
                                        if ($use=='magic.maddnes') {        // безумие
                                      //  msg("xz");
                                                $keys = array_keys($game["loc"][$player["loc"]]);
                                               // echo $game['loc'][$player['loc']];
                                             //   echo $keys;
                                             //   echo count($keys);
                                                $id = $keys[rand(0,count($keys)-1)];
                                                if (substr($id,0,5)=='user.' || substr($id,0,4)=='npc.') {
                                                        $idto = $keys[rand(0,count($keys)-1)];
                                                        if ($id!=$idto && (substr($idto,0,5)=='user.' || substr($idto,0,4)=='npc.')) {
                                                                $game["loc"][$player["loc"]][$id]["attack"]=$idto;
                                                                attack($player["loc"],$id,$idto);
                                                                }else addjournal($login,"Безумие прошло, никого не тронув");
                                                        }else addjournal($login,"Безумие никого не тронуло");
                                                }
                                        if ($use=='magic.silence') {        // тишина
                                       // echo "xz";
                                                if ($game["loc"][$player["loc"]])
                                                 foreach(array_keys($game["loc"][$player["loc"]]) as $i)
                                                  if (substr($i,0,4)=='npc.' && $game["loc"][$player["loc"]][$i]["attack"])
                                                   {
                                                           unset($game["loc"][$player["loc"]][$i]["attack"]);
                                                           addjournal($login,$game["loc"][$player["loc"]][$i]['title']." успокоился");
                                                   } elseif (substr($i,0,4=='npc.')) addjournal($login,"На ".$game["loc"][$player["loc"]][$i]['title']." заклинание не действует");
                                                }
                                        if ($use=='magic.peace') {        // успокоить
                                                if (isset($game["loc"][$player["loc"]][$to]) && substr($to,0,4)=='npc.')  unset($game["loc"][$player["loc"]][$to]["attack"]);
                                                        else addjournal($login,"Заклинание действует только на NPC");
                                                }
                                        if (substr($use,0,11)=='magic.charm') {        // зачаровать или привлечь
                                                if (isset($game["loc"][$player["loc"]][$to])) {
                                                        $ok=0;
                                                        // зачаровать до 5 минут животных animal=1, сопровождают и охраняют
                                                        if ($use=='magic.charm' && substr($to,0,7)=='animal.') {$ok=1; $timemin=60; $timemax=5*60; $follow=1;} else addjournal($login,"Заклинание действует только на животных");
                                                        // привлечь на свою до 20 сек - 1 минута сторону любого (кроме гардов) атакующего, защищает, но не сопровождает
                                                        if ($use=='magic.charm.enemy' && substr($to,0,4)=='npc.' && !substr($to,0,9)=='npc.guard' && $game["loc"][$player["loc"]][$to]["attack"]) {$ok=1; $timemin=20; $timemax=1*60;  $follow=0;} else addjournal($login,"Заклинание действует только на дерущихся");
                                                        if ($ok) {unset($game["loc"][$player["loc"]][$to]["attack"]); $game["loc"][$player["loc"]][$to]["owner"]=$login; $game["loc"][$player["loc"]][$to]["time_owner"]=time()+rand($timemin,$timemax);if ($follow) $game["loc"][$player["loc"]][$to]["follow"]=$login;$game["loc"][$player["loc"]][$to]["guard"]==$login;}
                                                        } addjournal($login,"Нет цели");
                                                }
                                                 $ispravlenie=split("\|",$player["war"]);
                                        if (substr($use,0,10)=='magic.all.') {        // на всех
                                                // т.к. атакуем магией, то сэмулируем 'war'
                                                // war=hit|damage_min|damage_max|speed|ranged|armor|uklon|parring|shield|magic_uklon|magic_parring|magic_shield|weaponby|exp|need|needtitle
                                                $war="600|".$magic[4]."|".$magic[5]."|".$magic[8]."|0|0|0|0|0|0|0|0|магией|$ispravlenie[13]||";
                                                if ($game["loc"][$player["loc"]]) foreach(array_keys($game["loc"][$player["loc"]]) as $i) if (substr($i,0,5)!='item.') if (!$magic[7] || ($magic[7] && ($game["loc"][$player["loc"]][$i]["crim"] || substr($i,0,9)=='npc.crim.'))) attack($player["loc"],$login,$i,$war);
                                                // наносим и себе урон
                                                if ($use=='magic.all.earthquake') attack($player["loc"],$login,$login,$war);
                                                }
                                        if (substr($use,0,10)=='magic.war.') {        // боевые на цель
                                                $war="6000|".$magic[4]."|".$magic[5]."|".$magic[8]."|0|0|0|0|0|0|0|0|магией|$ispravlenie[13]||";
                                                if (isset($game["loc"][$player["loc"]][$to]) && substr($to,0,5)!='item.') {
                                                        if (!$magic[7] || ($magic[7] && ($game["loc"][$player["loc"]][$to]["crim"] || substr($to,0,9)=='npc.crim.'))) attack($player["loc"],$login,$to,$war);
                                                        } else addjournal($login," Заклинание действует только на существ");
                                                }
if (substr($use,0,13)=='magic.summon.') {        // призывание
// проверим, чтобы в локации не было более 3 призванных существ, остальных отпустим
$counttmp=0;
$counttmp=0;	
if ($game["loc"][$player["loc"]]) foreach (array_keys($game["loc"][$player["loc"]]) as $i) if ($game["loc"][$player["loc"]][$i]["owner"]==$login) {$counttmp++; if ($counttmp>1)
if ($game["loc"][$player["loc"]][$i]["destroyonfree"]) {addjournalall($player["loc"],$game["loc"][$player["loc"]][$i]["title"]." исчез"); addjournal($login,$game["loc"][$player["loc"]][$i]["title"]." покинул вас"); unset($game["loc"][$player["loc"]][$i]);} else {addjournal($login,$game["loc"][$player["loc"]][$i]["title"]." покинул вас"); unset($game["loc"][$player["loc"]][$i]["owner"]);unset($game["loc"][$player["loc"]][$i]["time_owner"]); unset($game["loc"][$player["loc"]][$i]["follow"]); unset($game["loc"][$player["loc"]][$i]["guard"]);}}
if ($use=='magic.summon.wolf') $item=array(
"title"=>"призванный волк",
"life"=>"40",
"life_max"=>"40",
"war"=>"70|12|19|3|3|3|5|0|0|0|0|0|зубами|0||",
"destroyonfree"=>"1",
"own"=>$login,
);
if ($use=='magic.summon.skeleton') $item=array(
"title"=>"призванный скелет",
"life"=>"80",
"life_max"=>"80",
"war"=>"85|15|20|3|3|0|10|0|0|0|0|0||0||",
"destroyonfree"=>"1",
"own"=>$login,
);
 if ($use=='magic.summon.golem') $item=array(
"title"=>"призванный голем",
"life"=>"100",
"life_max"=>"100",
"war"=>"90|19|27|4|4|5|10|0|0|30|50|4||0||",
"destroyonfree"=>"1",
"own"=>$login,
);
if ($use=='magic.summon.demon') $item=array(
"title"=>"призванный демон",
"life"=>"130",
"life_max"=>"130",
"war"=>"95|22|35|5|8|25|10|10|0|20|70|8||0||",
"destroyonfree"=>"1",
"own"=>$login,
 );
$template="npc.summon.".substr($use,13);
srand ((float) microtime() * 10000000);
$id=$template.rand(5,9999);
$game["loc"][$player["loc"]][$id] = $item;
$game["loc"][$player["loc"]][$id]["owner"] = $login;
$game["loc"][$player["loc"]][$id]["guard"] = $login;

                         if ($use!='magic.summon.demon') $game["loc"][$player["loc"]][$id]["follow"] = $login;        // демон за вами не следует :-))
                                                        else {$game["loc"][$player["loc"]][$id]["crim"]=1;docrim($login);}         // демон crim и создавший его становится кримом. если не от кого защищать создавшего, то нападает на игроков, в том числе на создавшего :-)
                                                $game["loc"][$player["loc"]][$id]["time_owner"]=time()+rand(1*60,10*60);        // до 10 минут
                                                }
                                        }else addjournal($login,"Заклинание сорвалось");
                                }else addjournal($login,"Слишком слабый навык магии");
                        }else addjournal($login,"Не хватает реагентов: ".$st);
                        }else addjournal($login,"Недостаточно маны");
                } else {$list='all';}        // нужна цель для этого заклинания
				?>



