Не дает бонус L2top
7 replies109 viewsCurrently viewing: 1
· 01/30/2010, 02:12 PM
Обвязка DLE модуль rb338, я проголосовал за сервер мне написали ваш голос учтен, захожу в личный кабинет клацаю на имя персонажа за которого голосовал, захожу в раздел l2top получить бонус мне пишется (В списке последних проголосовавших Ваш ник FeniX не найден)
Вопрос: что надо сделать чтоб он давал бонус.
Вот скрипт
Раскрывающийся текст
<?php
/****************************************/
/* */
/* Lineage2 DLE Module, © rb338 */
/* (especially for Mr. Grey) */
/* ------------------------- */
/* [l2top.php - bonus] */
/* uses: l2top.tpl */
/* */
/****************************************/
if(!defined('DATALIFEENGINE')) die('Hacking attempt!');
if(!defined('DLEMODULE')) die('Hacking attempt!');
if(!$_logged) die('Hacking attempt!');
if($_registered != 1) die('Незарегистрированная версия модуля DLE Lineage!');
// получение бонуса
if($_POST['form'] == 'get_bonus'){
$charId = check_int($_POST['char_id']);
$q = $dbg[$_serv]->sql_query("SELECT `char_name` FROM `characters` WHERE `obj_Id`=$charId");
$char_data = $dbg[$_serv]->sql_fetchrow($q);
$char_name = $char_data['char_name'];
if($char_name == '') $lineage = '<center>Ошибка, персонаж не найден!</center>'.GOBACK;
else{
// проверка последней смены ника
$q0 = $dbl->sql_query("SELECT `date` FROM `accounts_log` WHERE `login`='".$account_data['login']."' AND `action`='nick change - serv#{$_serv} (char#{$charId})' ORDER BY `date` DESC LIMIT 1");
$last_nickchange = $dbl->sql_fetchrow($q0);
$last_nickchange = intval($last_nickchange['date']);
if($last_nickchange > 0){
$nickchange_elapsed = time() - $last_nickchange;
if($nickchange_elapsed < 3600) $nick_block = 1;
else $nick_block = 0;
}
else $nick_block = 0;
if($nick_block != 1){
if($la2config['l2top']['block_all_acc']){
$q3 = $dbl->sql_query("SELECT `date` FROM `accounts_log` WHERE `login`='".$account_data['login']."' AND `action` LIKE 'l2top%' ORDER BY `date` DESC LIMIT 1");
}
else{
$q3 = $dbl->sql_query("SELECT `date` FROM `accounts_log` WHERE `login`='".$account_data['login']."' AND `action` LIKE 'l2top%(char#$charId)' ORDER BY `date` DESC LIMIT 1");
}
$last_act_data = $dbl->sql_fetchrow($q3);
$last_act = $last_act_data['date'];
$elapsed_last = round((time() - $last_act) / 60);
// проверка, сколько времени прошло с посл запроса
if($elapsed_last > $la2config['l2top']['get_timeout']){
$fp = @fsockopen('l2top.ru', 80, $errno, $errstr, $la2config['l2top']['timeout']);
if($fp){
$headers = "GET /?servID=".$la2config['l2top']['ServerId'][$_serv]."&act=info HTTP/1.1\r\n"
."Host: l2top.ru\r\n"
."Referer: http://l2top.ru/?servID=".$la2config['l2top']['ServerId'][$_serv]."&act=vote\r\n"
."Connection: Close\r\n\r\n";
fwrite($fp, $headers);
while(!feof($fp)) $output .= fgets($fp, 512);
fclose($fp);
$bytes = strlen($output);
$output = substr($output, strpos($output, $la2config['l2top']['search_str']));
$output = str_replace(" colspan='1'", '', $output); // удаление косяка с смс-записями
preg_match_all('/<td>([^<]+)<\/td>/', $output, $matches);
$voted = 0;
$vote_date = 0;
$vote_key = 0;
foreach($matches[1] as $key => $td_str){
if(trim($td_str) == $char_name){
$voted = 1;
$vote_date = $matches[1][$key-2];
$vote_key = $key;
break;
}
}
// ник найден
if($voted == 1){
preg_match("|([0-9]{2}):([0-9]{2}):([0-9]{2}) ([0-9]{2}).([0-9]{2}).([0-9]{2})|", $vote_date, $out);
$vote_date_timestamp = mktime($out[1], $out[2], $out[3], $out[5], $out[4], $out[6]);
$vote_date_timestamp = $vote_date_timestamp - ($la2config['l2top']['l2top_time_correction'] * 60);
$now_timestamp = time();
$elapsed = round((time() - $vote_date_timestamp) / 60);
// проверка числа прошедших минут с момента голосования
if($elapsed > $la2config['l2top']['voted_timeout']){
$lineage .= '<br><center>К сожалению, с момента голосования прошло более '.$la2config['l2top']['voted_timeout'].' минут ('.$elapsed.')</center>'.GOBACK;
InsertLogRecord($account_data['login'], "l2top - error: expired serv#$_serv (char#$charId)");
}
else{ // всё ок, даём чару бонус
// проверяем смс-х3
if($matches[1][$vote_key-3] == 'SMS' &&
$matches[1][$vote_key-2] == $matches[1][$vote_key+3] &&
$matches[1][$vote_key-2] == $matches[1][$vote_key+8] && // проверка совпадения первых 3х дат
$matches[1][$vote_key] == $matches[1][$vote_key+5] &&
$matches[1][$vote_key] == $matches[1][$vote_key+10]){ // проверка совпадения первых 3х имён
// массив вероятностей
foreach($la2config['l2top']['bonus'][$_serv] as $bonus_key => $bonus){
$probability = $bonus['probability'];
for($i = 1; $i <= $probability; $i++) $bonus_array[] = $bonus_key;
}
shuffle($bonus_array);
for($i = 0; $i < $la2config['l2top']['sms_bonus_count']; $i++){
$bonus_index = rand(0, count($bonus_array)-1);
$bonus_id = $bonus_array[$bonus_index]; // id выпавшего бонуса
$item_id = check_int($la2config['l2top']['bonus'][$_serv][$bonus_id]['item_id']);
$item_count = check_int($la2config['l2top']['bonus'][$_serv][$bonus_id]['item_count']);
$q2 = $dbg[$_serv]->sql_query("INSERT INTO `items_delayed` (`owner_id`, `item_id`, `count`) VALUES ('$charId', '$item_id', '$item_count')");
$item_name = get_item_name($item_id, $la2config['l2top']['bonus'][$_serv][$bonus_id]['item_type']);
$items_str[] = "<b>$item_name</b> ($item_count)";
$items_ids[] = $item_id;
}
$items_str_str = implode(', ', $items_str);
$lineage .= "<center>Поздравляем, Вы получили предметы $items_str_str!<br>\nПредметы появится в Вашем инвентаре после захода в игру.".GOBACK."</center>";
$items_ids_str = implode(', ', $items_ids);
InsertLogRecord($account_data['login'], "l2top - get $items_ids_str serv#$_serv (char#$charId)");
}
else{ // это простое голосование, или простая смска
// массив вероятностей
foreach($la2config['l2top']['bonus'][$_serv] as $bonus_key => $bonus){
$probability = $bonus['probability'];
for($i = 1; $i <= $probability; $i++) $bonus_array[] = $bonus_key;
}
shuffle($bonus_array);
$bonus_index = rand(0, count($bonus_array)-1);
$bonus_id = $bonus_array[$bonus_index]; // id выпавшего бонуса
$item_id = check_int($la2config['l2top']['bonus'][$_serv][$bonus_id]['item_id']);
$item_count = check_int($la2config['l2top']['bonus'][$_serv][$bonus_id]['item_count']);
$q2 = $dbg[$_serv]->sql_query("INSERT INTO `items_delayed` (`owner_id`, `item_id`, `count`) VALUES ('$charId', '$item_id', '$item_count')");
if(!$q2) $lineage .= 'Ошибка БД';
else{
$item_name = get_item_name($item_id, $la2config['l2top']['bonus'][$_serv][$bonus_id]['item_type']);
InsertLogRecord($account_data['login'], "l2top - get #$item_id (char#$charId)");
$lineage .= "<center>Поздравляем, Вы получили предмет <b>$item_name</b> ($item_count)!<br>Предмет появится в Вашем инвентаре после захода в игру.".GOBACK."</center>";
}
}
}
}
else{
InsertLogRecord($account_data['login'], "l2top - error: not in list serv#$_serv (char#$charId)");
$lineage .= "<br><center>В списке последних проголосовавших Ваш ник ($char_name) не найден!".GOBACK."</center>";
}
}
else $lineage .= "При запросе данных с l2top.ru произошла ошибка $errno:<br>$errstr\n<br>Попробуйте позже.".GOBACK;
}
else{
$lineage .= '<br><center>Ошибка, проверять бонус можно только раз в '.$la2config['l2top']['get_timeout'].' минут!".GOBACK."</center>';
InsertLogRecord($account_data['login'], "l2top - error: recheck serv#$_serv (char#$charId)");
}
}
else{
$lineage .= "<center>Ошибка! После последней смены ника должно пройти не менее часа!".GOBACK."</center>";
InsertLogRecord($account_data['login'], "l2top - error: nickchange serv#$_serv (char#$charId)");
}
}
}
// отображение формы и список бонусных итемов
else{
if(empty($_GET['id'])) $lineage = 'Ошибка';
else{
$charId = check_int($_GET['id']);
$q = $dbg[$_serv]->sql_query("SELECT `char_name` FROM `characters` WHERE `obj_Id`=$charId");
$char_data = $dbg[$_serv]->sql_fetchrow($q);
$char_name = $char_data['char_name'];
$bonus_array = $la2config['l2top']['bonus'][$_serv];
// сумма индексов вероятности
$prob_index_sum = 0;
foreach($bonus_array as $bonus_p) $prob_index_sum += $bonus_p['probability'];
function arr_compare($first, $second){
if($first['probability'] == $second['probability']) return 0;
else{
if($first['probability'] > $second['probability']) return -1;
else return 1;
}
}
usort($bonus_array, 'arr_compare');
$bonus_items = '';
foreach($bonus_array as $bonus){
$item_id = $bonus['item_id'];
$item_type = $bonus['item_type'];
$item_count = $bonus['item_count'];
$probability = round($bonus['probability'] / $prob_index_sum, 2);
$item_name = get_item_name($item_id, $item_type);
$item_icon = GetItemIcon($item_id, $item_type, $dbg[$_serv]);
$bonus_items .= "<tr><td><img src='{THEME}/lineage/img/items/".$item_icon.".gif' width=32 height=32></td>
<td style='padding: 10px;'><b>$item_name</b> ($item_count)</td><td align=center>$probability</td></tr>\n";
}
// затухание кнопки при повторном запросе
if($la2config['l2top']['block_all_acc']){
// блокировка всех чаров на акке
$q3 = $dbl->sql_query("SELECT `date` FROM `accounts_log` WHERE `login`='".$account_data['login']."' AND `action` LIKE 'l2top%' ORDER BY `date` DESC LIMIT 1");
}
else{
// блокировка каждого чара отдельно
$q3 = $dbl->sql_query("SELECT `date` FROM `accounts_log` WHERE `login`='".$account_data['login']."' AND `action` LIKE 'l2top%(char#$charId)' ORDER BY `date` DESC LIMIT 1");
}
$last_act_data = $dbl->sql_fetchrow($q3);
$last_act = $last_act_data['date'];
$elapsed_last = round((time() - $last_act) / 60);
if($elapsed_last > $la2config['l2top']['get_timeout']) $disabled = '';
else $disabled = 'disabled';
$tpl->load_template($tpldir.'/lineage/l2top.tpl');
$tpl->set('{bonus_items}', $bonus_items);
$tpl->set('{char_name}', $char_name);
$tpl->set('{char_id}', $charId);
$tpl->set('{disabled}', $disabled);
$tpl->set('{voted_timeout}', $la2config['l2top']['voted_timeout']);
$tpl->set('{get_timeout}', $la2config['l2top']['get_timeout']);
$tpl->set('{sms_bonus_count}', $la2config['l2top']['sms_bonus_count']);
$tpl->set('{server_title}', $la2config["gameserver"][$_serv]["title"]);
$tpl->set('{server_id}', $la2config['l2top']['ServerId'][$_serv]);
$tpl->compile('lineage');
$lineage = $tpl->result["lineage"];
}
}
?>
0
· 01/30/2010, 02:21 PM
Во-первых перейти на более новую систему поощрений
Во-вторых поменять ссылки вида:
Код
$headers = "GET /?servID=".$la2config['l2top']['ServerId'][$_serv]."&act=info HTTP/1.1\r\n"
."Host: l2top.ru\r\n"
."Referer: http://l2top.ru/?servID=".$la2config['l2top']['ServerId'][$_serv]."&act=vote\r\n"
."Host: l2top.ru\r\n"
."Referer: http://l2top.ru/?servID=".$la2config['l2top']['ServerId'][$_serv]."&act=vote\r\n"
На новые:
Код
$headers = "GET /info/".$la2config['l2top']['ServerId'][$_serv]."/ HTTP/1.1\r\n"
."Host: l2top.ru\r\n"
."Referer: http://l2top.ru/vote/".$la2config['l2top']['ServerId'][$_serv]."/\r\n"
."Host: l2top.ru\r\n"
."Referer: http://l2top.ru/vote/".$la2config['l2top']['ServerId'][$_serv]."/\r\n"
И так по всему скрипту, если еще что-то есть
На Форуме я тоже Radar!
Я везде Radar!
0
· 01/31/2010, 08:36 AM
Теперь пишет
Поздравляем, Вы получили предмет Festival Adena (2)!
Предмет появится в Вашем инвентаре после захода в игру.
Но захожу в игру нет нечего в инвентаре.
Вопрос: почему нечего нет в инвентаре?
0
· 01/31/2010, 08:41 AM
Han: Теперь пишет
Поздравляем, Вы получили предмет Festival Adena (2)!
Предмет появится в Вашем инвентаре после захода в игру.
Но захожу в игру нет нечего в инвентаре.
Вопрос: почему нечего нет в инвентаре?
что за сборка? ты залил vote.sql (пример) в бд?
0
· 01/31/2010, 10:53 AM
Есть еще вопрос этому модулю
когда захожу в статистику рб пишеться
Раскрывающийся текст
Ошибка MySQL:
Ошибка запроса (88.198.35.35, l2d):
SELECT `respawn_time` FROM `kill_status` WHERE `id`='25299'
1146, Table 'l2d.kill_status' doesn't exist
а остальная статистика норм работает.
Вопрос: как сделать чтоб норм показывало статистику рб?
Сборка л2дрим
0
Войдите или зарегистрируйтесь чтобы ответить



