[php]l2top Bonus
Краткое изложение СУТИ проблемы: У меня есть скрипт вот он:
*l2top.php - как перебить под структуру базы???
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
if(!isset($_POST['name'])){
$l2top = "<form method=\"post\" action=".$PHP_SELF."?do=lineage&module=l2top>";
$l2top.= "Выберите сервер: ";
for ($i=0;$i<$la2config["gameserver"]["count"];$i++) {
if ($la2config["gameserver"][$i]["hide"]==false) {
$servers[$i] = $la2config["gameserver"][$i]["title"];
}
}
$l2top.= echo_select2("server",$servers,$_serv)."<br />";
$l2top.= "
Введите ваш ник:
<input type=\"text\" name=\"name\">
<input type=\"hidden\" name=\"action\" value=\"start\">
<p><input type=\"submit\" name=\"L2TOP\" value=\"Получить бонус\"></p>
</form>";
}else{
$bonus_id=4037; // ID вещи которую зачисляем игроку как бонус за голосование | По умолчанию 4037 - Festival Adena
$cols_for_vote=100; // Колличество зачисляемых вещей за одно голосование
$id_l2top=6493; // Ваш ID в рейтинге L2Top
$host='127.0.0.1'; // сервер на котором установлена база данных L2J
$user='root'; // имя пользователя от базы данный
$pass='root'; // пароль пользователя от базы данный
$db='l2jdb'; // название базы данных
$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].'.'.$dip[3].'';
$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>';
}
$error .'<br><b>'.$total.'</b> Festival Adena зачислено чару с ником <strong>'.$name.'</strong><br/>';
$error1 = '<br><b>'.$total.'</b> Festival Adena зачислено чару с ником <strong>'.$name.'</strong><br/>';
}
$tpl->load_template($tpldir.'/lineage/l2top.tpl');
$tpl->set('{link}', $l2top);
$tpl->set('{error}', $error);
$tpl->set('{result}', $result);
$tpl->set('{total}', $total);
$tpl->set('{FA}', $error1);
$tpl->compile('lineage');
$lineage = $tpl->result["lineage"];
$tpl->clear();
?>
скрыть
document.close();
*l2top.tpl - что это такое???
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
<style>
.news {
color: #986655;
font-size: 11px; /* ! */
font-family: tahoma; /* ! */
text-align: justify;
}
.news a {
color: #986655;
text-decoration: underline;
</style>
</head>
<div align="center">
<table width="521" height="230">
<tr>
<td width="511" height="219" class="news">
<left>
Добро пожаловать на страницу "Получение бонуса за Голосование". Мы очень хотим, что бы наш сервер развивался, поэтому поощраяем наших игроков за голосование. Что бы получить "100 Gold Lionna", вам надо:<br>
1. Проголосуйте на {link}.<br>
2. Внизу введите имя своего чара на сервере и нажмите кнопку "Получить 100 Gold Lionna".<br>
3. Если все пройдет успешно - вы получите бонус!<br><br>
P.S. Если же вы не получили бонус, не спешите доставать ГМ. Убедитесь, что ваш IP адресс и ник присутствует на странице L2Top. Удачи....
</left>
</td>
</tr>
<tr>
<td class="news">
<div align="center">{l2top}<br>{error}</div>
</td>
</tr>
</table>
</div>
скрыть
document.close();
l2top.sql - правильный ли sql?
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
`id` int(10) NOT NULL AUTO_INCREMENT,
`nick` varchar(30) NOT NULL,
`ip` varchar(20) NOT NULL,
`time` varchar(20) NOT NULL,
`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
скрыть
document.close();
почему-то это всё не работает, я спрашивал как перебить под la2base мне ответили: "переправить запросы в скрипте под структуру базы "
Вопрос: как исправить, как перебить под структуру базы??? Вообще расскажите кто нить пожалуйста всё об это скрипте где и что к чему относиться!
Мои соображения по этому поводу: нету соображений! а вообще в самом начале по моему в скрипте ошибка т.к. прочитал на сайте самоучителя php, следующие - "Любой PHP скрипт должен начинаться с тэга <?php и заканчиаться тегом ?>." там же он начинается с простого тега "<?" и заканчивается вроде норм тегом "?>"!
подпись она и в Африке подпись!
Случайно нажал спасибку :)
Начну с конца:
1. <?php и <? это одно и тоже, как хочешь так скрипт и начинай, дело вкуса.
2. sql правильный, он просто создает таблицу, в которой будет сохраняться инфа о голосованиях.
3. l2top.tpl это, если я правильно понял, скрипт для DLE, этот файл нуно кидать куда-то в папку со скином, точно сказать не могу.
4. Ну а теперь разберемся с l2top.php . "переправить запросы в скрипте под структуру базы" это значит, что нам надо переписать запросы в скрипте под конкретную сборку.
Первым мне попался запрос вида
Идем далее, видим
Короче говоря, глазами пробежался, вроде все соответствует БД. С чего ты взял, что его надо переписывать ?
Ну мне так сказали, а я в этом не шарю, ну и повёлся :'(
подпись она и в Африке подпись!
Пробовал я тут какой то так там жмёшь типо проверить ник он пишет не голосовали и пока :(
_http://la2base.ru/forum/index.php?showtopic=32941&hl=l2top+%EF%EE%EE%F9%F0%E5%ED%E8%FF
тут брал все какие то кривые :'(
подпись она и в Африке подпись!
Видать чето не то делаешь )
Опиши подробно, как устанавливаешь. Кстати те скрипты, которые в том топике, выглядят совсем по другом, в них нет никаких l2top.sql и l2top.tpl
я так понимаю это два запроса в sql, как правильно их написать, точнее создать!?
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
GO
CREATE TABLE [dbo].[l2_votex] (
[char_id] varchar(50) NULL,
[date] varchar(50) NULL,
[ip] varchar(50) NULL,
[is_activated] varchar(50) NULL
)
ON [PRIMARY]
GO
CREATE TABLE [dbo].[l2_votex_ip] (
[ip] varchar(50) NULL,
[date] varchar(50) NULL
)
ON [PRIMARY]
GO
скрыть
document.close();
votex.php что тут и за что отвечает!?
<script type='text/javascript'>
mytagid = Math.floor( Math.random() * 100 );
document.write("
session_start();
function antiinjection($str)
{
$words = array("\\", "'", ",", ";", "--", "-", "%20", "%27", " ", "`", "=", "%");
$words_preg = array("|INSERT|i", "|DROP|i", "|SELECT|i", "|DELETE|i", "|UPDATE|i", "|TRUNCATE|i", "|SHUTDOWN|i");
for($i=0;$i<count($words_preg);$i++){
if(preg_match($words_preg[$i], $str)){$apina = 500;}
}
for($i=0;$i<count($words);$i++){
$jopa=strpos($str, $words[$i]);
if(is_numeric($jopa)){$apina = 500;}
}
if($apina==500){
return FALSE;
} else {
return TRUE;
}
}
$dberror=0;
$realIP = $_SERVER["REMOTE_ADDR"];
$realtime = time();
$exp_time = 86400;
$mssql_host = "127.0.0.1";
$mssql_login = "Твой логин";
$mssql_pass = "Твой пасс";
$mssql_db = "lin2world";
$adena_id = 9994;
$adena_amount = 1;
$dbconnect2=mssql_connect($mssql_host, $mssql_login, $mssql_pass);
if(!$dbconnect2) { echo "Не могу установить соединение с базой. Попробуйте позже."; $dberror=1; }
if($dberror!=1) {
echo "
<h1>Проголосуй и получи приз!</h1>
<b>Уважаемые игроки!</b><br>
Чтобы получить приз за голосование в рейтинге, вы должны:
<ul>
<li>Проголосовать за сервер. ( <a href='http://l2top.ru/?voteme=6468' target='_blank'><b><u>Нажмите здесь, чтобы проголосовать</u></b></a> )<br>(<i>Голос считается зачисленным, если на L2TOP вам после голосования написали 'Спасибо. Ваш голос зачтен'. Приз можно получить только если ваш голос был зачтен!</i>)</li>
<li>На этой странице вписать ник персонажа, которому вы хотите отдать приз.</li>
<li>Далее если все данные верны вы получить приз на указанного персонажа.</li>
<li>Запрещается намеренная накрутка счетчика, наказание - блокировка всех аккаунтов.</li>
<li>Внимание! Выдача приза если персонаж в это время находился в игре или сервер ОФФЛАЙН, НЕ ГАРАНТИРУЕТСЯ!</li>
</ul><br><br>
";
if (strlen($realIP)<4 ||strlen($realIP)>16) {
echo "<center><span style='color:red'>Ошибка: Повреждена целостность данных.</span><br></center>";
exit;
}
if(count($_POST)>0){
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
$zalupa=0;
$serv_info=file("http://l2top.ru/?servID=3227&act=info");
for($i=0;$i<count($serv_info);$i++){
if(strpos($serv_info[$i], $realIP) !== false) {
$zalupa=1;
}
}
if($zalupa==0){echo "<center><span style='color:red'>Ошибка: Вы не проголосовали в рейтинге или нет связи с сервером L2TOP.</span><br>Чтобы проголосовать нужно кликнуть по ссылке ниже, после голосования вернитесь на эту страницу и повторите еще раз. Если вы уверены, что проголосовали, повторите попытку позже.<br><a href='http://l2top.ru/?voteme=6468' target='_blank'><b><u>Перейти на страницу голосования ...</u></b></a></center><br><br>";
} else {
$char = $_POST["char"];
if(antiinjection($char)){
$antichar=$char;
if (strlen($antichar)<1 ||strlen($antichar)>16) {
echo "<center><span style='color:red'>Длина имени должна быть в диапазоне от 1 до 16 символов.<br><br></span><br></center>";
} else {
mssql_connect($mssql_host, $mssql_login, $mssql_pass);
mssql_select_db($mssql_db);
$r=mssql_query("SELECT * FROM l2_votex WHERE char_id='$antichar' and date>'$realtime'");
if(mssql_num_rows($r) == 0 ) {
$error = 2;
} else {
echo "<center><span style='color:red'>Ошибка: Вы уже голосовали сегодня. Приходите через 24 часа!<br><br></span></center>";
}
}
} else { echo "<center><span style='color:red'>Неверное значение в поле - введите свой ник.</span></center><br><br>"; }
}
if($error==2) {
$starter="1";
mssql_connect($mssql_host, $mssql_login, $mssql_pass);
mssql_select_db($mssql_db);
$r=mssql_query("SELECT * FROM l2_votex_ip WHERE ip='$realIP' and date>'$realtime'");
if(mssql_num_rows($r) == 0 ) {
$error2 = 1;
} else {
echo "<center><span style='color:red'>Ошибка: Вы уже голосовали сегодня. Приходите через 24 часа!<br><br></span></center>";
}
}
if($error2==1) {
mssql_connect($mssql_host,$mssql_login,$mssql_pass);
mssql_select_db($mssql_db);
$res = mssql_query("SELECT char_id FROM user_data WHERE char_name = '$antichar' ");
$ch_char=mssql_result($res, 0, 'char_id');
if(mssql_num_rows($res)>0 ) {
$error = 3;
} else {
echo "<center><span style='color:red'>Ошибка: Такого перса нет на сервере.<br><br></span></center>";
$thedata = date("d.m.Y H:i");
$success = "$thedata - не найден в базе [$antichar][$realIP] \r\n";
$file = fopen("errors.txt", "a+");
fwrite($file, $success);
fclose($file);
}
}
if($error==3) {
$stopfr = 2;
$realtime2 = $realtime+$exp_time;
mssql_connect($mssql_host, $mssql_login, $mssql_pass);
mssql_select_db($mssql_db);
$result=mssql_query("INSERT INTO l2_votex(char_id, date, ip, is_activated) VALUES('$antichar','$realtime2','$realIP','1')");
$result2=mssql_query("INSERT INTO l2_votex_ip(date, ip) VALUES('$realtime2','$realIP')");
//Обращаемся к CacheD
include('cached/cached.php');
$warehouse = 0;
$enchant = 0;
$eroded = 0;
$bless = 0;
$wished = 0;
$cached = new CacheD;
if ($cached -> KickCharacterPacket($ch_char)) { $cached -> AddItem2Packet($ch_char,$warehouse,$adena_id,$adena_amount,$enchant, $eroded, $bless, $wished);}
$thedata = date("d.m.Y H:i");
$success = "$thedata - начислено персонажу [$adena_id] в кол-ве [$adena_amount]-[$antichar][$ch_char] проголосовавшего с ИП - [$realIP] \r\n";
$file = fopen("histvotes.txt", "a+");
fwrite($file, $success);
fclose($file);
}
}else{
echo "<center><span style='color:red'>Ошибка: Неверно введен код с картинки.<br><br></span></center>";
}
}
unset($_SESSION['captcha_keystring']);
if($starter!=1) {
echo "
<form name='vote' action=votex.php method='post'>
<fieldset>
<legend><b>Получить приз:</b></legend>
<table cellspacing=0 border=0 cellpadding=0 width=100%>
<tr><td align=left>
<b>Введите свой ник </b>
</td>
<td align=right>
<div align=right>
<input type=text name=char value=''>
</div>
</td></tr>
<tr><td align=left>
<b><i>Код на картинке</i></b><br>(Введите число, которое Вы видите на картинке. Если вы не видите картинку, включите в браузере отображение картинок.):
</td>
<td align=right>
<div align=right>
<img src='captha/index.php?<?php echo session_name()?>=<?php echo session_id()?>'><br><br>
<input type=text name=keystring value=''>
</div>
</td></tr>
</table>
</fieldset>
<br>
<div align=right>
<input type=submit name=select value='Продолжить'></form></div>
";
}
if($stopfr==2) {
echo "
<center>
<span style='color:blue'><b><h2>Ура, сработало!</h2></b></span><br><br>Ваш голос зачтен и вам выдан приз. <br> Следующий раз вы сможете проголосовать через 24 часа.</center>
";
}
} ?>
скрыть
document.close();
там есть еще капча...её не буду выкладывать..если хотите глянуть, то скачайте 170kb не накладно я думаю))
помогите сделать рабочим это скрипт под La2babe Final
Суть его не работоспособности в том, что когда я проголосовал в топе и пишу свой ник, то пишет мне он что я не голосовал... =(
подпись она и в Африке подпись!
блин жаль, а можно его перебить под яву!? :( может быть есть у кого то примерный скрипт под джаву рабочий желательно с FAQ по установке!!! :)
у мну вопрос....обязательно ли в крон вбивать обновление скрипта!? мой скрипт стоит на DLE ну и вроде автоматом обновляется!!! :(
Помогите сделать любой скрипт рабочий под la2base Final (1.1.7) что то вообще ничего не пашет :(
подпись она и в Африке подпись!




![-=[BloodKill]=-](/uploads/fotos/av-39301.jpg)