View file 1/f_trade.dat

File size: 10.51Kb
<?php

// торговля

if ( $trade == "help" )
		msg( "Чтобы торговать или передать предмет, выберите игрока и потом в меню пункт \"Обмен\". То же самое, если предлагают обмен вам. Добавляйте предметы в список или ждите, когда добавит собеседник. Обмен происходит когда обе стороны выбирают ссылку \"Я согласен\". Выбор своего предмета удалит его из списка, в выбор в списке собеседника покажет информацию о предмете." );

if ( substr( $trade, 0, 2 ) == "u." )
{ //новая торговля
		if ( $char[8] )
				msg( "Вы призрак и не можете вести обмен" );
		if ( $trade == $login )
				msg( "Нельзя торговать с самим собой" );
		if ( !isset( $loc_i[$loc][$trade] ) )
				msg( "Рядом с вами нет того, с кем вы хотели торговать. Если он ушел, вы можете догнать его и продолжить обмен." );
		$tchar = explode( "|", $loc_i[$loc][$trade]["char"] );
		if ( $tchar[8] )
				msg( $tchar[0] . " призрак, с ним нельзя вести обмен" );
		$loc_i[$loc][$login]["trade"] = array(
				"to" => $trade,
				"i" => "",
				"ito" => "",
				"a" => 0 );
		if ( $loc_i[$loc][$trade]["trade"]["to"] != $login )
		{
				addjournal( $loc, $trade, $char[0] . ": предлагает вам обмен, выберите разговор с ним и ссылку Обмен" );
				msg( "Вы предложили обмен, теперь надо подождать согласия другой стороны.<br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Продолжить</a>" );
		}
		else
		{
				$loc_i[$loc][$login]["trade"]["ito"] = $loc_i[$loc][$trade]["trade"]["i"];
				$loc_i[$loc][$trade]["trade"]["ito"] = $loc_i[$loc][$login]["trade"]["i"];
				$loc_i[$loc][$trade]["trade"]["a"] = 0;
		}
}

// проверки
if ( isset( $loc_i[$loc][$login]["trade"] ) )
{
		$to = $loc_i[$loc][$login]["trade"]["to"];
		if ( substr( $to, 0, 2 ) != "u." )
				msg( "Торговать можно только с игроками" );
		if ( !isset( $loc_i[$loc][$to] ) )
				msg( "Рядом с вами нет того, с кем вы хотели торговать. Если он ушел, вы можете догнать его и продолжить обмен." );
		$tchar = explode( "|", $loc_i[$loc][$to]["char"] );
		if ( $tchar[8] )
				msg( $tchar[0] . " призрак, с ним нельзя вести обмен" );
		if ( $char[8] )
				msg( "Вы призрак и не можете вести обмен" );
		$tchar = $tchar[0];
		if ( !isset( $loc_i[$loc][$to]["trade"] ) )
				msg( $tchar . " сейчас не торгует с вами, ждите пока он начнет с вами обмен (если захочет, конечно).<br/><a href=\"$PHP_SELF?sid=$sid&trade=1\">Продолжить</a>" );
		if ( $loc_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", $loc_i[$loc][$login]["trade"]["i"] ) );
		if ( $trade == "add" )
		{ // добавляем предмет
				$tcount = additem( $loc, $login, "", $id, "count" );
				if ( $tcount == 0 )
						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 )
						$loc_i[$loc][$login]["trade"]["i"] = preg_replace( '/' . $id . ':\d+/', $id . ":" . ( $tc + $num ), $loc_i[$loc][$login]["trade"]["i"] );
				else
						if ( $loc_i[$loc][$login]["trade"]["i"] )
								$loc_i[$loc][$login]["trade"]["i"] .= "|" . $id . ":" . $num;
						else
								$loc_i[$loc][$login]["trade"]["i"] = $id . ":" . $num;
				$loc_i[$loc][$to]["trade"]["ito"] = $loc_i[$loc][$login]["trade"]["i"];
				$loc_i[$loc][$login]["trade"]["a"] = 0;
				$loc_i[$loc][$to]["trade"]["a"] = 0;
		}

		if ( $trade == "del" )
		{ // удаляем предмет
				if ( strpos( $loc_i[$loc][$login]["trade"]["i"], $id . ":" ) === false )
						msg( "В вашем списке для обмена нет этого предмета" );
				$loc_i[$loc][$login]["trade"]["i"] = preg_replace( '/\|?' . $id . ':\d+\|?/', "|", $loc_i[$loc][$login]["trade"]["i"] );
				if ( substr( $loc_i[$loc][$login]["trade"]["i"], 0, 1 ) == "|" )
						$loc_i[$loc][$login]["trade"]["i"] = substr( $loc_i[$loc][$login]["trade"]["i"], 1 );
				if ( substr( $loc_i[$loc][$login]["trade"]["i"], -1 ) == "|" )
						$loc_i[$loc][$login]["trade"]["i"] = substr( $loc_i[$loc][$login]["trade"]["i"], 0, -1 );
				$loc_i[$loc][$to]["trade"]["ito"] = $loc_i[$loc][$login]["trade"]["i"];
				$loc_i[$loc][$login]["trade"]["a"] = 0;
				$loc_i[$loc][$to]["trade"]["a"] = 0;
		}

		$b = 1;
		if ( $trade == "cancel" )
		{ // отказ
				unset( $loc_i[$loc][$login]["trade"] );
				unset( $loc_i[$loc][$to]["trade"] );
				addjournal( $loc, $to, $char[0] . ": отказался от обмена с вами" );
				$b = 0;
		}

		// подготовим списки вещей
		if ( $loc_i[$loc][$login]["trade"]["i"] )
				$i = explode( "|", $loc_i[$loc][$login]["trade"]["i"] );
		else
				$i = array();
		foreach ( array_keys( $i ) as $j )
				$i[$j] = explode( ":", $i[$j] );
		if ( $loc_i[$loc][$login]["trade"]["ito"] )
				$ito = explode( "|", $loc_i[$loc][$login]["trade"]["ito"] );
		else
				$ito = array();
		foreach ( array_keys( $ito ) as $j )
				$ito[$j] = explode( ":", $ito[$j] );

		if ( $trade == "agry" && $b )
		{ // согласен, если список предметов равен у обоих и тот согласен, то обмен
				$loc_i[$loc][$login]["trade"]["a"] = 1;

				if ( $loc_i[$loc][$login]["trade"]["i"] . $loc_i[$loc][$login]["trade"]["ito"] == "" )
						msg( "Нет предметов для обмена" );
				if ( $loc_i[$loc][$login]["trade"]["i"] . $loc_i[$loc][$login]["trade"]["ito"] != $loc_i[$loc][$to]["trade"]["ito"] . $loc_i[$loc][$to]["trade"]["i"] )
				{
						$loc_i[$loc][$login]["trade"]["a"] = 0;
						$loc_i[$loc][$to]["trade"]["a"] = 0;
				}
				if ( $loc_i[$loc][$login]["trade"]["a"] && $loc_i[$loc][$to]["trade"]["a"] )
				{ // обмен
						// проверим наличие предметов
						$b = 0;
						foreach ( array_keys( $i ) as $j )
								if ( intval( preg_replace( '/.*' . $i[$j][0] . ':(\d+).*/', "\\1", $loc_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", $loc_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( $loc_i[$loc][$login]["trade"] );
								unset( $loc_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
								$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
								$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 ( $loc_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"