L2top
Какую нужно дописать проверку в этот скрипт, что бы он выдавал призы за СМС голоса и при голосовании с префиксами, например х10-ник и х500-ник? Заранее благодарю.
Скрипт:
<?php
if(!isset($_POST['name'])){
echo '<form action="l2top.php" method="post">';
echo 'Ник персонажа<br/>
<input type="text" name="name"/><br/><br/>
<input type="submit" value="Получить бонус"/>
</form>';
}else{
$bonus_id=4037; // ID вещи которую зачисляем игроку как бонус за голосование | По умолчанию 6673 - Festival Adena
$cols_for_vote=1; // Колличество зачисляемых вещей за одно голосование
$id_l2top=****; // Ваш ID в рейтинге L2Top
$host='localhost'; // сервер на котором установлена база данных L2J
$user='*********'; // имя пользователя от базы данный
$pass='**********'; // пароль пользователя от базы данный
$db='l2db'; // название базы данных
$mc = mysql_connect($host, $user, $pass);
if($mc){
$db = mysql_select_db ($db);
}
if(!$mc || !$db){
echo 'Нет соединения с базой данных.';
exit;
}
$name=mysql_escape_string($_POST['name']);
$ch=mysql_query("SELECT obj_Id FROM characters WHERE char_name = '$name';");
$chd=mysql_fetch_assoc($ch);
$char_id=$chd['obj_Id'];
$total=0;
$your_ip = $_SERVER['REMOTE_ADDR'];
$dip=explode('.',$your_ip);
$your_ip1 = $dip[0].'.'.$dip[1].'.'.$dip[2].'.xxx';
$html = @file_get_contents('http://l2top.ru/?servID='.$id_l2top.'&act=info');
if (!$html || !preg_match_all('/<td>([^<]+)<\/td>/', $html, $matches))
$error .= 'Не удалось получить информацию с L2Top.ru!<br/>';
else
{
foreach ($matches[1] as $id => $nick)
{
if (strtolower(trim($nick))==strtolower(trim($name))) {
$voters[] = $matches[1][$id-2];
}
}
if ($voters != array())
{
foreach ($voters as $time)
{
$result = mysql_query("SELECT * FROM `l2top` WHERE `nick` = '".mysql_escape_string($name)."' AND `time` = '".mysql_escape_string($time)."'");
$row = mysql_fetch_assoc($result);
if ($row == array())
{
$result = mysql_query("SELECT * FROM `items` WHERE `owner_id` = ".mysql_escape_string($char_id)." AND `item_id` = 4037");
$row = mysql_fetch_assoc($result);
if ($row == array())
{
$result = mysql_query("SELECT MAX(`object_id`)+1 AS `id` FROM `items`");
$row = mysql_fetch_assoc($result);
$ins_id = $row['id'];
mysql_query("INSERT INTO `items` (`owner_id`, `object_id`, `item_id`, `count`, `enchant_level`, `loc`, `loc_data`, `price_sell`, `price_buy`, `time_of_use`, `custom_type1`, `custom_type2`, `mana_left`)
VALUES(".mysql_escape_string($char_id).", ".$ins_id.", $bonus_id, ".$cols_for_vote.", 0, 'INVENTORY', 0, 0, 0, NULL, 0, 0, -1)");
}
else
mysql_query("UPDATE `items` SET `count` = `count` + ".$cols_for_vote." WHERE `owner_id` = ".mysql_escape_string($char_id)." AND `item_id` = 4037");
mysql_query("INSERT INTO `l2top` (`nick`, `ip`, `time`) VALUES ('".$name."', '".mysql_escape_string($your_ip1)."', '".mysql_escape_string($time)."')");
$total += $cols_for_vote;
$error .= 'Голос за '. $time.' зачислен.<br/>';
}
else
$error .= 'Голос за '. $time.' уже был зачислен.<br/>';
}
}
else
$error .= 'Ваш голос на сайте L2Top.ru не найден.<br>';
}
echo $error.'<br><b>'.$total.'</b> COL зачислено вашему персонажу!<br/>';
}
?>
up
up ![]()
xLihoy
Просто создай еще один скрипт. l2top_1.php и l2top_2.php.
— Random Post Generator
Все проще некуда...
На хостинге у себя создаем
home/site/www/bonus/x10/parce.php
home/site/www/bonus/x300/parce.php
И все.. по крону.. ставишь и танцуй лезгинку
Использовать 2 копии скрипта - идея давно меня посещала, но она имеет недостатки.
Например, я не делаю на л2топ префиксы, а просто создаю 2ю копию скрипта под 2й сервер. Представим следующую ситуацию: например у меня 2 сервера, х10 и х500. И на том, и на другом есть персонаж с ником pwnz (например), НО на х10 этот персонаж принадлежит Васе, а на х500 Пете, которые не имеют никакого отношения друг к другу. Заходит утром Вася на л2топ, голосует на своего персонажа pwnz (тот, что на х10). Заходит на сайт, тыкает на скрипт для х10 - получает бонус. Петя тоже хочет получить бонус на своего персонажа pwnz (тот, что на х500), заходит на л2топ, а там ему говорят - за такой ник уже сегодня голосовали. Как быть Пете в таком случае? Плюс сервер теряет часть голосов от таких вот совпадений.
Но, если на л2топе настроить префиксы (х10- и х500-), то Вася зайдет и проголосует за х10-pwnz, а Петя - за x500-pwnz и Л2Топ посчитает это за разные голоса. Никто не будет в обиде.
Вопрос: какую в скрипте добавить проверку, что бы когда игрок ввел свой ник в поле ввода, то скрипт проверял на Л2ТОПе не просто ник, а префикс-ник, т.е. если кто-то ввел в поле "pwnz", то скрипт проверял на Л2Топе есть ли голос x10-pwnz. Вот куда это "x10-" запихнуть в скрипте? :)
P.S. Написал много, дабы конкретно дать понять всю суть проблемы.
P.P.S. Скрипт в 1м посте, т.е. состоящий только с 1 файла+sql для БД. Перейти на другой скрипт - не вариант. Подозреваю, что изменения в скрипте нужны минимальны.
up
xLihoy
У тебя вообще-то база с голосами на каждом сервере своя должна быть. И игроки раздельно друг от друга получают голоса. Прежде чем так размышлять, надо сперва попробовать =) Уже просто проверено и испытано. У тебя-то 2 (ДВА) скрипта на разные сервера, так почему же "Петя", тыкнув на второй скрипт второго сервера, должен получить отказ? Он также спокойно получит приз...
— Random Post Generator
Блин. Ты натурально не понимаешь сути. Если сделать 2 таблицы, как ты говоришь, то будет следующее: Вася утром проголосует за pwnz и получит бонус на х10, а потом Пете, что бы получить на своего pwnz на х500 не надо будет голосовать, он просто за счет Васиного голоса получит себе бонус. Получается, при таких совпадениях за 1 голос можно получить 2 бонуса - что не есть правильным. По-этому, прежде чем что-то писать, обдумай все варианты, а потом упрекай меня в том, что я ничего не пробовал. :) Хотя ты прав, я не пробовал делать 2 скрипта, потому что описал в теории все недостатки этого.
Все еще нуждаюсь в помощи, уже хотя бы не говорите как его переделать, просто укажите в скрипте, где идет обработка голосов с Л2Топа. =)
Вот начало:
if (!$html || !preg_match_all("/<(?:td|td colspan='1')>([^<]+)<\/td>/", $html, $matches))
$error .= 'Не удалось получить информацию с L2Top.ru!<br/>';
else
{
foreach ($matches[1] as $id => $nick)
{
if (strtolower(trim($nick)) === strtolower(trim($name)))
{
$voters[] = $matches[1][$id-2];
}
}
if ($voters != array())
{
foreach ($voters as $time)
{
$result = mysql_query("SELECT * FROM `l2top` WHERE `nick` = '".mysql_escape_string($name)."' AND `time` = '".mysql_escape_string($time)."'");
$row = mysql_fetch_assoc($result);
if ($row == array())
{
То есть внизу идет уже проверка введенного никнейма (который до этого был проверен на наличие на сайте) на совпадение в БД. думаю, что в этот момент и можно сделать разветвление на сервера, сделавно проверку по первым символам. Если в начале будет x10, то зачисление голосов пойдет на первый сервер. Если же x500, то на второй. Можно сделать путем отсечения лишних знаков либо путем проверки выражение "х10" или "х500" на наличие в введенном игроком никнейме. После этого, эта часть уже отсекается и идет дальнейшее зачисление.
— Random Post Generator
up
xLihoy: up
up ![]()
Перед проверкой ника в топе лучше вписать что-то в этом духе:
if (substr_count($url,$prefix))
{
$nick=substr($url,(strlen($prefix)),(strlen($url)-strlen($prefix)));
}
}
else
{
$nick=$url;
}
if (strlen($nick)==0) continue;
Пример взят из другого скрипта, но суть та же.
На Форуме я тоже Radar!
Я везде Radar!


