<?php
// торговля
if ($trade=="help") msg("Чтобы торговать или передать предмет, выберите игрока и потом в меню пункт \"Обмен\". То же самое, если предлагают обмен вам. Добавляйте предметы в список или ждите, когда добавит собеседник. Обмен происходит когда обе стороны выбирают ссылку \"Я согласен\". Выбор своего предмета удалит его из списка, в выбор в списке собеседника покажет информацию о предмете.");
if (substr($trade,0,2)=="u.") { //новая торговля
if ($char[8]) msg("Вы призрак и не можете вести обмен");
if ($trade==$login) msg("Нельзя торговать с самим собой");
if (!isset($l_i[$loc][$trade])) msg("Рядом с вами нет того, с кем вы хотели торговать. Если он ушел, вы можете догнать его и продолжить обмен.");
$tchar=explode("|",$l_i[$loc][$trade]["char"]);
if ($tchar[8]) msg($tchar[0]." призрак, с ним нельзя вести обмен");
$l_i[$loc][$login]["trade"]=array("to"=>$trade,"i"=>"","ito"=>"","a"=>0);
if ($l_i[$loc][$trade]["trade"]["to"]!=$login) {
addjournal($loc,$trade,$char[0].": предлагает вам обмен, выберите разговор с ним и ссылку Обмен");
msg("Вы предложили обмен, теперь надо подождать согласия другой стороны.<br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Продолжить</a>");
} else {$l_i[$loc][$login]["trade"]["ito"]=$l_i[$loc][$trade]["trade"]["i"]; $l_i[$loc][$trade]["trade"]["ito"]=$l_i[$loc][$login]["trade"]["i"]; $l_i[$loc][$trade]["trade"]["a"]=0;}
}
// проверки
if(isset($l_i[$loc][$login]["trade"])) {
$to=$l_i[$loc][$login]["trade"]["to"];
if (substr($to,0,2)!="u.") msg("Торговать можно только с игроками");
if (!isset($l_i[$loc][$to])) msg("Рядом с вами нет того, с кем вы хотели торговать. Если он ушел, вы можете догнать его и продолжить обмен.");
$tchar=explode("|",$l_i[$loc][$to]["char"]);
if ($tchar[8]) msg($tchar[0]." призрак, с ним нельзя вести обмен");
if ($char[8]) msg("Вы призрак и не можете вести обмен");
$tchar=$tchar[0];
if (!isset($l_i[$loc][$to]["trade"])) msg($tchar." сейчас не торгует с вами, ждите пока он начнет с вами обмен (если захочет, конечно).<br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Продолжить</a>");
if ($l_i[$loc][$to]["trade"]["to"]!=$login) msg($tchar." в режиме торговли, но не с вами. Возможно, вам нужно подождать, пока он начнет с вами обмен.<br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Продолжить</a>");
if ($id!="") $id=str_replace("*","",$id);
$tc=intval(preg_replace('/.*'.$id.':(\d+).*/',"\\1",$l_i[$loc][$login]["trade"]["i"]));
if ($trade=="add") { // добавляем предмет
if (!$id) {
unset($l_i[$loc][$login]["trade"]);
unset($l_i[$loc][$to]["trade"]);
msg("Нет предметов для обмена!");
}
$tcount=additem($loc,$login,"",$id,"count");
if ($tcount==0) msg("У вас нет этого предмета");
if (substr($id,0,4)=='i.q.' && $id!='i.q.dublon' && $id!='i.q.pjpt') msg("Квестовые вещи нельзя передовать");
// проверим кол-во
if ($tcount>1 && !$num) { // запросим кол-во
$stmp="<p>Укажите количество:\n<br/><input name=\"num\" format=\"*N\" maxlength=\"7\" value=\"".$tcount."\"/>\n<br/><a href=\"$PHP_SELF?sid=$sid&trade=$trade&id=$id&num=$(num)\">Отправить</a>";
msg($stmp,"Добавить",1,"","num",$tcount);
}
$num=intval($num);
if (!$num || $num<1) $num=1; // если не указано, то 1 предмет
if ($num>$tcount) $num=$tcount; // и максимум берем все что есть
if ($tc>0) $l_i[$loc][$login]["trade"]["i"]=preg_replace('/'.$id.':\d+/',$id.":".($tc+$num),$l_i[$loc][$login]["trade"]["i"]);
else if ($l_i[$loc][$login]["trade"]["i"]) $l_i[$loc][$login]["trade"]["i"].="|".$id.":".$num; else $l_i[$loc][$login]["trade"]["i"]=$id.":".$num;
$l_i[$loc][$to]["trade"]["ito"]=$l_i[$loc][$login]["trade"]["i"];
$l_i[$loc][$login]["trade"]["a"]=0;
$l_i[$loc][$to]["trade"]["a"]=0;
}
if ($trade=="del") { // удаляем предмет
if (strpos($l_i[$loc][$login]["trade"]["i"],$id.":")===false) msg("В вашем списке для обмена нет этого предмета");
$l_i[$loc][$login]["trade"]["i"]=preg_replace('/\|?'.$id.':\d+\|?/',"|",$l_i[$loc][$login]["trade"]["i"]);
if (substr($l_i[$loc][$login]["trade"]["i"],0,1)=="|") $l_i[$loc][$login]["trade"]["i"]=substr($l_i[$loc][$login]["trade"]["i"],1);
if (substr($l_i[$loc][$login]["trade"]["i"],-1)=="|") $l_i[$loc][$login]["trade"]["i"]=substr($l_i[$loc][$login]["trade"]["i"],0,-1);
$l_i[$loc][$to]["trade"]["ito"]=$l_i[$loc][$login]["trade"]["i"];
$l_i[$loc][$login]["trade"]["a"]=0;
$l_i[$loc][$to]["trade"]["a"]=0;
}
$b=1;
if ($trade=="cancel") { // отказ
unset($l_i[$loc][$login]["trade"]);
unset($l_i[$loc][$to]["trade"]);
addjournal($loc,$to,$char[0].": отказался от обмена с вами");
$b=0;
}
// подготовим списки вещей
if ($l_i[$loc][$login]["trade"]["i"]) $i=explode("|",$l_i[$loc][$login]["trade"]["i"]); else $i=array();
foreach(array_keys($i) as $j) $i[$j]=explode(":",$i[$j]);
if ($l_i[$loc][$login]["trade"]["ito"]) $ito=explode("|",$l_i[$loc][$login]["trade"]["ito"]); else $ito=array();
foreach(array_keys($ito) as $j) $ito[$j]=explode(":",$ito[$j]);
if ($trade=="agry" && $b) { // согласен, если список предметов равен у обоих и тот согласен, то обмен
$l_i[$loc][$login]["trade"]["a"]=1;
if ($l_i[$loc][$login]["trade"]["i"].$l_i[$loc][$login]["trade"]["ito"]=="") msg("Нет предметов для обмена");
if ($l_i[$loc][$login]["trade"]["i"].$l_i[$loc][$login]["trade"]["ito"]!=$l_i[$loc][$to]["trade"]["ito"].$l_i[$loc][$to]["trade"]["i"]) {$l_i[$loc][$login]["trade"]["a"]=0; $l_i[$loc][$to]["trade"]["a"]=0;}
if ($l_i[$loc][$login]["trade"]["a"] && $l_i[$loc][$to]["trade"]["a"]) { // обмен
// проверим наличие предметов
$b=0;
foreach(array_keys($i) as $j) if (intval(preg_replace('/.*'.$i[$j][0].':(\d+).*/',"\\1",$l_i[$loc][$login]["items"]))<$i[$j][1]) {$b=1; if (strpos($i[$j][0],"_")!==false) $ti=substr($i[$j][0],0,strpos($i[$j][0],"_")); else $ti=$i[$j][0]; if (substr($i[$j][0],0,5)=="i.rr.") $item=explode("|","руна|50"); else if (file_exists("items/".$ti)) $item=explode("|",implode("",file("items/".$ti))); else die("err: no items/".$i[$j][0]);addjournal($loc,$login,"У вас нет: ".$i[$j][1]." ".$item[0]); break;}
foreach(array_keys($ito) as $j) if (intval(preg_replace('/.*'.$ito[$j][0].':(\d+).*/',"\\1",$l_i[$loc][$to]["items"]))<$ito[$j][1]) {$b=1; if (strpos($ito[$j][0],"_")!==false) $ti=substr($ito[$j][0],0,strpos($ito[$j][0],"_")); else $ti=$ito[$j][0]; if (substr($ito[$j][0],0,5)=="i.rr.") $item=explode("|","руна|50"); else if (file_exists("items/".$ti)) $item=explode("|",implode("",file("items/".$ti))); else die("err: no items/".$ito[$j][0]);addjournal($loc,$login,"У ".$tchar." нет: ".$ito[$j][1]." ".$item[0]); break;}
if ($b==0) { // передаем вещи
foreach(array_keys($i) as $j) additem($loc,$login,$to,$i[$j][0],$i[$j][1],"items","items",1,-1,1);
foreach(array_keys($ito) as $j) additem($loc,$to,$login,$ito[$j][0],$ito[$j][1],"items","items",1,-1,1);
unset($l_i[$loc][$login]["trade"]);
unset($l_i[$loc][$to]["trade"]);
}
}
}
// выводим осн. страницу
if ($b) {
$stmp=$tchar." предлагает:";
if (count($ito)==0) $stmp.="<br/>[пусто]";
foreach(array_keys($ito) as $j) {
if (strpos($ito[$j][0],"_")!==false) $ti=substr($ito[$j][0],0,strpos($ito[$j][0],"_")); else
if (strpos($ito[$j][0],"-")!==false) $ti=substr($ito[$j][0],0,strpos($ito[$j][0],"-")); else $ti=$ito[$j][0];
if (substr($ito[$j][0],0,5)=="i.rr.") $item=explode("|","руна|50"); else if (file_exists("items/".$ti)) $item=explode("|",implode("",file("items/".$ti))); else die("err: no items/".$ito[$j][0]);
$stmp.="\n<br/><a href=\"$PHP_SELF?sid=$sid&look=".$ito[$j][0]."\">".$item[0];
if ($ito[$j][1]>1) $stmp.=" (".$ito[$j][1].")";
$stmp.="</a>";
}
$stmp.="<br/>Вы за это отдаете:";
if (count($i)==0) $stmp.="<br/>[пусто]";
foreach(array_keys($i) as $j) {
if (strpos($i[$j][0],"_")!==false) $ti=substr($i[$j][0],0,strpos($i[$j][0],"_")); else
if (strpos($i[$j][0],"-")!==false) $ti=substr($i[$j][0],0,strpos($i[$j][0],"-")); else $ti=$i[$j][0];
if (substr($i[$j][0],0,5)=="i.rr.") $item=explode("|","руна|50"); else if (file_exists("items/".$ti)) $item=explode("|",implode("",file("items/".$ti))); else die("err: no items/".$i[$j][0]);
$stmp.="\n<br/><a href=\"$PHP_SELF?sid=$sid&trade=del&id=".$i[$j][0]."\">".$item[0];
if ($i[$j][1]>1) $stmp.=" (".$i[$j][1].")";
$stmp.="</a>";
}
if ($l_i[$loc][$to]["trade"]["a"]) $stmp.="<br/>".$tchar." согласен"; else $stmp.="<br/>".$tchar." пока не согласен";
$stmp.="<br/><a href=\"$PHP_SELF?sid=$sid&trade=agry\">Я согласен</a><br/><a href=\"$PHP_SELF?sid=$sid&list=inv\">Добавить предмет</a><br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Обновить</a><br/><a href=\"#say\">Сказать</a><br/><a href=\"$PHP_SELF?sid=$sid&trade=cancel\">Отмена</a><br/><br/><a href=\"$PHP_SELF?sid=$sid&trade=help\">Помощь</a>";
$stmp.="\n</p>\n</card>\n<card id=\"say\" title=\"Сказать\">\n<p><input name=\"say\" emptyok=\"true\" type=\"text\" value=\"\"/>\n<br/><select name=\"translit\" multiple=\"true\" value=\"1\"><option value=\"1\">Транслит</option></select>
<anchor>Сказать<go href=\"$PHP_SELF?sid=$sid&trade=1\" method=\"post\">
<postfield name=\"to\" value=\"$to\"/>
<postfield name=\"say\" value=\"$(say)\"/>
<postfield name=\"translit\" value=\"$(translit)\"/>
</go></anchor>";
msg($stmp,"Обмен");
}
}// если есть "trade"