Upload code
This commit is contained in:
parent
df4832b57f
commit
d0b334a426
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
i/** filter=lfs diff=lfs merge=lfs -text
|
||||||
|
img/** filter=lfs diff=lfs merge=lfs -text
|
18
.htaccess
Normal file
18
.htaccess
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Disable access to this files
|
||||||
|
<FilesMatch "\.(dat)$">
|
||||||
|
Deny from all
|
||||||
|
</FilesMatch>
|
||||||
|
# Default startup page
|
||||||
|
DirectoryIndex index.php
|
||||||
|
# Disable output dirs
|
||||||
|
Options -Indexes
|
||||||
|
# UTF8 support
|
||||||
|
AddDefaultCharset utf8
|
||||||
|
<IfModule mod_charset.c>
|
||||||
|
CharsetDisable on
|
||||||
|
CharsetRecodeMultipartForms Off
|
||||||
|
</IfModule>
|
||||||
|
php_value default_charset UTF-8
|
||||||
|
php_flag zlib.output_compression On
|
||||||
|
FileETag none
|
||||||
|
ErrorDocument 404 /engline/error/404.html
|
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/../../../../../../:\Users\lopar\Downloads\AntiCombats\.idea/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
6
.idea/dictionaries
generated
Normal file
6
.idea/dictionaries
generated
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectDictionaryState">
|
||||||
|
<dictionary name="Lopar" />
|
||||||
|
</component>
|
||||||
|
</project>
|
10
.idea/misc.xml
generated
Normal file
10
.idea/misc.xml
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration>C:\Users\lopar.LIDOM\AppData\Roaming\Subversion</configuration>
|
||||||
|
</component>
|
||||||
|
<component name="VagrantProjectSettings">
|
||||||
|
<option name="instanceFolder" value="" />
|
||||||
|
<option name="provider" value="" />
|
||||||
|
</component>
|
||||||
|
</project>
|
3
admin/.htaccess
Normal file
3
admin/.htaccess
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
Allow from 127.0.0.1
|
131
admin/ajax.php
Normal file
131
admin/ajax.php
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("../engline/config.php");
|
||||||
|
include("../engline/dbsimple/Generic.php");
|
||||||
|
include("../engline/data/data.php");
|
||||||
|
include("../engline/functions/functions.php");
|
||||||
|
|
||||||
|
$guid = getGuid('ajax', '../');
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
$char->test->Guid('ajax', '../');
|
||||||
|
$char->test->Admin('ajax', '../');
|
||||||
|
|
||||||
|
$do = getVar('do');
|
||||||
|
|
||||||
|
switch ($do)
|
||||||
|
{
|
||||||
|
/*Отображение типов предметов*/
|
||||||
|
case 'showtypes':
|
||||||
|
$section = getVar('section');
|
||||||
|
|
||||||
|
if (!$section)
|
||||||
|
die('');
|
||||||
|
|
||||||
|
$types = $adb->selectCol("SELECT `type` AS ARRAY_KEY FROM `admin_item_create` WHERE `section` = ?s and `type` != 'lang';", $section);
|
||||||
|
|
||||||
|
$return = "<select class='field' name='type'><option value='' selected></option>";
|
||||||
|
foreach ($types as $type => $n)
|
||||||
|
$return .= "<option value='$type'>$type</option>";
|
||||||
|
$return .= "</select><br>";
|
||||||
|
die($return);
|
||||||
|
break;
|
||||||
|
/*Отображение полей предмета*/
|
||||||
|
case 'showfields':
|
||||||
|
$type = getVar('type');
|
||||||
|
|
||||||
|
if (!$type)
|
||||||
|
die('');
|
||||||
|
|
||||||
|
$lang = $adb->selectRow("SELECT * FROM `admin_item_create` WHERE `type` = 'lang';");
|
||||||
|
$fields = $adb->selectRow("SELECT * FROM `admin_item_create` WHERE `type` = ?s", $type);
|
||||||
|
$table = "<table border='0'>";
|
||||||
|
$a = 0;
|
||||||
|
foreach ($fields as $field => $val)
|
||||||
|
{
|
||||||
|
if (!$val || $field == 'section' || $field == 'type')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$title = $field;
|
||||||
|
switch ($field)
|
||||||
|
{
|
||||||
|
case 'item_flags': $title .= " 1-Sellable, 2-Repairable, 4-Artefact, 8-Personal, 16-Left Hand"; break;
|
||||||
|
case 'name': $return = "<font class='header'>Основные:<hr></font>$table"; $i = 0; $c = 7; break;
|
||||||
|
case 'min_level': $return .= "</table><font class='header'>Требования:<hr></font>$table"; $i = 0; $c = 11; break;
|
||||||
|
case 'add_str': $return .= "</table><font class='header'>Характеристики:<hr></font>$table"; $i = 0; $c = 9; break;
|
||||||
|
case 'def_h':
|
||||||
|
case 'def_a':
|
||||||
|
case 'def_b':
|
||||||
|
case 'def_l':
|
||||||
|
case 'attack':
|
||||||
|
case 'add_hit_min': if(!$a){$return .= "</table><font class='header'>Защита и урон:<hr></font>$table"; $i = 0; $c = 7; $a = 1;} break;
|
||||||
|
case 'res_magic': $return .= "</table><font class='header'>Резисты:<hr></font>$table"; $i = 0; $c = 12; break;
|
||||||
|
case 'mf_dmg': $return .= "</table><font class='header'>Мф удара:<hr></font>$table"; $i = 0; $c = 10; break;
|
||||||
|
case 'mf_acrit': $return .= "</table><font class='header'>Мф усиления:<hr></font>$table"; $i = 0; $c = 9; break;
|
||||||
|
case 'all_magic': $return .= "</table><font class='header'>Умения:<hr></font>$table"; $i = 0; $c = 12; break;
|
||||||
|
case 'rep_magic': $return .= "</table><font class='header'>Подавления:<hr></font>$table"; $i = 0; $c = 7; break;
|
||||||
|
case 'ch_sting': $return .= "</table><font class='header'>Шансы:<hr></font>$table"; $i = 0; $c = 10; break;
|
||||||
|
case 'inc_count': $return .= "</table><font class='header'>Дополнительно:<hr></font>$table"; $i = 0; $c = 9; break;
|
||||||
|
case 'description': $return .= '</tr><tr>'; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($field)
|
||||||
|
{
|
||||||
|
case 'name':
|
||||||
|
case 'personal_owner':
|
||||||
|
case 'img': $size = 150; break;
|
||||||
|
case 'validity':
|
||||||
|
case 'price':
|
||||||
|
case 'price_euro': $size = 60; break;
|
||||||
|
case 'description': $size = 300; break;
|
||||||
|
default: $size = 30; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$return .= "<td title='$title'>$lang[$field]:</td><td><input class='field' type='text' name='$field' style='width: ".$size."px;'></td>";
|
||||||
|
$i++;
|
||||||
|
if (!($i % $c))
|
||||||
|
$return .= '</tr><tr>';
|
||||||
|
}
|
||||||
|
$return .= "</tr></table><input type='submit' name='create' value='Создать'>";
|
||||||
|
die($return);
|
||||||
|
break;
|
||||||
|
/*Создание предмета*/
|
||||||
|
case 'createitem':
|
||||||
|
$fields = getVar('fields');
|
||||||
|
$sql = array();
|
||||||
|
$field = explode('$$', $fields);
|
||||||
|
unset($field[count($field) - 1]);
|
||||||
|
foreach ($field as $fill)
|
||||||
|
{
|
||||||
|
$f = explode('=', $fill);
|
||||||
|
$sql[$f[0]] = $f[1];
|
||||||
|
}
|
||||||
|
$adb->query("INSERT INTO `item_template` (?#) VALUES (?a);",array_keys($sql), array_values($sql));
|
||||||
|
die('complete');
|
||||||
|
break;
|
||||||
|
/*Удаление персонажа*/
|
||||||
|
case 'delete_char':
|
||||||
|
$d_guid = getVar('d_guid');
|
||||||
|
$adb->query("DELETE FROM `character_bank` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_bars` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_effects` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_equip` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_info` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_inventory` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_sets` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `character_stats` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `characters` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `history_auth` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `history_mail` WHERE `guid` = ?d", $d_guid);
|
||||||
|
$adb->query("DELETE FROM `history_items` WHERE `guid` = ?d", $d_guid);
|
||||||
|
die('complete');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
?>
|
13
admin/functions.php
Normal file
13
admin/functions.php
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die('Доступ запрещен!');
|
||||||
|
|
||||||
|
function formatfilesize ($data)
|
||||||
|
{
|
||||||
|
// bytes
|
||||||
|
if ($data < 1024) return $data.' bytes';
|
||||||
|
// kilobytes
|
||||||
|
else if ($data < 1024000) return round(($data / 1024), 1).' kb';
|
||||||
|
// megabytes
|
||||||
|
else return round(($data / 1024000), 1).' mb';
|
||||||
|
}
|
||||||
|
?>
|
BIN
admin/img/arrow_down.gif
Normal file
BIN
admin/img/arrow_down.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 949 B |
BIN
admin/img/arrow_up.gif
Normal file
BIN
admin/img/arrow_up.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 949 B |
BIN
admin/img/enter.gif
Normal file
BIN
admin/img/enter.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
BIN
admin/img/logo.gif
Normal file
BIN
admin/img/logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
admin/img/redo.png
Normal file
BIN
admin/img/redo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
61
admin/index.php
Normal file
61
admin/index.php
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("../engline/config.php");
|
||||||
|
include("../engline/dbsimple/Generic.php");
|
||||||
|
include("../engline/data/data.php");
|
||||||
|
include("../engline/functions/functions.php");
|
||||||
|
|
||||||
|
$guid = getGuid('game', '../');
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
$char->test->Guid('game', '../');
|
||||||
|
$char->test->Admin('game', '../');
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Административная панель</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="css.css">
|
||||||
|
<script src="../scripts/jquery.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function (){
|
||||||
|
$('#none').css('font-weight', 'bold');
|
||||||
|
$('body').on('click', '.menu', function (){
|
||||||
|
$('.menu').css('font-weight', 'normal');
|
||||||
|
$(this).css('font-weight', 'bold');
|
||||||
|
});
|
||||||
|
$('[name=main]').attr('height', ($(window).height()-150));
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body bgColor="#3D3D3B">
|
||||||
|
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%" style="padding: 10px;">
|
||||||
|
<tr><td align="center" colspan="2"><img src="img/enter.gif"><div align='right'>Здравствуйте, <strong><?echo $char->getLogin();?></strong> (<a href='javascript:window.close();' style='color: red; text-decoration: underline;'>Выход</a>)</div></td></tr>
|
||||||
|
<tr height="100%">
|
||||||
|
<td valign="top" width="240">
|
||||||
|
<div class="white">Навигация</div><hr>
|
||||||
|
<?
|
||||||
|
$rows = $adb->select("SELECT * FROM `admin_menu` ORDER BY `id`;");
|
||||||
|
foreach ($rows as $menu)
|
||||||
|
{
|
||||||
|
echo "<a href='main.php?act=$menu[href]' target='main' onclick='this.blur();' class='menu' id='$menu[href]'>$menu[name]</a><br>";
|
||||||
|
if (in_array($menu['href'], array('coder', 'travm')))
|
||||||
|
echo "<hr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
<td valign="top">
|
||||||
|
<div class="white" id="info">Информация</div><hr>
|
||||||
|
<iframe src="main.php" width="100%" height="500" noresize frameborder="0" name="main"></iframe>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td colspan="2" align='center'><small>Powered by Madmunus</small></td></tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
40
admin/main.php
Normal file
40
admin/main.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("../engline/config.php");
|
||||||
|
include("../engline/dbsimple/Generic.php");
|
||||||
|
include("../engline/data/data.php");
|
||||||
|
include("../engline/functions/functions.php");
|
||||||
|
include("functions.php");
|
||||||
|
|
||||||
|
$guid = getGuid('main', '../');
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
$char->test->Guid('main', '../');
|
||||||
|
$char->test->Admin('main', '../');
|
||||||
|
|
||||||
|
$act = getVar('act', 'none');
|
||||||
|
$acts = $adb->selectCol("SELECT `href` AS ARRAY_KEY, `name` FROM `admin_menu`;");
|
||||||
|
$act = (array_key_exists($act, $acts)) ?$act :'none';
|
||||||
|
?>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<script src="../scripts/jquery.js" type="text/javascript"></script>
|
||||||
|
<script src="../scripts/show.js" type="text/javascript"></script>
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css">
|
||||||
|
</head>
|
||||||
|
<script type="text/javascript">$('#info', parent.document).html('Информация: <?echo $acts[$act];?>');</script>
|
||||||
|
<?
|
||||||
|
switch ($act)
|
||||||
|
{
|
||||||
|
case 'none': echo "<center><img src='img/logo.gif'></center>"; break;
|
||||||
|
case 'phpinfo': phpinfo(); break;
|
||||||
|
default: include("module/$act.php"); break;
|
||||||
|
}
|
||||||
|
?>
|
40
admin/module/add.php
Normal file
40
admin/module/add.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
?>
|
||||||
|
<script>
|
||||||
|
$(function (){
|
||||||
|
$('body').on('change', '[name=section]', function (){
|
||||||
|
$('#types').html('');
|
||||||
|
$('#fields').html('');
|
||||||
|
$.post('ajax.php', {'do': 'showtypes', 'section': $(this).val()}, function (data){
|
||||||
|
$('#types').html(data);
|
||||||
|
});
|
||||||
|
}).on('change', '[name=type]', function (){
|
||||||
|
$('#fields').html('');
|
||||||
|
$.post('ajax.php', {'do': 'showfields', 'type': $(this).val()}, function (data){
|
||||||
|
$('#fields').html(data);
|
||||||
|
});
|
||||||
|
}).on('click', '[name=create]', function (){
|
||||||
|
var fields = '';
|
||||||
|
$('.field').each(function (){if ($(this).val()) fields += $(this).attr('name')+'='+$(this).val()+'$$';});
|
||||||
|
$.post('ajax.php', {'do': 'createitem', 'fields': fields}, function (data){
|
||||||
|
if (data == 'complete')
|
||||||
|
alert('Предмет создан');
|
||||||
|
else
|
||||||
|
alert(data);
|
||||||
|
});
|
||||||
|
$('#fields').html('');
|
||||||
|
$.post('ajax.php', {'do': 'showfields', 'type': $('[name=type]').val()}, function (data){
|
||||||
|
$('#fields').html(data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
Тип предмета:
|
||||||
|
<select class='field' name="section">
|
||||||
|
<option value="" selected></option>
|
||||||
|
<option value="item">item</option>
|
||||||
|
<option value="thing">thing</option>
|
||||||
|
</select>
|
||||||
|
<font id='types'></font>
|
||||||
|
<font id='fields'></font>
|
76
admin/module/chars.php
Normal file
76
admin/module/chars.php
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
$sort = getVar('sort', 'guid', 2);
|
||||||
|
$sort_c = array(
|
||||||
|
'guid' => 'ID',
|
||||||
|
'login' => 'Логин',
|
||||||
|
'admin_level' => 'Админ',
|
||||||
|
'level' => 'Уровень',
|
||||||
|
'exp' => 'Опыт',
|
||||||
|
'money' => 'Деньги',
|
||||||
|
'room' => 'Комната',
|
||||||
|
'city' => 'Город'
|
||||||
|
);
|
||||||
|
$sort = (array_key_exists($sort, $sort_c)) ?$sort :'guid';
|
||||||
|
?>
|
||||||
|
<style>
|
||||||
|
.remove {cursor: pointer;}
|
||||||
|
</style>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function deleteChar (d_guid)
|
||||||
|
{
|
||||||
|
$.post('ajax.php', {'do': 'delete_char', 'd_guid': d_guid}, function (data){
|
||||||
|
if (data == 'complete')
|
||||||
|
$('tr#'+d_guid).hide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(function (){
|
||||||
|
$('body').on('change', 'select[name=sort]', function (){
|
||||||
|
$('form#sort').submit();
|
||||||
|
}).on('click', 'img.remove', function (){
|
||||||
|
deleteChar($(this).attr('id'));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<form id="sort" action="" method="post">
|
||||||
|
Сортировать по:
|
||||||
|
<select class="small" name="sort">
|
||||||
|
<?
|
||||||
|
foreach ($sort_c as $key => $val)
|
||||||
|
{
|
||||||
|
$select = ($sort == $key) ?" selected" :"";
|
||||||
|
echo "<option value='$key'$select>$val</option>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
<table width="100%" border="1" cellspacing="0" cellpadding="3" align="center">
|
||||||
|
<tr align="center">
|
||||||
|
<?
|
||||||
|
foreach ($sort_c as $key => $val)
|
||||||
|
echo "<td><strong>$val</strong></td>";
|
||||||
|
?>
|
||||||
|
<td> </td>
|
||||||
|
</tr>
|
||||||
|
<?
|
||||||
|
$characters = $adb->select("SELECT `guid`, `login`, `level`, `exp`, `admin_level`, `money`, `city`, `room` FROM `characters` ORDER BY ?#", $sort);
|
||||||
|
foreach ($characters as $character)
|
||||||
|
{
|
||||||
|
$bg = ($adb->selectCell("SELECT `guid` FROM `online` WHERE `guid` = ?d", $character['guid'])) ?"#00FFAA" :"#FFAAAA";
|
||||||
|
$admin = ($character['admin_level']) ?"unlock.gif" :"del.gif";
|
||||||
|
echo "<tr id='$character[guid]' style='background: $bg; text-align: center;'>"
|
||||||
|
. "<td>$character[guid]</td>"
|
||||||
|
. "<td>$character[login]</td>"
|
||||||
|
. "<td><img src='../img/icon/$admin' width='14' height='14' border='0' alt='$character[admin_level] Уровень'></td>"
|
||||||
|
. "<td>$character[level]</td>"
|
||||||
|
. "<td>$character[exp]</td>"
|
||||||
|
. "<td>".getMoney($character['money'])." кр.</td>"
|
||||||
|
. "<td>".$char->city->getRoom($character['room'], $character['city'], 'name')."</td>"
|
||||||
|
. "<td>".$char->city->getCity($character['city'], 'name')."</td>"
|
||||||
|
. "<td width='14'><img src='../img/icon/clear.gif' width='14' height='14' border='0' alt='Удалить персонажа' id='$character[guid]' class='remove'></td>"
|
||||||
|
. "</tr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
40
admin/module/coder.php
Normal file
40
admin/module/coder.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
$tac = getVar('tac', 1);
|
||||||
|
$tot = getVar('tot');
|
||||||
|
?>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function (){
|
||||||
|
$('body').on('change', 'input[name=tac]', function (){
|
||||||
|
$('form#code').submit();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<table>
|
||||||
|
<form method="post" id="code">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="radio" name="tac" value="1"<?echo ($tac == 1) ?'checked' :''?>>B64 Encode
|
||||||
|
<input type="radio" name="tac" value="2"<?echo ($tac == 2) ?'checked' :''?>>B64 Decode
|
||||||
|
<input type="radio" name="tac" value="3"<?echo ($tac == 3) ?'checked' :''?>>MD5
|
||||||
|
<input type="radio" name="tac" value="4"<?echo ($tac == 4) ?'checked' :''?>>SHA1
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Текст: <input type="text" name="tot" size="100" value="<?echo $tot;?>"><br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
<?
|
||||||
|
if (!$tot) die();
|
||||||
|
switch ($tac)
|
||||||
|
{
|
||||||
|
case 1: echo "B64 Encode: <b>".base64_encode($tot)."</b>"; break;
|
||||||
|
case 2: echo "B64 Decode: <b>".base64_decode($tot)."</b>"; break;
|
||||||
|
case 3: echo "MD5: <b>".md5($tot)."</b>"; break;
|
||||||
|
case 4: echo "SHA1: <b>".sha1($tot)."</b>"; break;
|
||||||
|
}
|
||||||
|
?>
|
23
admin/module/doc.php
Normal file
23
admin/module/doc.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$rows = $adb->select("SELECT * FROM `admin_menu` ORDER BY `id`;");
|
||||||
|
?>
|
||||||
|
<div>
|
||||||
|
Данная документация ещё не доработана, но всё же хотелось бы рассказать об основных функциях и фишках Админ Центра , что же приступим :).<br>
|
||||||
|
<br>
|
||||||
|
1) Основное меню:<br>
|
||||||
|
Основное меню состоит из двух разделов 1 - Навигация : 2 - Информация.
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
Навигация это , то меню где расположенны основные фишки такие как:<br><br>
|
||||||
|
<?
|
||||||
|
foreach ($rows as $menu)
|
||||||
|
{
|
||||||
|
echo "$menu[name]<br>";
|
||||||
|
if (in_array ($menu['href'], array('doc', 'coder', 'travm', 'team2')))
|
||||||
|
echo "<hr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<br>
|
||||||
|
</div>
|
26
admin/module/hpmp.php
Normal file
26
admin/module/hpmp.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
$hp = (isset($_POST['hp'])) ?$_POST['hp'] :"";
|
||||||
|
$mp = (isset($_POST['mp'])) ?$_POST['mp'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25"><br>
|
||||||
|
<strong>НР</strong><br>
|
||||||
|
<input type="text" name="hp" size="25"><br>
|
||||||
|
<strong>Манна</strong><br>
|
||||||
|
<input type="text" name="mp" size="25"><br>
|
||||||
|
<input type="submit" name="submit" value="Вылечить"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']) && isset($_POST['hp']) && isset($_POST['mp']))
|
||||||
|
{
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `hp` = '$hp',
|
||||||
|
`mp` = '$mp'
|
||||||
|
WHERE `login` = '$login';
|
||||||
|
");
|
||||||
|
echo "Смена маны и здоровья прошли успешно";
|
||||||
|
}
|
||||||
|
?>
|
25
admin/module/kick.php
Normal file
25
admin/module/kick.php
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25" value="<?echo $r_login;?>">
|
||||||
|
<input type="submit" name="submit" value="Далее">
|
||||||
|
</form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']) && $r_login == '')
|
||||||
|
echo "Вы не ввели Логин.";
|
||||||
|
else if ($r_login != '')
|
||||||
|
{
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `battle` = '0',
|
||||||
|
`battle_pos` = '',
|
||||||
|
`battle_team` = '',
|
||||||
|
`battle_opponent` = ''
|
||||||
|
WHERE `login` = '$r_login';
|
||||||
|
");
|
||||||
|
echo "Персонаж вытащен из битвы";
|
||||||
|
}
|
||||||
|
?>
|
24
admin/module/kick_all.php
Normal file
24
admin/module/kick_all.php
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$answer = (isset($_POST['answer'])) ?$_POST['answer'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Достать всех из битвы</strong><br>
|
||||||
|
<select name="answer">
|
||||||
|
<option value="no">Нет</option>
|
||||||
|
<option value="yes">Да</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if ($answer == 'yes')
|
||||||
|
{
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `battle` = '0',
|
||||||
|
`battle_pos` = '',
|
||||||
|
`battle_team` = '',
|
||||||
|
`battle_opponent` = '';
|
||||||
|
");
|
||||||
|
echo "Все персонажи вытащены из битвы.";
|
||||||
|
}
|
||||||
|
?>
|
79
admin/module/mer.php
Normal file
79
admin/module/mer.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
<?
|
||||||
|
if (!empty($name))
|
||||||
|
{
|
||||||
|
//$w0="INSERT INTO merit(muj,jena,svid_m,svid_j,templer,log) VALUES ($muj,$jena,$svid_m,$svid_j,$templer,$log)";
|
||||||
|
$wo = "UPDATE merit set muj = '$muj' jena = '$jena' svid_m = '$svid_m' svid_j = '$svid_j' templer = 'templer' log = 'log' ";
|
||||||
|
$res=mysql_query($w0);
|
||||||
|
if ($res)
|
||||||
|
{
|
||||||
|
print "<center>";
|
||||||
|
print "complite";
|
||||||
|
print "<a href=?act=orden&ord=1&spell=18 class=us2>back</a>";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print "failed";
|
||||||
|
echo mysql_error();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
?>
|
||||||
|
<form action=?act=orden&ord=1&spell=18 name=add method="POST">
|
||||||
|
<table border=0 width=500>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Имя Жениха:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=muj class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Имя Невесты:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=jena class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Имя первого свидетеля:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=svid_m class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Имя второго свидетеля
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=svid_j class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Имя темплера проводяшего церемонию:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=templer class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
Лог заключения:
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type=text name=log class=new size=30>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>
|
||||||
|
<input type=submit value="Создать" class=new>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
<?
|
||||||
|
}
|
||||||
|
?>
|
26
admin/module/metka.php
Normal file
26
admin/module/metka.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
$metka = (isset($_POST['metka'])) ?$_POST['metka'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25"><br>
|
||||||
|
<strong>Метка</strong><br>
|
||||||
|
<input type="text" name="metka" size="25"><br>
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']) && $r_login == '')
|
||||||
|
echo "Вы не ввели Логин.";
|
||||||
|
else if (isset($_POST['metka']) && $metka == '')
|
||||||
|
echo "Вы не ввели Метку.";
|
||||||
|
else if ($r_login != '' && $metka != '')
|
||||||
|
{
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `metka` = '$metka'
|
||||||
|
WHERE `login` = '$r_login';
|
||||||
|
");
|
||||||
|
echo "Персонаж проверен.";
|
||||||
|
}
|
||||||
|
?>
|
26
admin/module/new.php
Normal file
26
admin/module/new.php
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
$r_login_new = (isset($_POST['r_login_new'])) ?$_POST['r_login_new'] :"";
|
||||||
|
|
||||||
|
echo "<form method='post' action=''>"
|
||||||
|
. "<strong>Логин</strong><br>"
|
||||||
|
. "<input type='text' name='r_login' size='25' value='$r_login'><br>"
|
||||||
|
. "<strong>Новый Логин</strong><br>"
|
||||||
|
. "<input type='text' name='r_login_new' size='25' value='$r_login_new'><br>"
|
||||||
|
. "<input type='submit' name='submit' value='Перебросить'></form>";
|
||||||
|
|
||||||
|
if (isset($_POST['r_login']) && $r_login == '')
|
||||||
|
echo "Вы не ввели Логин.";
|
||||||
|
else if (isset($_POST['r_login_new']) && $r_login_new == '')
|
||||||
|
echo "Вы не ввели Новый Логин.";
|
||||||
|
else if ($r_login != '' && $r_login_new != '')
|
||||||
|
{
|
||||||
|
$sql = $adb->query(" UPDATE `inv`
|
||||||
|
SET `owner` = '$r_login_new'
|
||||||
|
WHERE `owner` = '$r_login';
|
||||||
|
");
|
||||||
|
echo "Вещи были переброшены.";
|
||||||
|
}
|
||||||
|
?>
|
53
admin/module/online.php
Normal file
53
admin/module/online.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
$sort = getVar('sort', 'guid', 2);
|
||||||
|
$sort_c = array(
|
||||||
|
'guid' => 'Логин (ID)',
|
||||||
|
'login_display' => 'Отображаемый логин',
|
||||||
|
'last_time' => 'Последняя активность',
|
||||||
|
'room' => 'Комната',
|
||||||
|
'city' => 'Город'
|
||||||
|
);
|
||||||
|
$sort = (array_key_exists($sort, $sort_c)) ?$sort :'guid';
|
||||||
|
?>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function (){
|
||||||
|
$('body').on('change', 'select[name=sort]', function (){
|
||||||
|
$('form#sort').submit();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<form id="sort" action="" method="post">
|
||||||
|
Сортировать по:
|
||||||
|
<select class="small" name="sort">
|
||||||
|
<?
|
||||||
|
foreach ($sort_c as $key => $val)
|
||||||
|
{
|
||||||
|
$select = ($sort == $key) ?" selected" :"";
|
||||||
|
echo "<option value='$key'$select>$val</option>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
<table width="100%" border="1" cellspacing="0" cellpadding="3" align="center">
|
||||||
|
<tr align="center">
|
||||||
|
<?
|
||||||
|
foreach ($sort_c as $key => $val)
|
||||||
|
echo "<td><strong>$val</strong></td>";
|
||||||
|
?>
|
||||||
|
</tr>
|
||||||
|
<?
|
||||||
|
$online = $adb->select("SELECT `guid`, `login_display`, `last_time`, `city`, `room` FROM `online` ORDER BY ?#", $sort);
|
||||||
|
foreach ($online as $character)
|
||||||
|
{
|
||||||
|
echo "<tr align='center'>"
|
||||||
|
. "<td>".$char->getLogin('clan', $character['guid'])." ($character[guid])</td>"
|
||||||
|
. "<td>$character[login_display]</td>"
|
||||||
|
. "<td>".date("d-m-y H:i:s", $character['last_time'])."</td>"
|
||||||
|
. "<td>".$char->city->getRoom($character['room'], $character['city'], 'name')."</td>"
|
||||||
|
. "<td>".$char->city->getCity($character['city'], 'name')."</td>"
|
||||||
|
. "</tr>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
48
admin/module/room.php
Normal file
48
admin/module/room.php
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$room = (isset($_POST['room'])) ?$_POST['room'] :"";
|
||||||
|
$log = (isset($_POST['log'])) ?$_POST['log'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="log" size="25"><br>
|
||||||
|
<strong>Название комнаты </strong><br>
|
||||||
|
<select name="room">
|
||||||
|
<option value="Зал воинов">Зал воинов</option>
|
||||||
|
<option value="Зал воинов 2">Зал воинов 2</option>
|
||||||
|
<option value="Зал воинов 3">Зал воинов 3</option>
|
||||||
|
<option value="Будуар">Будуар</option>
|
||||||
|
<option value="Этаж 2">Этаж 2</option>
|
||||||
|
<option value="Комната Знахаря">Комната Знахаря</option>
|
||||||
|
<option value="Рыцарский Зал">Рыцарский Зал</option>
|
||||||
|
<option value="Торговый Зал">Торговый Зал</option>
|
||||||
|
<option value="Зал закона">Зал закона</option>
|
||||||
|
<option value="Центральная Площадь">Центральная Площадь</option>
|
||||||
|
<option value="Тюрма">Тюрма</option>
|
||||||
|
<option value="Комиссионый магазин">Комиссионый магазин</option>
|
||||||
|
<option value="Церковь">Церковь</option>
|
||||||
|
<option value="Банк">Банк</option>
|
||||||
|
<option value="Стелла Правосудия">Стелла Правосудия</option>
|
||||||
|
<option value="Магазин">Магазин</option>
|
||||||
|
<option value="Регистратура кланов">Регистратура кланов</option>
|
||||||
|
<option value="Ремонтная мастерская">Ремонтная мастерская</option>
|
||||||
|
<option value="Академия">Академия</option>
|
||||||
|
<option value="работа">работа</option>
|
||||||
|
<option value="Завод">Завод</option>
|
||||||
|
<option value="Пруд">Пруд</option>
|
||||||
|
<option value="Казино">Казино</option>
|
||||||
|
<option value="Лотерея">Лотерея</option>
|
||||||
|
<option value="Кости">Кости</option>
|
||||||
|
<option value="Блек джек холл">Блек джек холл</option>
|
||||||
|
<option value="Подвал">Подвал</option>
|
||||||
|
<option value="Телеграф">Телеграф</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="Сменить"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['login']) && isset($_POST['room']))
|
||||||
|
{
|
||||||
|
$sql = $adb->query("UPDATE `characters` SET `room` = '$room' WHERE `login` = '$log';");
|
||||||
|
echo "Все сменено";
|
||||||
|
}
|
||||||
|
?>
|
45
admin/module/room_all.php
Normal file
45
admin/module/room_all.php
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$room = (isset($_POST['room'])) ?$_POST['room'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Название комнаты </strong><br>
|
||||||
|
<select name="room">
|
||||||
|
<option value="Зал воинов">Зал воинов</option>
|
||||||
|
<option value="Зал воинов 2">Зал воинов 2</option>
|
||||||
|
<option value="Зал воинов 3">Зал воинов 3</option>
|
||||||
|
<option value="Будуар">Будуар</option>
|
||||||
|
<option value="Этаж 2">Этаж 2</option>
|
||||||
|
<option value="Комната Знахаря">Комната Знахаря</option>
|
||||||
|
<option value="Рыцарский Зал">Рыцарский Зал</option>
|
||||||
|
<option value="Торговый Зал">Торговый Зал</option>
|
||||||
|
<option value="Зал закона">Зал закона</option>
|
||||||
|
<option value="Центральная Площадь">Центральная Площадь</option>
|
||||||
|
<option value="Тюрма">Тюрма</option>
|
||||||
|
<option value="Комиссионый магазин">Комиссионый магазин</option>
|
||||||
|
<option value="Церковь">Церковь</option>
|
||||||
|
<option value="Банк">Банк</option>
|
||||||
|
<option value="Стелла Правосудия">Стелла Правосудия</option>
|
||||||
|
<option value="Магазин">Магазин</option>
|
||||||
|
<option value="Регистратура кланов">Регистратура кланов</option>
|
||||||
|
<option value="Ремонтная мастерская">Ремонтная мастерская</option>
|
||||||
|
<option value="Академия">Академия</option>
|
||||||
|
<option value="работа">работа</option>
|
||||||
|
<option value="Завод">Завод</option>
|
||||||
|
<option value="Пруд">Пруд</option>
|
||||||
|
<option value="Казино">Казино</option>
|
||||||
|
<option value="Лотерея">Лотерея</option>
|
||||||
|
<option value="Кости">Кости</option>
|
||||||
|
<option value="Блек джек холл">Блек джек холл</option>
|
||||||
|
<option value="Подвал">Подвал</option>
|
||||||
|
<option value="Телеграф">Телеграф</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="Сменить"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['room']))
|
||||||
|
{
|
||||||
|
$sql = $adb->query("UPDATE `characters` SET `room` = '$room';");
|
||||||
|
echo "Все сменено";
|
||||||
|
}
|
||||||
|
?>
|
27
admin/module/stat_admin.php
Normal file
27
admin/module/stat_admin.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
$status = (isset($_POST['status'])) ?$_POST['status'] :"";
|
||||||
|
$state = (isset($_POST['state'])) ?$_POST['state'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25"><br>
|
||||||
|
<strong>Статус</strong><br>
|
||||||
|
<input type="text" name="status" size="25"><br>
|
||||||
|
<strong>Подданство</strong><br>
|
||||||
|
<input type="text" name="state" size="25"><br>
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']) && $r_login == '')
|
||||||
|
echo "Вы не ввели Логин.";
|
||||||
|
else if ($r_login != '')
|
||||||
|
{
|
||||||
|
$sql = $adb->query("UPDATE `characters`
|
||||||
|
SET `status` = '$status',
|
||||||
|
`state` = '$state'
|
||||||
|
WHERE `login` = '$login';");
|
||||||
|
echo "Статус и подданство успешно изменены.";
|
||||||
|
}
|
||||||
|
?>
|
79
admin/module/team1.php
Normal file
79
admin/module/team1.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
include "conf.php" ;
|
||||||
|
//
|
||||||
|
/*----Для айди персонажа--//
|
||||||
|
|
||||||
|
$connect = @mysql_connect($base_name,$base_user,$base_pass)or die ("Не возможно подключиться к Базе данных") ;
|
||||||
|
|
||||||
|
$db = @mysql_select_db($db_name,$connect) or die ("Невозможно выбрать Базу данных");
|
||||||
|
$sql = "SELECT id, login FROM characters "; //ORDER BY id
|
||||||
|
$result = @mysql_query($sql,$connect) or die ("Невозможно выполнить запрос");
|
||||||
|
while ($row = mysql_fetch_array($result));
|
||||||
|
|
||||||
|
$login_use = $row['login'];
|
||||||
|
|
||||||
|
|
||||||
|
//----Для айди персонажа--/*/
|
||||||
|
|
||||||
|
|
||||||
|
if ($sort == "ip") {$s = " order by id";}
|
||||||
|
if ($sort == "u") {$s = " order by username";}
|
||||||
|
$connect = @mysql_connect($base_name,$base_user,$base_pass)or die ("Не возможно подключиться к Базе данных") ;
|
||||||
|
|
||||||
|
$db = @mysql_select_db($db_name,$connect) or die ("Невозможно выбрать Базу данных");
|
||||||
|
$sql = "SELECT * FROM team1 "; //ORDER BY id
|
||||||
|
$result = @mysql_query($sql,$connect) or die ("Невозможно выполнить запрос");
|
||||||
|
while ($row = mysql_fetch_array($result)) {
|
||||||
|
$i++;
|
||||||
|
$t_end = $i%30;
|
||||||
|
/*/echo " = t_end<br>";
|
||||||
|
|
||||||
|
if ($login_use = $login){
|
||||||
|
$id_use= $id ;
|
||||||
|
|
||||||
|
} */
|
||||||
|
if ($i == 1 or $t_end == 1) {
|
||||||
|
|
||||||
|
echo "<table width='270' border='1' cellspacing='0' cellpadding='3' align='centr'>
|
||||||
|
<tr align='center'>
|
||||||
|
<td width='20'><strong>#</strong></td>
|
||||||
|
<td width='120' align='center'><strong>ID боя</strong></td>
|
||||||
|
<td width='130' align='center'><strong>Логин</strong></td>
|
||||||
|
<td width='150' align='center'>Дата подачи</strong></td>
|
||||||
|
<td width='170' align='center'><strong>Незнаю</strong></td>
|
||||||
|
<td width='180' align='center'><strong>Незнаю</strong></td>
|
||||||
|
<td width='190' align='center'><strong>IP подачи</strong></td>
|
||||||
|
|
||||||
|
</tr>";
|
||||||
|
|
||||||
|
}
|
||||||
|
$id = $row['battle_id '];
|
||||||
|
$login = $row['player'];
|
||||||
|
$login_display = $row['date'];
|
||||||
|
$last_time = $row['hitted'];
|
||||||
|
$room = $row['over'];
|
||||||
|
$room = $row['ip'];
|
||||||
|
|
||||||
|
|
||||||
|
echo " <tr>
|
||||||
|
<td align='right'>$i</td>
|
||||||
|
<td>$id</td>
|
||||||
|
<td><a href='info.php?log=$login' target='_blank'><font color='darkgreen'>$login</font></a></td>
|
||||||
|
<td>$login</td>
|
||||||
|
|
||||||
|
<td>$last_time</td>
|
||||||
|
<td>$room</td>
|
||||||
|
<td>$city</td>
|
||||||
|
</tr>";
|
||||||
|
|
||||||
|
if ($t_end == 0) {echo "</table>";}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
79
admin/module/team2.php
Normal file
79
admin/module/team2.php
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
<?php
|
||||||
|
include "conf.php" ;
|
||||||
|
//
|
||||||
|
/*----Для айди персонажа--//
|
||||||
|
|
||||||
|
$connect = @mysql_connect($base_name,$base_user,$base_pass)or die ("Не возможно подключиться к Базе данных") ;
|
||||||
|
|
||||||
|
$db = @mysql_select_db($db_name,$connect) or die ("Невозможно выбрать Базу данных");
|
||||||
|
$sql = "SELECT id, login FROM characters "; //ORDER BY id
|
||||||
|
$result = @mysql_query($sql,$connect) or die ("Невозможно выполнить запрос");
|
||||||
|
while ($row = mysql_fetch_array($result));
|
||||||
|
|
||||||
|
$login_use = $row['login'];
|
||||||
|
|
||||||
|
|
||||||
|
//----Для айди персонажа--/*/
|
||||||
|
|
||||||
|
|
||||||
|
if ($sort == "ip") {$s = " order by id";}
|
||||||
|
if ($sort == "u") {$s = " order by username";}
|
||||||
|
$connect = @mysql_connect($base_name,$base_user,$base_pass)or die ("Не возможно подключиться к Базе данных") ;
|
||||||
|
|
||||||
|
$db = @mysql_select_db($db_name,$connect) or die ("Невозможно выбрать Базу данных");
|
||||||
|
$sql = "SELECT * FROM team2 "; //ORDER BY id
|
||||||
|
$result = @mysql_query($sql,$connect) or die ("Невозможно выполнить запрос");
|
||||||
|
while ($row = mysql_fetch_array($result)) {
|
||||||
|
$i++;
|
||||||
|
$t_end = $i%30;
|
||||||
|
/*/echo " = t_end<br>";
|
||||||
|
|
||||||
|
if ($login_use = $login){
|
||||||
|
$id_use= $id ;
|
||||||
|
|
||||||
|
} */
|
||||||
|
if ($i == 1 or $t_end == 1) {
|
||||||
|
|
||||||
|
echo "<table width='270' border='1' cellspacing='0' cellpadding='3' align='centr'>
|
||||||
|
<tr align='center'>
|
||||||
|
<td width='20'><strong>#</strong></td>
|
||||||
|
<td width='120' align='center'><strong>ID боя</strong></td>
|
||||||
|
<td width='130' align='center'><strong>Логин</strong></td>
|
||||||
|
<td width='150' align='center'>Дата подачи</strong></td>
|
||||||
|
<td width='170' align='center'><strong>Незнаю</strong></td>
|
||||||
|
<td width='180' align='center'><strong>Незнаю</strong></td>
|
||||||
|
<td width='190' align='center'><strong>IP подачи</strong></td>
|
||||||
|
|
||||||
|
</tr>";
|
||||||
|
|
||||||
|
}
|
||||||
|
$id = $row['battle_id '];
|
||||||
|
$login = $row['player'];
|
||||||
|
$login_display = $row['date'];
|
||||||
|
$last_time = $row['hitted'];
|
||||||
|
$room = $row['over'];
|
||||||
|
$room = $row['ip'];
|
||||||
|
|
||||||
|
|
||||||
|
echo " <tr>
|
||||||
|
<td align='right'>$i</td>
|
||||||
|
<td>$id</td>
|
||||||
|
<td><a href='info.php?log=$login' target='_blank'><font color='darkgreen'>$login</font></a></td>
|
||||||
|
<td>$login</td>
|
||||||
|
|
||||||
|
<td>$last_time</td>
|
||||||
|
<td>$room</td>
|
||||||
|
<td>$city</td>
|
||||||
|
</tr>";
|
||||||
|
|
||||||
|
if ($t_end == 0) {echo "</table>";}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
22
admin/module/travm.php
Normal file
22
admin/module/travm.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25">
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']))
|
||||||
|
{
|
||||||
|
$data = $adb->selectRow("SELECT `travm_old_stat`, `travm_stat` FROM `characters` WHERE `login` = '$r_login';") or die ("Персонаж не найден!");
|
||||||
|
$o_stat = $data['travm_old_stat'];
|
||||||
|
$t_stat = $data['travm_stat'];
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `$t_stat` = '$o_stat',
|
||||||
|
`travm` = '0'
|
||||||
|
WHERE `login` = '$who';
|
||||||
|
");
|
||||||
|
}
|
||||||
|
?>
|
30
admin/module/travm_all.php
Normal file
30
admin/module/travm_all.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$answer = (isset($_POST['answer'])) ?$_POST['answer'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Вылечить у всех травмы</strong><br>
|
||||||
|
<select name="answer">
|
||||||
|
<option value="no">Нет</option>
|
||||||
|
<option value="yes">Да</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if ($answer == 'yes')
|
||||||
|
{
|
||||||
|
$rows = $adb->select("SELECT `travm_old_stat`, `travm_stat`, `login` FROM `characters`;");
|
||||||
|
foreach ($rows as $data)
|
||||||
|
{
|
||||||
|
$who = $data['login'];
|
||||||
|
$o_stat = $data['travm_old_stat'];
|
||||||
|
$t_stat = $data['travm_stat'];
|
||||||
|
$sql = $adb->query(" UPDATE `characters`
|
||||||
|
SET `$t_stat` = '$o_stat',
|
||||||
|
`travm` = '0'
|
||||||
|
WHERE `login` = '$who';
|
||||||
|
");
|
||||||
|
}
|
||||||
|
echo "Все игроки вылечены.";
|
||||||
|
}
|
||||||
|
?>
|
37
admin/module/unwear.php
Normal file
37
admin/module/unwear.php
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$r_login = (isset($_POST['r_login'])) ?$_POST['r_login'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Логин</strong><br>
|
||||||
|
<input type="text" name="r_login" size="25">
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if (isset($_POST['r_login']))
|
||||||
|
{
|
||||||
|
$sql1 = $adb->query("UPDATE `inv` SET `wear` = '0' WHERE `owner` = '$r_login';");
|
||||||
|
$sql2 = $adb->query("UPDATE `characters`
|
||||||
|
SET `helmet` = '0',
|
||||||
|
`naruchi` = '0',
|
||||||
|
`hand_r` = '0',
|
||||||
|
`hand_r_free` = '1',
|
||||||
|
`hand_r_type` = 'phisic',
|
||||||
|
`armor` = '0',
|
||||||
|
`poyas` = '0',
|
||||||
|
`sergi` = '0',
|
||||||
|
`amulet` = '0',
|
||||||
|
`ring1` = '0',
|
||||||
|
`ring2` = '0',
|
||||||
|
`ring3` = '0',
|
||||||
|
`perchi` = '0',
|
||||||
|
`hand_l` = '0',
|
||||||
|
`hand_l_free` = '1',
|
||||||
|
`hand_l_type` = 'phisic',
|
||||||
|
`pants` = '0',
|
||||||
|
`boots` = '0'
|
||||||
|
WHERE `login` = '$r_login';
|
||||||
|
");
|
||||||
|
echo "Персонаж вытащен из битвы";
|
||||||
|
}
|
||||||
|
?>
|
39
admin/module/unwear_all.php
Normal file
39
admin/module/unwear_all.php
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die ("Доступ запрещен!");
|
||||||
|
|
||||||
|
$answer = (isset($_POST['answer'])) ?$_POST['answer'] :"";
|
||||||
|
?>
|
||||||
|
<form method="post" action="">
|
||||||
|
<strong>Раздеть всех персонажей</strong><br>
|
||||||
|
<select name="answer">
|
||||||
|
<option value="no">Нет</option>
|
||||||
|
<option value="yes">Да</option>
|
||||||
|
</select>
|
||||||
|
<input type="submit" name="submit" value="Далее"></form>
|
||||||
|
<?
|
||||||
|
if ($answer == 'yes')
|
||||||
|
{
|
||||||
|
$sql1 = $adb->query("UPDATE `inv` SET `wear` = '0';");
|
||||||
|
$sql2 = $adb->query("UPDATE `characters`
|
||||||
|
SET `helmet` = '0',
|
||||||
|
`naruchi` = '0',
|
||||||
|
`hand_r` = '0',
|
||||||
|
`hand_r_free` = '1',
|
||||||
|
`hand_r_type` = 'phisic',
|
||||||
|
`armor` = '0',
|
||||||
|
`poyas` = '0',
|
||||||
|
`sergi` = '0',
|
||||||
|
`amulet` = '0',
|
||||||
|
`ring1` = '0',
|
||||||
|
`ring2` = '0',
|
||||||
|
`ring3` = '0',
|
||||||
|
`perchi` = '0',
|
||||||
|
`hand_l` = '0',
|
||||||
|
`hand_l_free` = '1',
|
||||||
|
`hand_l_type` = 'phisic',
|
||||||
|
`pants` = '0',
|
||||||
|
`boots` = '0'
|
||||||
|
");
|
||||||
|
echo "Все игроки раздеты.";
|
||||||
|
}
|
||||||
|
?>
|
27
admin/style.css
Normal file
27
admin/style.css
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
BODY {margin: 0; background-color: #ffffff;}
|
||||||
|
div {color: #000000; font-size: 12px; padding-left: 1px; padding-right: 1px; font-family: Arial;}
|
||||||
|
div.white {color: #000000; font-weight: bolder; font-size: 13px; padding-left: 1px; padding-right: 1px; font-family: Times New Roman;}
|
||||||
|
div.mic {color: #000000; font-size: 11px; font-family: Arial; text-decoration: none;}
|
||||||
|
|
||||||
|
td.head {margin: 0px; padding: 0px; background-color: #ffffff;}
|
||||||
|
|
||||||
|
input.main {border: 1px solid #666666; background: #ffffff; height: auto; font-size : 10px; width: 200px; color: #000000;}
|
||||||
|
input.but {border: 1px solid #666666; background: #ffffff; height: auto; font-size : 10px; color: #000000; }
|
||||||
|
|
||||||
|
a:link {color: #000000; font-size: 12px; font-family: Arial; text-decoration: none;}
|
||||||
|
a:visited {color: #000000; font-size: 12px; font-family: Arial; text-decoration: none;}
|
||||||
|
a:hover {color: #000000; font-size: 12px; font-family: Arial; text-decoration: underline;}
|
||||||
|
a.mic:link {color: #000000; font-size: 11px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.mic:visited {color: #000000; font-size: 11px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.mic:hover {color: #000000; font-size: 11px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.big:link {color: #003333; font-size: 20px; padding-left: 1px; padding-right: 1px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.big:visited {color: #003333; font-size: 20px; padding-left: 1px; padding-right: 1px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.big:hover {color: #003333; font-size: 20px; padding-left: 1px; padding-right: 1px; font-family: Arial; text-decoration: none;}
|
||||||
|
a.undl {color: #FFFFBB; text-decoration: underline;}
|
||||||
|
a.undl:hover {color: #FFFFFF; text-decoration: underline;}
|
||||||
|
|
||||||
|
.header {font-weight: bold; color: #FF7799;}
|
||||||
|
.small {font-size: 11px;}
|
||||||
|
.blok {width: 100%;}
|
||||||
|
.submenu {position: absolute; visibility: hidden;}
|
||||||
|
#mmoves {border: #666666 1px solid; padding: 2px; visibility: hidden; overflow: visible; white-space: nowrap; position: absolute; left: 0px; top: 0px; background-color: #ffffcc; z-index: 200; text-align: left; font-size: 15px;}
|
486
ajax.php
Normal file
486
ajax.php
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("engline/config.php");
|
||||||
|
include("engline/data.php");
|
||||||
|
include("engline/dbsimple/Generic.php");
|
||||||
|
include("engline/functions/functions.php");
|
||||||
|
include("engline/token/bootstrap.php");
|
||||||
|
|
||||||
|
$guid = getGuid('ajax');
|
||||||
|
|
||||||
|
if (!lpg_csrf_token($guid))
|
||||||
|
toIndex('ajax');
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
$char->test->Guid('ajax');
|
||||||
|
|
||||||
|
$char_db = $char->getChar('char_db', '*');
|
||||||
|
$char_stats = $char->getChar('char_stats', '*');
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
|
||||||
|
$lang = $char->getLang();
|
||||||
|
|
||||||
|
$login = $char_feat['login'];
|
||||||
|
$sex = $char_feat['sex'];
|
||||||
|
$mass = $char_feat['mass'];
|
||||||
|
$city = $char_feat['city'];
|
||||||
|
$room = $char_feat['room'];
|
||||||
|
$money = $char_feat['money'];
|
||||||
|
|
||||||
|
$do = getVar('do', '', 2);
|
||||||
|
switch ($do)
|
||||||
|
{
|
||||||
|
case 'geterror':
|
||||||
|
$char->error->getFormattedError($_POST['error'], $_POST['parameters']);
|
||||||
|
die();
|
||||||
|
break;
|
||||||
|
case 'getroomname':
|
||||||
|
$room = getVar('room');
|
||||||
|
$name = $char->city->getRoom($room, $city, 'name');
|
||||||
|
$name = "Вы перейдете в: <strong>$name</strong> (<a href='#' class='nick' onclick='return clear_solo();'>отмена</a>)";
|
||||||
|
returnAjax($name);
|
||||||
|
break;
|
||||||
|
case 'showshapes':
|
||||||
|
$available = getVar('available', 1);
|
||||||
|
$shapes = $adb->select("SELECT * FROM `player_shapes` WHERE `sex` = ?s ORDER BY `id`;", $sex);
|
||||||
|
$required = array('str', 'dex', 'con', 'vit', 'fire', 'water', 'air', 'earth', 'dark', 'light', 'int', 'wis', 'level', 'sword', 'axe', 'fail', 'knife');
|
||||||
|
$return = "<table cellspacing='0' cellpadding='0' border='0' align='center'><tr>";
|
||||||
|
$i = 0;
|
||||||
|
foreach ($shapes as $shape)
|
||||||
|
{
|
||||||
|
$availabled = $char->checkShape($shape['id']);
|
||||||
|
$requirement = "";
|
||||||
|
$title = "";
|
||||||
|
foreach ($required as $key)
|
||||||
|
{
|
||||||
|
if ($shape[$key] <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$requirement)
|
||||||
|
$requirement = "$lang[min_stat]<br>";
|
||||||
|
|
||||||
|
$title .= (compare($shape[$key], $char_feat[$key], "• $lang[$key] $shape[$key]"))."<br>";
|
||||||
|
}
|
||||||
|
if ($availabled)
|
||||||
|
{
|
||||||
|
$return .= "<td class='shape'><a href='javascript:chooseShape($shape[id]);'><img src='img/chars/$shape[sex]/$shape[img]' alt='<strong>$lang[select_shape]</strong><br>$requirement$title' border='0' style='opacity: 0.6;' onmouseover=\"this.style.opacity = '1';\" onmouseout=\"this.style.opacity = '0.6';\"></a></td>";
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
else if (!$available)
|
||||||
|
{
|
||||||
|
$return .= "<td class='shape dis_shape'><img src='img/chars/$shape[sex]/$shape[img]' alt='$requirement$title' border='0' style='opacity: 0.6;'></td>";
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($i % 9 === 0)
|
||||||
|
$return .= "</tr><tr>";
|
||||||
|
}
|
||||||
|
$return .= "</tr></table>";
|
||||||
|
returnAjax($return);
|
||||||
|
break;
|
||||||
|
case 'chooseshape':
|
||||||
|
$shape = getVar('shape', 0);
|
||||||
|
|
||||||
|
if (!$shape || !($char->checkShape($shape)))
|
||||||
|
returnAjax('error', 215);
|
||||||
|
|
||||||
|
$char->setChar('char_db', array('shape' => "$sex/$shape.gif", 'next_shape' => (time() + 86400)));
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
/*Invetory*/
|
||||||
|
case 'showinventory':
|
||||||
|
$mail_guid = getVar('mail_guid');
|
||||||
|
$section = getVar('section', 1);
|
||||||
|
$type = getVar('type');
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 'inv':
|
||||||
|
$rows = $adb->select("SELECT *
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `i`.`section` = ?s
|
||||||
|
and `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0'
|
||||||
|
ORDER BY `c`.`last_update` DESC", $data['sections'][$section] ,$guid);
|
||||||
|
break;
|
||||||
|
case 'mail_to':
|
||||||
|
$rows = $adb->select("SELECT *
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE (`i`.`item_flags` & '1')
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0'
|
||||||
|
and `i`.`section` = ?s
|
||||||
|
and `c`.`guid` = ?d
|
||||||
|
and `i`.`price_euro` = '0'
|
||||||
|
ORDER BY `c`.`last_update` DESC;", $data['sections'][$section] ,$guid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (count($rows) > 0)
|
||||||
|
{
|
||||||
|
$inventory = '';
|
||||||
|
$i = 1;
|
||||||
|
foreach ($rows as $item_info)
|
||||||
|
{
|
||||||
|
$inventory .= $char->equip->showItem($item_info, $type, $i, $mail_guid);
|
||||||
|
$i = !$i;
|
||||||
|
}
|
||||||
|
returnAjax($inventory);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax("<table width='100%' cellspacing='1' cellpadding='2' bgcolor='#A5A5A5'><tr><td bgcolor='#E2E0E0' align='center'>$lang[empty]</td></tr></table>");
|
||||||
|
break;
|
||||||
|
case 'sortinventory':
|
||||||
|
$type = getVar('type');
|
||||||
|
$section = getVar('section', 1, 7);
|
||||||
|
$sort = ($_POST['num']) ?' DESC' :'';
|
||||||
|
$items = $adb->selectCol("SELECT `c`.`id` AS ARRAY_KEY, `i`.?#
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0'
|
||||||
|
and `i`.`section` = ?s
|
||||||
|
ORDER BY `i`.?#$sort", $type ,$guid ,$data['sections'][$section] ,$type);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($items as $id => $value)
|
||||||
|
{
|
||||||
|
$adb->query("UPDATE `character_inventory` SET `last_update` = ?d WHERE `guid` = ?d and `id` = ?d", time() + $i ,$guid ,$id);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'deleteitem':
|
||||||
|
$item_id = getVar('id', 0);
|
||||||
|
$dropall = getVar('dropall', 0);
|
||||||
|
|
||||||
|
if (checki($item_id))
|
||||||
|
returnAjax('error', 213);
|
||||||
|
|
||||||
|
switch ($dropall)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 0:
|
||||||
|
if ($char->equip->deleteItem($item_id))
|
||||||
|
{
|
||||||
|
$mass = $char->getChar('char_stats', 'mass');
|
||||||
|
returnAjax('complete', $mass, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax('error', 213);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$item_entry = $adb->selectCell("SELECT `item_entry` FROM `character_inventory` WHERE `guid` = ?d and `id` = ?d", $guid ,$item_id) or returnAjax('error', 213);
|
||||||
|
$items = $adb->select("SELECT `c`.`id`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`item_entry` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0';", $guid ,$item_entry) or returnAjax('error', 213);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($items as $i_info)
|
||||||
|
{
|
||||||
|
if ($char->equip->deleteItem($i_info['id']))
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
returnAjax('error', 213);
|
||||||
|
}
|
||||||
|
$mass = $char->getChar('char_stats', 'mass');
|
||||||
|
returnAjax('complete', $mass, $i, $item_entry);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'switchbars':
|
||||||
|
$bar = getVar('bar');
|
||||||
|
$type = getVar('type');
|
||||||
|
$bars = $char->getChar('char_bars', 'stat', 'mod', 'power', 'def', 'btn', 'set') or returnAjax('error');
|
||||||
|
foreach ($bars as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == 0)
|
||||||
|
unset($bars[$key]);
|
||||||
|
}
|
||||||
|
asort ($bars);
|
||||||
|
|
||||||
|
if ($bar && in_array($bar, array_keys($bars)) && $type && count($bars) != 1)
|
||||||
|
{
|
||||||
|
$d_b_v = explode('|', $bars[$bar]);
|
||||||
|
list ($d_b_n, $d_b_s) = array_values($d_b_v);
|
||||||
|
if (($type == 'down' & $d_b_n != count($bars)) || ($type == 'up' & $d_b_n != 1))
|
||||||
|
{
|
||||||
|
$c_b_a = ($type == 'down') ?array_slice($bars, $d_b_n, 1) :array_slice($bars, $d_b_n - 2, 1);
|
||||||
|
list($c_b_k) = array_keys($c_b_a);
|
||||||
|
list($c_b_v) = array_values($c_b_a);
|
||||||
|
$c_b_v = explode('|', $c_b_v);
|
||||||
|
list($c_b_n, $c_b_s) = array_values($c_b_v);
|
||||||
|
$d_b_n += ($type == 'down') ?1 :-1;
|
||||||
|
$c_b_n += ($type == 'down') ?-1 :1;
|
||||||
|
if ($char->setChar('char_bars', array($bar => $d_b_n.'|'.$d_b_s, $c_b_k => $c_b_n.'|'.$c_b_s)))
|
||||||
|
{
|
||||||
|
$bars = $char->getChar('char_bars', 'stat', 'mod', 'power', 'def', 'btn', 'set');
|
||||||
|
foreach ($bars as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == 0)
|
||||||
|
unset($bars[$key]);
|
||||||
|
}
|
||||||
|
asort($bars);
|
||||||
|
returnAjax('complete', $bar, $char->showInventoryBar($bar, $bars[$bar], count($bars)), $c_b_k, ($char->showInventoryBar($c_b_k, $bars[$c_b_k], count($bars))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax('error');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax('error');
|
||||||
|
break;
|
||||||
|
case 'spoilerbar':
|
||||||
|
$bar = getVar('bar');
|
||||||
|
$barr = $char->getChar('char_bars', $bar) or returnAjax('error');
|
||||||
|
$bar_v = explode('|', $barr);
|
||||||
|
list($bar_n, $bar_s) = array_values($bar_v);
|
||||||
|
if ($bar_s == 1)
|
||||||
|
{
|
||||||
|
$char->setChar('char_bars', $bar, $bar_n.'|0');
|
||||||
|
returnAjax('hide');
|
||||||
|
}
|
||||||
|
else if ($bar_s == 0)
|
||||||
|
{
|
||||||
|
$char->setChar('char_bars', $bar, $bar_n.'|1');
|
||||||
|
returnAjax('show');
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'worksets':
|
||||||
|
$type = getVar('type');
|
||||||
|
$name = getVar('name');
|
||||||
|
|
||||||
|
if ($name == '')
|
||||||
|
returnAjax('error', 222);
|
||||||
|
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'create':
|
||||||
|
$cur_set = $char->getChar('char_equip', '*') or returnAjax('error', 221);
|
||||||
|
$cur_set['name'] = $name;
|
||||||
|
unset($cur_set['hand_r_free'], $cur_set['hand_r_type'], $cur_set['hand_l_free'], $cur_set['hand_l_type']);
|
||||||
|
$adb->query("DELETE FROM `character_sets` WHERE `guid` = ?d and `name` = ?s", $guid ,$name);
|
||||||
|
$adb->query("INSERT INTO `character_sets` (?#)
|
||||||
|
VALUES (?a);", array_keys($cur_set), array_values($cur_set));
|
||||||
|
returnAjax('complete', $char->getSetRow($name));
|
||||||
|
break;
|
||||||
|
case 'delete':
|
||||||
|
$set = $adb->selectRow("SELECT * FROM `character_sets` WHERE `guid` = ?d and `name` = ?s", $guid ,$name) or returnAjax('error', 221);
|
||||||
|
$adb->query("DELETE FROM `character_sets` WHERE `guid` = ?d and `name` = ?s", $guid ,$name);
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'show':
|
||||||
|
$set = $adb->selectRow("SELECT * FROM `character_sets` WHERE `guid` = ?d and `name` = ?s", $guid ,$name) or returnAjax('error', 221);
|
||||||
|
$set['hand_l_s'] = "hand_l";
|
||||||
|
$char_feat = $char->getChar('char_db', 'shape', 'guid');
|
||||||
|
$char_feat['name'] = '';
|
||||||
|
returnAjax('complete', $char->equip->getCharacterEquipped($set, $char_feat, 'smart'));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'increaseitemstat':
|
||||||
|
$item_id = getVar('id', 0);
|
||||||
|
$stat = getVar('stat');
|
||||||
|
$count = getVar('count', 1);
|
||||||
|
|
||||||
|
if (checki($item_id))
|
||||||
|
returnAjax('error', 213);
|
||||||
|
|
||||||
|
$i_info = $adb->selectRow("SELECT `c`.`inc_count_p`,
|
||||||
|
`c`.?#,
|
||||||
|
`i`.?#
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0';", 'inc_'.$stat ,'add_'.$stat ,$guid ,$item_id) or returnAjax('error', 213);
|
||||||
|
if ($i_info['inc_count_p'] - $count < 0)
|
||||||
|
returnAjax('error', 216);
|
||||||
|
|
||||||
|
switch ($stat)
|
||||||
|
{
|
||||||
|
case 'str':
|
||||||
|
case 'dex':
|
||||||
|
case 'con':
|
||||||
|
case 'int':
|
||||||
|
$inc = $i_info['inc_'.$stat] + $count;
|
||||||
|
$inc_p = $i_info['inc_count_p']-$count;
|
||||||
|
$adb->query("UPDATE `character_inventory`
|
||||||
|
SET ?# = ?d,
|
||||||
|
`inc_count_p` = ?d,
|
||||||
|
`last_update` = ?d
|
||||||
|
WHERE `guid` = ?d
|
||||||
|
and `id` = ?d", 'inc_'.$stat ,$inc ,$inc_p ,time() ,$guid ,$item_id);
|
||||||
|
returnAjax('complete', $inc + $i_info['add_'.$stat], $inc_p);
|
||||||
|
break;
|
||||||
|
default: returnAjax('error', 219);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'loginbank':
|
||||||
|
$credit = getVar('credit', 0);
|
||||||
|
$pass = getVar('pass');
|
||||||
|
$bank_info = $adb->selectRow("SELECT `guid`,
|
||||||
|
`password`,
|
||||||
|
`cash`,
|
||||||
|
`euro`
|
||||||
|
FROM `character_bank`
|
||||||
|
WHERE `id` = ?d", $credit) or returnAjax('error', 303);
|
||||||
|
if ($guid != $bank_info['guid'])
|
||||||
|
returnAjax('error', 322);
|
||||||
|
|
||||||
|
if (SHA1($credit.':'.$pass) != $bank_info['password'])
|
||||||
|
returnAjax('error', 302);
|
||||||
|
|
||||||
|
$_SESSION['bankСredit'] = $credit;
|
||||||
|
returnAjax('complete', "<b>".getMoney($bank_info['cash'])."</b>кр. <b>".getMoney($bank_info['euro'])."</b>екр.<a href='javascript:UnLoginbank();'><img border='0' valign='bottom' width='13' height='9' title='$lang[credit_exit]' src='img/icon/close_bank.gif'></a>");
|
||||||
|
break;
|
||||||
|
case 'unloginbank':
|
||||||
|
unset ($_SESSION['bankСredit']);
|
||||||
|
$bank = $adb->selectCol("SELECT `id` FROM `character_bank` WHERE `guid` = ?d", $guid) or returnAjax('error');
|
||||||
|
foreach ($bank as $num => $bank_id)
|
||||||
|
{
|
||||||
|
if (empty($credits))
|
||||||
|
$credits = $bank_id;
|
||||||
|
else
|
||||||
|
$credits .= ",".$bank_id;
|
||||||
|
}
|
||||||
|
returnAjax("<a href=\"javascript:bank_open('$credits');\" class='nick' style='font-size: 7pt;'>$lang[credit_choose]</a>");
|
||||||
|
break;
|
||||||
|
/*Shop*/
|
||||||
|
case 'getshoptitle':
|
||||||
|
$section_shop = getVar('section_shop');
|
||||||
|
returnAjax($lang[$data['sections_shop'][$section_shop][1]].$lang['shop_'.$section_shop]);
|
||||||
|
break;
|
||||||
|
case 'showshopsection':
|
||||||
|
$flags = $char->city->getRoom($room, $city, 'flags');
|
||||||
|
|
||||||
|
if (!($flags & 2))
|
||||||
|
returnAjax("<table width='100%' cellspacing='1' cellpadding='2' bgcolor='#A5A5A5'><tr><td bgcolor='#E2E0E0' align='center'>$lang[shop_no]</td></tr></table>");
|
||||||
|
|
||||||
|
$section_shop = getVar('section_shop', '', 7);
|
||||||
|
$level_filter = getVar('level_filter', '', 7);
|
||||||
|
$check_level = ($level_filter > 0 || $level_filter == '0');
|
||||||
|
$name_filter = getVar('name_filter', '', 7);
|
||||||
|
setCookie('level_filter', $level_filter, time() + 3600);
|
||||||
|
setCookie('name_filter', $name_filter, time() + 3600);
|
||||||
|
$rows = $adb->select("SELECT *
|
||||||
|
FROM `item_template`
|
||||||
|
WHERE `type` = ?s
|
||||||
|
{and `min_level` = ?d}
|
||||||
|
{and `name` LIKE (?)}
|
||||||
|
{and !(`item_flags` & ?d)
|
||||||
|
and `price_euro` = '0'}
|
||||||
|
ORDER BY `min_level`;", $section_shop,
|
||||||
|
(($check_level) ?$level_filter :DBSIMPLE_SKIP),
|
||||||
|
(($name_filter) ?escapeLike($name_filter) :DBSIMPLE_SKIP),
|
||||||
|
(($room != 'shop') ?4 :DBSIMPLE_SKIP));
|
||||||
|
if (count($rows) > 0)
|
||||||
|
{
|
||||||
|
$section = '';
|
||||||
|
$i = true;
|
||||||
|
foreach ($rows as $item_info)
|
||||||
|
{
|
||||||
|
$section .= $char->equip->showItem($item_info, 'shop', $i);
|
||||||
|
$i = !$i;
|
||||||
|
}
|
||||||
|
returnAjax($section);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax("<table width='100%' cellspacing='1' cellpadding='2' bgcolor='#A5A5A5'><tr><td bgcolor='#E2E0E0' align='center'>$lang[shop_empty]</td></tr></table>");
|
||||||
|
break;
|
||||||
|
case 'buyitem':
|
||||||
|
$item_entry = getVar('entry', 0);
|
||||||
|
$count = getVar('count', 1);
|
||||||
|
|
||||||
|
if (checki($item_entry))
|
||||||
|
returnAjax('error', 403);
|
||||||
|
|
||||||
|
$buycount = 0;
|
||||||
|
$amount = $city.'-'.$room;
|
||||||
|
$flags = $char->city->getRoom($room, $city, 'flags');
|
||||||
|
|
||||||
|
if (!($flags & 2))
|
||||||
|
returnAjax('error', 403);
|
||||||
|
|
||||||
|
$i_info = $adb->selectRow("SELECT `name`,
|
||||||
|
`price`,
|
||||||
|
`price_euro`
|
||||||
|
FROM `item_template`
|
||||||
|
WHERE `entry` = ?d", $item_entry) or returnAjax('error', 403);
|
||||||
|
list($name, $price, $price_euro) = array_values($i_info);
|
||||||
|
|
||||||
|
for ($i = 1; $i <= $count; $i++)
|
||||||
|
{
|
||||||
|
if ($price > 0 && !($char->changeMoney(-$price)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$money = $money - $price;
|
||||||
|
|
||||||
|
if (!($char->equip->addItem($item_entry)))
|
||||||
|
returnAjax('error', 403);
|
||||||
|
|
||||||
|
$buycount++;
|
||||||
|
}
|
||||||
|
$mass = $char->getChar('char_stats', 'mass');
|
||||||
|
if ($buycount != 0 && $price > 0)
|
||||||
|
returnAjax('complete', getMoney($money), $mass, 400, "$name|".($price*$buycount)."|$buycount");
|
||||||
|
else if ($buycount != 0 && $price_euro > 0)
|
||||||
|
returnAjax('complete', getMoney($money), $mass, 401, "$name|".($price_euro*$buycount)."|$buycount");
|
||||||
|
else
|
||||||
|
returnAjax('error', 107);
|
||||||
|
break;
|
||||||
|
case 'sellitem':
|
||||||
|
$item_id = getVar('id', 0);
|
||||||
|
|
||||||
|
if (checki($item_id))
|
||||||
|
returnAjax('error', 213);
|
||||||
|
|
||||||
|
$i_info = $adb->selectRow("SELECT `i`.`name`,
|
||||||
|
`i`.`mass`,
|
||||||
|
`i`.`price`,
|
||||||
|
`i`.`price_euro`,
|
||||||
|
`c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`tear`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE (`i`.`item_flags` & '1')
|
||||||
|
and `c`.`id` = ?d
|
||||||
|
and `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0';", $item_id ,$guid) or returnAjax('error', 213);
|
||||||
|
$sell_price = $char->equip->getSellValue($i_info);
|
||||||
|
$char->changeMoney($sell_price);
|
||||||
|
$money = $money + $sell_price;
|
||||||
|
if ($char->equip->deleteItem($item_id, 'sell'))
|
||||||
|
{
|
||||||
|
$mass = $char->getChar('char_stats', 'mass');
|
||||||
|
returnAjax('complete', getMoney($money), $mass, 404, "$$i_info[name]|$sell_price");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
returnAjax('error', 213);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
?>
|
216
ajax_chat.php
Normal file
216
ajax_chat.php
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("engline/config.php");
|
||||||
|
include("engline/dbsimple/Generic.php");
|
||||||
|
include("engline/functions/functions.php");
|
||||||
|
|
||||||
|
$guid = getGuid('ajax');
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
$char->test->Guid('ajax');
|
||||||
|
$char->test->Afk();
|
||||||
|
|
||||||
|
$lang = $char->getLang();
|
||||||
|
$char_db = $char->getChar('char_db', 'login', 'city', 'room', 'chat_shut', 'chat_filter', 'chat_sys', 'chat_update');
|
||||||
|
ArrToVar($char_db);
|
||||||
|
|
||||||
|
$do = getVar('do', '', 2);
|
||||||
|
switch ($do)
|
||||||
|
{
|
||||||
|
/*Talk*/
|
||||||
|
case 'sendmessage':
|
||||||
|
$h = getVar('h');
|
||||||
|
|
||||||
|
$commands = $adb->selectCol("SELECT `name` FROM `server_commands`;");
|
||||||
|
$command = false;
|
||||||
|
|
||||||
|
if ((!$h && !is_numeric($h)) || $chat_shut)
|
||||||
|
returnAjax('none');
|
||||||
|
|
||||||
|
$color = $char->getChar('char_info', 'color');
|
||||||
|
|
||||||
|
if ($h[0] == '/')
|
||||||
|
{
|
||||||
|
foreach ($commands as $num => $name)
|
||||||
|
{
|
||||||
|
if (utf8_substr($h, 0, utf8_strlen($name)) == $name && $char->chat->executeCommand($name, $h))
|
||||||
|
returnAjax('complete');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$h = str_replace("\n", "", $h);
|
||||||
|
$to = split(']', str_replace(array('to [', 'private ['), "]", $h));
|
||||||
|
|
||||||
|
if (isset($to[1]))
|
||||||
|
{
|
||||||
|
$h = preg_replace("/private \[$to[1]/", "private [", $h, 1);
|
||||||
|
$to = str_replace(", ", ",", $to[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$to = '';
|
||||||
|
|
||||||
|
if (utf8_substr($h, 0, 4) == 'to [')
|
||||||
|
$class = 'to';
|
||||||
|
else if (utf8_substr($h, 0, 9) == 'private [')
|
||||||
|
$class = 'private';
|
||||||
|
else
|
||||||
|
$class = 'all';
|
||||||
|
|
||||||
|
$char->setChar('char_db', array('afk' => 0));
|
||||||
|
if ($adb->query("INSERT INTO `city_chat` (`sender`, `to`, `room`, `msg`, `class`, `date_stamp`, `city`)
|
||||||
|
VALUES (?s, ?s, ?s, ?s, ?s, ?d, ?s)", $login ,$to ,$room ,"<font color=$color>$h</font>" ,$class ,time() ,$city))
|
||||||
|
returnAjax('complete');
|
||||||
|
else
|
||||||
|
returnAjax('error');
|
||||||
|
break;
|
||||||
|
/*Users*/
|
||||||
|
case 'refreshusers':
|
||||||
|
$room_online = $adb->selectCell("SELECT COUNT(*) FROM `online` WHERE `city` = ?s and `room` = ?s", $city ,$room);
|
||||||
|
$room_name = $char->city->getRoom($room, $city, 'name');
|
||||||
|
$user_list = "<font style='color: #8f0000; font-size: 10pt; font-weight: bold;'>$room_name ($room_online)</font><br>";
|
||||||
|
|
||||||
|
$rows = $adb->select("SELECT `guid`,
|
||||||
|
`last_time`
|
||||||
|
FROM `online`
|
||||||
|
WHERE `city` = ?s
|
||||||
|
and `room` = ?s
|
||||||
|
ORDER by `login_display`", $city ,$room);
|
||||||
|
foreach ($rows as $online)
|
||||||
|
{
|
||||||
|
if ($char->test->Online($online['guid']))
|
||||||
|
$user_list .= $char->getLogin('online', $online['guid']);
|
||||||
|
}
|
||||||
|
returnAjax($user_list);
|
||||||
|
break;
|
||||||
|
/*Msg*/
|
||||||
|
case 'refreshmessage':
|
||||||
|
$char->setChar('char_db', array('last_time' => time()));
|
||||||
|
$char->setChar('online', array('last_time' => time()));
|
||||||
|
$go = getVar('go');
|
||||||
|
$send = "";
|
||||||
|
|
||||||
|
$last_t = (checks('last_t')) ?$_SESSION['last_t'] :0;
|
||||||
|
$last_m = (checks('last_m')) ?$_SESSION['last_m'] :0;
|
||||||
|
|
||||||
|
if (!$last_t || $go)
|
||||||
|
$last_m = $_SESSION['last_m'] = ($adb->selectCell("SELECT MAX(`id`) FROM `city_chat` WHERE `room` = ?s and `city` = ?s", $room ,$city)) - 5;
|
||||||
|
|
||||||
|
$rows = $adb->select("SELECT `msg`,
|
||||||
|
`sender`,
|
||||||
|
`to`,
|
||||||
|
`class`,
|
||||||
|
`date_stamp`,
|
||||||
|
`id`
|
||||||
|
FROM `city_chat`
|
||||||
|
WHERE `id` > ?d
|
||||||
|
and `room` = ?s
|
||||||
|
and `city` = ?s", $last_m ,$room ,$city);
|
||||||
|
foreach ($rows as $message)
|
||||||
|
{
|
||||||
|
list($msg, $sender, $to, $class, $_SESSION['last_t'], $_SESSION['last_m']) = array_values($message);
|
||||||
|
$date = (bcsub(time(), $_SESSION['last_t']) <= 86400) ?date('H:i', $_SESSION['last_t']) :date('d.m.y H:i', $_SESSION['last_t']);
|
||||||
|
$sender2 = str_replace(" ", "%20", $sender);
|
||||||
|
$to2 = str_replace(" ", "%20", $to);
|
||||||
|
$smiles = split(':', $msg);
|
||||||
|
if ($class == 'private')
|
||||||
|
{
|
||||||
|
$sent = '';
|
||||||
|
$names = split(',', $to);
|
||||||
|
foreach ($names as $key => $name)
|
||||||
|
{
|
||||||
|
$name_link = ($name == $login) ?str_replace(" ", "%20", $sender) :str_replace(" ", "%20", $name);
|
||||||
|
$name_title = ($name == $login) ?$sender :$name;
|
||||||
|
if ($sent != '')
|
||||||
|
$sent .= ', ';
|
||||||
|
$sent .= "<a href=javascript:top.AddTo('$name_link'); title='$name_title'><span class='private'>$name</span></a>";
|
||||||
|
}
|
||||||
|
$msg = preg_replace("/private \[\]/", "<font class='private'>private [$sent]</font>", $msg, 1);
|
||||||
|
}
|
||||||
|
$msg = preg_replace("/private \[/", "<a href=javascript:top.AddTo('$to2'); title='$to'><font class='private'>private</font></a> [", $msg, 1);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($smiles as $key => $value)
|
||||||
|
{
|
||||||
|
if (file_exists("img/smiles/$value.gif") && $i < 3)
|
||||||
|
{
|
||||||
|
$msg = preg_replace("/\:$value\:/", "<img src='img/smiles/$value.gif' border='0' style='cursor: pointer;'>", $msg, 1);
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
else if ($i >= 3)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg_full = " [<a href=javascript:top.AddTo('$sender2');><span>$sender</span></a>] $msg<br>";
|
||||||
|
|
||||||
|
switch ($class)
|
||||||
|
{
|
||||||
|
case 'all':
|
||||||
|
if (!$chat_filter)
|
||||||
|
$send .= "<font class='date'>$date</font>$msg_full";
|
||||||
|
break;
|
||||||
|
case 'emotion':
|
||||||
|
if (!$chat_filter)
|
||||||
|
$send .= "<font class='date'>$date</font> <i><a href=javascript:top.AddTo('$sender2');><span>$sender</span></a> $msg</i><br>";
|
||||||
|
break;
|
||||||
|
case 'to':
|
||||||
|
if ($to == $login || $sender == $login)
|
||||||
|
$send .= "<font class='date2'>$date</font>$msg_full";
|
||||||
|
else if (ereg(",", $to))
|
||||||
|
{
|
||||||
|
$characters = explode (',', $to);
|
||||||
|
foreach ($characters as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == $login)
|
||||||
|
$send .= "<font class='date2'>$date</font>$msg_full";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!$chat_filter)
|
||||||
|
$send .= "<font class='date'>$date</font>$msg_full";
|
||||||
|
break;
|
||||||
|
case 'private':
|
||||||
|
if ($to != $login && $sender == $login)
|
||||||
|
$send .= "<font class='date'>$date</font>$msg_full";
|
||||||
|
else if ($to == $login || $sender == $login)
|
||||||
|
$send .= "<font class='date2'>$date</font>$msg_full";
|
||||||
|
else if (ereg(",", $to))
|
||||||
|
{
|
||||||
|
$characters = explode (',', $to);
|
||||||
|
foreach ($characters as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == $login)
|
||||||
|
$send .= "<font class='date2'>$date</font>$msg_full";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'sys':
|
||||||
|
if ($to == $login && $chat_sys)
|
||||||
|
$send .= "<font class='date2'>$date</font> <font color='red'>Внимание!</font> $msg<br>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
returnAjax($send, $chat_update);
|
||||||
|
break;
|
||||||
|
case 'change_button':
|
||||||
|
$but = getVar('but');
|
||||||
|
$val = getVar('val');
|
||||||
|
switch ($but)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
$val = ($val == 'false' || $val === 0) ?0 :1;
|
||||||
|
break;
|
||||||
|
case 'slow':
|
||||||
|
$val = ($val == 'false' || $val === 0) ?10 :60;
|
||||||
|
$but = 'update';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$char->setChar('char_db', array('chat_'.$but => $val));
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
?>
|
324
ajax_register.php
Normal file
324
ajax_register.php
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("engline/config.php");
|
||||||
|
include("engline/data.php");
|
||||||
|
include("engline/dbsimple/Generic.php");
|
||||||
|
include("engline/functions/functions.php");
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$register = $adb->selectCell("SELECT `registration` FROM `server_info`;");
|
||||||
|
$register_error = 'Регистрация закрыта!<br><a href="index.php" class="us2">Вернуться на главную</a>';
|
||||||
|
$reminder = $adb->selectCell("SELECT `reminder` FROM `server_info`;");
|
||||||
|
$reminder_error = 'Восстановление пароля закрыто!<br><a href="../">Вернуться на главную</a>';
|
||||||
|
|
||||||
|
$do = getVar('do', '', 2);
|
||||||
|
switch ($do)
|
||||||
|
{
|
||||||
|
case 'checkrem1':
|
||||||
|
if (!$reminder)
|
||||||
|
returnAjax('error', $reminder_error);
|
||||||
|
|
||||||
|
unset($_SESSION['rem_login']);
|
||||||
|
$login = getVar('login');
|
||||||
|
|
||||||
|
if (utf8_strlen($login) < 2 || utf8_strlen($login) > 15 || preg_match("/[^a-zA-Zа-яА-Я\- ]/ui", $login))
|
||||||
|
returnAjax('error', 'Логин не найден в базе.');
|
||||||
|
else if (!($adb->selectCell("SELECT `guid` FROM `characters` WHERE `login` = ?s", $login)))
|
||||||
|
returnAjax('error', "Логин \"$login\" не найден в базе.");
|
||||||
|
|
||||||
|
$_SESSION['rem_login'] = $login;
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkrem2':
|
||||||
|
if (!$reminder)
|
||||||
|
returnAjax('error', $reminder_error);
|
||||||
|
|
||||||
|
if (!checks('rem_login'))
|
||||||
|
returnAjax('error', 'Пройдите предыдущий шаг!');
|
||||||
|
|
||||||
|
$login = $_SESSION['rem_login'];
|
||||||
|
$answer = getVar('answer');
|
||||||
|
$birthday = getVar('birthday');
|
||||||
|
$code = getVar('code');
|
||||||
|
|
||||||
|
$char_db = $adb->selectRow("SELECT `guid`, `mail` FROM `characters` WHERE `login` = ?s", $login);
|
||||||
|
$char_info = $adb->selectRow("SELECT `secretquestion`, `secretanswer`, `birthday` FROM `character_info` WHERE `guid` = ?d", $char_db['guid']);
|
||||||
|
|
||||||
|
if ($char_info['secretquestion'] != '' && ($answer != $char_info['secretanswer']))
|
||||||
|
returnAjax('error', 'Неверный ответ на секретный вопрос.');
|
||||||
|
else if ($birthday != $char_info['birthday'])
|
||||||
|
returnAjax('error', 'Неверно указан день рождения.');
|
||||||
|
else if ($code != $_SESSION['secpic'])
|
||||||
|
returnAjax('error', 'Ошибка введения кода.');
|
||||||
|
|
||||||
|
unset($_SESSION['rem_login'], $_SESSION['secpic']);
|
||||||
|
/*Создание нового пароля*/
|
||||||
|
$letters = "qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP";
|
||||||
|
$max = 10;
|
||||||
|
$password = null;
|
||||||
|
while ($max--)
|
||||||
|
$password .= $letters[rand(0, (strlen($letters) - 1))];
|
||||||
|
/*Текст письма*/
|
||||||
|
$msg = date('d.m.y H:i', time())."\n";
|
||||||
|
$msg .= "Кто-то с IP: ".$_SERVER['REMOTE_ADDR']." попросил выслать пароль к персонажу \"$login\".\n";
|
||||||
|
$msg .= "Т.к. в анкете у этого персонажа указан email: $char_db[mail], то вы и получили это письмо.\n";
|
||||||
|
$msg .= "Login: $login\n";
|
||||||
|
$msg .= "New password: $password\n\n--\n";
|
||||||
|
$msg .= "Анти Бойцовский Клуб http://www.anticombats.com\n";
|
||||||
|
$msg .= "P.S. Данное письмо сгенерировано автоматически, отвечать на него не нужно.\n";
|
||||||
|
$msg .= "В целях безопасности, вашему аккаунту запрещены все передачи и выбрасывание предметов в течение суток с момента отправки письма.\n";
|
||||||
|
|
||||||
|
if (!(mail($char_db['mail'], "По вашей просьбе высылаем пароль к персонажу \"$login\"", $msg, 'From: reminder@anticombats.com', 'reminder@anticombats.com')))
|
||||||
|
returnAjax('error', 'Не удалось отправить пароль на e-mail, указанный в анкете!');
|
||||||
|
|
||||||
|
$char = Char::initialization($char_db['guid'], $adb);
|
||||||
|
|
||||||
|
if ($char->setChar('char_db', array('password' => SHA1($char_db['guid'].':'.$password), 'next_change' => (time() + 259200))))
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkstep1':
|
||||||
|
if (!$register)
|
||||||
|
returnAjax('error', $register_error);
|
||||||
|
|
||||||
|
if ($adb->selectCell("SELECT COUNT(*) FROM `history_auth` WHERE `action` = 2 and `ip` = ?s and `date` > ?s", $_SERVER['REMOTE_ADDR'], (time() - 3600)))
|
||||||
|
returnAjax('error', "Недавно с вашего IP уже регистрировался персонаж. С одного IP адреса разрешена регистрация персонажей не чаще, чем раз в час. Попробуйте позже.");
|
||||||
|
|
||||||
|
unset($_SESSION['reg_login']);
|
||||||
|
$login = getVar('login');
|
||||||
|
$match = false;
|
||||||
|
$file = file("regfail.dat");
|
||||||
|
$mat = explode(',', $file[0]);
|
||||||
|
$zapret = explode(',', $file[1]);
|
||||||
|
foreach ($zapret as $value)
|
||||||
|
{
|
||||||
|
$check = '';
|
||||||
|
for ($i = 0; $i < utf8_strlen($value); $i++)
|
||||||
|
{
|
||||||
|
$s = utf8_substr($value, $i, 1);
|
||||||
|
$check .= "[".lowercase($s)."|".uppercase($s)."]+";
|
||||||
|
}
|
||||||
|
if (preg_match("/$check/ui", $login))
|
||||||
|
returnAjax('error', "Все вариации логина $value запрещены.");
|
||||||
|
}
|
||||||
|
foreach ($mat as $value)
|
||||||
|
{
|
||||||
|
$check = '';
|
||||||
|
for ($i = 0; $i < utf8_strlen($value); $i++)
|
||||||
|
{
|
||||||
|
$s = utf8_substr($value, $i, 1);
|
||||||
|
$check .= "[".lowercase($s)."|".uppercase($s)."]+";
|
||||||
|
}
|
||||||
|
if (preg_match("/$check/ui", $login))
|
||||||
|
returnAjax('error', 'Выберите, пожалуйста, другой логин.');
|
||||||
|
}
|
||||||
|
$check = 0;
|
||||||
|
for ($i = 0; $i < utf8_strlen($login); $i++)
|
||||||
|
{
|
||||||
|
$s = utf8_substr($login, $i, 1);
|
||||||
|
$check += ($s == ' ' || $s == '-') ?1 :0;
|
||||||
|
|
||||||
|
if ($i >= 2 && lowercase($s) == lowercase(utf8_substr($login, ($i-1), 1)) && lowercase($s) == lowercase(utf8_substr($login, ($i-2), 1)))
|
||||||
|
returnAjax('error', 'Запрещено использование трех и более одинаковых символов подряд.');
|
||||||
|
else if (($i == 0 || $i == (utf8_strlen($login) - 1)) && ($s == '-' || $s == ' '))
|
||||||
|
returnAjax('error', 'Логин не может начинаться или заканчиваться пробелом или тире.');
|
||||||
|
else if ($i >= 1 && in_array($s, mb_str_split(UPCASE)) && in_array(utf8_substr($login, ($i-1), 1), mb_str_split(LOCASE)))
|
||||||
|
returnAjax('error', 'Логин не может содержать заглавную букву после обычной.');
|
||||||
|
else if ($check > 2)
|
||||||
|
returnAjax('error', 'Не более двух пробелов или тире.');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (utf8_strlen($login) < 2 || utf8_strlen($login) > 15 || preg_match("/[^a-zA-Zа-яА-Я\- ]/ui", $login))
|
||||||
|
returnAjax('error', 'Логин не может быть короче 2-х символов и длинее 15-ти символов, и должен состоять только из букв русского и английского алфавита, а также из тире или пробела.');
|
||||||
|
else if (preg_match("/[\-]+[\-]/ui", $login) || preg_match("/[\_]+[\_]/ui", $login) || preg_match("/[\ ]+[\ ]/ui", $login))
|
||||||
|
returnAjax('error', 'Запрещено использовать два разделительных символа подряд.');
|
||||||
|
else if (preg_match("/[a-zA-Z]/ui", $login) && preg_match("/[а-яА-Я]/ui", $login))
|
||||||
|
returnAjax('error', 'В логине разрешено использовать только буквы одного алфавита русского или английского. Нельзя смешивать.');
|
||||||
|
else if ($adb->selectCell("SELECT `guid` FROM `characters` WHERE `login` = ?s", $login))
|
||||||
|
returnAjax('error', "Логин $login уже занят, выберите другой.");
|
||||||
|
|
||||||
|
$_SESSION['reg_login'] = $login;
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkstep2':
|
||||||
|
if (!$register)
|
||||||
|
returnAjax('error', $register_error);
|
||||||
|
|
||||||
|
unset($_SESSION['reg_password']);
|
||||||
|
$error = '';
|
||||||
|
$password = getVar('password');
|
||||||
|
$password_confirm = getVar('password_confirm');
|
||||||
|
|
||||||
|
if (!checks('reg_login'))
|
||||||
|
$error .= '<br>Пройдите предыдущий шаг!';
|
||||||
|
if (utf8_strlen($password) < 6 || utf8_strlen($password) > 30)
|
||||||
|
$error .= '<br>Длина пароля не может быть меньше 6 символов или более 30 символов.';
|
||||||
|
if ($password_confirm == '' || $password != $password_confirm)
|
||||||
|
$error .= '<br>В анкете пароль нужно ввести дважды, для проверки. Во второй раз вы его ввели неверно, будьте внимательнее...';
|
||||||
|
if ((preg_match("/[a-zA-Z]/ui", $password) && !preg_match("/[а-яА-Я0-9_]/ui", $password)) || (preg_match("/[а-яА-Я]/ui", $password) && !preg_match("/[a-zA-Z0-9_]/ui", $password)) || (preg_match("/[0-9_]/ui", $password) && !preg_match("/[a-zA-Zа-яА-Я]/ui", $password)))
|
||||||
|
$error .= '<br>Пароль не должен содержать только буквы одной раскладки и одного регистра.';
|
||||||
|
if (preg_match("/$_SESSION[reg_login]/ui", $password))
|
||||||
|
$error .= '<br>Пароль не должен содержать части логина.';
|
||||||
|
if ($error != '')
|
||||||
|
returnAjax('error', $error);
|
||||||
|
|
||||||
|
$_SESSION['reg_password'] = $password;
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkstep3':
|
||||||
|
if (!$register)
|
||||||
|
returnAjax('error', $register_error);
|
||||||
|
|
||||||
|
unset($_SESSION['reg_email'], $_SESSION['reg_secretquestion'], $_SESSION['reg_secretanswer']);
|
||||||
|
$error = '';
|
||||||
|
$email = getVar('email');
|
||||||
|
$secretquestion = getVar('secretquestion');
|
||||||
|
$secretanswer = getVar('secretanswer');
|
||||||
|
|
||||||
|
if (!checks('reg_login', 'reg_password'))
|
||||||
|
$error .= '<br>Пройдите предыдущий шаг!';
|
||||||
|
if (!preg_match("/^\w+[-_\.]*\w+@\w+-?\w+\.[a-z]{2,4}$/ui", $email))
|
||||||
|
$error .= "<br>Вы указали явно ошибочный email ($email).";
|
||||||
|
if (utf8_strlen($email) < 6 || utf8_strlen($email) > 50)
|
||||||
|
$error .= '<br>Email не может быть короче 6-ти символов и длинее 50-ти символов.';
|
||||||
|
if ($error != '')
|
||||||
|
returnAjax('error', $error);
|
||||||
|
|
||||||
|
$_SESSION['reg_email'] = $email;
|
||||||
|
$_SESSION['reg_secretquestion'] = $secretquestion;
|
||||||
|
$_SESSION['reg_secretanswer'] = $secretanswer;
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkstep4':
|
||||||
|
if (!$register)
|
||||||
|
returnAjax('error', $register_error);
|
||||||
|
|
||||||
|
unset($_SESSION['reg_name'], $_SESSION['reg_birth_day'], $_SESSION['reg_birth_month'], $_SESSION['reg_birth_year'], $_SESSION['reg_sex'], $_SESSION['reg_city'], $_SESSION['reg_icq'], $_SESSION['reg_hide_icq'], $_SESSION['reg_motto'], $_SESSION['reg_color']);
|
||||||
|
$error = '';
|
||||||
|
$name = getVar('name');
|
||||||
|
$birth_day = getVar('birth_day');
|
||||||
|
$birth_month = getVar('birth_month');
|
||||||
|
$birth_year = getVar('birth_year');
|
||||||
|
$sex = getVar('sex');
|
||||||
|
$city_n = getVar('city_n');
|
||||||
|
$city = getVar('city');
|
||||||
|
$icq = getVar('icq');
|
||||||
|
$hide_icq = getVar('hide_icq');
|
||||||
|
$motto = getVar('motto');
|
||||||
|
$color = getVar('color');
|
||||||
|
|
||||||
|
if (!checks('reg_login', 'reg_password', 'reg_email', 'reg_secretquestion', 'reg_secretanswer'))
|
||||||
|
$error .= '<br>Пройдите предыдущий шаг!';
|
||||||
|
if ($name == '' || preg_match("/[^a-zA-Zа-яА-Я0-9]/ui", $name))
|
||||||
|
$error .= '<br>Вы не заполнили или не правильно заполнили обязательное поле "Ваше имя".';
|
||||||
|
if ($birth_day == '' || $birth_month == '' || $birth_year == '')
|
||||||
|
$error .= '<br>Ошибка в написании дня рождения.';
|
||||||
|
if (preg_match("/[^a-zA-Zа-яА-Я0-9]/ui", $city))
|
||||||
|
$error .= '<br>Город должен состоять только из букв русского и английского алфавита, а также из цифр.';
|
||||||
|
if (preg_match("/[^0-9]/ui", $icq))
|
||||||
|
$error .= '<br>Ошибка в номере ICQ.';
|
||||||
|
if ($error != '')
|
||||||
|
returnAjax('error', $error);
|
||||||
|
|
||||||
|
$_SESSION['reg_name'] = $name;
|
||||||
|
$_SESSION['reg_birth_day'] = $birth_day;
|
||||||
|
$_SESSION['reg_birth_month'] = $birth_month;
|
||||||
|
$_SESSION['reg_birth_year'] = $birth_year;
|
||||||
|
$_SESSION['reg_sex'] = $sex;
|
||||||
|
$_SESSION['reg_city'] = ($city_n) ?$city_n :$city;
|
||||||
|
$_SESSION['reg_icq'] = $icq;
|
||||||
|
$_SESSION['reg_hide_icq'] = ($hide_icq == 'true') ?1 :0;
|
||||||
|
$_SESSION['reg_motto'] = $motto;
|
||||||
|
$_SESSION['reg_color'] = $color;
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
case 'checkstep5':
|
||||||
|
if (!$register)
|
||||||
|
returnAjax('error', $register_error);
|
||||||
|
|
||||||
|
$error = '';
|
||||||
|
$rules1 = getVar('rules1');
|
||||||
|
$rules2 = getVar('rules2');
|
||||||
|
$code = getVar('code');
|
||||||
|
|
||||||
|
if (!checks('reg_login', 'reg_password', 'reg_email', 'reg_secretquestion', 'reg_secretanswer', 'reg_name', 'reg_birth_day', 'reg_birth_month', 'reg_birth_year', 'reg_sex', 'reg_city', 'reg_icq', 'reg_hide_icq', 'reg_motto', 'reg_color'))
|
||||||
|
$error .= '<br>Пройдите предыдущий шаг!';
|
||||||
|
if ($rules1 == 'false')
|
||||||
|
$error .= '<br>Извините, без принятия правил нашего клуба, вы не можете зарегистрировать своего персонажа.';
|
||||||
|
if ($rules2 == 'false')
|
||||||
|
$error .= '<br>Извините, без принятия <u>Соглашения о предоставлении сервиса игры Бойцовский Клуб</u>, вы не можете зарегистрировать персонаж.';
|
||||||
|
if ($code != $_SESSION['secpic'])
|
||||||
|
$error .= '<br>Ошибка введения кода.';
|
||||||
|
if ($error != '')
|
||||||
|
returnAjax('error', $error);
|
||||||
|
|
||||||
|
$login = $_SESSION['reg_login'];
|
||||||
|
$password = $_SESSION['reg_password'];
|
||||||
|
$email = $_SESSION['reg_email'];
|
||||||
|
$secretquestion = $_SESSION['reg_secretquestion'];
|
||||||
|
$secretanswer = $_SESSION['reg_secretanswer'];
|
||||||
|
$name = $_SESSION['reg_name'];
|
||||||
|
$birthday = $_SESSION['reg_birth_day'].".".$_SESSION['reg_birth_month'].".".$_SESSION['reg_birth_year'];
|
||||||
|
$sex = $_SESSION['reg_sex'];
|
||||||
|
$town = $_SESSION['reg_city'];
|
||||||
|
$icq = $_SESSION['reg_icq'];
|
||||||
|
$hide_icq = $_SESSION['reg_hide_icq'];
|
||||||
|
$motto = $_SESSION['reg_motto'];
|
||||||
|
$color = $_SESSION['reg_color'];
|
||||||
|
$city = (rand(1,2) == 1) ?'drm' :'low';
|
||||||
|
unset($_SESSION['reg_login'], $_SESSION['reg_password'], $_SESSION['reg_email'], $_SESSION['reg_secretquestion'], $_SESSION['reg_secretanswer'], $_SESSION['reg_name'], $_SESSION['reg_birth_day'], $_SESSION['reg_birth_month'], $_SESSION['reg_birth_year'], $_SESSION['reg_sex'], $_SESSION['reg_city'], $_SESSION['reg_icq'], $_SESSION['reg_hide_icq'], $_SESSION['reg_motto'], $_SESSION['reg_color'], $_SESSION['secpic']);
|
||||||
|
|
||||||
|
if (($adb->selectCell("SELECT COUNT(*) FROM `characters` WHERE `login` = ?s", $login)) != 0)
|
||||||
|
returnAjax('error', 'Персонаж уже создан.');
|
||||||
|
|
||||||
|
$guid = ($adb->selectCell("SELECT MAX(`guid`) FROM `characters`;")) + 1;
|
||||||
|
$reg_password = SHA1($guid.':'.$password);
|
||||||
|
// Основная база
|
||||||
|
$adb->query("INSERT INTO `characters` (`guid`, `login`, `login_sec`, `password`, `mail`, `sex`, `city`, `shape`, `reg_ip`, `last_time`)
|
||||||
|
VALUES (?d, ?s, ?s, ?s, ?s, ?s, ?s, ?s, ?s, ?d);", $guid, $login, $login, $reg_password, $email, $sex, $city, "$sex/0.gif", $_SERVER['REMOTE_ADDR'], time());
|
||||||
|
// Дополнительная информация
|
||||||
|
$adb->query("INSERT INTO `character_info` (`guid`, `name`, `icq`, `secretquestion`, `secretanswer`, `hide_icq`, `town`, `birthday`, `color`, `motto`, `state`, `date`)
|
||||||
|
VALUES (?d, ?s, ?s, ?s, ?s, ?d, ?s, ?s, ?s, ?s, ?s, ?d);", $guid, $name, $icq, $secretquestion, $secretanswer, $hide_icq, $town, $birthday, $color, $motto, $city, time());
|
||||||
|
// Характеристики
|
||||||
|
$adb->query("INSERT INTO `character_stats` (`guid`)
|
||||||
|
VALUES (?d);", $guid);
|
||||||
|
$stats = $config['start']['stats'];
|
||||||
|
$items = $config['start']['items'];
|
||||||
|
unset($config['start']['stats'], $config['start']['items']);
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
$char->setChar('char_stats', $config['start']);
|
||||||
|
$char->changeStats($stats);
|
||||||
|
// Создание инвентаря
|
||||||
|
$adb->query("INSERT INTO `character_equip` (`guid`)
|
||||||
|
VALUES (?d);", $guid);
|
||||||
|
// Создание баров
|
||||||
|
$adb->query("INSERT INTO `character_bars` (`guid`)
|
||||||
|
VALUES (?d);", $guid);
|
||||||
|
// Эффекты
|
||||||
|
$char->workEffect(1);
|
||||||
|
// Предметы
|
||||||
|
foreach ($items as $item)
|
||||||
|
$char->equip->addItem($item, 'get');
|
||||||
|
// История
|
||||||
|
$char->history->Auth(2, $city);
|
||||||
|
|
||||||
|
if (checks('guid'))
|
||||||
|
deleteSession();
|
||||||
|
|
||||||
|
$adb->query("DELETE FROM `online` WHERE `guid` = ?d", $guid);
|
||||||
|
$adb->query("INSERT INTO `online` (`guid`, `login_display`, `sid`, `city`, `room`, `last_time`)
|
||||||
|
VALUES (?d, ?s, ?s, ?s, ?s, ?d);", $guid, $login, session_id(), $city, 'novice', time());
|
||||||
|
$char->setChar('char_db', array('last_go' => time()));
|
||||||
|
$_SESSION['guid'] = $guid;
|
||||||
|
$_SESSION['zayavka_c_m'] = 1;
|
||||||
|
$_SESSION['zayavka_c_o'] = 1;
|
||||||
|
$_SESSION['battle_ref'] = 0;
|
||||||
|
$char->history->Auth(1, $city);
|
||||||
|
returnAjax('complete');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
?>
|
34
engline/config.php
Normal file
34
engline/config.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
function copyright($year = 'auto')
|
||||||
|
{
|
||||||
|
if (intval($year) == 'auto') $year = date('Y');
|
||||||
|
if (intval($year) == date('Y')) echo intval($year);
|
||||||
|
if (intval($year) < date('Y')) echo intval($year) . ' - ' . date('Y');
|
||||||
|
if (intval($year) > date('Y')) echo date('Y');
|
||||||
|
}
|
||||||
|
|
||||||
|
$database = [
|
||||||
|
// Настройки подключения к базе
|
||||||
|
'adb' => 'mysql://root:password@localhost:3306/abk',
|
||||||
|
// Кодировка баз данных
|
||||||
|
'db_encoding' => 'utf8',
|
||||||
|
];
|
||||||
|
|
||||||
|
$config = [
|
||||||
|
'start' => [ //Создание персонажа
|
||||||
|
'stats' => ['str' => 3, 'dex' => 3, 'con' => 3, 'vit' => 3],
|
||||||
|
'ups' => 3,
|
||||||
|
'skills' => 1,
|
||||||
|
'maxmass' => 40,
|
||||||
|
'hp_regen' => 500,
|
||||||
|
'mp_regen' => 100,
|
||||||
|
'mp_cons' => 100,
|
||||||
|
'hitmin' => 1,
|
||||||
|
'hitmax' => 3,
|
||||||
|
'items' => [920, 1031]
|
||||||
|
],
|
||||||
|
'copyright' => '© '. copyright() .', «'. $_SERVER['HTTP_HOST'] .'»™<br>All rights reserved',
|
||||||
|
];
|
||||||
|
$GSM = 0;
|
139
engline/data.php
Normal file
139
engline/data.php
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
$data['colors'] = array(
|
||||||
|
'black' => 'Черный',
|
||||||
|
'blue' => 'Синий',
|
||||||
|
'fuchsia' => 'Розовый',
|
||||||
|
'grey' => 'Коричневый',
|
||||||
|
'green' => 'Зеленый',
|
||||||
|
'maroon' => 'Малиновый',
|
||||||
|
'navy' => 'Морской',
|
||||||
|
'olive' => 'Оливковый',
|
||||||
|
'purple' => 'Фиолетовый',
|
||||||
|
'teal' => 'Темно-зеленый',
|
||||||
|
'orange' => 'Оранжевый',
|
||||||
|
'chocolate' => 'Шоколадный',
|
||||||
|
'darkkhaki' => 'Темно-желтый',
|
||||||
|
'sandybrown'=> 'Темно-оранжевый'
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['month'] = array(
|
||||||
|
'01' => 'Январь',
|
||||||
|
'02' => 'Февраль',
|
||||||
|
'03' => 'Март',
|
||||||
|
'04' => 'Апрель',
|
||||||
|
'05' => 'Май',
|
||||||
|
'06' => 'Июнь',
|
||||||
|
'07' => 'Июль',
|
||||||
|
'08' => 'Август',
|
||||||
|
'09' => 'Сентябрь',
|
||||||
|
'10' => 'Октябрь',
|
||||||
|
'11' => 'Ноябрь',
|
||||||
|
'12' => 'Декабрь'
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['towns'] = array(
|
||||||
|
'Москва', 'Санкт-Петербург', 'Абакан (Хакасия)', 'Азов', 'Аксай (Ростовская обл.)', 'Алания', 'Альметьевск', 'Амурск', 'Анадырь', 'Анапа', 'Ангарск (Иркутская обл.)',
|
||||||
|
'Апатиты', 'Армавир', 'Архангельск', 'Асбест', 'Астрахань', 'Балашиха', 'Барнаул', 'Белгород', 'Беломорск (Карелия)', 'Березники (Пермская обл.)', 'Бийск',
|
||||||
|
'Биробиджан', 'Благовещенск', 'Большой камень', 'Борисоглебск', 'Братск', 'Бронницы', 'Брянск', 'Ванино', 'Великие Луки', 'Великий Устюг', 'Верхняя Салда',
|
||||||
|
'Владивосток', 'Владикавказ', 'Владимир', 'Волгоград', 'Волгодонск', 'Волжск', 'Вологда', 'Волхов (С.Птрбрг обл.)', 'Воронеж', 'Воскресенск', 'Воткинск', 'Выборг',
|
||||||
|
'Вязьма (Смоленская обл.)', 'Вятские Поляны', 'Гаврилов-Ям', 'Геленджик', 'Георгиевск', 'Голицино (Московская обл.)', 'Губкин', 'Гусь-Хрустальный',
|
||||||
|
'Дзержинск (Нижгрдск обл.)', 'Димитровград', 'Долгопрудный', 'Дубна', 'Дудинка (Эвенкская АО)', 'Ейск', 'Екатеринбург', 'Елабуга (Татарстан)', 'Елец (Липецкая обл.)',
|
||||||
|
'Елизово', 'Железногорск', 'Жуков (Калужской обл.)', 'Жуковский', 'Заречный', 'Звенигород', 'Зеленогорск', 'Зеленоград', 'Зеленодольск', 'Златоуст', 'Иваново',
|
||||||
|
'Ивантеевка (Мсквск обл.)', 'Ижевск', 'Иркутск', 'Ишим', 'Йошкар-Ола', 'Казань', 'Калининград', 'Калуга', 'Каменск-Уральский', 'Карталы', 'Кемерово',
|
||||||
|
'Кинешма (Ивановская обл.)', 'Кириши ( С.Птрбрг обл.)', 'Киров', 'Кирово-Чепецк', 'Кисловодск', 'Ковров', 'Когалым', 'Коломна', 'Комсомольск-на-Амуре', 'Королев',
|
||||||
|
'Костомукша', 'Кострома', 'Красногорск', 'Краснодар', 'Красноярск', 'Кронштадт', 'Кропоткин', 'Кумертау (Башкортостан)', 'Курган', 'Курск', 'Кустанай', 'Кызыл',
|
||||||
|
'Липецк', 'Лыткарино (Московская обл.)', 'Люберцы', 'Магадан', 'Магнитогорск', 'Майкоп', 'Малоярославец', 'Махачкала', 'Медвежьегорск', 'Междуреченск (Кмрвск обл.)',
|
||||||
|
'Менделеевск', 'Миасс', 'Миллерово (Ростовская обл.)', 'Минеральные Воды', 'Мичуринск (Тамбовская обл.)', 'Мурманск', 'Муром', 'Мытищи', 'Набережные Челны', 'Надым',
|
||||||
|
'Нальчик', 'Находка', 'Невинномысск', 'Нефтекамск', 'Нефтеюганск', 'Нижневартовс', 'Нижнекамск', 'Нижний Новгород', 'Нижний Тагил', 'Николаевск-на-Амуре',
|
||||||
|
'Николаевск', 'Новгород', 'Новокузнецк', 'Новомосковск', 'Новороссийск', 'Новосибирск', 'Новоуральск', 'Новочеркасск', 'Новый Уренгой', 'Норильск', 'Ноябрьск',
|
||||||
|
'Нягань', 'Обнинск', 'Одинцово', 'Омск', 'Онега', 'Орел', 'Оренбург', 'Орск', 'Пенза', 'Первоуральск', 'Переславль-Залесский', 'Пермь', 'Петрозаводск',
|
||||||
|
'Петропавловск-Камч.', 'Пластун (Приморский край)', 'Подольск', 'Полевской', 'Полярные Зори', 'Протвино', 'Псков', 'Пущино', 'Пятигорск', 'Радужный (Тюменская обл.)',
|
||||||
|
'Ревда', 'Ржев', 'Ростов-на-Дону', 'Ростов-Ярославский', 'Рубцовск', 'Рязань', 'Салехард', 'Самара', 'Саранск', 'Саратов', 'Саров', 'Сасово', 'Себеж (Псковская обл.)',
|
||||||
|
'Северодвинск', 'Северск (Томская обл.)', 'Сегежа', 'Семикаракорск', 'Сергиев Посад', 'Серов', 'Серпухов', 'Сестрорецк (С.Птрбрг обл.)', 'Смоленск', 'Снежинск',
|
||||||
|
'Советская Гавань', 'Советский (Тюменская обл.)', 'Солнечногорск', 'Сосновый Бор', 'Сосновый Бор (С.Птрбрг обл.)', 'Сочи', 'Ставрополь', 'Старая Русса',
|
||||||
|
'Старый Оскол', 'Стерлитамак (Башкортостан)', 'Стрежевой (Томская обл.)', 'Строгино', 'Сургут', 'Сызрань', 'Сыктывкар', 'Таганрог', 'Тамбов', 'Таруса', 'Тверь',
|
||||||
|
'Тольятти', 'Томск', 'Трехгорный', 'Троицк', 'Туапсе', 'Тула', 'Тюмень', 'Удомля (Тверская обл.)', 'Улан-Удэ', 'Ульяновск', 'Уссурийск', 'Усть-Лабинск (Крсндрскй край)',
|
||||||
|
'Уфа', 'Ухта', 'Фрязино', 'Хабаровск', 'Ханты-Мансийск', 'Химки', 'Холмск', 'Чебаркуль', 'Чебоксары', 'Челябинск', 'Череповец', 'Черкесск', 'Черноголовка',
|
||||||
|
'Чернушка (Пермская обл.)', 'Черняховск (Клннгрдск обл.)', 'Чита', 'Шадринск (Курганская обл.)', 'Шатура', 'Шахты', 'Щелково (Московская обл.)', 'Электросталь',
|
||||||
|
'Элиста', 'Энгельс', 'Южно-Сахалинск', 'Южноуральск', 'Юрга', 'Якутск', 'Ярославль', 'Азербайджан', 'Армения', 'Беларусь', 'Грузия', 'Казахстан', 'Кыргызстан',
|
||||||
|
'Латвия', 'Литва', 'Таджикистан', 'Туркменистан', 'Узбекистан', 'Украина', 'Эстония', 'Германия/Germany', 'Израиль/Israel', 'Канада/Canada', 'США/USA',
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['room_flags'] = array(
|
||||||
|
1 => 'fights',
|
||||||
|
2 => 'shop'
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['item_flags'] = array(
|
||||||
|
1 => 'Sellable',
|
||||||
|
2 => 'Repairable',
|
||||||
|
4 => 'Artefact',
|
||||||
|
8 => 'Personal',
|
||||||
|
16 => 'Left Hand'
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['sections'] = array(
|
||||||
|
1 => 'item',
|
||||||
|
2 => 'thing',
|
||||||
|
3 => 'elix',
|
||||||
|
4 => 'other'
|
||||||
|
);
|
||||||
|
|
||||||
|
$data['sections_shop'] = array(
|
||||||
|
'sell' => array('', 'NULL', 'shop_sell'),
|
||||||
|
'knife' => array('shop', 'shop_weapon', 'shop_weapon'),
|
||||||
|
'axe' => array('shop', 'shop_weapon', 'whitespace'),
|
||||||
|
'fail' => array('shop', 'shop_weapon', 'whitespace'),
|
||||||
|
'sword' => array('shop', 'shop_weapon', 'whitespace'),
|
||||||
|
'staff' => array('shop', 'shop_weapon', 'whitespace'),
|
||||||
|
'boots' => array('shop', 'shop_dress', 'shop_dress'),
|
||||||
|
'shirt' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'gloves' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'light_armor' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'heavy_armor' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'helmet' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'bracer' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'belt' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'pants' => array('shop', 'shop_dress', 'whitespace'),
|
||||||
|
'shield' => array('shop', 'NULL', 'NULL'),
|
||||||
|
'earring' => array('shop', 'shop_jewel', 'shop_jewel'),
|
||||||
|
'amulet' => array('shop', 'shop_jewel', 'whitespace'),
|
||||||
|
'ring' => array('shop', 'shop_jewel', 'whitespace'),
|
||||||
|
'scroll' => array('shop', 'NULL', 'NULL')
|
||||||
|
);
|
||||||
|
|
||||||
|
$behaviour = array(
|
||||||
|
//Хар-ка |Мин.лвл
|
||||||
|
'str' => 0,
|
||||||
|
'dex' => 0,
|
||||||
|
'con' => 0,
|
||||||
|
'vit' => 0,
|
||||||
|
'int' => 4,
|
||||||
|
'wis' => 6,
|
||||||
|
'spi' => 10
|
||||||
|
);
|
||||||
|
|
||||||
|
$mastery = array(
|
||||||
|
'phisic' => 1,
|
||||||
|
'sword' => 1,
|
||||||
|
'bow' => 1,
|
||||||
|
'crossbow' => 1,
|
||||||
|
'fail' => 1,
|
||||||
|
'staff' => 4,
|
||||||
|
'knife' => 1,
|
||||||
|
'axe' => 1,
|
||||||
|
'fire' => 4,
|
||||||
|
'water' => 4,
|
||||||
|
'air' => 4,
|
||||||
|
'earth' => 4,
|
||||||
|
'light' => 4,
|
||||||
|
'gray' => 4,
|
||||||
|
'dark' => 4
|
||||||
|
);
|
||||||
|
|
||||||
|
define("DATE_FULL", date('d.m.y H:i:s'));
|
||||||
|
define("DATE_NO_SEC", date('d.m.y H:i'));
|
||||||
|
define("DATE_TIME", date('H:i'));
|
||||||
|
?>
|
1361
engline/dbsimple/Generic.php
Normal file
1361
engline/dbsimple/Generic.php
Normal file
File diff suppressed because it is too large
Load Diff
290
engline/dbsimple/Ibase.php
Normal file
290
engline/dbsimple/Ibase.php
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DbSimple_Ibase: Interbase/Firebird database.
|
||||||
|
* (C) Dk Lab, http://en.dklab.ru
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
* See http://www.gnu.org/copyleft/lesser.html
|
||||||
|
*
|
||||||
|
* Placeholders are emulated because of logging purposes.
|
||||||
|
*
|
||||||
|
* @author Dmitry Koterov, http://forum.dklab.ru/users/DmitryKoterov/
|
||||||
|
* @author Konstantin Zhinko, http://forum.dklab.ru/users/KonstantinGinkoTit/
|
||||||
|
*
|
||||||
|
* @version 2.x $Id$
|
||||||
|
*/
|
||||||
|
require_once dirname(__FILE__) . '/Generic.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Best transaction parameters for script queries.
|
||||||
|
* They never give us update conflicts (unlike others)!
|
||||||
|
* Used by default.
|
||||||
|
*/
|
||||||
|
define('IBASE_BEST_TRANSACTION', IBASE_COMMITTED + IBASE_WAIT + IBASE_REC_VERSION);
|
||||||
|
define('IBASE_BEST_FETCH', IBASE_UNIXTIME);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database class for Interbase/Firebird.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DbSimple_Ibase extends DbSimple_Generic_Database
|
||||||
|
{
|
||||||
|
var $DbSimple_Ibase_BEST_TRANSACTION = IBASE_BEST_TRANSACTION;
|
||||||
|
var $DbSimple_Ibase_USE_NATIVE_PHOLDERS = true;
|
||||||
|
var $fetchFlags = IBASE_BEST_FETCH;
|
||||||
|
var $link;
|
||||||
|
var $trans;
|
||||||
|
var $prepareCache = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor(string $dsn)
|
||||||
|
* Connect to Interbase/Firebird.
|
||||||
|
*/
|
||||||
|
function DbSimple_Ibase($dsn)
|
||||||
|
{
|
||||||
|
$p = DbSimple_Generic::parseDSN($dsn);
|
||||||
|
if (!is_callable('ibase_connect')) {
|
||||||
|
return $this->_setLastError("-1", "Interbase/Firebird extension is not loaded", "ibase_connect");
|
||||||
|
}
|
||||||
|
$ok = $this->link = ibase_connect(
|
||||||
|
$p['host'] . (empty($p['port'])? "" : ":".$p['port']) .':'.preg_replace('{^/}s', '', $p['path']),
|
||||||
|
$p['user'],
|
||||||
|
$p['pass'],
|
||||||
|
isset($p['CHARSET']) ? $p['CHARSET'] : 'win1251',
|
||||||
|
isset($p['BUFFERS']) ? $p['BUFFERS'] : 0,
|
||||||
|
isset($p['DIALECT']) ? $p['DIALECT'] : 3,
|
||||||
|
isset($p['ROLE']) ? $p['ROLE'] : ''
|
||||||
|
);
|
||||||
|
if (isset($p['TRANSACTION'])) $this->DbSimple_Ibase_BEST_TRANSACTION = eval($p['TRANSACTION'].";");
|
||||||
|
$this->_resetLastError();
|
||||||
|
if (!$ok) return $this->_setDbError('ibase_connect()');
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performEscape($s, $isIdent=false)
|
||||||
|
{
|
||||||
|
if (!$isIdent)
|
||||||
|
return "'" . str_replace("'", "''", $s) . "'";
|
||||||
|
else
|
||||||
|
return '"' . str_replace('"', '_', $s) . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performTransaction($parameters=null)
|
||||||
|
{
|
||||||
|
if ($parameters === null) $parameters = $this->DbSimple_Ibase_BEST_TRANSACTION;
|
||||||
|
$this->trans = @ibase_trans($parameters, $this->link);
|
||||||
|
}
|
||||||
|
|
||||||
|
function& _performNewBlob($blobid=null)
|
||||||
|
{
|
||||||
|
$obj =& new DbSimple_Ibase_Blob($this, $blobid);
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performGetBlobFieldNames($result)
|
||||||
|
{
|
||||||
|
$blobFields = array();
|
||||||
|
for ($i=ibase_num_fields($result)-1; $i>=0; $i--) {
|
||||||
|
$info = ibase_field_info($result, $i);
|
||||||
|
if ($info['type'] === "BLOB") $blobFields[] = $info['name'];
|
||||||
|
}
|
||||||
|
return $blobFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performGetPlaceholderIgnoreRe()
|
||||||
|
{
|
||||||
|
return '
|
||||||
|
" (?> [^"\\\\]+|\\\\"|\\\\)* " |
|
||||||
|
\' (?> [^\'\\\\]+|\\\\\'|\\\\)* \' |
|
||||||
|
` (?> [^`]+ | ``)* ` | # backticks
|
||||||
|
/\* .*? \*/ # comments
|
||||||
|
';
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performCommit()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->trans)) return false;
|
||||||
|
$result = @ibase_commit($this->trans);
|
||||||
|
if (true === $result) {
|
||||||
|
$this->trans = null;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performRollback()
|
||||||
|
{
|
||||||
|
if (!is_resource($this->trans)) return false;
|
||||||
|
$result = @ibase_rollback($this->trans);
|
||||||
|
if (true === $result) {
|
||||||
|
$this->trans = null;
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performTransformQuery(&$queryMain, $how)
|
||||||
|
{
|
||||||
|
// If we also need to calculate total number of found rows...
|
||||||
|
switch ($how) {
|
||||||
|
// Prepare total calculation (if possible)
|
||||||
|
case 'CALC_TOTAL':
|
||||||
|
// Not possible
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Perform total calculation.
|
||||||
|
case 'GET_TOTAL':
|
||||||
|
// TODO: GROUP BY ... -> COUNT(DISTINCT ...)
|
||||||
|
$re = '/^
|
||||||
|
(?> -- [^\r\n]* | \s+)*
|
||||||
|
(\s* SELECT \s+) #1
|
||||||
|
((?:FIRST \s+ \S+ \s+ (?:SKIP \s+ \S+ \s+)? )?) #2
|
||||||
|
(.*?) #3
|
||||||
|
(\s+ FROM \s+ .*?) #4
|
||||||
|
((?:\s+ ORDER \s+ BY \s+ .*)?) #5
|
||||||
|
$/six';
|
||||||
|
$m = null;
|
||||||
|
if (preg_match($re, $queryMain[0], $m)) {
|
||||||
|
$queryMain[0] = $m[1] . $this->_fieldList2Count($m[3]) . " AS C" . $m[4];
|
||||||
|
$skipHead = substr_count($m[2], '?');
|
||||||
|
if ($skipHead) array_splice($queryMain, 1, $skipHead);
|
||||||
|
$skipTail = substr_count($m[5], '?');
|
||||||
|
if ($skipTail) array_splice($queryMain, -$skipTail);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performQuery($queryMain)
|
||||||
|
{
|
||||||
|
$this->_lastQuery = $queryMain;
|
||||||
|
$this->_expandPlaceholders($queryMain, $this->DbSimple_Ibase_USE_NATIVE_PHOLDERS);
|
||||||
|
|
||||||
|
$hash = $queryMain[0];
|
||||||
|
|
||||||
|
if (!isset($this->prepareCache[$hash])) {
|
||||||
|
$this->prepareCache[$hash] = @ibase_prepare((is_resource($this->trans) ? $this->trans : $this->link), $queryMain[0]);
|
||||||
|
} else {
|
||||||
|
// Prepare cache hit!
|
||||||
|
}
|
||||||
|
|
||||||
|
$prepared = $this->prepareCache[$hash];
|
||||||
|
if (!$prepared) return $this->_setDbError($queryMain[0]);
|
||||||
|
$queryMain[0] = $prepared;
|
||||||
|
$result = @call_user_func_array('ibase_execute', $queryMain);
|
||||||
|
// ATTENTION!!!
|
||||||
|
// WE MUST save prepared ID (stored in $prepared variable) somewhere
|
||||||
|
// before returning $result because of ibase destructor. Now it is done
|
||||||
|
// by $this->prepareCache. When variable $prepared goes out of scope, it
|
||||||
|
// is destroyed, and memory for result also freed by PHP. Totally we
|
||||||
|
// got "Invalud statement handle" error message.
|
||||||
|
|
||||||
|
if ($result === false) return $this->_setDbError($queryMain[0]);
|
||||||
|
if (!is_resource($result)) {
|
||||||
|
// Non-SELECT queries return number of affected rows, SELECT - resource.
|
||||||
|
return @ibase_affected_rows((is_resource($this->trans) ? $this->trans : $this->link));
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performFetch($result)
|
||||||
|
{
|
||||||
|
// Select fetch mode.
|
||||||
|
$flags = $this->fetchFlags;
|
||||||
|
if (empty($this->attributes['BLOB_OBJ'])) $flags = $flags | IBASE_TEXT;
|
||||||
|
else $flags = $flags & ~IBASE_TEXT;
|
||||||
|
|
||||||
|
$row = @ibase_fetch_assoc($result, $flags);
|
||||||
|
if (ibase_errmsg()) return $this->_setDbError($this->_lastQuery);
|
||||||
|
if ($row === false) return null;
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _setDbError($query)
|
||||||
|
{
|
||||||
|
return $this->_setLastError(ibase_errcode(), ibase_errmsg(), $query);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class DbSimple_Ibase_Blob extends DbSimple_Generic_Blob
|
||||||
|
{
|
||||||
|
var $blob; // resourse link
|
||||||
|
var $id;
|
||||||
|
var $database;
|
||||||
|
|
||||||
|
function DbSimple_Ibase_Blob(&$database, $id=null)
|
||||||
|
{
|
||||||
|
$this->database =& $database;
|
||||||
|
$this->id = $id;
|
||||||
|
$this->blob = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function read($len)
|
||||||
|
{
|
||||||
|
if ($this->id === false) return ''; // wr-only blob
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
$data = @ibase_blob_get($this->blob, $len);
|
||||||
|
if ($data === false) return $this->_setDbError('read');
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function write($data)
|
||||||
|
{
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
$ok = @ibase_blob_add($this->blob, $data);
|
||||||
|
if ($ok === false) return $this->_setDbError('add data to');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
if ($this->blob) {
|
||||||
|
$id = @ibase_blob_close($this->blob);
|
||||||
|
if ($id === false) return $this->_setDbError('close');
|
||||||
|
$this->blob = null;
|
||||||
|
} else {
|
||||||
|
$id = null;
|
||||||
|
}
|
||||||
|
return $this->id ? $this->id : $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function length()
|
||||||
|
{
|
||||||
|
if ($this->id === false) return 0; // wr-only blob
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
$info = @ibase_blob_info($this->id);
|
||||||
|
if (!$info) return $this->_setDbError('get length of');
|
||||||
|
return $info[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
function _setDbError($query)
|
||||||
|
{
|
||||||
|
$hId = $this->id === null ? "null" : ($this->id === false ? "false" : $this->id);
|
||||||
|
$query = "-- $query BLOB $hId";
|
||||||
|
$this->database->_setDbError($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called on each blob use (reading or writing).
|
||||||
|
function _firstUse()
|
||||||
|
{
|
||||||
|
// BLOB is opened - nothing to do.
|
||||||
|
if (is_resource($this->blob)) return true;
|
||||||
|
// Open or create blob.
|
||||||
|
if ($this->id !== null) {
|
||||||
|
$this->blob = @ibase_blob_open($this->id);
|
||||||
|
if ($this->blob === false) return $this->_setDbError('open');
|
||||||
|
} else {
|
||||||
|
$this->blob = @ibase_blob_create($this->database->link);
|
||||||
|
if ($this->blob === false) return $this->_setDbError('create');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
234
engline/dbsimple/Mysql.php
Normal file
234
engline/dbsimple/Mysql.php
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DbSimple_Mysql: MySQL database.
|
||||||
|
* (C) Dk Lab, http://en.dklab.ru
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
* See http://www.gnu.org/copyleft/lesser.html
|
||||||
|
*
|
||||||
|
* Placeholders end blobs are emulated.
|
||||||
|
*
|
||||||
|
* @author Dmitry Koterov, http://forum.dklab.ru/users/DmitryKoterov/
|
||||||
|
* @author Konstantin Zhinko, http://forum.dklab.ru/users/KonstantinGinkoTit/
|
||||||
|
*
|
||||||
|
* @version 2.x $Id$
|
||||||
|
*/
|
||||||
|
require_once dirname(__FILE__) . '/Generic.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database class for MySQL.
|
||||||
|
*/
|
||||||
|
class DbSimple_Mysql extends DbSimple_Generic_Database
|
||||||
|
{
|
||||||
|
var $link;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor(string $dsn)
|
||||||
|
* Connect to MySQL.
|
||||||
|
*/
|
||||||
|
function DbSimple_Mysql($dsn)
|
||||||
|
{
|
||||||
|
$p = DbSimple_Generic::parseDSN($dsn);
|
||||||
|
if (!is_callable('mysql_connect')) {
|
||||||
|
return $this->_setLastError("-1", "MySQL extension is not loaded", "mysql_connect");
|
||||||
|
}
|
||||||
|
$ok = $this->link = @mysql_connect(
|
||||||
|
$str = $p['host'] . (empty($p['port'])? "" : ":" . $p['port']),
|
||||||
|
$p['user'],
|
||||||
|
$p['pass'],
|
||||||
|
true
|
||||||
|
);
|
||||||
|
$this->_resetLastError();
|
||||||
|
if (!$ok) return $this->_setDbError('mysql_connect("' . $str . '", "' . $p['user'] . '")');
|
||||||
|
$ok = @mysql_select_db(preg_replace('{^/}s', '', $p['path']), $this->link);
|
||||||
|
if (!$ok) return $this->_setDbError('mysql_select_db()');
|
||||||
|
if (isset($p["charset"])) {
|
||||||
|
$this->query('SET NAMES ?', $p["charset"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performEscape($s, $isIdent=false)
|
||||||
|
{
|
||||||
|
if (!$isIdent) {
|
||||||
|
return "'" . mysql_real_escape_string($s, $this->link) . "'";
|
||||||
|
} else {
|
||||||
|
return "`" . str_replace('`', '``', $s) . "`";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performTransaction($parameters=null)
|
||||||
|
{
|
||||||
|
return $this->query('BEGIN');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function& _performNewBlob($blobid=null)
|
||||||
|
{
|
||||||
|
$obj =& new DbSimple_Mysql_Blob($this, $blobid);
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performGetBlobFieldNames($result)
|
||||||
|
{
|
||||||
|
$blobFields = array();
|
||||||
|
for ($i=mysql_num_fields($result)-1; $i>=0; $i--) {
|
||||||
|
$type = mysql_field_type($result, $i);
|
||||||
|
if (strpos($type, "BLOB") !== false) $blobFields[] = mysql_field_name($result, $i);
|
||||||
|
}
|
||||||
|
return $blobFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performGetPlaceholderIgnoreRe()
|
||||||
|
{
|
||||||
|
return '
|
||||||
|
" (?> [^"\\\\]+|\\\\"|\\\\)* " |
|
||||||
|
\' (?> [^\'\\\\]+|\\\\\'|\\\\)* \' |
|
||||||
|
` (?> [^`]+ | ``)* ` | # backticks
|
||||||
|
/\* .*? \*/ # comments
|
||||||
|
';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performCommit()
|
||||||
|
{
|
||||||
|
return $this->query('COMMIT');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performRollback()
|
||||||
|
{
|
||||||
|
return $this->query('ROLLBACK');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performTransformQuery(&$queryMain, $how)
|
||||||
|
{
|
||||||
|
// If we also need to calculate total number of found rows...
|
||||||
|
switch ($how) {
|
||||||
|
// Prepare total calculation (if possible)
|
||||||
|
case 'CALC_TOTAL':
|
||||||
|
$m = null;
|
||||||
|
if (preg_match('/^(\s* SELECT)(.*)/six', $queryMain[0], $m)) {
|
||||||
|
if ($this->_calcFoundRowsAvailable()) {
|
||||||
|
$queryMain[0] = $m[1] . ' SQL_CALC_FOUND_ROWS' . $m[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Perform total calculation.
|
||||||
|
case 'GET_TOTAL':
|
||||||
|
// Built-in calculation available?
|
||||||
|
if ($this->_calcFoundRowsAvailable()) {
|
||||||
|
$queryMain = array('SELECT FOUND_ROWS()');
|
||||||
|
}
|
||||||
|
// Else use manual calculation.
|
||||||
|
// TODO: GROUP BY ... -> COUNT(DISTINCT ...)
|
||||||
|
$re = '/^
|
||||||
|
(?> -- [^\r\n]* | \s+)*
|
||||||
|
(\s* SELECT \s+) #1
|
||||||
|
(.*?) #2
|
||||||
|
(\s+ FROM \s+ .*?) #3
|
||||||
|
((?:\s+ ORDER \s+ BY \s+ .*?)?) #4
|
||||||
|
((?:\s+ LIMIT \s+ \S+ \s* (?:, \s* \S+ \s*)? )?) #5
|
||||||
|
$/six';
|
||||||
|
$m = null;
|
||||||
|
if (preg_match($re, $queryMain[0], $m)) {
|
||||||
|
$query[0] = $m[1] . $this->_fieldList2Count($m[2]) . " AS C" . $m[3];
|
||||||
|
$skipTail = substr_count($m[4] . $m[5], '?');
|
||||||
|
if ($skipTail) array_splice($query, -$skipTail);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performQuery($queryMain)
|
||||||
|
{
|
||||||
|
$this->_lastQuery = $queryMain;
|
||||||
|
$this->_expandPlaceholders($queryMain, false);
|
||||||
|
$result = @mysql_query($queryMain[0], $this->link);
|
||||||
|
if ($result === false) return $this->_setDbError($queryMain[0]);
|
||||||
|
if (!is_resource($result)) {
|
||||||
|
if (preg_match('/^\s* INSERT \s+/six', $queryMain[0])) {
|
||||||
|
// INSERT queries return generated ID.
|
||||||
|
return @mysql_insert_id($this->link);
|
||||||
|
}
|
||||||
|
// Non-SELECT queries return number of affected rows, SELECT - resource.
|
||||||
|
return @mysql_affected_rows($this->link);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performFetch($result)
|
||||||
|
{
|
||||||
|
$row = @mysql_fetch_assoc($result);
|
||||||
|
if (mysql_error()) return $this->_setDbError($this->_lastQuery);
|
||||||
|
if ($row === false) return null;
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _setDbError($query)
|
||||||
|
{
|
||||||
|
if ($this->link) {
|
||||||
|
return $this->_setLastError(mysql_errno($this->link), mysql_error($this->link), $query);
|
||||||
|
} else {
|
||||||
|
return $this->_setLastError(mysql_errno(), mysql_error(), $query);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _calcFoundRowsAvailable()
|
||||||
|
{
|
||||||
|
$ok = version_compare(mysql_get_server_info($this->link), '4.0') >= 0;
|
||||||
|
return $ok;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DbSimple_Mysql_Blob extends DbSimple_Generic_Blob
|
||||||
|
{
|
||||||
|
// MySQL does not support separate BLOB fetching.
|
||||||
|
var $blobdata = null;
|
||||||
|
var $curSeek = 0;
|
||||||
|
|
||||||
|
function DbSimple_Mysql_Blob(&$database, $blobdata=null)
|
||||||
|
{
|
||||||
|
$this->blobdata = $blobdata;
|
||||||
|
$this->curSeek = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
function read($len)
|
||||||
|
{
|
||||||
|
$p = $this->curSeek;
|
||||||
|
$this->curSeek = min($this->curSeek + $len, strlen($this->blobdata));
|
||||||
|
return substr($this->blobdata, $this->curSeek, $len);
|
||||||
|
}
|
||||||
|
|
||||||
|
function write($data)
|
||||||
|
{
|
||||||
|
$this->blobdata .= $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
return $this->blobdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
function length()
|
||||||
|
{
|
||||||
|
return strlen($this->blobdata);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
321
engline/dbsimple/Postgresql.php
Normal file
321
engline/dbsimple/Postgresql.php
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* DbSimple_Postgreql: PostgreSQL database.
|
||||||
|
* (C) Dk Lab, http://en.dklab.ru
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
* See http://www.gnu.org/copyleft/lesser.html
|
||||||
|
*
|
||||||
|
* Placeholders are emulated because of logging purposes.
|
||||||
|
*
|
||||||
|
* @author Dmitry Koterov, http://forum.dklab.ru/users/DmitryKoterov/
|
||||||
|
* @author Konstantin Zhinko, http://forum.dklab.ru/users/KonstantinGinkoTit/
|
||||||
|
*
|
||||||
|
* @version 2.x $Id$
|
||||||
|
*/
|
||||||
|
require_once dirname(__FILE__) . '/Generic.php';
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database class for PostgreSQL.
|
||||||
|
*/
|
||||||
|
class DbSimple_Postgresql extends DbSimple_Generic_Database
|
||||||
|
{
|
||||||
|
|
||||||
|
var $DbSimple_Postgresql_USE_NATIVE_PHOLDERS = null;
|
||||||
|
var $prepareCache = array();
|
||||||
|
var $link;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* constructor(string $dsn)
|
||||||
|
* Connect to PostgresSQL.
|
||||||
|
*/
|
||||||
|
function DbSimple_Postgresql($dsn)
|
||||||
|
{
|
||||||
|
$p = DbSimple_Generic::parseDSN($dsn);
|
||||||
|
if (!is_callable('pg_connect')) {
|
||||||
|
return $this->_setLastError("-1", "PostgreSQL extension is not loaded", "pg_connect");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prepare+execute works only in PHP 5.1+.
|
||||||
|
$this->DbSimple_Postgresql_USE_NATIVE_PHOLDERS = function_exists('pg_prepare');
|
||||||
|
|
||||||
|
$dsnWithoutPass =
|
||||||
|
(!empty($p['host']) ? 'host='.$p['host'].' ' : '') .
|
||||||
|
(!empty($p['port']) ? 'port=' . $p['port'] . ' ' : '') .
|
||||||
|
'dbname=' . preg_replace('{^/}s', '', $p['path']) .' '.
|
||||||
|
(!empty($p['user']) ? 'user='. $p['user'] : '');
|
||||||
|
$ok = $this->link = @pg_connect(
|
||||||
|
$dsnWithoutPass . " " . (!empty($p['pass']) ? 'password=' . $p['pass'] . ' ' : ''),
|
||||||
|
PGSQL_CONNECT_FORCE_NEW
|
||||||
|
);
|
||||||
|
// We use PGSQL_CONNECT_FORCE_NEW, because in PHP 5.3 & PHPUnit
|
||||||
|
// $this->prepareCache may be cleaned, but $this->link is still
|
||||||
|
// not closed. So the next creation of DbSimple_Postgresql()
|
||||||
|
// would use exactly the same connection as the previous, but with
|
||||||
|
// empty $this->prepareCache, and it will generate "prepared statement
|
||||||
|
// xxx already exists" error each time we execute the same statement
|
||||||
|
// as in the previous calls.
|
||||||
|
$this->_resetLastError();
|
||||||
|
if (!$ok) return $this->_setDbError('pg_connect("' . $dsnWithoutPass . '") error');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performEscape($s, $isIdent=false)
|
||||||
|
{
|
||||||
|
if (!$isIdent)
|
||||||
|
return "E'" . pg_escape_string($this->link, $s) . "'";
|
||||||
|
else
|
||||||
|
return '"' . str_replace('"', '_', $s) . '"';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performTransaction($parameters=null)
|
||||||
|
{
|
||||||
|
return $this->query('BEGIN');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function& _performNewBlob($blobid=null)
|
||||||
|
{
|
||||||
|
$obj =& new DbSimple_Postgresql_Blob($this, $blobid);
|
||||||
|
return $obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performGetBlobFieldNames($result)
|
||||||
|
{
|
||||||
|
$blobFields = array();
|
||||||
|
for ($i=pg_num_fields($result)-1; $i>=0; $i--) {
|
||||||
|
$type = pg_field_type($result, $i);
|
||||||
|
if (strpos($type, "BLOB") !== false) $blobFields[] = pg_field_name($result, $i);
|
||||||
|
}
|
||||||
|
return $blobFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Real PostgreSQL escape
|
||||||
|
function _performGetPlaceholderIgnoreRe()
|
||||||
|
{
|
||||||
|
return '
|
||||||
|
" (?> [^"\\\\]+|\\\\"|\\\\)* " |
|
||||||
|
\' (?> [^\'\\\\]+|\\\\\'|\\\\)* \' |
|
||||||
|
/\* .*? \*/ # comments
|
||||||
|
';
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performGetNativePlaceholderMarker($n)
|
||||||
|
{
|
||||||
|
// PostgreSQL uses specific placeholders such as $1, $2, etc.
|
||||||
|
return '$' . ($n + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _performCommit()
|
||||||
|
{
|
||||||
|
return $this->query('COMMIT');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performRollback()
|
||||||
|
{
|
||||||
|
return $this->query('ROLLBACK');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performTransformQuery(&$queryMain, $how)
|
||||||
|
{
|
||||||
|
|
||||||
|
// If we also need to calculate total number of found rows...
|
||||||
|
switch ($how) {
|
||||||
|
// Prepare total calculation (if possible)
|
||||||
|
case 'CALC_TOTAL':
|
||||||
|
// Not possible
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Perform total calculation.
|
||||||
|
case 'GET_TOTAL':
|
||||||
|
// TODO: GROUP BY ... -> COUNT(DISTINCT ...)
|
||||||
|
$re = '/^
|
||||||
|
(?> -- [^\r\n]* | \s+)*
|
||||||
|
(\s* SELECT \s+) #1
|
||||||
|
(.*?) #2
|
||||||
|
(\s+ FROM \s+ .*?) #3
|
||||||
|
((?:\s+ ORDER \s+ BY \s+ .*?)?) #4
|
||||||
|
((?:\s+ LIMIT \s+ \S+ \s* (?: OFFSET \s* \S+ \s*)? )?) #5
|
||||||
|
$/six';
|
||||||
|
$m = null;
|
||||||
|
if (preg_match($re, $queryMain[0], $m)) {
|
||||||
|
$queryMain[0] = $m[1] . $this->_fieldList2Count($m[2]) . " AS C" . $m[3];
|
||||||
|
$skipTail = substr_count($m[4] . $m[5], '?');
|
||||||
|
if ($skipTail) array_splice($queryMain, -$skipTail);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performQuery($queryMain)
|
||||||
|
{
|
||||||
|
$this->_lastQuery = $queryMain;
|
||||||
|
$isInsert = preg_match('/^\s* INSERT \s+/six', $queryMain[0]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Note that in case of INSERT query we CANNOT work with prepare...execute
|
||||||
|
// cache, because RULEs do not work after pg_execute(). This is a very strange
|
||||||
|
// bug... To reproduce:
|
||||||
|
// $DB->query("CREATE TABLE test(id SERIAL, str VARCHAR(10)) WITH OIDS");
|
||||||
|
// $DB->query("CREATE RULE test_r AS ON INSERT TO test DO (SELECT 111 AS id)");
|
||||||
|
// print_r($DB->query("INSERT INTO test(str) VALUES ('test')"));
|
||||||
|
// In case INSERT + pg_execute() it returns new row OID (numeric) instead
|
||||||
|
// of result of RULE query. Strange, very strange...
|
||||||
|
//
|
||||||
|
|
||||||
|
if ($this->DbSimple_Postgresql_USE_NATIVE_PHOLDERS && !$isInsert) {
|
||||||
|
// Use native placeholders only if PG supports them.
|
||||||
|
$this->_expandPlaceholders($queryMain, true);
|
||||||
|
$hash = md5($queryMain[0]);
|
||||||
|
if (!isset($this->prepareCache[$hash])) {
|
||||||
|
$prepared = @pg_prepare($this->link, $hash, $queryMain[0]);
|
||||||
|
if ($prepared === false) return $this->_setDbError($queryMain[0]);
|
||||||
|
else $this->prepareCache[$hash] = true;
|
||||||
|
} else {
|
||||||
|
// Prepare cache hit!
|
||||||
|
}
|
||||||
|
$result = pg_execute($this->link, $hash, array_slice($queryMain, 1));
|
||||||
|
} else {
|
||||||
|
// No support for native placeholders on INSERT query.
|
||||||
|
$this->_expandPlaceholders($queryMain, false);
|
||||||
|
$result = @pg_query($this->link, $queryMain[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($result === false) return $this->_setDbError($queryMain);
|
||||||
|
if (!pg_num_fields($result)) {
|
||||||
|
if ($isInsert) {
|
||||||
|
// INSERT queries return generated OID (if table is WITH OIDs).
|
||||||
|
//
|
||||||
|
// Please note that unfortunately we cannot use lastval() PostgreSQL
|
||||||
|
// stored function because it generates fatal error if INSERT query
|
||||||
|
// does not contain sequence-based field at all. This error terminates
|
||||||
|
// the current transaction, and we cannot continue to work nor know
|
||||||
|
// if table contains sequence-updateable field or not.
|
||||||
|
//
|
||||||
|
// To use auto-increment functionality you must invoke
|
||||||
|
// $insertedId = $DB->query("SELECT lastval()")
|
||||||
|
// manually where it is really needed.
|
||||||
|
//
|
||||||
|
return @pg_last_oid($result);
|
||||||
|
}
|
||||||
|
// Non-SELECT queries return number of affected rows, SELECT - resource.
|
||||||
|
return @pg_affected_rows($result);
|
||||||
|
}
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _performFetch($result)
|
||||||
|
{
|
||||||
|
$row = @pg_fetch_assoc($result);
|
||||||
|
if (pg_last_error($this->link)) return $this->_setDbError($this->_lastQuery);
|
||||||
|
if ($row === false) return null;
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function _setDbError($query)
|
||||||
|
{
|
||||||
|
return $this->_setLastError(null, $this->link? pg_last_error($this->link) : (is_array($query)? "Connection is not established" : $query), $query);
|
||||||
|
}
|
||||||
|
|
||||||
|
function _getVersion()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class DbSimple_Postgresql_Blob extends DbSimple_Generic_Blob
|
||||||
|
{
|
||||||
|
var $blob; // resourse link
|
||||||
|
var $id;
|
||||||
|
var $database;
|
||||||
|
|
||||||
|
function DbSimple_Postgresql_Blob(&$database, $id=null)
|
||||||
|
{
|
||||||
|
$this->database =& $database;
|
||||||
|
$this->database->transaction();
|
||||||
|
$this->id = $id;
|
||||||
|
$this->blob = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function read($len)
|
||||||
|
{
|
||||||
|
if ($this->id === false) return ''; // wr-only blob
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
$data = @pg_lo_read($this->blob, $len);
|
||||||
|
if ($data === false) return $this->_setDbError('read');
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
function write($data)
|
||||||
|
{
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
$ok = @pg_lo_write($this->blob, $data);
|
||||||
|
if ($ok === false) return $this->_setDbError('add data to');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function close()
|
||||||
|
{
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
if ($this->blob) {
|
||||||
|
$id = @pg_lo_close($this->blob);
|
||||||
|
if ($id === false) return $this->_setDbError('close');
|
||||||
|
$this->blob = null;
|
||||||
|
} else {
|
||||||
|
$id = null;
|
||||||
|
}
|
||||||
|
$this->database->commit();
|
||||||
|
return $this->id? $this->id : $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
function length()
|
||||||
|
{
|
||||||
|
if (!($e=$this->_firstUse())) return $e;
|
||||||
|
|
||||||
|
@pg_lo_seek($this->blob, 0, PGSQL_SEEK_END);
|
||||||
|
$len = @pg_lo_tell($this->blob);
|
||||||
|
@pg_lo_seek($this->blob, 0, PGSQL_SEEK_SET);
|
||||||
|
|
||||||
|
if (!$len) return $this->_setDbError('get length of');
|
||||||
|
return $len;
|
||||||
|
}
|
||||||
|
|
||||||
|
function _setDbError($query)
|
||||||
|
{
|
||||||
|
$hId = $this->id === null? "null" : ($this->id === false? "false" : $this->id);
|
||||||
|
$query = "-- $query BLOB $hId";
|
||||||
|
$this->database->_setDbError($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called on each blob use (reading or writing).
|
||||||
|
function _firstUse()
|
||||||
|
{
|
||||||
|
// BLOB opened - do nothing.
|
||||||
|
if (is_resource($this->blob)) return true;
|
||||||
|
|
||||||
|
// Open or create blob.
|
||||||
|
if ($this->id !== null) {
|
||||||
|
$this->blob = @pg_lo_open($this->database->link, $this->id, 'rw');
|
||||||
|
if ($this->blob === false) return $this->_setDbError('open');
|
||||||
|
} else {
|
||||||
|
$this->id = @pg_lo_create($this->database->link);
|
||||||
|
$this->blob = @pg_lo_open($this->database->link, $this->id, 'w');
|
||||||
|
if ($this->blob === false) return $this->_setDbError('create');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
38
engline/error/404.html
Normal file
38
engline/error/404.html
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Анти Бойцовский клуб</title>
|
||||||
|
<link rel="SHORTCUT ICON" href="../img/favicon.ico" />
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="Content-Language" content="ru" />
|
||||||
|
<style>
|
||||||
|
body { background-color: #ffffff }
|
||||||
|
.message {
|
||||||
|
position:absolute;
|
||||||
|
text-align:center;
|
||||||
|
width:500px;
|
||||||
|
height:50px;
|
||||||
|
margin-top:505px;
|
||||||
|
margin-left: 100px;
|
||||||
|
font-size:20px;
|
||||||
|
font-family:Arial;
|
||||||
|
color: #4b7675;
|
||||||
|
}
|
||||||
|
.message a {
|
||||||
|
color: navy;
|
||||||
|
}
|
||||||
|
.backimg {
|
||||||
|
margin: auto;
|
||||||
|
background: url('../engline/error/404.png') no-repeat top center;
|
||||||
|
width: 830;
|
||||||
|
height: 589;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div style="text-align: center;">
|
||||||
|
<div class="backimg">
|
||||||
|
<div class="message">Страница не найдена. <br>Вернитесь на <a href="../">главную страницу</a>.</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
engline/error/404.png
Normal file
BIN
engline/error/404.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
74
engline/functions/class_Bank.php
Normal file
74
engline/functions/class_Bank.php
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Bank extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Начало работы с банковским счетом*/
|
||||||
|
function Login ($id, $pass)
|
||||||
|
{
|
||||||
|
$seek = $this->db->selectRow("SELECT `guid`,
|
||||||
|
`password`
|
||||||
|
FROM `character_bank`
|
||||||
|
WHERE `id` = ?d
|
||||||
|
and `guid` = ?d", $id ,$this->guid);
|
||||||
|
if (!$seek)
|
||||||
|
return 303;
|
||||||
|
|
||||||
|
if ($this->guid != $seek['guid'])
|
||||||
|
return 322;
|
||||||
|
|
||||||
|
if (SHA1($id.':'.$pass) != $seek['password'])
|
||||||
|
return 302;
|
||||||
|
|
||||||
|
$_SESSION['bankСredit'] = $id;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*Конец работы с банковским счетом*/
|
||||||
|
function unLogin ()
|
||||||
|
{
|
||||||
|
unset($_SESSION['bankСredit']);
|
||||||
|
}
|
||||||
|
/*Увеличение/уменьшение денег в банке у персонажа*/
|
||||||
|
function Money ($sum, $id, $type = '', $guid = 0)
|
||||||
|
{
|
||||||
|
if (checki($id) || !is_numeric($sum))
|
||||||
|
$this->char->error->Map(326);
|
||||||
|
|
||||||
|
$sum = rdf($sum);
|
||||||
|
|
||||||
|
if ($sum == 0)
|
||||||
|
$this->char->error->Map(325);
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'euro':
|
||||||
|
$money = $this->db->selectCell("SELECT `euro` FROM `character_bank` WHERE `id` = ?d and `guid` = ?d", $id ,$guid);
|
||||||
|
|
||||||
|
if (($money = rdf($money - $sum)) < 0)
|
||||||
|
$this->char->error->Map(310, $sum);
|
||||||
|
|
||||||
|
$this->db->query("UPDATE `character_bank` SET `euro` = ?f WHERE `id` = ?d and `guid` = ?d", $money ,$id ,$guid);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$money = $this->db->selectCell("SELECT `cash` FROM `character_bank` WHERE `id` = ?d and `guid` = ?d", $id ,$guid);
|
||||||
|
|
||||||
|
if (($money = rdf($money - $sum)) < 0)
|
||||||
|
$this->char->error->Map(305, $sum);
|
||||||
|
|
||||||
|
$this->db->query("UPDATE `character_bank` SET `cash` = ?f WHERE `id` = ?d and `guid` = ?d", $money ,$id ,$guid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
709
engline/functions/class_Char.php
Normal file
709
engline/functions/class_Char.php
Normal file
@ -0,0 +1,709 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $test;
|
||||||
|
public $equip;
|
||||||
|
public $city;
|
||||||
|
public $mail;
|
||||||
|
public $bank;
|
||||||
|
public $chat;
|
||||||
|
public $history;
|
||||||
|
public $error;
|
||||||
|
function& initialization ($guid, $adb)
|
||||||
|
{
|
||||||
|
$object = new Char;
|
||||||
|
$object->guid = $guid;
|
||||||
|
$object->db = $adb;
|
||||||
|
$classes = array('test', 'equip', 'city', 'mail', 'bank', 'chat', 'history', 'error');
|
||||||
|
foreach ($classes as $class)
|
||||||
|
{
|
||||||
|
$object->{$class} = new $class;
|
||||||
|
}
|
||||||
|
foreach ($classes as $class)
|
||||||
|
{
|
||||||
|
$object->{$class}->Init($object);
|
||||||
|
}
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
/*Получение информации о персонаже*/
|
||||||
|
function getChar ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$a_num = func_num_args();
|
||||||
|
$m_guid = (isset($args[2])) ?$args[2] :"-";
|
||||||
|
|
||||||
|
if (is_numeric($args[$a_num-1]))
|
||||||
|
{
|
||||||
|
$guid = $args[$a_num-1];
|
||||||
|
unset($args[$a_num-1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$guid = $this->guid;
|
||||||
|
|
||||||
|
$table = getTable($args[0]);
|
||||||
|
unset($args[0]);
|
||||||
|
|
||||||
|
if ($args[1] == '*')
|
||||||
|
return $this->db->selectRow("SELECT * FROM ?# WHERE `guid` = ?d", $table ,$guid);
|
||||||
|
else if ($a_num == 2 || ($a_num == 3 && is_numeric($m_guid)))
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM ?# WHERE `guid` = ?d", $args ,$table ,$guid);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM ?# WHERE `guid` = ?d", $args ,$table ,$guid);
|
||||||
|
}
|
||||||
|
/*Обновление информации о персонаже*/
|
||||||
|
function setChar ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$a_num = func_num_args();
|
||||||
|
|
||||||
|
if (is_numeric($args[$a_num-1]))
|
||||||
|
{
|
||||||
|
$guid = $args[$a_num-1];
|
||||||
|
unset($args[$a_num-1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$guid = $this->guid;
|
||||||
|
|
||||||
|
$table = getTable($args[0]);
|
||||||
|
unset($args[0]);
|
||||||
|
|
||||||
|
if ($a_num == 4 || ($a_num == 3 && !is_array($args[1])))
|
||||||
|
return $this->db->query("UPDATE ?# SET ?# = ? WHERE `guid` = ?d", $table ,$args[1] ,$args[2] ,$guid);
|
||||||
|
else
|
||||||
|
return $this->db->query("UPDATE ?# SET ?a WHERE `guid` = ?d", $table ,$args[1] ,$guid);
|
||||||
|
}
|
||||||
|
/*Получение информации о языке*/
|
||||||
|
function getLang ()
|
||||||
|
{
|
||||||
|
$lang = $this->db->selectCell("SELECT `language` FROM `server_info`;");
|
||||||
|
return $this->db->selectCol("SELECT `key` AS ARRAY_KEY, ?# FROM `server_language`;", $lang);
|
||||||
|
}
|
||||||
|
/*Увеличение/уменьшение характеристики*/
|
||||||
|
function changeStats ()
|
||||||
|
{
|
||||||
|
$stats = func_get_args();
|
||||||
|
$a_num = func_num_args();
|
||||||
|
|
||||||
|
if (is_numeric($stats[$a_num-1]))
|
||||||
|
{
|
||||||
|
$guid = $stats[$a_num-1];
|
||||||
|
unset($stats[$a_num-1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$guid = $this->guid;
|
||||||
|
|
||||||
|
$stats = (is_array($stats[0])) ?$stats[0] :array($stats[0] => $stats[1]);
|
||||||
|
foreach ($stats as $stat => $count)
|
||||||
|
{
|
||||||
|
switch ($stat)
|
||||||
|
{
|
||||||
|
case 'str':
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `str` = `str` + ?d,
|
||||||
|
`hitmin` = `hitmin` + ?d,
|
||||||
|
`hitmax` = `hitmax` + ?d
|
||||||
|
WHERE `guid` = ?d", $count ,$count ,$count ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'dex':
|
||||||
|
$mf_dodge = $count * 7;
|
||||||
|
$mf_adodge = $count * 3;
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `dex` = `dex` + ?d,
|
||||||
|
`mf_dodge` = `mf_dodge` + ?d,
|
||||||
|
`mf_adodge` = `mf_adodge` + ?d
|
||||||
|
WHERE `guid` = ?d", $count ,$mf_dodge ,$mf_adodge ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'con':
|
||||||
|
$mf_crit = $count * 7;
|
||||||
|
$mf_acrit = $count * 3;
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `con` = `con` + ?d,
|
||||||
|
`mf_crit` = `mf_crit` + ?d,
|
||||||
|
`mf_acrit` = `mf_acrit` + ?d
|
||||||
|
WHERE `guid` = ?d", $count ,$mf_crit ,$mf_acrit ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'vit':
|
||||||
|
$hp = $count * 6;
|
||||||
|
$bron = rdf($count * 1.5);
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `vit` = `vit` + ?d,
|
||||||
|
`hp` = `hp` + ?d,
|
||||||
|
`hp_all` = `hp_all` + ?d,
|
||||||
|
`maxmass` = `maxmass` + ?d,
|
||||||
|
`res_sting` = `res_sting` + ?f,
|
||||||
|
`res_slash` = `res_slash` + ?f,
|
||||||
|
`res_crush` = `res_crush` + ?f,
|
||||||
|
`res_sharp` = `res_sharp` + ?f,
|
||||||
|
`res_fire` = `res_fire` + ?f,
|
||||||
|
`res_water` = `res_water` + ?f,
|
||||||
|
`res_air` = `res_air` + ?f,
|
||||||
|
`res_earth` = `res_earth` + ?f,
|
||||||
|
`res_light` = `res_light` + ?f,
|
||||||
|
`res_gray` = `res_gray` + ?f,
|
||||||
|
`res_dark` = `res_dark` + ?f
|
||||||
|
WHERE `guid` = ?d", $count ,$hp ,$hp ,$count ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$bron ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'int':
|
||||||
|
$mf = rdf($count * 0.5);
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `int` = `int` + ?d,
|
||||||
|
`mf_fire` = `mf_fire` + ?f,
|
||||||
|
`mf_water` = `mf_water` + ?f,
|
||||||
|
`mf_air` = `mf_air` + ?f,
|
||||||
|
`mf_earth` = `mf_earth` + ?f,
|
||||||
|
`mf_light` = `mf_light` + ?f,
|
||||||
|
`mf_gray` = `mf_gray` + ?f,
|
||||||
|
`mf_dark` = `mf_dark` + ?f
|
||||||
|
WHERE `guid` = ?d", $count ,$mf ,$mf ,$mf ,$mf ,$mf ,$mf ,$mf ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'wis':
|
||||||
|
$mp = $count * 10;
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `wis` = `wis` + ?d,
|
||||||
|
`mp` = `mp` + ?d,
|
||||||
|
`mp_all` = `mp_all` + ?d
|
||||||
|
WHERE `guid` = ?d", $count ,$mp ,$mp ,$guid);
|
||||||
|
$this->statsBonus($stat);
|
||||||
|
break;
|
||||||
|
case 'spi':
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `spi` = `spi` + ?d
|
||||||
|
WHERE `guid` = ?d", $count ,$guid);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Увеличение/уменьшение кол-ва денег у персонажа*/
|
||||||
|
function changeMoney ($sum, $guid = 0)
|
||||||
|
{
|
||||||
|
if (!is_numeric($sum))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$sum = rdf($sum);
|
||||||
|
|
||||||
|
if ($sum == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$money = $this->getChar('char_db', 'money');
|
||||||
|
|
||||||
|
if (($money = $money + $sum) < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$this->setChar('char_db', 'money', $money, $guid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Увеличение/уменьшение массы у персонажа*/
|
||||||
|
function changeMass ($mass, $guid = 0)
|
||||||
|
{
|
||||||
|
if (checki($mass))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
|
||||||
|
$mass = $this->getChar('char_stats', 'mass') + rdf($mass);
|
||||||
|
$this->setChar('char_stats', 'mass', $mass, $guid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Время востановления здоровья*/
|
||||||
|
function setTimeToHPMP ($now, $all, $regen, $type, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
if ($now > $all)
|
||||||
|
$this->setChar('char_stats', array($type => $all, $type.'_cure' => 0), $guid);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getCureValue($now, $all, $regen, $cure);
|
||||||
|
$this->setChar('char_stats', $type.'_cure', $cure, $guid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Отображение дополнительной характеристики*/
|
||||||
|
function showStatAddition ($type = 'skills')
|
||||||
|
{
|
||||||
|
global $added;
|
||||||
|
$added = array('str' => 0, 'dex' => 0, 'con' => 0, 'int' => 0, 'sword' => 0, 'bow' => 0, 'crossbow' => 0, 'axe' => 0, 'fail' => 0, 'knife' => 0, 'staff' => 0, 'fire' => 0, 'water' => 0, 'air' => 0, 'earth' => 0, 'light' => 0, 'gray' => 0, 'dark' => 0);
|
||||||
|
$items = $this->db->select("SELECT `i`.`add_str`, `c`.`inc_str`,
|
||||||
|
`i`.`add_dex`, `c`.`inc_dex`,
|
||||||
|
`i`.`add_con`, `c`.`inc_con`,
|
||||||
|
`i`.`add_int`, `c`.`inc_int`,
|
||||||
|
`i`.`all_mastery`,
|
||||||
|
`i`.`sword`, `i`.`axe`,
|
||||||
|
`i`.`bow`, `i`.`crossbow`,
|
||||||
|
`i`.`fail`, `i`.`knife`,
|
||||||
|
`i`.`staff`,
|
||||||
|
`i`.`all_magic`,
|
||||||
|
`i`.`fire`, `i`.`water`,
|
||||||
|
`i`.`air`, `i`.`earth`,
|
||||||
|
`i`.`light`, `i`.`gray`,
|
||||||
|
`i`.`dark`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '1';", $this->guid);
|
||||||
|
foreach ($items as $dat)
|
||||||
|
{
|
||||||
|
$added['str'] += $dat['add_str'] + $dat['inc_str'];
|
||||||
|
$added['dex'] += $dat['add_dex'] + $dat['inc_dex'];
|
||||||
|
$added['con'] += $dat['add_con'] + $dat['inc_con'];
|
||||||
|
$added['int'] += $dat['add_int'] + $dat['inc_int'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$travms = $this->db->select("SELECT `stats` FROM `character_travms` WHERE `guid` = ?d and `stats` != '';", $this->guid);
|
||||||
|
foreach ($travms as $travm)
|
||||||
|
{
|
||||||
|
$stats = split(",", $travm['stats']);
|
||||||
|
foreach ($stats as $stat)
|
||||||
|
{
|
||||||
|
$stat = split("=", $stat);
|
||||||
|
|
||||||
|
if (array_key_exists($stat[0], $added))
|
||||||
|
$added[$stat[0]] += -$stat[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type != 'skills')
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach ($items as $dat)
|
||||||
|
{
|
||||||
|
$added['sword'] += $dat['sword'] + $dat['all_mastery'];
|
||||||
|
$added['bow'] += $dat['bow'] + $dat['all_mastery'];
|
||||||
|
$added['crossbow'] += $dat['crossbow'] + $dat['all_mastery'];
|
||||||
|
$added['axe'] += $dat['axe'] + $dat['all_mastery'];
|
||||||
|
$added['fail'] += $dat['fail'] + $dat['all_mastery'];
|
||||||
|
$added['knife'] += $dat['knife'] + $dat['all_mastery'];
|
||||||
|
$added['staff'] += $dat['staff'];
|
||||||
|
$added['fire'] += $dat['fire'] + $dat['all_magic'];
|
||||||
|
$added['water'] += $dat['water'] + $dat['all_magic'];
|
||||||
|
$added['air'] += $dat['air'] + $dat['all_magic'];
|
||||||
|
$added['earth'] += $dat['earth'] + $dat['all_magic'];
|
||||||
|
$added['light'] += $dat['light'];
|
||||||
|
$added['gray'] += $dat['gray'];
|
||||||
|
$added['dark'] += $dat['dark'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка доступности образа*/
|
||||||
|
function checkShape ($id)
|
||||||
|
{
|
||||||
|
$shape = $this->db->selectRow("SELECT * FROM `player_shapes` WHERE `id` = ?d", $id);
|
||||||
|
|
||||||
|
if (!$shape)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$char_db = $this->getChar('char_db', 'level', 'sex', 'next_shape');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'str', 'dex', 'con', 'vit', 'int', 'wis', 'sword', 'axe', 'fail', 'knife', 'fire', 'water', 'air', 'earth', 'light', 'dark');
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
|
||||||
|
if ($char_feat['next_shape'] && $char_feat['next_shape'] > time())
|
||||||
|
$this->error->Inventory(111, getFormatedTime($char_feat['next_shape']));
|
||||||
|
|
||||||
|
if ($shape['sex'] != $char_feat['sex'])
|
||||||
|
return false;
|
||||||
|
|
||||||
|
unset($char_feat['sex'], $char_feat['next_shape']);
|
||||||
|
foreach ($char_feat as $key => $value)
|
||||||
|
{
|
||||||
|
if ($shape[$key] > 0 && $shape[$key] > $value)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Отображение модуля инвентаря*/
|
||||||
|
function showInventoryBar ($bar, $value, $max_num)
|
||||||
|
{
|
||||||
|
global $behaviour;
|
||||||
|
$flag = explode('|', $value);
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$char_stats = $this->getChar('char_stats', '*');
|
||||||
|
$char_equip = $this->getChar('char_equip', 'hand_r', 'hand_l', 'hand_r', 'hand_r_type', 'hand_l_type');
|
||||||
|
list($hand_r, $hand_l, $hand_r_type, $hand_l_type) = array_values($char_equip);
|
||||||
|
$content = '';
|
||||||
|
$link_text = '';
|
||||||
|
$link = '';
|
||||||
|
$flags = ($flag[1]) ?1 :0;
|
||||||
|
$flags += ($flag[0] > 1) ?2 :0;
|
||||||
|
$flags += ($flag[0] < $max_num) ?4 :0;
|
||||||
|
switch ($bar)
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case 'stat': /*Характеристики*/
|
||||||
|
$level = $this->db->selectCell("SELECT `level` FROM `characters` WHERE `guid` = ?d", $this->guid);
|
||||||
|
foreach ($behaviour as $key => $min_level)
|
||||||
|
$content .= ($level >= $min_level) ?"$lang[$key] <b>$char_stats[$key]</b><br>" :"";
|
||||||
|
$content .= ($char_stats['ups'] > 0) ?"<a class='nick' href='?action=skills'><b><small>+ $lang[ups]</small></b></a> " :"";
|
||||||
|
$content .= ($char_stats['skills'] > 0) ?"• <a class='nick' href='?action=skills'><b><small> $lang[skills]</small></b></a>" :"";
|
||||||
|
break;
|
||||||
|
case 'mod': /*Модификаторы*/
|
||||||
|
$hitmin = $char_stats['hitmin'];
|
||||||
|
$hitmax = $char_stats['hitmax'];
|
||||||
|
$hand_r_hitmin = $char_stats['hand_r_hitmin'];
|
||||||
|
$hand_l_hitmin = $char_stats['hand_l_hitmin'];
|
||||||
|
$hand_r_hitmax = $char_stats['hand_r_hitmax'];
|
||||||
|
$hand_l_hitmax = $char_stats['hand_l_hitmax'];
|
||||||
|
$hand_r_critp = $char_stats['hand_r_critp'];
|
||||||
|
$hand_l_critp = $char_stats['hand_l_critp'];
|
||||||
|
$hand_r_crit = $char_stats['hand_r_crit'];
|
||||||
|
$hand_l_crit = $char_stats['hand_l_crit'];
|
||||||
|
$hand_r_adodge = $char_stats['hand_r_adodge'];
|
||||||
|
$hand_l_adodge = $char_stats['hand_l_adodge'];
|
||||||
|
$mf_critp = $char_stats['mf_critp'];
|
||||||
|
$mf_crit = $char_stats['mf_crit'];
|
||||||
|
$mf_dodge = $char_stats['mf_dodge'];
|
||||||
|
$mf_acrit = $char_stats['mf_acrit'];
|
||||||
|
$mf_adodge = $char_stats['mf_adodge'];
|
||||||
|
$mf_contr = $char_stats['mf_contr'];
|
||||||
|
$mf_parry = $char_stats['mf_parry'];
|
||||||
|
$mf_shieldb = $char_stats['mf_shieldb'];
|
||||||
|
$hand_status_r = $this->equip->checkHandStatus('r');
|
||||||
|
$hand_status_l = $this->equip->checkHandStatus('l');
|
||||||
|
$show_r_udar = ($hand_status_r) ?($hand_r_hitmin + $hitmin + $char_stats[$hand_r_type])."-".($hand_r_hitmax + $hitmax + $char_stats[$hand_r_type]) :"";
|
||||||
|
$show_l_udar = ($hand_status_l) ?(($hand_r != 0) ?" / " :"").($hand_l_hitmin + $hitmin + $char_stats[$hand_l_type])."-".($hand_l_hitmax + $hitmax + $char_stats[$hand_l_type]) :"";
|
||||||
|
$show_r_cpower = ($hand_status_r) ?$hand_r_critp + $mf_critp :"";
|
||||||
|
$show_l_cpower = ($hand_status_l) ?(($hand_r != 0) ?" / " :"").($hand_l_critp + $mf_critp) :"";
|
||||||
|
$show_r_crit = ($hand_status_r) ?$hand_r_crit + $mf_crit :"";
|
||||||
|
$show_l_crit = ($hand_status_l) ?(($hand_r != 0) ?" / " :"").($hand_l_crit + $mf_crit) :"";
|
||||||
|
$show_r_adodge = ($hand_status_r) ?$hand_r_adodge + $mf_adodge :"";
|
||||||
|
$show_l_adodge = ($hand_status_l) ?(($hand_r != 0) ?" / " :"").($hand_l_adodge + $mf_adodge) :"";
|
||||||
|
$show_r_mastery = ($hand_status_r) ?$char_stats[$hand_r_type] + $char_stats['hand_r_'.$hand_r_type] :"";
|
||||||
|
$show_l_mastery = ($hand_status_l) ?(($hand_r != 0) ?" / " :"").($char_stats[$hand_l_type] + $char_stats['hand_l_'.$hand_r_type]) :"";
|
||||||
|
$content .= "$lang[damage] $show_r_udar$show_l_udar<br>"
|
||||||
|
. "<span alt='$lang[mf_crit_m]'>$lang[mf_crit_i] $show_r_crit$show_l_crit</span><br>";
|
||||||
|
$content .= ($hand_r_critp != 0 || $hand_l_critp != 0 || $mf_critp != 0) ?"<span alt='$lang[mf_critp_m]'>$lang[mf_critp_i] $show_r_cpower$show_l_cpower</span><br>" :"";
|
||||||
|
$content .= "<span alt='$lang[mf_acrit_m]'>$lang[mf_acrit_i] $mf_acrit</span><br>"
|
||||||
|
. "<span alt='$lang[mf_dodge_m]'>$lang[mf_dodge_i] $mf_dodge</span><br>"
|
||||||
|
. "<span alt='$lang[mf_adodge_m]'>$lang[mf_adodge_i] $show_r_adodge$show_l_adodge</span><br>"
|
||||||
|
. "<span alt='$lang[mf_contr_m]'>$lang[mf_contr_i] $mf_contr</span><br>"
|
||||||
|
. "<span alt='$lang[mf_parry_m]'>$lang[mf_parry_i] $mf_parry</span><br>"
|
||||||
|
. "<span alt='$lang[mf_shieldb_m]'>$lang[mf_shieldb_i] $mf_shieldb</span><br>";
|
||||||
|
$content .= ($hand_r != 0 || $hand_l != 0) ?"<span alt='$lang[mastery_m]'>$lang[mastery] $show_r_mastery$show_l_mastery</span><br>" :"";
|
||||||
|
break;
|
||||||
|
case 'power': /*Мощность*/
|
||||||
|
$mf_damage = array('sting', 'slash', 'crush', 'sharp');
|
||||||
|
$mf_magic = array('fire', 'water', 'air', 'earth', 'light', 'gray', 'dark');
|
||||||
|
foreach ($mf_damage as $key)
|
||||||
|
{
|
||||||
|
$plus_r = $char_stats['hand_r_'.$key] + $char_stats['mf_'.$key];
|
||||||
|
$plus_l = $char_stats['hand_l_'.$key] + $char_stats['mf_'.$key];
|
||||||
|
$show_r[$key] = ($this->equip->checkHandStatus('r')) ?(($plus_r > 0) ?'+' :'')."$plus_r" :"";
|
||||||
|
$show_l[$key] = ($this->equip->checkHandStatus('l')) ?(($hand_r != 0) ?"% / ".(($plus_l > 0) ?'+' :'') :"").$plus_l :"";
|
||||||
|
}
|
||||||
|
foreach ($mf_damage as $key)
|
||||||
|
$content .= ($char_stats['mf_'.$key] != 0 || $char_stats['hand_r_'.$key] != 0 || $char_stats['hand_l_'.$key] != 0) ?"<span alt='".$lang[$key.'_p']."'>".$lang[$key.'_i']." $show_r[$key]$show_l[$key]%</span><br>" :"";
|
||||||
|
foreach ($mf_magic as $key)
|
||||||
|
$content .= ($char_stats['mf_'.$key] != 0) ?"<span alt='".$lang[$key.'_p']."'>".$lang[$key.'_i']." ".(($char_stats['mf_'.$key] > 0) ?'+' :'')."".$char_stats['mf_'.$key]."%</span><br>" :"";
|
||||||
|
break;
|
||||||
|
case 'def': /*Защита*/
|
||||||
|
$ress = array ('sting', 'slash', 'crush', 'sharp', 'fire', 'water', 'air', 'earth', 'light', 'dark', 'gray');
|
||||||
|
foreach ($ress as $key)
|
||||||
|
$content .= "<span alt='".$lang[$key.'_d']."'>".$lang[$key.'_i']." ".$char_stats['res_'.$key]."</span><br>";
|
||||||
|
break;
|
||||||
|
case 'btn': /*Кнопки*/
|
||||||
|
$content .= " <input type='button' value='$lang[unwear_all]' class='btn' id='link' link='unwear_full' style='font-weight: bold; cursor: pointer;'><br>";
|
||||||
|
break;
|
||||||
|
case 'set': /*Комплекты*/
|
||||||
|
$sets = $this->db->select("SELECT * FROM `character_sets` WHERE `guid` = ?d", $this->guid);
|
||||||
|
$link_text = "запомнить";
|
||||||
|
$link = "javascript:kmp();";
|
||||||
|
$content .= "<div id='allsets'>";
|
||||||
|
foreach ($sets as $set)
|
||||||
|
$content .= $this->getSetRow($set['name']);
|
||||||
|
$content .= "</div>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$return = "<table width='100%' border='0' cellspacing='0' cellpadding='1' background='img/back.gif'><tr><td valign='middle'>";
|
||||||
|
if ($flags & 1)
|
||||||
|
$return .= "<img id='spoiler_$bar' width='11' height='9' alt='Скрыть' border='0' src='../img/minus.gif' style='cursor: pointer;' onclick=\"javascript:spoilerBar('$bar');\" />";
|
||||||
|
else
|
||||||
|
$return .= "<img id='spoiler_$bar' width='11' height='9' alt='Показать' border='0' src='../img/plus.gif' style='cursor: pointer;' onclick=\"javascript:spoilerBar('$bar');\" />";
|
||||||
|
$return .= "</td>";
|
||||||
|
$return .= "<td> </td><td bgcolor='#e2e0e0'><small> <b>".$lang['bar_'.$bar]."<b> </small></td>";
|
||||||
|
if ($link_text)
|
||||||
|
$return .= "<td> </td><td bgcolor='#e2e0e0'> <a href='$link' class='nick'><small>$link_text</small></a> </td>";
|
||||||
|
$return .= "<td align='right' valign='middle' width='100%'>";
|
||||||
|
if ($flags & 2)
|
||||||
|
$return .= "<img border='0' width='11' height='9' alt='Поднять блок наверх' src='../img/up.gif' style='cursor: pointer;' onclick=\"javascript:switchBars('up', '$bar');\" />";
|
||||||
|
else
|
||||||
|
$return .= "<img border='0' width='11' height='9' src='../img/up-grey.gif'>";
|
||||||
|
if ($flags & 4)
|
||||||
|
$return .= "<img border='0' width='11' height='9' alt='Опустить блок вниз' src='../img/down.gif' style='cursor: pointer;' onclick=\"javascript:switchBars('down', '$bar');\" />";
|
||||||
|
else
|
||||||
|
$return .= "<img border='0' width='11' height='9' src='../img/down-grey.gif'>";
|
||||||
|
$return .= "</td>";
|
||||||
|
$return .= "</tr></table>";
|
||||||
|
$style = ($flags & 1) ?"" :" style='display: none;'";
|
||||||
|
$return .= "<div id='{$bar}c'$style><small>$content</small></div>";
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
/*Получение строки комплекта*/
|
||||||
|
function getSetRow ($name)
|
||||||
|
{
|
||||||
|
$lang = $this->getLang();
|
||||||
|
return "<div name='".str_replace(" ", "_", $name)."'><img width='200' height='1' src='../img/1x1.gif'><br> <img src='../img/icon/inf2.gif' width='10' height='10' alt='Просмотр' onclick=\"workSets('show', '$name');\" style='cursor: pointer;'><img src='../img/icon/close2.gif' width='9' height='9' alt='$lang[set_delete]' onclick=\"if (confirm('$lang[set_delete] $name?')) {workSets('delete', '$name');}\" style='cursor: pointer;'> <a href='main.php?action=wear_set&set_name=$name' class='nick'><small>$lang[equip] \"$name\"</small></a></div>";
|
||||||
|
}
|
||||||
|
/*Добавление/Обновление/Удаление эффекта*/
|
||||||
|
function workEffect ($effect, $type = 1, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
|
||||||
|
if (checki($effect))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_eff = $this->db->selectCell("SELECT `guid` FROM `character_effects` WHERE `effect_id` = ?d and `guid` = ?d", $effect ,$guid);
|
||||||
|
|
||||||
|
if ((($type == -1 || $type == 0) && !$char_eff) || ($type == 1 && $char_eff))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$e_info = $this->db->selectRow("SELECT * FROM `player_effects` WHERE `id` = ?d", $effect);
|
||||||
|
|
||||||
|
$char_e = $this->db->selectCell("SELECT `c`.`effect_id`
|
||||||
|
FROM `character_effects` AS `c`
|
||||||
|
LEFT JOIN `player_effects` AS `i`
|
||||||
|
ON `c`.`effect_id` = `i`.`id`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `i`.`set` = ?s", $guid ,$e_info['set']);
|
||||||
|
|
||||||
|
if ($char_e && $char_e != $effect)
|
||||||
|
$this->workEffect($char_e, -1);
|
||||||
|
|
||||||
|
if ($type == 0)
|
||||||
|
{
|
||||||
|
if ($char_eff)
|
||||||
|
{
|
||||||
|
$this->db->query("UPDATE `character_effects` SET `end_time` = ?d WHERE `guid` = ?d and `effect_id` = ?d", (time() + $e_info['duration']) ,$guid ,$effect);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$type = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$char_stats = $this->getChar('char_stats', '*', $guid);
|
||||||
|
|
||||||
|
$new_sql = array();
|
||||||
|
$new_sql['res_sting'] = $e_info['res_dmg'];
|
||||||
|
$new_sql['res_slash'] = $e_info['res_dmg'];
|
||||||
|
$new_sql['res_crush'] = $e_info['res_dmg'];
|
||||||
|
$new_sql['res_sharp'] = $e_info['res_dmg'];
|
||||||
|
$new_sql['res_fire'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_water'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_air'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_earth'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_light'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_gray'] = $e_info['res_magic'];
|
||||||
|
$new_sql['res_dark'] = $e_info['res_magic'];
|
||||||
|
$new_sql['mf_sting'] = $e_info['mf_dmg'];
|
||||||
|
$new_sql['mf_slash'] = $e_info['mf_dmg'];
|
||||||
|
$new_sql['mf_crush'] = $e_info['mf_dmg'];
|
||||||
|
$new_sql['mf_sharp'] = $e_info['mf_dmg'];
|
||||||
|
$new_sql['mf_fire'] = $e_info['mf_magic'];
|
||||||
|
$new_sql['mf_water'] = $e_info['mf_magic'];
|
||||||
|
$new_sql['mf_air'] = $e_info['mf_magic'];
|
||||||
|
$new_sql['mf_earth'] = $e_info['mf_magic'];
|
||||||
|
$new_sql['mf_critp'] = $e_info['mf_critp'];
|
||||||
|
$new_sql['mf_adodge'] = $e_info['mf_adodge'];
|
||||||
|
$new_sql['mf_acrit'] = $e_info['mf_acrit'];
|
||||||
|
$new_sql['mf_dodge'] = $e_info['mf_dodge'];
|
||||||
|
$new_sql['hitmin'] = $e_info['add_hit_min'];
|
||||||
|
$new_sql['hitmax'] = $e_info['add_hit_max'];
|
||||||
|
$new_sql['hp_all'] = $e_info['add_hp'];
|
||||||
|
$new_sql['mp_all'] = $e_info['add_mp'];
|
||||||
|
$new_sql['mp_regen'] = $e_info['mp_regen'];
|
||||||
|
$new_sql['mp_cons'] = -$e_info['mp_cons'];
|
||||||
|
|
||||||
|
foreach ($new_sql as $key => $value)
|
||||||
|
{
|
||||||
|
$new_sql[$key] = $value*$type;
|
||||||
|
$new_sql[$key] += $char_stats[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
$char_hpmp = $this->getChar('char_stats', 'hp', 'mp', $guid);
|
||||||
|
foreach ($char_hpmp as $key => $value)
|
||||||
|
{
|
||||||
|
if ($e_info['add_'.$key] != 0)
|
||||||
|
$this->setTimeToHPMP($value, $new_sql[$key.'_all'], $char_stats[$key.'_regen'], $key, $guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
$time = ($e_info['duration'] == 0) ?0 :time() + $e_info['duration'];
|
||||||
|
$this->db->query("INSERT INTO `character_effects` (`guid`, `effect_id`, `end_time`)
|
||||||
|
VALUES (?d, ?d, ?d)", $guid ,$effect ,$time);
|
||||||
|
}
|
||||||
|
else if ($type == -1)
|
||||||
|
$this->db->query("DELETE FROM `character_effects` WHERE `guid` = ?d and `effect_id` = ?d", $guid ,$effect);
|
||||||
|
$this->setChar('char_stats', $new_sql, $guid);
|
||||||
|
}
|
||||||
|
/*Бонусные эффекты от статов*/
|
||||||
|
function statsBonus ($stat)
|
||||||
|
{
|
||||||
|
$stat_value = $this->getChar('char_stats', $stat);
|
||||||
|
|
||||||
|
if ($stat_value < 25)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ($stat_value >= 25 && $stat_value < 50) $power = 1;
|
||||||
|
else if ($stat_value >= 50 && $stat_value < 75) $power = 2;
|
||||||
|
else if ($stat_value >= 75 && $stat_value < 100) $power = 3;
|
||||||
|
else if ($stat_value >= 100 && $stat_value < 125) $power = 4;
|
||||||
|
else if ($stat_value >= 125 && $stat_value < 150) $power = 5;
|
||||||
|
else if ($stat_value >= 150) $power = 6;
|
||||||
|
|
||||||
|
$entry = $this->db->selectCell("SELECT `id` FROM `player_effects` WHERE `set` = ?s and `power` = ?d", $stat ,$power);
|
||||||
|
$this->workEffect($entry, 1);
|
||||||
|
}
|
||||||
|
/*Добавление/Удаление травмы*/
|
||||||
|
function workTravm ($travm, $type = 1, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
|
||||||
|
if (checki($travm))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_trm = $this->db->selectCell("SELECT `guid` FROM `character_travms` WHERE `travm_id` = ?d and `guid` = ?d", $travm ,$guid);
|
||||||
|
|
||||||
|
if (($type == -1 && !$char_trm) || ($type == 1 && $char_trm))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
$t_info = $this->db->selectRow("SELECT * FROM `player_travms` WHERE `id` = ?d", $travm);
|
||||||
|
else
|
||||||
|
$t_info = $this->db->selectRow("SELECT *
|
||||||
|
FROM `character_travms` AS `c`
|
||||||
|
LEFT JOIN `player_travms` AS `i`
|
||||||
|
ON `c`.`travm_id` = `i`.`id`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`travm_id` = ?d", $guid ,$travm);
|
||||||
|
|
||||||
|
$level = $this->getChar('char_db', 'level', $guid);
|
||||||
|
$char_stats = $this->getChar('char_stats', '*', $guid);
|
||||||
|
|
||||||
|
$stats = array('str' => 0, 'dex' => 0, 'con' => 0);
|
||||||
|
$new_sql = array();
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
$t_info['stats'] = '';
|
||||||
|
switch ($t_info['type'])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if ($t_info['id'] == 100)
|
||||||
|
$t_info['stats'] = "mf_sting=50,mf_slash=50,mf_crush=50,mf_sharp=50,mf_fire=50,mf_water=50,mf_air=50,mf_earth=50,mf_light=50,mf_gray=50,mf_dark=50";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ($this->db->selectRow("SELECT * FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and `i`.`type` = '1';", $guid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$shuffle = shuffle_arr($stats);
|
||||||
|
foreach ($shuffle as $key => $value)
|
||||||
|
{
|
||||||
|
$stats[$key] = $char_stats[$key];
|
||||||
|
$minus = ($t_info['power'] == 1) ?$level*$t_info['power'] :$level*($t_info['power'] + 2);
|
||||||
|
if ($char_stats[$key] > $minus)
|
||||||
|
{
|
||||||
|
$t_info['stats'] = "$key=$minus";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$t_info['stats'])
|
||||||
|
{
|
||||||
|
arsort($stats);
|
||||||
|
foreach ($stats as $key => $value)
|
||||||
|
{
|
||||||
|
$minus = $char_stats[$key]-1;
|
||||||
|
$t_info['stats'] = "$key=$minus";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if ($this->db->selectRow("SELECT * FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and `i`.`type` = '2';", $guid))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$minus = 25*$t_info['power'];
|
||||||
|
$t_info['stats'] = "mp_regen=$minus";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$stats = array('str' => 0, 'dex' => 0, 'con' => 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($t_info['stats'])
|
||||||
|
{
|
||||||
|
$modifiers = split(",", $t_info['stats']);
|
||||||
|
foreach ($modifiers as $modifier)
|
||||||
|
{
|
||||||
|
$stat = split("=", $modifier);
|
||||||
|
|
||||||
|
if (array_key_exists($stat[0], $stats))
|
||||||
|
$stats[$stat[0]] = -$stat[1]*$type;
|
||||||
|
else
|
||||||
|
$new_sql[$stat[0]] = -$stat[1]*$type + $char_stats[$stat[0]];
|
||||||
|
}
|
||||||
|
$this->changeStats($stats, $guid);
|
||||||
|
if ($new_sql)
|
||||||
|
$this->setChar('char_stats', $new_sql, $guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
$time = ($t_info['dur_max'] == 0) ?0 :time() + rand($t_info['dur_min'], $t_info['dur_max']);
|
||||||
|
$this->db->query("INSERT INTO `character_travms` (`guid`, `travm_id`, `stats`, `end_time`)
|
||||||
|
VALUES (?d, ?d, ?s, ?d)", $guid ,$travm ,$t_info['stats'] ,$time);
|
||||||
|
}
|
||||||
|
else if ($type == -1)
|
||||||
|
$this->db->query("DELETE FROM `character_travms` WHERE `guid` = ?d and `travm_id` = ?d", $guid ,$travm);
|
||||||
|
}
|
||||||
|
/*Показ строки персонажа*/
|
||||||
|
function getLogin ($type = 'clan', $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$char_db = $this->getChar('char_db', 'login', 'level', 'orden', 'clan', 'clan_short', 'block', 'rang', 'chat_shut', 'afk', 'dnd', 'message', $guid);
|
||||||
|
list($login, $level, $orden, $clan_f, $clan_s, $block, $rang, $chat_shut, $afk, $dnd, $message) = array_values($char_db);
|
||||||
|
$travm = $this->db->select("SELECT `c`.`travm_id` FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and (`i`.`type` = '1' or `i`.`type` = '2');", $guid);
|
||||||
|
switch ($orden)
|
||||||
|
{
|
||||||
|
case 1: $orden_img = "<img src='../img/orden/pal/$rang.gif' width='12' height='15' border='0' title='Белое братство'>"; break;
|
||||||
|
case 2: $orden_img = "<img src='../img/orden/arm/$rang.gif' width='12' height='15' border='0' title='Темное братство'>"; break;
|
||||||
|
case 3: $orden_img = "<img src='../img/orden/3.gif' width='12' height='15' border='0' title='Нейтральное братство'>"; break;
|
||||||
|
case 4: $orden_img = "<img src='../img/orden/4.gif' width='12' height='15' border='0' title='Алхимик'>"; break;
|
||||||
|
case 5: $orden_img = "<img src='../img/orden/5.gif' width='12' height='15' border='0' title='Хаос'>"; break;
|
||||||
|
default: $orden_img = ""; break;
|
||||||
|
}
|
||||||
|
$clan = ($clan_s != '') ?"<img src='../img/clan/$clan_s.gif' border='0' title='$clan_f'>" :"";
|
||||||
|
$login_link = str_replace(" ", "%20", $login);
|
||||||
|
$login_info = "<a href='../info.php?log=$login_link' target='_blank'><img src='../img/inf.gif' border='0' title='Инф. о $login'></a>";
|
||||||
|
$mol = ($chat_shut) ?" <img src='../img/sleep2.gif' title='Наложено заклятие молчания'>" :" ";
|
||||||
|
$travm = ($travm) ?"<img src='../img/travma.gif' title='Инвалидность'>" :" ";
|
||||||
|
$banned = ($block) ?"<font color='red'><b>- Забанен</b></font>" :"";
|
||||||
|
$afk = ($afk) ?"<font title='$message'><b>afk</b></font> " :(($dnd && $message) ?"<font title='$message'><b>dnd</b></font> " :'');
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'online': return " <a href=javascript:top.AddToPrivate('$login_link',true);><img border='0' src='../img/lock.gif' title='Приват'></a> $afk$orden_img$clan<a href=javascript:top.AddTo('$login_link'); class='nick'><b>$login</b></a>[$level]$login_info$mol$travm<br>";
|
||||||
|
case 'mults': return "$orden_img$clan<b>$login</b> [$level]$login_info $banned <br>";
|
||||||
|
case 'clan': return "$orden_img$clan<b>$login</b> [$level]$login_info";
|
||||||
|
case 'turn': return $orden_img;
|
||||||
|
case 'name': return $login;
|
||||||
|
case 'news': return "$orden_img$clan<font class='header'>$login</font> [$level]$login_info";
|
||||||
|
case 'mail': return "<font color='red'>$login</font> $login_info";
|
||||||
|
default: return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Распознает наличие гайда*/
|
||||||
|
function getGuid ($guid)
|
||||||
|
{
|
||||||
|
return (!$guid) ?$this->guid :$guid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
71
engline/functions/class_Chat.php
Normal file
71
engline/functions/class_Chat.php
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Chat extends Char
|
||||||
|
{
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Отправка сообщения в чат*/
|
||||||
|
function say ($to, $text, $sender = '')
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'login', 'room', 'city', $to);
|
||||||
|
|
||||||
|
if ($sender == '')
|
||||||
|
$class = "sys";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$class = "private";
|
||||||
|
$text = "private [$char_db[login]] $text</font>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->db->query("INSERT INTO `city_chat` (`sender`, `to`, `room`, `msg`, `class`, `date_stamp`, `city`)
|
||||||
|
VALUES (?s, ?s, ?s, ?s, ?s, ?d, ?s)", $sender ,$char_db['login'] ,$char_db['room'] ,$text ,$class ,time() ,$char_db['city']);
|
||||||
|
echoScript("try {top.msg.updateMessages();} catch(e) {}");
|
||||||
|
}
|
||||||
|
/*Выполнение комманд в чате*/
|
||||||
|
function executeCommand ($name, $message)
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'afk', 'login', 'room', 'city', $this->guid);
|
||||||
|
switch ($name)
|
||||||
|
{
|
||||||
|
case '/afk':
|
||||||
|
$message = str_replace('/afk', '', $message);
|
||||||
|
|
||||||
|
if (isset($message[0]) && $message[0] != ' ')
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$message = (isset($message[1])) ?preg_replace("/ /", "", $message, 1) :'away from keyboard';
|
||||||
|
$this->setChar('char_db', array('afk' => 1, 'dnd' => 0, 'message' => $message));
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case '/dnd':
|
||||||
|
$message = str_replace('/dnd', '', $message);
|
||||||
|
|
||||||
|
if ($message == '' || (isset($message[0]) && $message[0] != ' ') || !isset($message[1]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$this->setChar('char_db', array('afk' => 0, 'dnd' => 1, 'message' => $message));
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
case '/e':
|
||||||
|
$emotion = str_replace('/e', '', $message);
|
||||||
|
|
||||||
|
if ($emotion == '' || (isset($emotion[0]) && $emotion[0] != ' ') || !isset($emotion[1]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$this->db->query("INSERT INTO `city_chat` (`sender`, `to`, `room`, `msg`, `class`, `date_stamp`, `city`)
|
||||||
|
VALUES (?s, ?s, ?s, ?s, ?s, ?d, ?s)", $char_db['login'] ,'' ,$char_db['room'] ,$emotion ,'emotion' ,time() ,$char_db['city']);
|
||||||
|
return true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
135
engline/functions/class_City.php
Normal file
135
engline/functions/class_City.php
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class City extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Получение информации о городе*/
|
||||||
|
function getCity ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$args_num = func_num_args();
|
||||||
|
$city = $args[0];
|
||||||
|
unset($args[0]);
|
||||||
|
|
||||||
|
if ($args_num == 2)
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM `server_cities` WHERE `city` = ?s", $args ,$city);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM `server_cities` WHERE `city` = ?s", $args ,$city);
|
||||||
|
}
|
||||||
|
/*Получение информации о комнате*/
|
||||||
|
function getRoom ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$args_num = func_num_args();
|
||||||
|
$room = $args[0];
|
||||||
|
$city = $this->getCity($args[1], 'flag');
|
||||||
|
unset($args[0], $args[1]);
|
||||||
|
|
||||||
|
if ($args_num == 3)
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM `city_rooms` WHERE `room` = ?s and `city` & ?d", $args ,$room ,$city);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM `city_rooms` WHERE `room` = ?s and `city` & ?d", $args ,$room ,$city);
|
||||||
|
}
|
||||||
|
/*Получение времени до возможности перехода*/
|
||||||
|
function getRoomGoTime ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'last_go', 'room', 'city');
|
||||||
|
$time = $this->getRoom($char_db['room'], $char_db['city'], 'time');
|
||||||
|
|
||||||
|
if (!$time || !$char_db['room'])
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
$time_to_go = $time - (time() - $char_db['last_go']);
|
||||||
|
|
||||||
|
return ($time_to_go >= 0) ?$time_to_go :0;
|
||||||
|
}
|
||||||
|
/*Получение кол-ва человек в комнате*/
|
||||||
|
function getRoomOnline ($room, $type = 'full')
|
||||||
|
{
|
||||||
|
$city = $this->getChar('char_db', 'city');
|
||||||
|
$online = $this->db->selectCell("SELECT COUNT(*) FROM `online` WHERE `room` = ?s", $room);
|
||||||
|
$room_info = $this->getRoom($room, $city, 'name', 'time');
|
||||||
|
|
||||||
|
if (!$room_info) return "Bug";
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'full': return "<strong>$room_info[name]</strong><br>Сейчас в комнате: $online";
|
||||||
|
case 'map': return $online;
|
||||||
|
case 'mini': return "Время перехода: $room_info[time] сек.<br>Сейчас в комнате: $online";
|
||||||
|
default: return "Bug";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Информация по комнате на карте*/
|
||||||
|
function showRoomOnMap ($id)
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'room', 'city');
|
||||||
|
$name = $this->getRoom($id, $char_db['city'], 'name');
|
||||||
|
$flag = ($char_db['room'] == $id) ?"<img src='../img/icon/flag2.gif' width='20' height='20' alt='Вы находитесь здесь' align='right'>" :'';
|
||||||
|
echo $flag."<strong>$name</strong> (<strong>".$this->getRoomOnline($id, 'map')."</strong>)";
|
||||||
|
}
|
||||||
|
/*Добавление кнопок в клубе*/
|
||||||
|
function addButtons ($loc = 'club')
|
||||||
|
{
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$char_db = $this->getChar('char_db', 'room', 'city', 'last_return', 'return_time');
|
||||||
|
$return_status = ((time() - $char_db['last_return']) >= $char_db['return_time']) | false;
|
||||||
|
$format = ($loc == 'club') ?'<input type="button" class="btn2" value="%1$s" %2$s /> ' :'<span class="buttons_on_image" %2$s>%1$s</span> ';
|
||||||
|
$arr = $this->getRoom($char_db['room'], $char_db['city'], 'buttons');
|
||||||
|
$buttons = explode (',', $arr);
|
||||||
|
foreach ($buttons as $button)
|
||||||
|
{
|
||||||
|
switch ($button)
|
||||||
|
{
|
||||||
|
default: $values = "";
|
||||||
|
break;
|
||||||
|
case 'fights': $values = array($lang['fights'], "id='link' link='zayavka' style='font-weight: bold; width: 102px;'");
|
||||||
|
break;
|
||||||
|
case 'return': $values = ($return_status) ?array($lang['return_b'], "id='link' link='return' style='font-weight: bold; width: 102px;'") :"";
|
||||||
|
break;
|
||||||
|
case 'map': $values = array($lang['map'], "id='link' link='map' style='font-weight: bold; width: 102px;'");
|
||||||
|
break;
|
||||||
|
case 'forum': $values = array($lang['forum'], "id='forum'");
|
||||||
|
break;
|
||||||
|
case 'hint': $values = array($lang['hint'], "id='hint' link='top' style='width: 102px;'");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (is_array($values))
|
||||||
|
vprintf($format, $values);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Получение подсказки комнаты*/
|
||||||
|
function getDescription ($room, $city)
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'login', 'room', 'city', 'level', 'exp');
|
||||||
|
$descs = $this->getRoom($char_db['room'], $char_db['city'], 'desc1', 'desc2', 'desc3');
|
||||||
|
$needs = $this->getRoom($char_db['room'], $char_db['city'], 'desc1_need', 'desc2_need', 'desc3_need');
|
||||||
|
|
||||||
|
foreach ($needs as $key => $need)
|
||||||
|
{
|
||||||
|
if (!$need)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$need = split('\=', $need);
|
||||||
|
|
||||||
|
if ($char_db[$need[0]] >= $need[1])
|
||||||
|
{
|
||||||
|
$desc_num = utf8_substr($key, 0, -5);
|
||||||
|
return $descs[$desc_num];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($room == 'novice')
|
||||||
|
return sprintf($descs['desc3'], $char_db['login']);
|
||||||
|
else
|
||||||
|
return $descs['desc3'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
985
engline/functions/class_Equip.php
Normal file
985
engline/functions/class_Equip.php
Normal file
@ -0,0 +1,985 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Equip extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Вычисление цены продажи предмета*/
|
||||||
|
function getSellValue ($i_info, $text = false)
|
||||||
|
{
|
||||||
|
if (!$i_info)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
$price = ($i_info['price_euro'] > 0) ?$i_info['price_euro'] :$i_info['price'];
|
||||||
|
$tmax_diff = ($i_info['tear_max'] < $i_info['tear']) ?$price * 0.7 * (1 - $i_info['tear_max'] / $i_info['tear']) :0;
|
||||||
|
$price_diff = $price * 0.7 - $tmax_diff;
|
||||||
|
$tear_diff = ($i_info['tear_cur'] > 0) ?$price_diff * ($i_info['tear_cur'] / $i_info['tear_max']) :0;
|
||||||
|
$sell_price = $price * 0.75 - $tmax_diff - $tear_diff;
|
||||||
|
$sell_price = rdf($sell_price);
|
||||||
|
|
||||||
|
if ($sell_price < 0.01)
|
||||||
|
$sell_price = 0.01;
|
||||||
|
|
||||||
|
$sell_price = ($text) ?$sell_price." кр." :$sell_price;
|
||||||
|
return $sell_price;
|
||||||
|
}
|
||||||
|
/*Проверка характеристик предмета и персонажа*/
|
||||||
|
function checkItemStats ($item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$dat = $this->db->selectRow("SELECT `i`.`min_level`,
|
||||||
|
`i`.`sex`, `i`.`orden`,
|
||||||
|
`i`.`min_str`, `i`.`min_dex`,
|
||||||
|
`i`.`min_con`, `i`.`min_vit`,
|
||||||
|
`i`.`min_int`, `i`.`min_wis`,
|
||||||
|
`i`.`min_mp_all`,
|
||||||
|
`i`.`min_sword`, `i`.`min_axe`,
|
||||||
|
`i`.`min_fail`, `i`.`min_knife`,
|
||||||
|
`i`.`min_staff`,
|
||||||
|
`i`.`min_fire`, `i`.`min_water`,
|
||||||
|
`i`.`min_air`, `i`.`min_earth`,
|
||||||
|
`i`.`min_light`, `i`.`min_gray`,
|
||||||
|
`i`.`min_dark`,
|
||||||
|
`c`.`is_personal`, `c`.`personal_owner`,
|
||||||
|
`c`.`tear_cur`, `c`.`tear_max`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d", $this->guid ,$item_id);
|
||||||
|
$char_db = $this->getChar('char_db', 'level', 'sex', 'orden');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'str', 'dex', 'con', 'vit', 'int', 'wis', 'mp_all', 'sword', 'axe', 'fail', 'knife', 'staff', 'fire', 'water', 'air', 'earth', 'light', 'gray', 'dark');
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
foreach ($char_feat as $key => $value)
|
||||||
|
{
|
||||||
|
if ($key != 'sex' && $key != 'orden' && $value < $dat['min_'.$key]) return false;
|
||||||
|
if ($key == 'sex' && $dat['sex'] != '' && $value != $dat['sex']) return false;
|
||||||
|
if ($key == 'orden' && $dat['orden'] != 0 && $value != $dat['orden']) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($dat['is_personal'] && $dat['personal_owner'] != $this->guid)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ($dat['tear_cur'] >= $dat['tear_max'])
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Проверка годности предмета*/
|
||||||
|
function checkItemValidity ($item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$date = $this->db->selectCell("SELECT `date` FROM `character_inventory` WHERE `guid` = ?d and `id` = ?d", $this->guid ,$item_id);
|
||||||
|
|
||||||
|
if ($date != 0 && $date < time())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Проверка отображения модификаторов*/
|
||||||
|
function checkHandStatus ($hand)
|
||||||
|
{
|
||||||
|
$char_equip = $this->getChar('char_equip', 'hand_l_free', 'hand_r_free', 'hand_l_type', 'hand_l', 'hand_r');
|
||||||
|
switch ($hand)
|
||||||
|
{
|
||||||
|
case 'r':
|
||||||
|
if ($char_equip['hand_r'] != 0 || ($char_equip['hand_l_free'] == 1 & $char_equip['hand_r_free'] == 1) || $char_equip['hand_l_type'] == 'shield')
|
||||||
|
return true;
|
||||||
|
case 'l':
|
||||||
|
if ($char_equip['hand_l'] != 0 && $char_equip['hand_l_type'] != 'shield')
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/*Отображение снаряжения*/
|
||||||
|
function showCharacter ($type = '', $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$char_equip = $this->getChar('char_equip', '*', $guid);
|
||||||
|
$char_db = $this->getChar('char_db', 'level', 'login', 'shape', $guid);
|
||||||
|
$char_stats = $this->getChar('char_stats', 'str', 'dex', 'con', 'vit', 'int', 'wis', 'spi', 'hp', 'hp_all', 'hp_regen', 'mp', 'mp_all', 'mp_regen', $guid);
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$char_type = 'clan';
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'inv':
|
||||||
|
$char_feat['name'] = "alt='$char_feat[login] (Перейти в \"$lang[abilities]\")' id='link' link='skills'";
|
||||||
|
break;
|
||||||
|
case 'fight':
|
||||||
|
global $behaviour;
|
||||||
|
$char_feat['name'] = "alt='<b>$char_feat[login]</b>";
|
||||||
|
foreach ($behaviour as $key => $min_level)
|
||||||
|
$char_feat['name'] .= ($char_feat['level'] >= $min_level) ?"<br>$lang[$key] $char_feat[$key]" :"";
|
||||||
|
$char_feat['name'] .= "'";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$char_feat['name'] = "alt='$char_feat[login] (Перейти в \"Инвентарь\")' id='link' link='inv'";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$char_equip['armor'] = ($char_equip['cloak']) ?$char_equip['cloak'] :(($char_equip['armor']) ?$char_equip['armor'] :$char_equip['shirt']);
|
||||||
|
$char_equip['hand_l_s'] = (!$char_equip['hand_l_free']) ?"hand_l" :"hand_l_f";
|
||||||
|
|
||||||
|
echo $this->getLogin($char_type, $guid);
|
||||||
|
echo $this->getCharacterEquipped($char_equip, $char_feat, $type, $guid);
|
||||||
|
if ($type != 'smart')
|
||||||
|
echoScript("showHP($char_feat[hp], $char_feat[hp_all], $char_feat[hp_regen]);".
|
||||||
|
"showMP($char_feat[mp], $char_feat[mp_all], $char_feat[mp_regen]);");
|
||||||
|
}
|
||||||
|
/*Получение одетых вещей*/
|
||||||
|
function getCharacterEquipped ($char_equip, $char_feat, $type, $guid = 0)
|
||||||
|
{
|
||||||
|
if (!$char_equip || !$char_feat)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$backup = ($type == 'smart') ?"<img src='../img/items/slot_bottom0.gif' border='0'>" :"<img src='../img/items/w20.gif' border='0' alt='Пустой правый карман'><img src='../img/items/w20.gif' border='0' alt='Пустой карман'><img src='../img/items/w20.gif' border='0' alt='Пустой левый карман'><br><img src='../img/items/w21.gif' border='0' alt='Смена оружия'><img src='../img/items/w21.gif' border='0' alt='Смена оружия'><img src='../img/items/w21.gif' border='0' alt='Смена оружия'>";
|
||||||
|
$effects = $this->getEffects($type, $guid);
|
||||||
|
$equipped = "<table border='0' width='227' class='posit' cellspacing='0' cellpadding='0'>"
|
||||||
|
. "<tr bgColor='#dedede'>"
|
||||||
|
. "<td width='60' align='left' valign='top'>"
|
||||||
|
. $this->getItemEquiped($char_equip['helmet'], "helmet", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['bracer'], "bracer", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['hand_r'], "hand_r", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['armor'], "armor", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['belt'], "belt", $type, $guid)
|
||||||
|
. "</td>"
|
||||||
|
. "<td width='120' height='220' align='center' valign='middle'><table cellspacing='0' cellpadding='0'>"
|
||||||
|
. "<tr height='20'><td style='font-size: 9px; position: relative;'>".(($type != 'smart') ?"<div id='HP'></div><div id='MP'></div>" :'')."</td></tr>"
|
||||||
|
. "<tr height='220'><td><div style='position: relative; z-index: 1; width: 120px; height: 220px;'><img src='../img/chars/$char_feat[shape]' $char_feat[name]>$effects</div></td></tr>"
|
||||||
|
. "<tr height='40'><td>$backup</td></tr>"
|
||||||
|
. "</table></td>"
|
||||||
|
. "<td width='60' align='right' valign='top'>"
|
||||||
|
. $this->getItemEquiped($char_equip['earring'], "earring", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['amulet'], "amulet", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['ring1'], "ring", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['ring2'], "ring", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['ring3'], "ring", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['gloves'], "gloves", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['hand_l'], $char_equip['hand_l_s'], $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['pants'], "pants", $type, $guid)
|
||||||
|
. $this->getItemEquiped($char_equip['boots'], "boots", $type, $guid)
|
||||||
|
. "</td></tr></table>";
|
||||||
|
return $equipped;
|
||||||
|
}
|
||||||
|
/*Получение отображаемых эффектов*/
|
||||||
|
function getEffects ($type, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$i = 1;
|
||||||
|
$left = 0;
|
||||||
|
$top = 0;
|
||||||
|
$return = '';
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$travms = $this->db->select("SELECT * FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and `c`.`stats` != '';", $guid);
|
||||||
|
foreach ($travms as $travm)
|
||||||
|
{
|
||||||
|
$name = (isset($lang['travm_p_'.$travm['power']])) ?$lang['travm_p_'.$travm['power']].' ('.$travm['name'].')' :$travm['name'];
|
||||||
|
$stats = ($travm['type'] == 1) ?'<br>У персонажа '.lowercase($lang['travm_p_'.$travm['power']]).' - ослаблены характеристики.' :'';
|
||||||
|
$modifiers = split(",", $travm['stats']);
|
||||||
|
foreach ($modifiers as $modifier)
|
||||||
|
{
|
||||||
|
$stat = split("=", $modifier);
|
||||||
|
$stats .= '<br>'.$lang[$stat[0]].' -'.$stat[1];
|
||||||
|
}
|
||||||
|
$end_time = 'Осталось: '.getFormatedTime($travm['end_time']);
|
||||||
|
$img = ($travm['type'] == 0) ?'' :$travm['power'];
|
||||||
|
$return .= "<img src='../img/icon/effects/eff_travma$img.gif' style='position: absolute; left: {$left}px; top: {$top}px; z-index: 100;' alt='<u><b>$name</b></u> (Эффект)<br>$end_time<br>$stats' width='36' height='23'>";
|
||||||
|
$left += 36;
|
||||||
|
|
||||||
|
if ($i % 3 == 0)
|
||||||
|
{
|
||||||
|
$top += 23;
|
||||||
|
$left = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
/*Получение изображения предмета, одетого на персонажа*/
|
||||||
|
function getItemEquiped ($item_id, $i_type, $type, $guid = 0)
|
||||||
|
{
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$image = $this->db->selectRow("SELECT `width`, `height`, `default`, `low_level`, `level` FROM `server_images` WHERE `name` = ?s", 'item_'.$i_type);
|
||||||
|
$default = "<img src='../img/items/$image[default]' width='$image[width]' height='$image[height]' border='0' alt='".$lang[$i_type.'_f']."'>";
|
||||||
|
|
||||||
|
if (!is_numeric($item_id))
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$level = $this->getChar('char_db', 'level', $guid);
|
||||||
|
|
||||||
|
if ($item_id == 0 && $level < $image['level'])
|
||||||
|
return "<img src='../img/items/$image[low_level]' width='$image[width]' height='$image[height]' border='0' alt='".$lang[$i_type.'_l']."'>";
|
||||||
|
else if ($item_id == 0)
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$color = '';
|
||||||
|
$img = $image['default'];
|
||||||
|
$desc = $this->getItemAlt($item_id, $type, $color, $img, $guid);
|
||||||
|
|
||||||
|
if (!$desc)
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$slot = $this->getItemSlot($item_id);
|
||||||
|
$return_format = ($type == 'inv') ?"<a href='main.php?action=unwear_item&item_slot=$slot'>%s</a>" :"%s";
|
||||||
|
return sprintf($return_format, "<img src='../img/items/$img' width='$image[width]' height='$image[height]' border='0' alt='$desc'$color>");
|
||||||
|
}
|
||||||
|
/*Получение всплывающей подсказки о предмете*/
|
||||||
|
function getItemAlt ($item_id, $type, &$color = '', &$img = '', $guid = 0)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return '';
|
||||||
|
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$i_info = $this->db->selectRow("SELECT `c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`attack`, `i`.`brick`,
|
||||||
|
`i`.`name`, `i`.`img`,
|
||||||
|
`i`.`add_hp`, `i`.`add_mp`,
|
||||||
|
`i`.`def_h`, `i`.`def_a`,
|
||||||
|
`i`.`def_b`, `i`.`def_l`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d", $guid ,$item_id);
|
||||||
|
if (!$i_info)
|
||||||
|
return '';
|
||||||
|
|
||||||
|
$img = $i_info['img'];
|
||||||
|
$tear_check = ($i_info['tear_cur'] >= $i_info['tear_max'] * 0.90);
|
||||||
|
$tear_show = ($tear_check) ?'<font color=#990000>%s</font>' :'%s';
|
||||||
|
$color = ($tear_check) ?" class='broken'" :'';
|
||||||
|
$name = (($type == 'inv') ?"Снять " :'').$i_info['name'];
|
||||||
|
$def = array('h', 'a', 'b', 'l');
|
||||||
|
$desc = "$name";
|
||||||
|
|
||||||
|
if ($i_info['attack'] > 0)
|
||||||
|
$desc .= "<br>$lang[damage] $i_info[attack] - ".($i_info['attack'] + $i_info['brick']);
|
||||||
|
|
||||||
|
if ($i_info['add_hp'] > 0) $desc .= "<br>$lang[add_hp] +".$i_info['add_hp'];
|
||||||
|
else if ($i_info['add_hp'] < 0) $desc .= "<br>$lang[add_hp] ".$i_info['add_hp'];
|
||||||
|
if ($i_info['add_mp'] > 0) $desc .= "<br>$lang[add_mp] +".$i_info['add_mp'];
|
||||||
|
else if ($i_info['add_mp'] < 0) $desc .= "<br>$lang[add_mp] ".$i_info['add_mp'];
|
||||||
|
|
||||||
|
foreach ($def as $key)
|
||||||
|
{
|
||||||
|
if ($i_info['def_'.$key] > 0)
|
||||||
|
$desc .= "<br>".$lang['def_'.$key]." ".$i_info['def_'.$key]."-".($i_info['def_'.$key] + $i_info['brick'])." ".$this->getFormatedBrick($i_info['def_'.$key], $i_info['brick']);
|
||||||
|
}
|
||||||
|
$desc .= "<br>$lang[durability] ".sprintf($tear_show, intval($i_info['tear_cur'])."/".intval($i_info['tear_max']));
|
||||||
|
return $desc;
|
||||||
|
}
|
||||||
|
/*Перечисление предметов нуждающихся в ремонте*/
|
||||||
|
function needItemRepair ()
|
||||||
|
{
|
||||||
|
$rows = $this->db->select("SELECT `c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`name`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '1';", $this->guid);
|
||||||
|
$return = '';
|
||||||
|
foreach ($rows as $repair)
|
||||||
|
{
|
||||||
|
list ($tear_cur, $tear_max, $name) = array_values ($repair);
|
||||||
|
|
||||||
|
if ($tear_cur >= $tear_max * 0.90)
|
||||||
|
$return .= " <b>$name</b> [<font color='#990000'>".intval($tear_cur)."/".intval($tear_max)."</font>] требуется ремонт<br>";
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
/*Добавление предмета*/
|
||||||
|
function addItem ($item_entry, $type = 'buy', $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
|
||||||
|
if (checki($item_entry))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$i_info = $this->db->selectRow("SELECT `name`,
|
||||||
|
`price`,
|
||||||
|
`price_euro`,
|
||||||
|
`mass`,
|
||||||
|
`tear`,
|
||||||
|
`inc_count`,
|
||||||
|
`validity`
|
||||||
|
FROM `item_template`
|
||||||
|
WHERE `entry` = ?d", $item_entry);
|
||||||
|
if (!$i_info)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$time = ($i_info['validity'] > 0) ?time() + $i_info['validity'] * 3600 :0;
|
||||||
|
$city = $this->getChar('char_db', 'city');
|
||||||
|
$id = ($this->db->selectCell("SELECT MAX(`id`) FROM `character_inventory` WHERE `guid` = ?d", $guid)) + 1;
|
||||||
|
$this->changeMass($i_info['mass']);
|
||||||
|
$this->db->query("INSERT INTO `character_inventory` (`id`, `guid`, `item_entry`, `tear_max`, `inc_count_p`, `made_in`, `date`, `last_update`)
|
||||||
|
VALUES (?d, ?d, ?d, ?f, ?d, ?s, ?d, ?d)", $id ,$guid ,$item_entry ,rdf($i_info['tear']) ,$i_info['inc_count'] ,$city ,$time ,time());
|
||||||
|
if ($type == 'buy')
|
||||||
|
{
|
||||||
|
$room = $this->getChar('char_db', 'room');
|
||||||
|
if ($i_info['price'] > 0)
|
||||||
|
$this->char->history->Items('Buy', "$i_info[name] за $i_info[price] кр.", $room);
|
||||||
|
else if ($i_info['price_euro'] > 0)
|
||||||
|
$this->char->history->Items('Buy', "$i_info[name] за $i_info[price_euro] екр.", $room);
|
||||||
|
}
|
||||||
|
else if ($type == 'get')
|
||||||
|
$this->char->history->Items('Get', $i_info['name'], '');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Отображение предмета в инвентаре*/
|
||||||
|
function showItem ($i_info, $mode, $i, $mail_guid = '')
|
||||||
|
{
|
||||||
|
$weapons = array('knife', 'fail', 'sword', 'axe', 'staff');
|
||||||
|
$armors = array('boots' => '_l', 'light_armor' => '_a', 'heavy_armor' => '_a', 'helmet' => '_h', 'pants' => '_b');
|
||||||
|
$types = array('inv', 'sell', 'mail_to', 'mail_in');
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$char_db = $this->getChar('char_db', 'money', 'level', 'sex');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'str', 'dex', 'con', 'vit', 'int', 'wis', 'mp_all', 'sword', 'axe', 'fail', 'knife', 'staff', 'fire', 'water', 'air', 'earth');
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
|
||||||
|
$money = $char_feat['money'];
|
||||||
|
$entry = $i_info['entry'];
|
||||||
|
$name = $i_info['name'];
|
||||||
|
$img = $i_info['img'];
|
||||||
|
$type = $i_info['type'];
|
||||||
|
$mass = $i_info['mass'];
|
||||||
|
$price = $i_info['price'];
|
||||||
|
$price_euro = $i_info['price_euro'];
|
||||||
|
|
||||||
|
if ($price_euro > 0)
|
||||||
|
$price_s = $price_euro." екр.";
|
||||||
|
else if ($price > 0)
|
||||||
|
$price_s = ($mode == 'shop') ?(compare($price, $money))." кр." :$price." кр.";
|
||||||
|
|
||||||
|
$item_flags = $i_info['item_flags'];
|
||||||
|
$item_id = (isset($i_info['id'])) ?$i_info['id'] :0;
|
||||||
|
$made_in = (isset($i_info['made_in'])) ?$this->char->city->getCity($i_info['made_in'], 'name') :'';
|
||||||
|
$tear_cur = (isset($i_info['tear_cur'])) ?intval($i_info['tear_cur']) :0;
|
||||||
|
$tear_max = (isset($i_info['tear_max'])) ?ceil($i_info['tear_max']) :$i_info['tear'];
|
||||||
|
$color = ($tear_cur >= $tear_max * 0.9) ?" class='broken'" :"";
|
||||||
|
$validity = (isset($i_info['date'])) ?$i_info['date'] :$i_info['validity'];
|
||||||
|
$gift = (isset($i_info['gift'])) ?$i_info['gift'] :0;
|
||||||
|
$gift_author = (isset($i_info['gift_author'])) ?$i_info['gift_author'] :'';
|
||||||
|
$inc_count = (isset($i_info['inc_count_p'])) ?$i_info['inc_count_p'] :$i_info['inc_count'];
|
||||||
|
$add['str'] = $i_info['add_str'] + ((isset($i_info['inc_str'])) ?$i_info['inc_str'] :0);
|
||||||
|
$add['dex'] = $i_info['add_dex'] + ((isset($i_info['inc_dex'])) ?$i_info['inc_dex'] :0);
|
||||||
|
$add['con'] = $i_info['add_con'] + ((isset($i_info['inc_con'])) ?$i_info['inc_con'] :0);
|
||||||
|
$add['int'] = $i_info['add_int'] + ((isset($i_info['inc_int'])) ?$i_info['inc_int'] :0);
|
||||||
|
$chet = ($i) ?"C7C7C7" :"D5D5D5";
|
||||||
|
$return = "<div id='item_id_$item_id' name='item_entry_$entry'><table width='100%' border='0' cellspacing='1' cellpadding='0' bgColor='#a5a5a5' style='margin-top: -1px;'><tr bgColor='#$chet'>";
|
||||||
|
switch ($mode)
|
||||||
|
{
|
||||||
|
case 'inv':
|
||||||
|
$wearable = $this->checkItemStats($item_id);
|
||||||
|
$return .= "<td width='150' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0'$color /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= ($wearable) ?"<a href='?action=wear_item&item_id=$item_id' class='nick'>надеть</a> " :"";
|
||||||
|
$return .= "<a href=\"javascript:drop($item_id, '$img', '$name');\"><img src='../img/icon/clear.gif' width='14' height='14' border='0' alt='Выбросить предмет'></a>";
|
||||||
|
break;
|
||||||
|
case 'shop':
|
||||||
|
$s_price = ($price_euro > 0) ?$price_euro :$price;
|
||||||
|
$s_kr = ($price_euro > 0) ?"екр." :"кр.";
|
||||||
|
$return .= "<td width='200' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0' /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= "<a href='javascript:buyItem($entry);' class='nick'>купить</a> <img src='../img/icon/plus.gif' width='11' height='11' border='0' alt='Купить несколько штук' style='cursor: pointer;' onclick=\"AddCount('$entry', '$name', '$s_price', '$s_kr');\"></center>";
|
||||||
|
break;
|
||||||
|
case 'sell':
|
||||||
|
$s_price = $this->getSellValue($i_info, true);
|
||||||
|
$return .= "<td width='260' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0'$color /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= "<a href='javascript:sellItem ($item_id);' onclick=\"if (confirm('Вы уверены что хотите продать предмет $name за $s_price?')){return true;} else {return false;}\" class='nick'>продать за $s_price</a>";
|
||||||
|
break;
|
||||||
|
case 'mail_to':
|
||||||
|
$s_price = $this->char->mail->getPrice($item_id)." кр.";
|
||||||
|
$return .= "<td width='260' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0'$color /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= "<a href='main.php?do=send_item&mail_to=$mail_guid&item_id=$item_id' onclick=\"if (confirm('Отправить предмет $name?')){return true;} else {return false;}\" class='nick'>передать за $s_price</a>";
|
||||||
|
break;
|
||||||
|
case 'mail_in':
|
||||||
|
$return .= "<td width='260' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0'$color /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= "<a href='main.php?do=get_item&item_id=$item_id' onclick=\"if (confirm('Забрать предмет $name?')){return true;} else {return false;}\" class='nick'>Забрать</a><br><a href='main.php?do=return_item&item_id=$item_id' onclick=\"if (confirm('Отказаться от предмета $name?')){return true;} else {return false;}\" class='nick'>Отказаться</a>";
|
||||||
|
$return .= "<br><small>(".getFormatedTime($i_info['delivery_time'] + 5184000).")</small>";
|
||||||
|
break;
|
||||||
|
case 'money_in':
|
||||||
|
$name = sprintf($name, $i_info['count']);
|
||||||
|
$price_s = "$i_info[count] кр.";
|
||||||
|
$mail_id = $i_info['id'];
|
||||||
|
$return .= "<td width='260' align='center'>";
|
||||||
|
$return .= "<img src='../img/items/$img' border='0'$color /><br><center style='padding-top: 4px;'>";
|
||||||
|
$return .= "<a href='main.php?do=get_money&mail_id=$mail_id' onclick=\"if (confirm('Забрать $price_s?')){return true;} else {return false;}\" class='nick'>Забрать</a><br><a href='main.php?do=return_money&mail_id=$mail_id' onclick=\"if (confirm ('Отказаться от $price?')){return true;} else {return false;}\" class='nick'>Отказаться</a>";
|
||||||
|
$return .= "<br><small>(".getFormatedTime($i_info['delivery_time'] + 5184000).")</small>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$return .= "</td><td align='left' valign='top' style='padding: 2px;'>";
|
||||||
|
$tear_show = compare($tear_cur, $tear_max * 0.90, "$tear_cur/$tear_max");
|
||||||
|
$required = array('dex', 'con', 'int', 'level', 'fire', 'water', 'air', 'earth', 'sword', 'axe', 'fail', 'knife', 'staff', 'vit', 'str', 'mp_all', 'wis', 'sex');
|
||||||
|
$modifiers = array('mf_critp', 'mf_acrit', 'mf_adodge', 'mf_parmour', 'mf_crit', 'mf_parry', 'mf_shieldb', 'mf_dodge', 'mf_contr', 'rep_magic',
|
||||||
|
'rep_fire', 'rep_water', 'rep_air', 'rep_earth', 'mf_magic', 'mf_fire', 'mf_water', 'mf_air', 'mf_earth', 'mf_light', 'mf_gray',
|
||||||
|
'mf_dark', 'mf_dmg', 'mf_sting', 'mf_slash', 'mf_crush', 'mf_sharp', 'all_magic', 'fire', 'water', 'air', 'earth', 'light', 'gray',
|
||||||
|
'dark', 'all_mastery', 'sword', 'axe', 'fail', 'knife', 'staff', 'res_magic', 'res_fire', 'res_water', 'res_air',
|
||||||
|
'res_earth', 'res_light', 'res_gray', 'res_dark', 'res_dmg', 'res_sting', 'res_slash', 'res_crush', 'res_sharp',
|
||||||
|
'add_hp', 'add_mp', 'mp_cons', 'mp_regen', 'hp_regen', 'add_hit_min', 'add_hit_max');
|
||||||
|
$w_modifiers = array('mf_adodge', 'mf_crit', 'mf_critp', 'mf_sting', 'mf_slash', 'mf_crush', 'mf_sharp', 'sword', 'axe', 'fail', 'knife', 'mf_parmour');
|
||||||
|
$chances = array('ch_sting', 'ch_slash', 'ch_crush', 'ch_sharp', 'ch_fire', 'ch_water', 'ch_air', 'ch_earth', 'ch_light', 'ch_dark');
|
||||||
|
$features = array('res_dmg', 'res_sting', 'res_slash', 'res_crush', 'res_sharp');
|
||||||
|
$brick = $i_info['brick'];
|
||||||
|
$def = array(
|
||||||
|
'h' => array($i_info['def_h'], ($i_info['def_h'] + $brick), $this->getFormatedBrick($i_info['def_h'], $brick)),
|
||||||
|
'a' => array($i_info['def_a'], ($i_info['def_a'] + $brick), $this->getFormatedBrick($i_info['def_a'], $brick)),
|
||||||
|
'b' => array($i_info['def_b'], ($i_info['def_b'] + $brick), $this->getFormatedBrick($i_info['def_b'], $brick)),
|
||||||
|
'l' => array($i_info['def_l'], ($i_info['def_l'] + $brick), $this->getFormatedBrick($i_info['def_l'], $brick))
|
||||||
|
);
|
||||||
|
$attack = $i_info['attack'];
|
||||||
|
$block = $i_info['block'];
|
||||||
|
$hands = $i_info['hands'];
|
||||||
|
$url = str_replace('.gif', '.html', $i_info['img']);
|
||||||
|
$orden = " ";
|
||||||
|
$need_orden = $i_info['orden'];
|
||||||
|
if ($need_orden != 0)
|
||||||
|
{
|
||||||
|
switch ($need_orden)
|
||||||
|
{
|
||||||
|
case 1: $orden_dis = "Белое братство"; break;
|
||||||
|
case 2: $orden_dis = "Темное братство"; break;
|
||||||
|
case 3: $orden_dis = "Нейтральное братство"; break;
|
||||||
|
case 4: $orden_dis = "Алхимик"; break;
|
||||||
|
case 5: $orden_dis = "Тюремный заключенный"; break;
|
||||||
|
}
|
||||||
|
$orden = "<img src='../img/orden/align$need_orden.gif' border='0' alt='$lang[min_bent] <strong>$orden_dis</strong>'>";
|
||||||
|
}
|
||||||
|
$return .= "<a href='encicl/object/$url' class='nick' target='_blank'><b>$name</b></a> $orden ($lang[mass] $mass)";
|
||||||
|
|
||||||
|
if ($gift == 1)
|
||||||
|
$return .= " <img src='../img/icon/gift.gif' width='14' height='14' border='0' alt='$lang[gift] $gift_author'>";
|
||||||
|
|
||||||
|
if ($item_flags & 4)
|
||||||
|
$return .= " <img src='../img/icon/artefakt.gif' width='16' height='16' border='0' alt='$lang[artefact]'>";
|
||||||
|
|
||||||
|
if (isset($price_s))
|
||||||
|
$return .= "<br><b>$lang[price] $price_s</b>";
|
||||||
|
|
||||||
|
$return .= "<br>$lang[durability] $tear_show";
|
||||||
|
|
||||||
|
if (($mode == 'inv' || $mode == 'sell') && $validity > 0)$return .= "<br>".sprintf($lang['validity'], date('d.m.y H:i', $validity), getFormatedTime($validity));
|
||||||
|
else if ($mode == 'shop' && $validity > 0) $return .= "<br>$lang[val_life] ".getFormatedTime($validity * 3600 + time());
|
||||||
|
|
||||||
|
$val = "";
|
||||||
|
$require = "";
|
||||||
|
foreach ($required as $key)
|
||||||
|
{
|
||||||
|
if (($key != 'sex' && $i_info['min_'.$key] <= 0) || ($key == 'sex' && $i_info[$key] == ''))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$val)
|
||||||
|
$val = "<br><b>$lang[required]</b>";
|
||||||
|
|
||||||
|
if ($key != 'sex' && $i_info['min_'.$key] > 0) $require .= "<br>• ".(compare($i_info['min_'.$key], $char_feat[$key], "$lang[$key] ".$i_info['min_'.$key]));
|
||||||
|
else if ($key == 'sex' && $i_info[$key] != '') $require .= "<br>• ".(compare($i_info[$key], $char_feat[$key], "$lang[$key] ".$lang['sex_'.$i_info[$key]]));
|
||||||
|
}
|
||||||
|
$return .= $val.$require;
|
||||||
|
|
||||||
|
$val = "";
|
||||||
|
if (($add['str'] != 0 || $add['dex'] != 0 || $add['con'] != 0 || $add['int'] != 0
|
||||||
|
|| $i_info['def_h'] != 0 || $i_info['def_a'] != 0 || $i_info['def_b'] != 0 || $i_info['def_l'] != 0 || $inc_count > 0
|
||||||
|
|| (!in_array($type, $weapons) && $attack != 0)))
|
||||||
|
$val = "<br><b>$lang[act]</b>";
|
||||||
|
|
||||||
|
$inc = ($inc_count > 0) ?"<br>• $lang[inc_count] <span id='inc_count_$item_id'>$inc_count</span>" :"";
|
||||||
|
$modifier = "";
|
||||||
|
foreach ($modifiers as $key)
|
||||||
|
{
|
||||||
|
if ($i_info[$key] == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$val)
|
||||||
|
$val = "<br><b>$lang[act]</b>";
|
||||||
|
|
||||||
|
if ($i_info[$key] > 0) $modifier .= "<br>• $lang[$key] +".$i_info[$key];
|
||||||
|
else if ($i_info[$key] < 0) $modifier .= "<br>• $lang[$key] ".$i_info[$key];
|
||||||
|
}
|
||||||
|
$return .= $val.$inc.$modifier;
|
||||||
|
foreach ($add as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == 0 && $mode == 'inv' && $inc_count > 0) $return .= "<br>• $lang[$key] <span id='inc_{$item_id}_{$key}_val'>$value</span> ".$this->getIncButton($item_id, $key);
|
||||||
|
else if ($value > 0 && $mode == 'inv' && $inc_count > 0)$return .= "<br>• $lang[$key] <span id='inc_{$item_id}_{$key}_val'>+$value</span> ".$this->getIncButton($item_id, $key);
|
||||||
|
else if ($value > 0) $return .= "<br>• $lang[$key] +$value";
|
||||||
|
else if ($value < 0) $return .= "<br>• $lang[$key] $value";
|
||||||
|
}
|
||||||
|
foreach ($def as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value[0] > 0)
|
||||||
|
$return .= "<br>• ".$lang['def_'.$key]." $value[0]-$value[1] $value[2]";
|
||||||
|
}
|
||||||
|
if (in_array($type, $weapons))
|
||||||
|
{
|
||||||
|
$return .= "<br><b>$lang[behaviour]</b>";
|
||||||
|
$return .= "<br>• $lang[damage] $attack - ".($attack + $brick);
|
||||||
|
foreach ($w_modifiers as $key)
|
||||||
|
{
|
||||||
|
if ($i_info[$key.'_h'] != 0)
|
||||||
|
$return .= "<br>• $lang[$key] ".$i_info[$key.'_h'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item_flags & 16) $return .= "<br>• $lang[sec_hand]";
|
||||||
|
else if ($hands == 2) $return .= "<br>• $lang[two_hands]";
|
||||||
|
|
||||||
|
$return .= "<br>• $lang[blocks] ";
|
||||||
|
|
||||||
|
if ($block == 1) $return .= "+";
|
||||||
|
else if ($block == 2) $return .= "++";
|
||||||
|
else $return .= "-";
|
||||||
|
|
||||||
|
$val = "";
|
||||||
|
$chance = "";
|
||||||
|
foreach ($chances as $key)
|
||||||
|
{
|
||||||
|
if ($i_info[$key] <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$val)
|
||||||
|
$val = "<br><b>$lang[features]</b>";
|
||||||
|
|
||||||
|
$this->getFormatedChance($i_info[$key]);
|
||||||
|
$chance .= "<br>• $lang[$key] ".$lang[$i_info[$key]];
|
||||||
|
}
|
||||||
|
$return .= $val.$chance;
|
||||||
|
}
|
||||||
|
if (in_array($type, array_keys($armors)))
|
||||||
|
{
|
||||||
|
$val = "";
|
||||||
|
$armor = "";
|
||||||
|
foreach ($features as $key)
|
||||||
|
{
|
||||||
|
if ($i_info[$key.$armors[$type]] <= 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$val)
|
||||||
|
$val = "<br><b>$lang[features]</b>";
|
||||||
|
|
||||||
|
$armor .= "<br>• $lang[$key] ".$i_info[$key.$armors[$type]];
|
||||||
|
}
|
||||||
|
$return .= $val.$armor;
|
||||||
|
}
|
||||||
|
if ($i_info['description'])
|
||||||
|
$return .= "<br><small>$lang[description]<br>$i_info[description]</small>";
|
||||||
|
|
||||||
|
if ($made_in)
|
||||||
|
$return .= "<br><small>$lang[made_in] $made_in</small>";
|
||||||
|
|
||||||
|
if (!($item_flags & 2))
|
||||||
|
$return .= "<br><small><font color='brown'>$lang[no_repair]</font></small>";
|
||||||
|
|
||||||
|
$return .= "</td></tr></table></div>";
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
/*Получение отформатированного шанса*/
|
||||||
|
private function getFormatedChance (&$chance)
|
||||||
|
{
|
||||||
|
if ($chance == 0) $chance = "never";
|
||||||
|
if ($chance > 0 && $chance < 10) $chance = "ex_rarely";
|
||||||
|
if ($chance >= 10 && $chance < 20) $chance = "rarely";
|
||||||
|
if ($chance >= 20 && $chance < 26) $chance = "little";
|
||||||
|
if ($chance >= 26 && $chance < 60) $chance = "naa";
|
||||||
|
if ($chance >= 60 && $chance < 81) $chance = "regular";
|
||||||
|
if ($chance >= 81 && $chance < 91) $chance = "often";
|
||||||
|
if ($chance >= 91 && $chance <= 100) $chance = "always";
|
||||||
|
}
|
||||||
|
/*Получение отформатированного кубика*/
|
||||||
|
private function getFormatedBrick ($min, $brick)
|
||||||
|
{
|
||||||
|
$first = $min - 1;
|
||||||
|
$second = $brick + 1;
|
||||||
|
if ($min == 1) return "(d$second)";
|
||||||
|
if ($brick == 0) return '';
|
||||||
|
if ($min <= 0) return '';
|
||||||
|
return "($first+d$second)";
|
||||||
|
}
|
||||||
|
/*Получение кнопки прибавления характеристик вещи*/
|
||||||
|
private function getIncButton ($item_id, $stat)
|
||||||
|
{
|
||||||
|
return "<input type='image' id='inc_{$item_id}_btn' src='img/icon/plus.gif' style='border: 0px; vertical-align: bottom;' onclick=\"increaseItemStat('$item_id', '$stat'); this.blur();\">";
|
||||||
|
}
|
||||||
|
/*Одеть/Снять предмет*/
|
||||||
|
function equipItem ($item, $type = 1, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$item_id = ($type == 1) ?$item :$this->getChar('char_equip', $item, $guid);
|
||||||
|
|
||||||
|
if (checki($item_id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$error_id = ($type == 1) ?213 :214;
|
||||||
|
$wear_status = ($type == 1) ?0 :1;
|
||||||
|
$char_equip = $this->getChar('char_equip', '*', $guid);
|
||||||
|
$i_info = $this->db->selectRow("SELECT *
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d
|
||||||
|
and `c`.`wear` = ?d
|
||||||
|
and `c`.`mailed` = '0'
|
||||||
|
and `i`.`section` = 'item';", $guid ,$item_id ,$wear_status) or $this->char->error->Inventory($error_id);
|
||||||
|
$i_entry = $i_info['entry'];
|
||||||
|
$i_id = $i_info['id'];
|
||||||
|
$i_type = ($i_info['type'] == 'heavy_armor' || $i_info['type'] == 'light_armor') ?"armor" :$i_info['type'];
|
||||||
|
$i_hands = $i_info['hands'];
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
switch ($i_type)
|
||||||
|
{
|
||||||
|
case 'sword':
|
||||||
|
case 'axe':
|
||||||
|
case 'fail':
|
||||||
|
case 'staff':
|
||||||
|
case 'knife':
|
||||||
|
if ($i_hands == 1)
|
||||||
|
{
|
||||||
|
$slot = "hand_r";
|
||||||
|
|
||||||
|
if (!$char_equip['hand_r_free'] && $char_equip['hand_l_free'])
|
||||||
|
{
|
||||||
|
if ($i_info['item_flags'] & 16)
|
||||||
|
$slot = "hand_l";
|
||||||
|
else
|
||||||
|
$this->equipItem('hand_r', -1, $guid);
|
||||||
|
}
|
||||||
|
else if (!$char_equip['hand_r_free'] && !$char_equip['hand_l_free'])
|
||||||
|
$this->equipItem('hand_r', -1, $guid);
|
||||||
|
}
|
||||||
|
else if ($i_hands == 2)
|
||||||
|
{
|
||||||
|
$slot = "hand_r";
|
||||||
|
|
||||||
|
if (!$char_equip['hand_r_free'])
|
||||||
|
$this->equipItem('hand_r', -1, $guid);
|
||||||
|
|
||||||
|
if (!$char_equip['hand_l_free'])
|
||||||
|
$this->equipItem('hand_l', -1, $guid);
|
||||||
|
}
|
||||||
|
$w_type = $i_type;
|
||||||
|
break;
|
||||||
|
case 'shield':
|
||||||
|
$slot = "hand_l";
|
||||||
|
|
||||||
|
if ($char_equip['hand_l'])
|
||||||
|
$this->equipItem('hand_l', -1, $guid);
|
||||||
|
|
||||||
|
if ($char_equip['hand_r'] && !$char_equip['hand_l_free'])
|
||||||
|
$this->equipItem('hand_r', -1, $guid);
|
||||||
|
|
||||||
|
$w_type = $i_type;
|
||||||
|
break;
|
||||||
|
case 'ring':
|
||||||
|
$slot = "ring1";
|
||||||
|
|
||||||
|
if (!$char_equip['ring1'])
|
||||||
|
$slot = "ring1";
|
||||||
|
else if (!$char_equip['ring2'])
|
||||||
|
$slot = "ring2";
|
||||||
|
else if (!$char_equip['ring3'])
|
||||||
|
$slot = "ring3";
|
||||||
|
else
|
||||||
|
$this->equipItem('ring1', -1, $guid);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$slot = $i_type;
|
||||||
|
|
||||||
|
if ($char_equip[$i_type])
|
||||||
|
$this->equipItem($i_type, -1, $guid);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ($type == -1)
|
||||||
|
{
|
||||||
|
unset($char_equip['guid'], $char_equip['hand_r_free'], $char_equip['hand_r_type'], $char_equip['hand_l_free'], $char_equip['hand_l_type']);
|
||||||
|
foreach ($char_equip as $key => $value)
|
||||||
|
{
|
||||||
|
if ($i_id == $value)
|
||||||
|
{
|
||||||
|
$slot = $key;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$char_stats = $this->getChar('char_stats', '*', $guid);
|
||||||
|
|
||||||
|
$new_sql = array();
|
||||||
|
$ress = array('', '_h', '_a', '_b', '_l');
|
||||||
|
$defs = array('h', 'a', 'b', 'l');
|
||||||
|
// Resist damage
|
||||||
|
foreach ($ress as $key)
|
||||||
|
{
|
||||||
|
$new_sql['res_sting'.$key] = $i_info['res_sting'.$key] + $i_info['res_dmg'.$key];
|
||||||
|
$new_sql['res_slash'.$key] = $i_info['res_slash'.$key] + $i_info['res_dmg'.$key];
|
||||||
|
$new_sql['res_crush'.$key] = $i_info['res_crush'.$key] + $i_info['res_dmg'.$key];
|
||||||
|
$new_sql['res_sharp'.$key] = $i_info['res_sharp'.$key] + $i_info['res_dmg'.$key];
|
||||||
|
}
|
||||||
|
// -- magic
|
||||||
|
$new_sql['res_fire'] = $i_info['res_fire'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_water'] = $i_info['res_water'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_air'] = $i_info['res_air'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_earth'] = $i_info['res_earth'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_light'] = $i_info['res_light'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_gray'] = $i_info['res_gray'] + $i_info['res_magic'];
|
||||||
|
$new_sql['res_dark'] = $i_info['res_dark'] + $i_info['res_magic'];
|
||||||
|
// Mastery
|
||||||
|
$new_sql['sword'] = $i_info['sword'] + $i_info['all_mastery'];
|
||||||
|
$new_sql['bow'] = $i_info['bow'] + $i_info['all_mastery'];
|
||||||
|
$new_sql['crossbow'] = $i_info['crossbow'] + $i_info['all_mastery'];
|
||||||
|
$new_sql['axe'] = $i_info['axe'] + $i_info['all_mastery'];
|
||||||
|
$new_sql['fail'] = $i_info['fail'] + $i_info['all_mastery'];
|
||||||
|
$new_sql['knife'] = $i_info['knife'] + $i_info['all_mastery'];
|
||||||
|
// --
|
||||||
|
$new_sql['staff'] = $i_info['staff'];
|
||||||
|
// -- magic
|
||||||
|
$new_sql['fire'] = $i_info['fire'] + $i_info['all_magic'];
|
||||||
|
$new_sql['water'] = $i_info['water'] + $i_info['all_magic'];
|
||||||
|
$new_sql['air'] = $i_info['air'] + $i_info['all_magic'];
|
||||||
|
$new_sql['earth'] = $i_info['earth'] + $i_info['all_magic'];
|
||||||
|
$new_sql['light'] = $i_info['light'];
|
||||||
|
$new_sql['gray'] = $i_info['gray'];
|
||||||
|
$new_sql['dark'] = $i_info['dark'];
|
||||||
|
// MF damage
|
||||||
|
$new_sql['mf_sting'] = $i_info['mf_sting'] + $i_info['mf_dmg'];
|
||||||
|
$new_sql['mf_slash'] = $i_info['mf_slash'] + $i_info['mf_dmg'];
|
||||||
|
$new_sql['mf_crush'] = $i_info['mf_crush'] + $i_info['mf_dmg'];
|
||||||
|
$new_sql['mf_sharp'] = $i_info['mf_sharp'] + $i_info['mf_dmg'];
|
||||||
|
// -- magic
|
||||||
|
$new_sql['mf_fire'] = $i_info['mf_fire'] + $i_info['mf_magic'];
|
||||||
|
$new_sql['mf_water'] = $i_info['mf_water'] + $i_info['mf_magic'];
|
||||||
|
$new_sql['mf_air'] = $i_info['mf_air'] + $i_info['mf_magic'];
|
||||||
|
$new_sql['mf_earth'] = $i_info['mf_earth'] + $i_info['mf_magic'];
|
||||||
|
// --
|
||||||
|
$new_sql['mf_crit'] = $i_info['mf_crit'];
|
||||||
|
$new_sql['mf_critp'] = $i_info['mf_critp'];
|
||||||
|
$new_sql['mf_adodge'] = $i_info['mf_adodge'];
|
||||||
|
$new_sql['mf_parmour'] = $i_info['mf_parmour'];
|
||||||
|
// --
|
||||||
|
$new_sql['mf_acrit'] = $i_info['mf_acrit'];
|
||||||
|
$new_sql['mf_dodge'] = $i_info['mf_dodge'];
|
||||||
|
$new_sql['mf_contr'] = $i_info['mf_contr'];
|
||||||
|
$new_sql['mf_parry'] = $i_info['mf_parry'];
|
||||||
|
$new_sql['mf_shieldb'] = $i_info['mf_shieldb'];
|
||||||
|
// Damage
|
||||||
|
$new_sql['hitmin'] = $i_info['add_hit_min'];
|
||||||
|
$new_sql['hitmax'] = $i_info['add_hit_max'];
|
||||||
|
// Protect
|
||||||
|
foreach ($defs as $key)
|
||||||
|
{
|
||||||
|
if ($i_info['def_'.$key] > 0)
|
||||||
|
{
|
||||||
|
$new_sql['def_'.$key.'_min'] = $i_info['def_'.$key];
|
||||||
|
$new_sql['def_'.$key.'_max'] = $i_info['def_'.$key] + $i_info['brick'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//$new_sql['cost'] = $i_info['price'];
|
||||||
|
$new_sql['hp_regen'] = $i_info['hp_regen'];
|
||||||
|
$new_sql['mp_regen'] = $i_info['mp_regen'];
|
||||||
|
$new_sql['mp_cons'] = -$i_info['mp_cons'];
|
||||||
|
// Hand
|
||||||
|
switch ($slot)
|
||||||
|
{
|
||||||
|
case 'hand_r':
|
||||||
|
case 'hand_l':
|
||||||
|
$new_sql[$slot.'_sword'] = $i_info['sword_h'];
|
||||||
|
$new_sql[$slot.'_axe'] = $i_info['axe_h'];
|
||||||
|
$new_sql[$slot.'_fail'] = $i_info['fail_h'];
|
||||||
|
$new_sql[$slot.'_knife'] = $i_info['knife_h'];
|
||||||
|
$new_sql[$slot.'_sting'] = $i_info['mf_sting_h'] + $i_info['mf_dmg_h'];
|
||||||
|
$new_sql[$slot.'_slash'] = $i_info['mf_slash_h'] + $i_info['mf_dmg_h'];
|
||||||
|
$new_sql[$slot.'_crush'] = $i_info['mf_crush_h'] + $i_info['mf_dmg_h'];
|
||||||
|
$new_sql[$slot.'_sharp'] = $i_info['mf_sharp_h'] + $i_info['mf_dmg_h'];
|
||||||
|
$new_sql[$slot.'_crit'] = $i_info['mf_crit_h'];
|
||||||
|
$new_sql[$slot.'_critp'] = $i_info['mf_critp_h'];
|
||||||
|
$new_sql[$slot.'_adodge'] = $i_info['mf_adodge_h'];
|
||||||
|
$new_sql[$slot.'_parmour'] = $i_info['mf_parmour_h'];
|
||||||
|
$new_sql[$slot.'_hitmin'] = $i_info['attack'];
|
||||||
|
$new_sql[$slot.'_hitmax'] = $i_info['attack'] + $i_info['brick'];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// HP/MP
|
||||||
|
$new_sql['hp_all'] = $i_info['add_hp'];
|
||||||
|
$new_sql['mp_all'] = $i_info['add_mp'];
|
||||||
|
|
||||||
|
foreach ($new_sql as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value == 0)
|
||||||
|
{
|
||||||
|
unset($new_sql[$key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$new_sql[$key] = $value*$type;
|
||||||
|
$new_sql[$key] += $char_stats[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
$char_hpmp = $this->getChar('char_stats', 'hp', 'mp', $guid);
|
||||||
|
foreach ($char_hpmp as $key => $value)
|
||||||
|
{
|
||||||
|
if ($i_info['add_'.$key] != 0)
|
||||||
|
$this->setTimeToHPMP($value, $new_sql[$key.'_all'], $char_stats[$key.'_regen'], $key, $guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
$stats = array ('str' => 0, 'dex' => 0, 'con' => 0, 'int' => 0);
|
||||||
|
foreach ($stats as $key => $value)
|
||||||
|
{
|
||||||
|
$stats[$key] = ($i_info['add_'.$key] + $i_info['inc_'.$key])*$type;
|
||||||
|
|
||||||
|
if ($stats[$key] == 0)
|
||||||
|
unset($stats[$key]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
$q1 = $this->db->query("UPDATE `character_inventory`
|
||||||
|
SET `wear` = '1',
|
||||||
|
`last_update` = ?d
|
||||||
|
WHERE `guid` = ?d
|
||||||
|
and `id` = ?d", time() ,$guid ,$i_id);
|
||||||
|
$q2 = $this->setChar('char_equip', $slot, $i_id, $guid);
|
||||||
|
}
|
||||||
|
else if ($type == -1)
|
||||||
|
{
|
||||||
|
$q1 = $this->db->query("UPDATE `character_inventory`
|
||||||
|
SET `wear` = '0',
|
||||||
|
`last_update` = ?d
|
||||||
|
WHERE `guid` = ?d
|
||||||
|
and `id` = ?d", time() ,$guid ,$i_id);
|
||||||
|
$q2 = $this->setChar('char_equip', $slot, 0, $guid);
|
||||||
|
}
|
||||||
|
if ($q1 && $q2)
|
||||||
|
{
|
||||||
|
$this->db->query("UPDATE `character_stats` SET ?a WHERE `guid` = ?d", $new_sql ,$guid);
|
||||||
|
$this->changeStats($stats, $guid);
|
||||||
|
if ($type == 1)
|
||||||
|
{
|
||||||
|
if ($i_hands == 2)
|
||||||
|
$this->setChar('char_equip', array('hand_r_type' => $w_type, 'hand_r_free' => 0, 'hand_l_free' => 0), $guid);
|
||||||
|
else if ($i_hands == 1)
|
||||||
|
$this->setChar('char_equip', array($slot.'_type' => $w_type, $slot.'_free' => 0), $guid);
|
||||||
|
}
|
||||||
|
else if ($type == -1)
|
||||||
|
{
|
||||||
|
if ($i_hands == 2)
|
||||||
|
$this->setChar('char_equip', array('hand_r_type' => 'phisic', 'hand_r_free' => 1, 'hand_l_free' => 1), $guid);
|
||||||
|
else if ($i_hands == 1)
|
||||||
|
$this->setChar('char_equip', array($slot.'_type' => 'phisic', $slot.'_free' => 1), $guid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Снять все предметы*/
|
||||||
|
function unWearAllItems ()
|
||||||
|
{
|
||||||
|
$char_equip = $this->getChar('char_equip', 'helmet', 'bracer', 'hand_r', 'armor', 'shirt', 'cloak', 'belt', 'earring', 'amulet', 'ring1', 'ring2', 'ring3', 'gloves', 'hand_l', 'pants', 'boots');
|
||||||
|
foreach ($char_equip as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value)
|
||||||
|
$this->equipItem($key, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Удаление предмета*/
|
||||||
|
function deleteItem ($item_id, $type = 'delete', $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
|
||||||
|
if (checki($item_id))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$i_info = $this->db->selectRow("SELECT `i`.`name`,
|
||||||
|
`i`.`mass`,
|
||||||
|
`i`.`price`,
|
||||||
|
`i`.`price_euro`,
|
||||||
|
`c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`tear`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0';", $guid ,$item_id);
|
||||||
|
if (!$i_info)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
$this->changeMass(-$i_info['mass']);
|
||||||
|
$this->db->query("DELETE FROM `character_inventory` WHERE `id` = ?d and `guid` = ?d", $item_id ,$guid);
|
||||||
|
if ($type == 'delete')
|
||||||
|
$this->char->history->Items('Throw out', $i_info['name'], 'Dump');
|
||||||
|
else if ($type == 'sell')
|
||||||
|
{
|
||||||
|
$sell_price = $this->getSellValue($i_info);
|
||||||
|
$this->char->history->Items('Sell', "$i_info[name] за $sell_price кр.", 'Shop');
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Получение слота в который одет предмет*/
|
||||||
|
function getItemSlot ($item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_equip = $this->getChar('char_equip', 'helmet', 'bracer', 'hand_r', 'armor', 'shirt', 'cloak', 'belt', 'earring', 'amulet', 'ring1', 'ring2', 'ring3', 'gloves', 'hand_l', 'pants', 'boots');
|
||||||
|
foreach ($char_equip as $key => $value)
|
||||||
|
{
|
||||||
|
if ($item_id == $value)
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*Одевание комплекта предметов*/
|
||||||
|
function equipSet ($name)
|
||||||
|
{
|
||||||
|
if ($name == '')
|
||||||
|
$this->char->error->Inventory(221);
|
||||||
|
|
||||||
|
$set = $this->db->selectRow("SELECT `helmet`, `bracer`,
|
||||||
|
`hand_r`, `armor`,
|
||||||
|
`shirt`, `cloak`,
|
||||||
|
`belt`, `earring`,
|
||||||
|
`amulet`, `ring1`,
|
||||||
|
`ring2`, `ring3`,
|
||||||
|
`gloves`, `hand_l`,
|
||||||
|
`pants`, `boots`
|
||||||
|
FROM `character_sets`
|
||||||
|
WHERE `guid` = ?d
|
||||||
|
and `name` = ?s", $this->guid ,$name) or $this->char->error->Inventory(221);
|
||||||
|
foreach ($set as $slot => $item_id)
|
||||||
|
{
|
||||||
|
$item = $this->db->selectRow("SELECT `wear`,
|
||||||
|
`mailed`
|
||||||
|
FROM `character_inventory`
|
||||||
|
WHERE `guid` = ?d
|
||||||
|
and `id` = ?d", $this->guid ,$item_id);
|
||||||
|
if (!$item || $item['mailed'])
|
||||||
|
$this->db->query("UPDATE `character_sets` SET ?# = '0' WHERE `name` = ?s and `guid` = ?d", $slot ,$name ,$this->guid);
|
||||||
|
else if ($item['wear'])
|
||||||
|
continue;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->equipItem($slot, -1);
|
||||||
|
$this->equipItem($item_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
69
engline/functions/class_Error.php
Normal file
69
engline/functions/class_Error.php
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Error extends Char
|
||||||
|
{
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Вывод ошибки в инвентаре*/
|
||||||
|
function Inventory ($id = 0, $parameters = '')
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'main.php?action=inv&error=$id¶meters=$parameters';", true);
|
||||||
|
}
|
||||||
|
/*Вывод ошибки в умениях*/
|
||||||
|
function Skills ($id = 0, $parameters = '')
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'main.php?action=skills&error=$id¶meters=$parameters';", true);
|
||||||
|
}
|
||||||
|
/*Вывод ошибки в разделе "Анкета"*/
|
||||||
|
function Form ($id, $do, $parameters = '')
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'main.php?action=form&do=$do&error=$id¶meters=$parameters';", true);
|
||||||
|
}
|
||||||
|
/*Вывод ошибки на карте*/
|
||||||
|
function Map ($id = 0, $parameters = '')
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'main.php?error=$id¶meters=$parameters';", true);
|
||||||
|
}
|
||||||
|
/*Вывод ошибки на почте*/
|
||||||
|
function Mail ($id = 0, $do, $parameters = '')
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'main.php?do=$do&error=$id¶meters=$parameters';", true);
|
||||||
|
}
|
||||||
|
/*Оформление вида ошибки*/
|
||||||
|
function getFormattedError ($id, $parameters, $needBr = false)
|
||||||
|
{
|
||||||
|
if (!$id)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$err_text = "";
|
||||||
|
$parametr = array();
|
||||||
|
|
||||||
|
if ($parameters)
|
||||||
|
$parametr = split("\|", $parameters);
|
||||||
|
|
||||||
|
$err = $this->db->selectRow("SELECT `text`,
|
||||||
|
`bold`,
|
||||||
|
`hyphen`
|
||||||
|
FROM `server_errors`
|
||||||
|
WHERE `id` = ?d", $id);
|
||||||
|
if (!$err)
|
||||||
|
return;
|
||||||
|
|
||||||
|
list($err_text, $err_bold, $err_hyph) = array_values($err);
|
||||||
|
|
||||||
|
if ($err_bold)
|
||||||
|
$err_text = "<b>$err_text</b>";
|
||||||
|
|
||||||
|
if ($err_hyph || $needBr)
|
||||||
|
$err_text = "$err_text<br>";
|
||||||
|
|
||||||
|
vprintf($err_text, $parametr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
46
engline/functions/class_History.php
Normal file
46
engline/functions/class_History.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class History extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*История регистрации/авторизации персонажа*/
|
||||||
|
function Auth ($action, $city, $comment = '')
|
||||||
|
{
|
||||||
|
$id = ($this->db->selectCell("SELECT MAX(`id`) FROM `history_auth` WHERE `guid` = ?d", $this->guid)) + 1;
|
||||||
|
$this->db->query("INSERT INTO `history_auth` (`id`, `guid`, `action`, `ip`, `city`, `comment`, `date`)
|
||||||
|
VALUES (?d, ?d, ?d, ?s, ?s, ?s, ?d);", $id ,$this->guid ,$action ,$_SERVER['REMOTE_ADDR'] ,$city ,$comment ,time());
|
||||||
|
}
|
||||||
|
/*История покупки/продажи/передачи предмета*/
|
||||||
|
function Items ($action, $val, $to, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$id = ($this->db->selectCell("SELECT MAX(`id`) FROM `history_items` WHERE `guid` = ?d", $guid)) + 1;
|
||||||
|
$this->db->query("INSERT INTO `history_items` (`id`, `guid`, `receive`, `action`, `item`, `date`)
|
||||||
|
VALUES (?d, ?d, ?s, ?s, ?s, ?d)", $id ,$guid ,$to ,$action ,$val ,time());
|
||||||
|
}
|
||||||
|
/*История отправки/получения/возврата предмета по почте*/
|
||||||
|
function Mail ($action, $val, $to, $guid = 0)
|
||||||
|
{
|
||||||
|
$guid = $this->getGuid($guid);
|
||||||
|
$id = ($this->db->selectCell("SELECT MAX(`id`) FROM `history_mail` WHERE `guid` = ?d", $guid)) + 1;
|
||||||
|
$this->db->query("INSERT INTO `history_mail` (`id`, `guid`, `receive`, `action`, `item`, `date`)
|
||||||
|
VALUES (?d, ?d, ?s, ?s, ?s, ?d)", $id ,$guid ,$to ,$action ,$val ,time());
|
||||||
|
}
|
||||||
|
/*История банковских операций*/
|
||||||
|
function Bank ($credit, $credit2, $cash, $euro, $operation)
|
||||||
|
{
|
||||||
|
$id = ($this->db->selectCell("SELECT MAX(`id`) FROM `history_bank` WHERE `credit` = ?d", $credit)) + 1;
|
||||||
|
$this->db->query("INSERT INTO `history_bank` (`id`, `credit`, `credit2`, `cash`, `euro`, `operation`, `date`)
|
||||||
|
VALUES (?d, ?d, ?d, ?f, ?f, ?d, ?d)", $id ,$credit ,$credit2 ,rdf($cash) ,rdf($euro) ,$operation ,time());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
200
engline/functions/class_Mail.php
Normal file
200
engline/functions/class_Mail.php
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Mail extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Вычисление цены передачи предмета*/
|
||||||
|
function getPrice ($item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
$i_info = $this->db->selectRow("SELECT `i`.`price`, `i`.`mass`,
|
||||||
|
`c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`tear`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`id` = ?d
|
||||||
|
and `c`.`guid` = ?d
|
||||||
|
and (`i`.`item_flags` & '1')
|
||||||
|
and `i`.`price_euro` = '0';", $item_id ,$this->guid);
|
||||||
|
list($price, $mass, $tear_cur, $tear_max, $max_tear) = array_values($i_info);
|
||||||
|
|
||||||
|
if (!$i_info)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
$cof = abs (100 - $mass * 1.5);
|
||||||
|
$sell = round (($price / $cof), 2);
|
||||||
|
|
||||||
|
if ($sell < 0.01)
|
||||||
|
$sell = 0.01;
|
||||||
|
|
||||||
|
return $sell;
|
||||||
|
}
|
||||||
|
/*Отправка денег*/
|
||||||
|
function sendMoney ($mail_to, $send_money)
|
||||||
|
{
|
||||||
|
if (checki($send_money))
|
||||||
|
$this->char->error->Mail(325);
|
||||||
|
|
||||||
|
if (checki($mail_to))
|
||||||
|
$this->char->error->Mail(106, 'money');
|
||||||
|
|
||||||
|
$mail_to = $this->getChar('char_db', 'guid', $mail_to);
|
||||||
|
|
||||||
|
if (!$mail_to)
|
||||||
|
$this->char->error->Mail(106, 'items');
|
||||||
|
|
||||||
|
$transfers = $this->getChar('char_db', 'transfers');
|
||||||
|
|
||||||
|
if ($transfers <= 0)
|
||||||
|
$this->char->error->Mail(113, 'money');
|
||||||
|
|
||||||
|
if ($send_money < 1)
|
||||||
|
$this->char->error->Mail(410, 'money', 1);
|
||||||
|
|
||||||
|
if (!($this->changeMoney(-$send_money)))
|
||||||
|
$this->char->error->Mail(107);
|
||||||
|
|
||||||
|
$send_money = round (0.95 * $send_money, 2);
|
||||||
|
$this->db->query("INSERT INTO `city_mail_items` (`sender`, `to`, `item_id`, `count`, `delivery_time`, `date`)
|
||||||
|
VALUES (?d, ?d, '1000', ?f, ?d, ?d)", $this->guid ,$mail_to ,rdf($send_money) ,time() ,time());
|
||||||
|
$this->char->history->Mail('Send', "Деньги: $send_money кр", $mail_to);
|
||||||
|
$this->char->error->Mail(409, 'money', $send_money);
|
||||||
|
}
|
||||||
|
/*Получение/Возврат денег*/
|
||||||
|
function getMoney ($mail_id, $type)
|
||||||
|
{
|
||||||
|
if (checki($mail_id))
|
||||||
|
$this->char->error->Mail(112, 'get_mail');
|
||||||
|
|
||||||
|
$m_info = $this->db->selectRow("SELECT `m`.`id`,
|
||||||
|
`m`.`sender`,
|
||||||
|
`i`.`name`,
|
||||||
|
`m`.`count`
|
||||||
|
FROM `city_mail_items` AS `m`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `m`.`item_id` = `i`.`entry`
|
||||||
|
WHERE `m`.`to` = ?d
|
||||||
|
and `m`.`delivery_time` < ?d
|
||||||
|
and `m`.`id` = ?d", $this->guid ,time (), $mail_id) or $this->char->error->Mail(112, 'get_mail');
|
||||||
|
list($mail_id, $sender, $name, $money_count) = array_values($m_info);
|
||||||
|
$name = sprintf($name, $money_count);
|
||||||
|
echoScript("top.menu.location.reload();");
|
||||||
|
$this->db->query("DELETE FROM `city_mail_items` WHERE `id` = ?d", $mail_id);
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'get_money':
|
||||||
|
$this->Money(-$money_count);
|
||||||
|
$this->char->history->Mail('Receive', $name, $sender);
|
||||||
|
$this->char->error->Mail(407, 'get_mail', $name);
|
||||||
|
break;
|
||||||
|
case 'return_money':
|
||||||
|
$this->db->query("INSERT INTO `city_mail_items` (`sender`, `to`, `item_id`, `count`, `delivery_time`, `date`)
|
||||||
|
VALUES (?d, ?d, '1000', ?f, ?d, ?d)", $this->guid ,$sender ,rdf($money_count) ,time() ,time());
|
||||||
|
$this->char->history->Mail('Return', $name, $sender);
|
||||||
|
$this->char->error->Mail(408, 'get_mail', $name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Отправка предмета*/
|
||||||
|
function sendItem ($mail_to, $item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
$this->char->error->Mail(213, 'items');
|
||||||
|
|
||||||
|
if (checki($mail_to))
|
||||||
|
$this->char->error->Mail(106, 'items');
|
||||||
|
|
||||||
|
if ($mail_to == $this->guid)
|
||||||
|
$this->char->error->Mail(218);
|
||||||
|
|
||||||
|
$mail_to = $this->getChar('char_db', 'guid', $mail_to);
|
||||||
|
|
||||||
|
if (!$mail_to)
|
||||||
|
$this->char->error->Mail(106, 'items');
|
||||||
|
|
||||||
|
$transfers = $this->getChar('char_db', 'transfers');
|
||||||
|
|
||||||
|
if ($transfers <= 0)
|
||||||
|
$this->char->error->Mail(113, 'items');
|
||||||
|
|
||||||
|
$i_info = $this->db->selectRow("SELECT `i`.`name`,
|
||||||
|
`i`.`mass`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`id` = ?d
|
||||||
|
and `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '0'
|
||||||
|
and `c`.`mailed` = '0'
|
||||||
|
and `i`.`price_euro` = '0';", $item_id ,$this->guid) or $this->char->error->Mail(213, 'items');
|
||||||
|
list($i_name, $i_mass) = array_values($i_info);
|
||||||
|
$price = $this->getPrice($item_id);
|
||||||
|
|
||||||
|
if (!($this->changeMoney(-$price)))
|
||||||
|
$this->char->error->Mail(107);
|
||||||
|
|
||||||
|
$delivery_time = 1800 + time ();
|
||||||
|
$this->db->query("UPDATE `characters` SET `transfers` = `transfers` - '1' WHERE `guid` = ?d", $this->guid);
|
||||||
|
$this->db->query("UPDATE `character_inventory` SET `mailed` = '1' WHERE `guid` = ?d and `id` = ?d", $this->guid ,$item_id);
|
||||||
|
$this->changeMass(-$i_mass);
|
||||||
|
$this->db->query("INSERT INTO `city_mail_items` (`sender`, `to`, `item_id`, `delivery_time`, `date`)
|
||||||
|
VALUES (?d, ?d, ?d, ?d, ?d)", $this->guid ,$mail_to ,$item_id ,$delivery_time ,time());
|
||||||
|
$this->char->history->Mail('Send', "$i_name ($price кр)", $mail_to);
|
||||||
|
$this->char->error->Mail(406, 'items', "$i_name|$price");
|
||||||
|
}
|
||||||
|
/*Получение/Возврат предмета*/
|
||||||
|
function getItem ($item_id, $type)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
$this->char->error->Mail(112, 'get_mail');
|
||||||
|
|
||||||
|
global $history;
|
||||||
|
$i_info = $this->db->selectRow("SELECT `m`.`id`,
|
||||||
|
`m`.`sender`,
|
||||||
|
`i`.`name`,
|
||||||
|
`i`.`mass`
|
||||||
|
FROM `city_mail_items` AS `m`
|
||||||
|
LEFT JOIN `character_inventory` AS `c`
|
||||||
|
ON `m`.`item_id` = `c`.`id`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `m`.`to` = ?d
|
||||||
|
and `m`.`sender` = `c`.`guid`
|
||||||
|
and `m`.`item_id` = ?d
|
||||||
|
and `m`.`delivery_time` < ?d
|
||||||
|
and `c`.`mailed` = '1';", $this->guid ,$item_id ,time()) or $this->char->error->Mail(112, 'get_mail');
|
||||||
|
list($mail_id, $sender, $i_name, $i_mass) = array_values($i_info);
|
||||||
|
$this->db->query("DELETE FROM `city_mail_items` WHERE `id` = ?d", $mail_id);
|
||||||
|
echoScript("top.menu.location.reload();");
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'get_item':
|
||||||
|
$this->db->query("UPDATE `character_inventory` SET `mailed` = '0', `guid` = ?d, `last_update` = ?d WHERE `guid` = ?d and `id` = ?d", $this->guid ,time() ,$sender ,$item_id);
|
||||||
|
$this->changeMass($i_mass);
|
||||||
|
$this->char->history->Mail('Receive', $i_name, $sender);
|
||||||
|
$this->char->error->Mail(407, 'get_mail', $i_name);
|
||||||
|
break;
|
||||||
|
case 'return_item':
|
||||||
|
$delivery_time = 1800 + time();
|
||||||
|
$this->db->query("UPDATE `character_inventory` SET `mailed` = '1' WHERE `guid` = ?d and `id` = ?d", $sender ,$item_id);
|
||||||
|
$this->db->query("INSERT INTO `city_mail_items` (`sender`, `to`, `item_id`, `delivery_time`, `date`)
|
||||||
|
VALUES (?d, ?d, ?d, ?d, ?d)", $this->guid ,$sender ,$item_id ,$delivery_time ,time());
|
||||||
|
$this->char->history->Mail('Return', $i_name, $sender);
|
||||||
|
$this->char->error->Mail(408, 'get_mail', $i_name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
392
engline/functions/class_Test.php
Normal file
392
engline/functions/class_Test.php
Normal file
@ -0,0 +1,392 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
class Test extends Char
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
public $char;
|
||||||
|
function Init ($object)
|
||||||
|
{
|
||||||
|
$this->guid = $object->guid;
|
||||||
|
$this->db = $object->db;
|
||||||
|
$this->char = $object;
|
||||||
|
}
|
||||||
|
/*Проверка существования персонажа*/
|
||||||
|
function Guid ($type = 'main', $loc = '')
|
||||||
|
{
|
||||||
|
if (checki($this->guid))
|
||||||
|
toIndex($type, true, $loc);
|
||||||
|
|
||||||
|
$char_db = $this->getChar('char_db', 'guid');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'guid');
|
||||||
|
$char_info = $this->getChar('char_info', 'guid');
|
||||||
|
$sid = $this->db->selectCell("SELECT `sid` FROM `online` WHERE `guid` = ?d", $this->guid);
|
||||||
|
|
||||||
|
if (!$char_db || !$char_stats || !$char_info || $sid != session_id() || $sid != $_COOKIE['PHPSESSID'])
|
||||||
|
toIndex($type, true, $loc);
|
||||||
|
}
|
||||||
|
/*Проверка на доступ*/
|
||||||
|
function Admin ($type = 'main', $loc = '')
|
||||||
|
{
|
||||||
|
$admin_level = $this->getChar('char_db', 'admin_level');
|
||||||
|
|
||||||
|
if (!$admin_level)
|
||||||
|
toIndex($type, true, $loc);
|
||||||
|
}
|
||||||
|
/*Проверка блока персонажа*/
|
||||||
|
function Block ()
|
||||||
|
{
|
||||||
|
$block = $this->getChar('char_db', 'block');
|
||||||
|
|
||||||
|
if ($block)
|
||||||
|
echoScript("top.main.location.href = 'main.php?action=exit';", true);
|
||||||
|
}
|
||||||
|
/*Проверка заключения персонажа*/
|
||||||
|
function Prison ()
|
||||||
|
{
|
||||||
|
$prison = $this->getChar('char_db', 'prison');
|
||||||
|
|
||||||
|
if (!$prison || intval($prison - time()) > 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$this->setChar('char_db', array('prison' => 0));
|
||||||
|
}
|
||||||
|
/*Проверка участия персонажа в заявке*/
|
||||||
|
function Zayavka ()
|
||||||
|
{
|
||||||
|
$battle = $this->getChar('char_db', 'battle');
|
||||||
|
$md1 = $this->db->selectCell("SELECT `battle_id` FROM `team1` WHERE `player` = ?d", $this->guid);
|
||||||
|
$md2 = $this->db->selectCell("SELECT `battle_id` FROM `team2` WHERE `player` = ?d", $this->guid);
|
||||||
|
$t = 0;
|
||||||
|
if ($md1)
|
||||||
|
{
|
||||||
|
$m = $md1;
|
||||||
|
$t = 1;
|
||||||
|
}
|
||||||
|
else if ($md2)
|
||||||
|
{
|
||||||
|
$m = $md2;
|
||||||
|
$t = 2;
|
||||||
|
}
|
||||||
|
$rows = $this->db->select("SELECT `creator`,
|
||||||
|
`status`
|
||||||
|
FROM `zayavka`;");
|
||||||
|
foreach ($rows as $dat)
|
||||||
|
{
|
||||||
|
$cr = $dat['creator'];
|
||||||
|
|
||||||
|
if ($m == $dat['creator'] && $dat['status'] == 1)
|
||||||
|
$zayavka_status = "awaiting";
|
||||||
|
|
||||||
|
if ($m == $dat['creator'] && $dat['status'] == 2 && $t == 1)
|
||||||
|
$zayavka_status = "confirm_mine";
|
||||||
|
|
||||||
|
if ($m == $dat['creator'] && $dat['status'] == 2 && $t == 2)
|
||||||
|
$zayavka_status = "confirm_opp";
|
||||||
|
|
||||||
|
if ($m == $dat['creator'] && $dat['status'] == 3 && $battle == 0)
|
||||||
|
goBattle($this->guid);
|
||||||
|
}
|
||||||
|
if ($_SESSION['zayavka_c_m'] == 0 && $zayavka_status == "confirm_mine")
|
||||||
|
{
|
||||||
|
$_SESSION['zayavka_c_m'] = 1;
|
||||||
|
echoScript("top.main.location.href = 'zayavka.php';", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SESSION['zayavka_c_o'] == 0 && $t == 0)
|
||||||
|
$_SESSION['zayavka_c_o'] = 1;
|
||||||
|
}
|
||||||
|
/*Проверка участия персонажа в битве*/
|
||||||
|
function Battle ()
|
||||||
|
{
|
||||||
|
$battle = $this->getChar('char_db', 'battle');
|
||||||
|
|
||||||
|
if (!$battle)
|
||||||
|
return;
|
||||||
|
|
||||||
|
echoScript("top.main.location.href = 'battle.php';", true);
|
||||||
|
}
|
||||||
|
/*Проверка молчанки у персонажа*/
|
||||||
|
function Shut ()
|
||||||
|
{
|
||||||
|
$chat_shut = $this->getChar('char_db', 'chat_shut');
|
||||||
|
|
||||||
|
if (!$chat_shut || $chat_shut > time())
|
||||||
|
return;
|
||||||
|
|
||||||
|
$this->setChar('char_db', array('chat_shut' => 0));
|
||||||
|
}
|
||||||
|
/*Восстановление здоровья/маны*/
|
||||||
|
function Regen ()
|
||||||
|
{
|
||||||
|
if ($this->getChar('char_db', 'battle') != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_stats = $this->getChar('char_stats', 'hp', 'hp_cure', 'hp_all', 'hp_regen', 'mp', 'mp_cure', 'mp_all', 'mp_regen');
|
||||||
|
list($now["hp"], $cure["hp"], $all["hp"], $regen["hp"], $now["mp"], $cure["mp"], $all["mp"], $regen["mp"]) = array_values($char_stats);
|
||||||
|
|
||||||
|
foreach ($all as $key => $value)
|
||||||
|
{
|
||||||
|
if ($cure[$key] == 0 && $now[$key] < $value)
|
||||||
|
{
|
||||||
|
getCureValue($now[$key], $value, $regen[$key], $cure[$key]);
|
||||||
|
$this->setChar('char_stats', array($key.'_cure' => $cure[$key]));
|
||||||
|
}
|
||||||
|
else if ($cure[$key] == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$regenerated = getRegeneratedValue($value, ($cure[$key] - time()), $regen[$key]);
|
||||||
|
if ($regenerated >= 0 && $regenerated < $value)
|
||||||
|
$this->setChar('char_stats', array($key => $regenerated));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->setChar('char_stats', array($key => $value, $key.'_cure' => 0));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка травм у персонажа*/
|
||||||
|
function Travm ()
|
||||||
|
{
|
||||||
|
$travms = $this->db->select("SELECT `travm_id`, `end_time` FROM `character_travms` WHERE `guid` = ?d and `end_time` != 0;", $this->guid);
|
||||||
|
foreach ($travms as $travm)
|
||||||
|
{
|
||||||
|
if ($travm['end_time'] != 0 && time() > $travm['end_time'])
|
||||||
|
$this->workTravm($travm['travm_id'], -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка на получение апа/уровня*/
|
||||||
|
function Up ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'exp', 'next_up', 'level');
|
||||||
|
|
||||||
|
if ($char_db['exp'] < $char_db['next_up'])
|
||||||
|
return;
|
||||||
|
|
||||||
|
$exp_table = $this->db->selectRow("SELECT `up`, `level`, `ups`,
|
||||||
|
`skills`, `money`, `vit`,
|
||||||
|
`spi`, `hp_regen`,
|
||||||
|
`add_bars`
|
||||||
|
FROM `player_exp_for_level`
|
||||||
|
WHERE `exp` = ?d", $char_db['next_up']);
|
||||||
|
list($this_up, $next_level, $next_ups, $next_skills, $next_money, $next_vit, $next_spi, $next_hpr, $next_bars) = array_values($exp_table);
|
||||||
|
$next_exp = $this->db->selectCell("SELECT `exp` FROM `player_exp_for_level` WHERE `up` = ?d", ($this_up + 1));
|
||||||
|
$this->db->query("UPDATE `characters`
|
||||||
|
SET `next_up` = ?d,
|
||||||
|
`money` = `money` + ?f
|
||||||
|
WHERE `guid` = ?d", $next_exp ,rdf($next_money) ,$this->guid);
|
||||||
|
$this->db->query("UPDATE `character_stats`
|
||||||
|
SET `ups` = `ups` + ?d,
|
||||||
|
`skills` = `skills` + ?d
|
||||||
|
WHERE `guid` = ?d", $next_ups ,$next_skills ,$this->guid);
|
||||||
|
|
||||||
|
if ($next_vit)
|
||||||
|
$this->changeStats('vit', $next_vit);
|
||||||
|
|
||||||
|
if ($next_spi)
|
||||||
|
$this->changeStats('spi', $next_spi);
|
||||||
|
|
||||||
|
if ($next_money)
|
||||||
|
$this->char->history->Items('Get', "$next_money кр.", 'Level');
|
||||||
|
|
||||||
|
if ($next_level <= $char_db['level'])
|
||||||
|
{
|
||||||
|
if ($char_db['exp'] >= $next_exp)
|
||||||
|
$this->Up();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setChar('char_db', 'level', $next_level);
|
||||||
|
$this->db->query("UPDATE `character_stats` SET `maxmass` = `maxmass` + ?f, `hp_regen` = `hp_regen` - ?d WHERE `guid` = ?d", 40 ,$next_hpr ,$this->guid);
|
||||||
|
if ($next_bars)
|
||||||
|
{
|
||||||
|
$bar_enums = array('mod' => 2, 'power' => 3, 'def' => 4, 'set' => 5, 'btn' => 6);
|
||||||
|
$next_bars = explode(',', $next_bars);
|
||||||
|
foreach ($next_bars as $key => $value)
|
||||||
|
{
|
||||||
|
$this->setChar('char_bars', $value, $bar_enums[$value]."|1");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($char_db['exp'] >= $next_exp)
|
||||||
|
$this->Up();
|
||||||
|
}
|
||||||
|
/*Проверка участия персонажа в походе*/
|
||||||
|
function Move ()
|
||||||
|
{
|
||||||
|
$speed = $this->getChar('char_db', 'speed');
|
||||||
|
$ld = $this->db->selectRow("SELECT `time`,
|
||||||
|
`destenation`,
|
||||||
|
`dest_game`,
|
||||||
|
`len`,
|
||||||
|
`napr`
|
||||||
|
FROM `goers`
|
||||||
|
WHERE `guid` = ?d", $this->guid);
|
||||||
|
if (!$ld)
|
||||||
|
return;
|
||||||
|
|
||||||
|
list($all_time, $dest_g, $dest, $len, $napr) = array_values($ld);
|
||||||
|
$to_go = $all_time - time();
|
||||||
|
$to_go_sec = intval(($all_time - time())); /*seconds*/
|
||||||
|
$time_to_go = intval($len / $speed * 3600); /*секунд идти*/
|
||||||
|
$atg = $time_to_go - $to_go_sec;
|
||||||
|
$len_done = getMoney($speed * $atg / 3600);
|
||||||
|
$speed_form = getMoney($speed / 1000);
|
||||||
|
if ($to_go > 0)
|
||||||
|
{
|
||||||
|
echo "Вы идете.<br>"
|
||||||
|
. "Назначение: <b>$dest</b><br>"
|
||||||
|
. "Направление: <b>$napr</b><br>"
|
||||||
|
. "Расстояние: <b>$len (м)</b><br>"
|
||||||
|
. "Пройдено: <b>$len_done (м)</b><br>"
|
||||||
|
. "Скорость: <b>$speed_Form(км/час)</b><br>"
|
||||||
|
. "Осталось времени: <b>".getFormatedTime($all_time)."</b><br><br>"
|
||||||
|
. "<input type='button' onclick=\"location.reload();\" value='Обновить' id='refresh' size='20' class='anketa' style='background-color: #e4e4e4;'>";
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
echo "Вы пришли в <b>$dest</b>";
|
||||||
|
$walk_coef = $len / 10000;
|
||||||
|
|
||||||
|
if ($des_g == 'mountown_forest' || $des_g == 'Mountown')
|
||||||
|
$room = "forest";
|
||||||
|
|
||||||
|
$this->setChar('char_db', array('city' => $dest, 'room' => $room));
|
||||||
|
$this->db->query("UPDATE `character_stats` SET `walk` = `walk` + ?d WHERE `guid` = ?d", $walk_coef ,$this->guid);
|
||||||
|
$this->db->query("DELETE FROM `goers` WHERE `guid` = ?d", $this->guid);
|
||||||
|
echoScript("location.href = 'main.php?action=go&room_go=$room';", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка правельности перехода*/
|
||||||
|
function Go ($room_go, $return = false)
|
||||||
|
{
|
||||||
|
if (!$room_go)
|
||||||
|
$this->char->error->Map(102);
|
||||||
|
|
||||||
|
$char_db = $this->getChar('char_db', 'room', 'city', 'sex', 'level', 'prison');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'mass', 'maxmass');
|
||||||
|
$travm = $this->db->select("SELECT `c`.`travm_id` FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and (`i`.`power` = '3' or `i`.`power` = '2') and `i`.`type` != '2';", $this->guid);
|
||||||
|
$room_info = $this->char->city->getRoom($room_go, $char_db['city'], 'room', 'from', 'min_level', 'max_level', 'need_orden', 'sex') or $this->char->error->Map(102);
|
||||||
|
list($room_go, $from, $min_level, $max_level, $need_orden, $need_sex) = array_values($room_info);
|
||||||
|
|
||||||
|
if ($char_db['prison'] != 0)
|
||||||
|
$this->char->error->Map(100);
|
||||||
|
|
||||||
|
if ($char_stats['mass'] > $char_stats['maxmass'])
|
||||||
|
$this->char->error->Map(103, "$char_stats[mass]|$char_stats[maxmass]");
|
||||||
|
|
||||||
|
if ($char_db['level'] < $min_level)
|
||||||
|
$this->char->error->Map(101);
|
||||||
|
|
||||||
|
if ($char_db['level'] > $max_level)
|
||||||
|
$this->char->error->Map(109, $max_level);
|
||||||
|
|
||||||
|
if ($need_orden)
|
||||||
|
$this->char->error->Map(102);
|
||||||
|
|
||||||
|
if ($need_sex != '' && $char_db['sex'] != $need_sex)
|
||||||
|
{
|
||||||
|
$need_sex = ($need_sex) ?'женщинам' :'мужчинам';
|
||||||
|
$this->char->error->Map(104, $need_sex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!in_array($char_db['room'], explode(',', $from)) && $char_db['room'] != $room_go)
|
||||||
|
$this->char->error->Map(102);
|
||||||
|
|
||||||
|
if (($this->char->city->getRoomGoTime()) > 0 && !$return)
|
||||||
|
$this->char->error->Map(110);
|
||||||
|
|
||||||
|
if ($travm)
|
||||||
|
$this->char->error->Map(115);
|
||||||
|
}
|
||||||
|
/*Проверка всех предметов*/
|
||||||
|
function Items ()
|
||||||
|
{
|
||||||
|
$char_equip = $this->getChar('char_equip', 'helmet', 'bracer', 'hand_r', 'armor', 'shirt', 'cloak', 'belt', 'earring', 'amulet', 'ring1', 'ring2', 'ring3', 'gloves', 'hand_l', 'pants', 'boots');
|
||||||
|
foreach ($char_equip as $key => $value)
|
||||||
|
{
|
||||||
|
if ($value != 0 && !($this->char->equip->checkItemStats($value)))
|
||||||
|
$this->char->equip->equipItem($key, -1);
|
||||||
|
}
|
||||||
|
$rows = $this->db->select("SELECT `id`,
|
||||||
|
`wear`,
|
||||||
|
`mailed`
|
||||||
|
FROM `character_inventory`
|
||||||
|
WHERE `guid` = ?d", $this->guid);
|
||||||
|
foreach ($rows as $inventory)
|
||||||
|
{
|
||||||
|
list($item_id, $item_wear, $item_mailed) = array_values($inventory);
|
||||||
|
|
||||||
|
if ($this->char->equip->checkItemValidity($item_id))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!$item_wear && !$item_mailed)
|
||||||
|
$this->char->equip->deleteItem($item_id);
|
||||||
|
else if ($item_wear && !$item_mailed)
|
||||||
|
{
|
||||||
|
$slot = $this->char->equip->getItemSlot($item_id);
|
||||||
|
$this->char->equip->equipItem($slot, -1);
|
||||||
|
$this->char->equip->deleteItem($item_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка доступности комнаты*/
|
||||||
|
function Room ()
|
||||||
|
{
|
||||||
|
global $action;
|
||||||
|
$actions = array('none', 'go', 'admin', 'enter', 'exit', '');
|
||||||
|
$room = $this->getChar('char_db', 'room');
|
||||||
|
|
||||||
|
if ($room == 'mail' && !in_array($action, $actions))
|
||||||
|
$this->char->error->Map(105);
|
||||||
|
|
||||||
|
if ($room == 'bank' && !in_array($action, $actions))
|
||||||
|
$this->char->error->Map();
|
||||||
|
}
|
||||||
|
/*Проверка состояния персонажа*/
|
||||||
|
function Afk ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'last_time', 'dnd', 'afk');
|
||||||
|
|
||||||
|
if ($char_db['afk'])
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((time () - $char_db['last_time']) >= 300 && !$char_db['dnd'])
|
||||||
|
$this->setChar('char_db', array('afk' => 1, 'message' => 'away from keyboard'));
|
||||||
|
}
|
||||||
|
/*Обновление состояния персонажа*/
|
||||||
|
function WakeUp ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'afk', 'message');
|
||||||
|
|
||||||
|
if ($char_db['afk'] && $char_db['message'] == 'away from keyboard')
|
||||||
|
$this->setChar('char_db', array('afk' => 0, 'message' => ''));
|
||||||
|
}
|
||||||
|
/*Проверка эффектов*/
|
||||||
|
function Effects ()
|
||||||
|
{
|
||||||
|
$effects = $this->db->select("SELECT `effect_id`, `end_time` FROM `character_effects` WHERE `guid` = ?d and `end_time` != 0;", $this->guid);
|
||||||
|
foreach ($effects as $effect)
|
||||||
|
{
|
||||||
|
if ($effect['end_time'] != 0 && time() > $effect['end_time'])
|
||||||
|
$this->workEffect($effect['effect_id'], -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка онлайн*/
|
||||||
|
function Online ($guid = 0)
|
||||||
|
{
|
||||||
|
if ($guid == $this->guid)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
$last_time = $this->getChar('char_db', 'last_time', $guid);
|
||||||
|
|
||||||
|
if ((time() - $last_time) > 100)
|
||||||
|
{
|
||||||
|
$this->db->query("DELETE FROM `online` WHERE `guid` = ?d", $guid);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
321
engline/functions/functions.php
Normal file
321
engline/functions/functions.php
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
/*Функции персонажа*/
|
||||||
|
include("class_Char.php");
|
||||||
|
/*Функции проверок*/
|
||||||
|
include("class_Test.php");
|
||||||
|
/*Функции предметов*/
|
||||||
|
include("class_Equip.php");
|
||||||
|
/*Функции города*/
|
||||||
|
include("class_City.php");
|
||||||
|
/*Функции почты*/
|
||||||
|
include("class_Mail.php");
|
||||||
|
/*Функции банка*/
|
||||||
|
include("class_Bank.php");
|
||||||
|
/*Функции чата*/
|
||||||
|
include("class_Chat.php");
|
||||||
|
/*Функции истории*/
|
||||||
|
include("class_History.php");
|
||||||
|
/*Функции ошибок*/
|
||||||
|
include("class_Error.php");
|
||||||
|
/*Вывод js скрипта*/
|
||||||
|
function echoScript ($str, $die = false)
|
||||||
|
{
|
||||||
|
echo "<script type='text/javascript'>$str</script>";
|
||||||
|
if ($die)
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
/*Преобразование массива в переменные*/
|
||||||
|
function ArrToVar ($arr, $pref = '')
|
||||||
|
{
|
||||||
|
foreach ($arr as $key => $value)
|
||||||
|
{
|
||||||
|
$var = ($pref != '') ?$pref.$key :$key;
|
||||||
|
global ${$var};
|
||||||
|
${$var} = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Получение полосы загрузки*/
|
||||||
|
function getUpdateBar ()
|
||||||
|
{
|
||||||
|
echo "<table width='80' border='0' cellspacing='0' cellpadding='0'>"
|
||||||
|
. "<tr>"
|
||||||
|
. "<td><a href='?action=none'><img src='../img/room/rel_1.png' width='15' height='16' alt='Обновить' border='0' /></a></td>"
|
||||||
|
. "<td>"
|
||||||
|
. "<table width='80' border='0' cellspacing='0' cellpadding='0'>"
|
||||||
|
. "<tr><td colspan='3' align='center'><img src='../img/room/navigatin_462s.gif' width='80' height='3' /></td></tr>"
|
||||||
|
. "<tr width='80'>"
|
||||||
|
. "<td><img src='../img/room/navigatin_481.gif' width='9' height='8' /></td>"
|
||||||
|
. "<td width='100%' bgcolor='#000000' nowrap><div id='prcont' align='center' style='font-size: 4px; padding: 0px; border: solid black 0px; text-align: center;'>";
|
||||||
|
for ($i = 1; $i <= 32; $i++)
|
||||||
|
{
|
||||||
|
echo "<span id='progress$i' style='background-color: #00CC00;'> </span>";
|
||||||
|
if ($i < 32)
|
||||||
|
echo " ";
|
||||||
|
}
|
||||||
|
echo "</div></td>"
|
||||||
|
. "<td><img src='../img/room/navigatin_50s.gif' width='7' height='8' /></td>"
|
||||||
|
. "</tr>"
|
||||||
|
. "<tr><td colspan='3'><img src='../img/room/navigatin_tt1_532.gif' width='80' height='5' /></td></tr>"
|
||||||
|
. "</table></td></tr></table>";
|
||||||
|
}
|
||||||
|
/*Получение времени восстановления здоровья*/
|
||||||
|
function getCureValue ($now, $all, $regen, &$value)
|
||||||
|
{
|
||||||
|
$value = intval(30000*($all-$now)/($all*$regen)) + time();
|
||||||
|
}
|
||||||
|
/*Получение количества восстановленного здоровья*/
|
||||||
|
function getRegeneratedValue ($all, $cure, $regen)
|
||||||
|
{
|
||||||
|
return $all - intval(0.0001*$all*$cure*$regen/3);
|
||||||
|
}
|
||||||
|
/*Получение отформатированного времени*/
|
||||||
|
function getFormatedTime ($timestamp)
|
||||||
|
{
|
||||||
|
if (!$timestamp)
|
||||||
|
return "0 сек.";
|
||||||
|
|
||||||
|
if (!is_numeric($timestamp))
|
||||||
|
$timestamp = time();
|
||||||
|
|
||||||
|
$seconds = ($timestamp > time()) ?$timestamp - time() :time() - $timestamp;
|
||||||
|
$seconds = ($seconds > 0) ?$seconds :0;
|
||||||
|
$y = intval($seconds / 31536000);
|
||||||
|
$seconds %= 31536000;
|
||||||
|
$m = intval($seconds / 2592000);
|
||||||
|
$seconds %= 2592000;
|
||||||
|
$d = intval($seconds / 86400);
|
||||||
|
$seconds %= 86400;
|
||||||
|
$h = intval($seconds / 3600);
|
||||||
|
$seconds %= 3600;
|
||||||
|
$n = intval($seconds / 60);
|
||||||
|
$seconds %= 60;
|
||||||
|
$s = $seconds;
|
||||||
|
|
||||||
|
if ($y && $m == 0) return "$y г.";
|
||||||
|
if ($y) return "$y г. $m мес.";
|
||||||
|
if ($m && $d == 0) return "$m мес.";
|
||||||
|
if ($m) return "$m мес. $d дн.";
|
||||||
|
if ($d && $h == 0) return "$d дн.";
|
||||||
|
if ($d) return "$d дн. $h ч.";
|
||||||
|
if ($h && $n == 0) return "$h ч.";
|
||||||
|
if ($h) return "$h ч. $n мин.";
|
||||||
|
if ($n && $s == 0) return "$n мин.";
|
||||||
|
if ($n) return "$n мин. $s сек.";
|
||||||
|
return "$s сек.";
|
||||||
|
}
|
||||||
|
/*Перевод в float*/
|
||||||
|
function getMoney ($money)
|
||||||
|
{
|
||||||
|
return sprintf("%01.2f", $money);
|
||||||
|
}
|
||||||
|
/*Внедрение пробела*/
|
||||||
|
function getExp ($exp)
|
||||||
|
{
|
||||||
|
return number_format($exp, 0, "", " ");
|
||||||
|
}
|
||||||
|
/*Получение цвета улучшения*/
|
||||||
|
function getColor ($cur, $add)
|
||||||
|
{
|
||||||
|
$diff = ($add > 0) ?(1 - (($cur - $add) / $cur)) * 255 :($add < 0) ?(1 -(($cur - $add*(-1)) / $cur)) * 255 :-50;
|
||||||
|
$diff = abs(intval($diff)) + 50;
|
||||||
|
|
||||||
|
if ($diff > 150 && $add > 0) return "#00AA00";
|
||||||
|
if ($diff > 150 && $add < 0) return "#AA0000";
|
||||||
|
if ($add > 0) return "RGB(0, $diff, 0)";
|
||||||
|
if ($add < 0) return "RGB($diff, 0, 0)";
|
||||||
|
return "RGB(0, 0, 0)";
|
||||||
|
}
|
||||||
|
/*Получение разбивки статов*/
|
||||||
|
function getBraces ($stat, $added_stat, $type = '')
|
||||||
|
{
|
||||||
|
if ($added_stat > 0) return " <small>(<font id='inst_$type'>".($stat-$added_stat)."</font> + $added_stat)</small>";
|
||||||
|
if ($added_stat < 0) return " <small>(<font id='inst_$type'>".($stat-$added_stat)."</font> - ".abs($added_stat).")</small>";
|
||||||
|
}
|
||||||
|
/*Сравнение двух переменных*/
|
||||||
|
function compare ($var1, $var2, $var3 = 0)
|
||||||
|
{
|
||||||
|
$format = '%1$s';
|
||||||
|
if (is_numeric($var1) && is_numeric($var2))
|
||||||
|
$format = ($var1 > $var2) ?"<font color=\"#FF0000\">$format</font>" :$format;
|
||||||
|
else if (is_string($var1) && is_string($var2))
|
||||||
|
$format = ($var1 != $var2) ?"<font color=\"#FF0000\">$format</font>" :$format;
|
||||||
|
$text = ($var3) ?$var3 :$var1;
|
||||||
|
return sprintf($format, $text);
|
||||||
|
}
|
||||||
|
/*UTF-8 размер строки*/
|
||||||
|
function utf8_strlen ($s)
|
||||||
|
{
|
||||||
|
return preg_match_all('/./u', $s, $tmp);
|
||||||
|
}
|
||||||
|
/*UTF-8 сокращение строки*/
|
||||||
|
function utf8_substr ($s, $offset, $len = 'all')
|
||||||
|
{
|
||||||
|
if ($offset < 0)
|
||||||
|
$offset = $char -> utf8_strlen($s) + $offset;
|
||||||
|
|
||||||
|
if ($len != 'all')
|
||||||
|
{
|
||||||
|
if ($len < 0)
|
||||||
|
$len = utf8_strlen($s) - $offset + $len;
|
||||||
|
|
||||||
|
$xlen = utf8_strlen($s) - $offset;
|
||||||
|
$len = ($len > $xlen) ?$xlen :$len;
|
||||||
|
preg_match('/^.{' . $offset . '}(.{0,'.$len.'})/us', $s, $tmp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
preg_match('/^.{' . $offset . '}(.*)/us', $s, $tmp);
|
||||||
|
return (isset($tmp[1])) ?$tmp[1] :false;
|
||||||
|
}
|
||||||
|
/*Экранирование запроса LIKE*/
|
||||||
|
function escapeLike ($s)
|
||||||
|
{
|
||||||
|
return "%".str_replace(array("'", '"', "%", "_"), array("\'", '\"', "", ""), $s)."%";
|
||||||
|
}
|
||||||
|
/*Error log function*/
|
||||||
|
function databaseErrorHandler ($message, $info)
|
||||||
|
{
|
||||||
|
if (!error_reporting())
|
||||||
|
return;
|
||||||
|
|
||||||
|
echo "<table class = report><tbody><tr><td>SQL Error: $message<br><pre>".print_r($info, true)."</pre></td></tr></tbody></table>";
|
||||||
|
error_log($message);
|
||||||
|
}
|
||||||
|
/*Получение переменной GET, POST и COOKIE*/
|
||||||
|
function getVar ($var, $stand = '', $flags = 3)
|
||||||
|
{
|
||||||
|
if (isset($_GET[$var]) && ($flags & 1))
|
||||||
|
$value = $_GET[$var];
|
||||||
|
else if (isset($_POST[$var]) && ($flags & 2))
|
||||||
|
$value = $_POST[$var];
|
||||||
|
else if (isset($_COOKIE[$var]) && ($flags & 4))
|
||||||
|
$value = $_COOKIE[$var];
|
||||||
|
else
|
||||||
|
return $stand;
|
||||||
|
|
||||||
|
if (is_numeric($stand) && is_numeric($value)) return ($flags & 8) ?rdf($value) :$value;
|
||||||
|
else if (!is_numeric($stand)) return htmlspecialchars($value);
|
||||||
|
else return $stand;
|
||||||
|
}
|
||||||
|
/*Проверка существования переменной SESSION*/
|
||||||
|
function checks ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
|
||||||
|
if (func_num_args() == 1)
|
||||||
|
return isset($_SESSION[$args[0]]);
|
||||||
|
|
||||||
|
foreach ($args as $arg)
|
||||||
|
{
|
||||||
|
if (!isset($_SESSION[$arg]))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/*Проверка существования и правильного формата числа*/
|
||||||
|
function checki ($int)
|
||||||
|
{
|
||||||
|
return (!is_numeric($int) || $int == 0);
|
||||||
|
}
|
||||||
|
/*Преобразование русско-язычной строки в нижний и верхний регистр*/
|
||||||
|
define('UPCASE', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIKLMNOPQRSTUVWXYZ');
|
||||||
|
define('LOCASE', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghiklmnopqrstuvwxyz');
|
||||||
|
function mb_str_split ($str)
|
||||||
|
{
|
||||||
|
preg_match_all('/.{1}|[^\x00]{1}$/us', $str, $ar);
|
||||||
|
return $ar[0];
|
||||||
|
}
|
||||||
|
function mb_strtr ($str, $from, $to)
|
||||||
|
{
|
||||||
|
return str_replace(mb_str_split($from), mb_str_split($to), $str);
|
||||||
|
}
|
||||||
|
function lowercase ($arg = '')
|
||||||
|
{
|
||||||
|
return mb_strtr($arg, UPCASE, LOCASE);
|
||||||
|
}
|
||||||
|
function uppercase ($arg = '')
|
||||||
|
{
|
||||||
|
return mb_strtr($arg, LOCASE, UPCASE);
|
||||||
|
}
|
||||||
|
/*Возврат значения ajax запроса*/
|
||||||
|
function returnAjax ()
|
||||||
|
{
|
||||||
|
die(implode('$$', func_get_args()));
|
||||||
|
}
|
||||||
|
/*Получение место перехода*/
|
||||||
|
function toIndex ($type = 'main', $die = true, $loc = '')
|
||||||
|
{
|
||||||
|
deleteSession();
|
||||||
|
switch ($type)
|
||||||
|
{
|
||||||
|
case 'main':
|
||||||
|
deleteSession();
|
||||||
|
echoScript("top.location.href = '{$loc}index.php';", $die);
|
||||||
|
break;
|
||||||
|
case 'game':
|
||||||
|
deleteSession();
|
||||||
|
echoScript("location.href = '{$loc}index.php';", $die);
|
||||||
|
break;
|
||||||
|
case 'ajax':
|
||||||
|
die('ajax_error');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Получение guid персонажа*/
|
||||||
|
function getGuid ($type = 'main', $loc = '')
|
||||||
|
{
|
||||||
|
if (empty($_SESSION['guid']))
|
||||||
|
toIndex($type, true, $loc);
|
||||||
|
else
|
||||||
|
return $_SESSION['guid'];
|
||||||
|
}
|
||||||
|
/*Получение названия таблицы*/
|
||||||
|
function getTable ($name)
|
||||||
|
{
|
||||||
|
switch ($name)
|
||||||
|
{
|
||||||
|
case 'char_db': return 'characters';
|
||||||
|
case 'char_stats': return 'character_stats';
|
||||||
|
case 'char_info': return 'character_info';
|
||||||
|
case 'char_equip': return 'character_equip';
|
||||||
|
case 'char_bars': return 'character_bars';
|
||||||
|
case 'online': return 'online';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Удаление переменных сессии*/
|
||||||
|
function deleteSession ()
|
||||||
|
{
|
||||||
|
unset($_SESSION['guid'], $_SESSION['bankСredit'], $_SESSION['last_t'], $_SESSION['token']);
|
||||||
|
}
|
||||||
|
/*Смешивает порядок ключей массива сохраняя значения*/
|
||||||
|
function shuffle_arr ($array)
|
||||||
|
{
|
||||||
|
$keys = array_keys($array);
|
||||||
|
shuffle($keys);
|
||||||
|
return array_merge(array_flip($keys), $array);
|
||||||
|
}
|
||||||
|
/*Функции для определения времени создания страницы*/
|
||||||
|
function gettime ()
|
||||||
|
{
|
||||||
|
$part_time = explode(' ',microtime());
|
||||||
|
$real_time = $part_time[1].substr($part_time[0],1);
|
||||||
|
return $real_time;
|
||||||
|
}
|
||||||
|
function showtime ($start_time, &$s)
|
||||||
|
{
|
||||||
|
$dift_time2 = bcsub(gettime(), $start_time, 6);
|
||||||
|
$s .= "Время $dift_time2 секунд";
|
||||||
|
}
|
||||||
|
/*Округление до сотых*/
|
||||||
|
function rdf ($float)
|
||||||
|
{
|
||||||
|
return round($float * 100) / 100;
|
||||||
|
}
|
||||||
|
/*Вывод ошибки*/
|
||||||
|
function error ($text)
|
||||||
|
{
|
||||||
|
echoScript("$('title').html('Произошла ошибка');");
|
||||||
|
die("Произошла ошибка:<br><pre>$text</pre><a href='javascript:window.history.go(-1);'><b>Назад</b></a><hr><p align='right'>(c) <a href='../'>Анти Бойцовский клуб</a></p>");
|
||||||
|
}
|
||||||
|
?>
|
572
engline/functions/functions_info.php
Normal file
572
engline/functions/functions_info.php
Normal file
@ -0,0 +1,572 @@
|
|||||||
|
<?
|
||||||
|
defined('AntiBK') or die("Доступ запрещен!");
|
||||||
|
|
||||||
|
/*Информация о персонаже*/
|
||||||
|
class Info
|
||||||
|
{
|
||||||
|
public $guid;
|
||||||
|
public $db;
|
||||||
|
function& initialization ($guid, $adb)
|
||||||
|
{
|
||||||
|
$object = new Info;
|
||||||
|
$object->guid = $guid;
|
||||||
|
$object->db = $adb;
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
/*Получение информации о персонаже*/
|
||||||
|
function getChar ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$args_num = func_num_args();
|
||||||
|
$guid = $this->guid;
|
||||||
|
|
||||||
|
$table = getTable($args[0]);
|
||||||
|
unset($args[0]);
|
||||||
|
|
||||||
|
if ($args[1] == '*')
|
||||||
|
return $this->db->selectRow("SELECT * FROM ?# WHERE `guid` = ?d", $table, $guid);
|
||||||
|
else if ($args_num == 2)
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM ?# WHERE `guid` = ?d", $args, $table, $guid);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM ?# WHERE `guid` = ?d", $args, $table, $guid);
|
||||||
|
}
|
||||||
|
/*Получение информации о языке*/
|
||||||
|
function getLang ()
|
||||||
|
{
|
||||||
|
$lang = $this->db->selectCell("SELECT `language` FROM `server_info`;");
|
||||||
|
return $this->db->selectCol("SELECT `key` AS ARRAY_KEY, ?# FROM `server_language`;", $lang);
|
||||||
|
}
|
||||||
|
/*Проверка существования персонажа*/
|
||||||
|
function Guid ()
|
||||||
|
{
|
||||||
|
if (checki($this->guid))
|
||||||
|
error('Указанный персонаж не найден...');
|
||||||
|
|
||||||
|
$char_db = $this->getChar('char_db', 'guid');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'guid');
|
||||||
|
$char_info = $this->getChar('char_info', 'guid');
|
||||||
|
|
||||||
|
if (!$char_db || !$char_stats || !$char_info)
|
||||||
|
error('Указанный персонаж не найден...');
|
||||||
|
}
|
||||||
|
/*Проверка заключения персонажа*/
|
||||||
|
function Prison ()
|
||||||
|
{
|
||||||
|
$prison = $this->getChar('char_db', 'prison');
|
||||||
|
|
||||||
|
if (!$prison || intval($prison - time()) > 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$this->db->query("UPDATE `characters` SET `prison` = '0' WHERE `guid` = ?d", $this->guid);
|
||||||
|
}
|
||||||
|
/*Проверка молчанки у персонажа*/
|
||||||
|
function Shut ()
|
||||||
|
{
|
||||||
|
$chat_shut = $this->getChar('char_db', 'chat_shut');
|
||||||
|
|
||||||
|
if (!$chat_shut || $chat_shut > time())
|
||||||
|
return;
|
||||||
|
|
||||||
|
$this->db->query("UPDATE `characters` SET `chat_shut` = '0' WHERE `guid` = ?d", $this->guid);
|
||||||
|
}
|
||||||
|
/*Восстановление здоровья/маны*/
|
||||||
|
function Regen ()
|
||||||
|
{
|
||||||
|
if ($this->getChar('char_db', 'battle') != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_stats = $this->getChar('char_stats', 'hp', 'hp_cure', 'hp_all', 'hp_regen', 'mp', 'mp_cure', 'mp_all', 'mp_regen');
|
||||||
|
list($now["hp"], $cure["hp"], $all["hp"], $regen["hp"], $now["mp"], $cure["mp"], $all["mp"], $regen["mp"]) = array_values($char_stats);
|
||||||
|
|
||||||
|
foreach ($all as $key => $value)
|
||||||
|
{
|
||||||
|
if ($cure[$key] == 0 && $now[$key] < $value)
|
||||||
|
{
|
||||||
|
getCureValue($now[$key], $value, $regen[$key], $cure[$key]);
|
||||||
|
$this->db->query("UPDATE `character_stats` SET ?# = ?d WHERE `guid` = ?d", $key.'_cure' ,$cure[$key] ,$this->guid);
|
||||||
|
}
|
||||||
|
else if ($cure[$key] == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
$regenerated = getRegeneratedValue($value, ($cure[$key] - time()), $regen[$key]);
|
||||||
|
if ($regenerated >= 0 && $regenerated < $value)
|
||||||
|
$this->db->query("UPDATE `character_stats` SET ?# = ?d WHERE `guid` = ?d", $key ,$regenerated ,$this->guid);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->db->query("UPDATE `character_stats` SET ?# = ?d, ?# = '0' WHERE `guid` = ?d", $key ,$value ,$key.'_cure' ,$this->guid);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Проверка онлайн*/
|
||||||
|
function Online ()
|
||||||
|
{
|
||||||
|
$last_time = $this->getChar('char_db', 'last_time');
|
||||||
|
|
||||||
|
if ((time() - $last_time) > 100)
|
||||||
|
$this->db->query("DELETE FROM `online` WHERE `guid` = ?d", $this->guid);
|
||||||
|
}
|
||||||
|
/*Отображение дополнительной характеристики*/
|
||||||
|
function showStatAddition ()
|
||||||
|
{
|
||||||
|
global $added;
|
||||||
|
$added = array('str' => 0, 'dex' => 0, 'con' => 0, 'int' => 0);
|
||||||
|
$rows = $this->db->select("SELECT `i`.`add_str`, `c`.`inc_str`,
|
||||||
|
`i`.`add_dex`, `c`.`inc_dex`,
|
||||||
|
`i`.`add_con`, `c`.`inc_con`,
|
||||||
|
`i`.`add_int`, `c`.`inc_int`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`wear` = '1';", $this->guid);
|
||||||
|
foreach ($rows as $dat)
|
||||||
|
{
|
||||||
|
$added['str'] += $dat['add_str'] + $dat['inc_str'];
|
||||||
|
$added['dex'] += $dat['add_dex'] + $dat['inc_dex'];
|
||||||
|
$added['con'] += $dat['add_con'] + $dat['inc_con'];
|
||||||
|
$added['int'] += $dat['add_int'] + $dat['inc_int'];
|
||||||
|
}
|
||||||
|
$rows = $this->db->select("SELECT `stats` FROM `character_travms` WHERE `guid` = ?d and `stats` != '';", $this->guid);
|
||||||
|
foreach ($rows as $travm)
|
||||||
|
{
|
||||||
|
$stats = split(",", $travm['stats']);
|
||||||
|
foreach ($stats as $stat)
|
||||||
|
{
|
||||||
|
$stat = split("=", $stat);
|
||||||
|
|
||||||
|
if (array_key_exists($stat[0], $added))
|
||||||
|
$added[$stat[0]] += -$stat[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Отображение снаряжения*/
|
||||||
|
function showCharacter ()
|
||||||
|
{
|
||||||
|
$char_equip = $this->getChar('char_equip', '*');
|
||||||
|
$char_db = $this->getChar('char_db', 'login', 'shape', 'block');
|
||||||
|
$char_stats = $this->getChar('char_stats', 'hp', 'hp_all', 'hp_regen', 'mp', 'mp_all', 'mp_regen');
|
||||||
|
$char_feat = array_merge($char_db, $char_stats);
|
||||||
|
$char_feat['name'] = "alt='$char_feat[login]'";
|
||||||
|
$char_equip['armor'] = ($char_equip['cloak']) ?$char_equip['cloak'] :(($char_equip['armor']) ?$char_equip['armor'] :$char_equip['shirt']);
|
||||||
|
$char_equip['hand_l_s'] = (!$char_equip['hand_l_free']) ?"hand_l" :"hand_l_f";
|
||||||
|
|
||||||
|
echo $this->getLogin();
|
||||||
|
echo "<div style='height: 5px;'></div>";
|
||||||
|
echo $this->getCharacterEquipped($char_equip, $char_feat);
|
||||||
|
echoScript("showHP($char_feat[hp], $char_feat[hp_all], $char_feat[hp_regen]);".
|
||||||
|
"showMP($char_feat[mp], $char_feat[mp_all], $char_feat[mp_regen]);");
|
||||||
|
}
|
||||||
|
/*Получение одетых вещей*/
|
||||||
|
function getCharacterEquipped ($char_equip, $char_feat)
|
||||||
|
{
|
||||||
|
if (!$char_equip || !$char_feat)
|
||||||
|
return;
|
||||||
|
|
||||||
|
$effects = $this->getEffects();
|
||||||
|
$equipped = "<table border='0' width='227' class='posit' cellspacing='0' cellpadding='0'>";
|
||||||
|
|
||||||
|
if ($char_feat['block'])
|
||||||
|
$equipped .= "<tr><td colspan='3' align='center'><b><font color='#FF0000'>Персонаж заблокирован!</font></b></td></tr>";
|
||||||
|
|
||||||
|
$equipped .= "<tr bgColor='#dedede'>"
|
||||||
|
. "<td width='60' align='left' valign='top'>"
|
||||||
|
. $this->getItemEquiped($char_equip['helmet'], "helmet")
|
||||||
|
. $this->getItemEquiped($char_equip['bracer'], "bracer")
|
||||||
|
. $this->getItemEquiped($char_equip['hand_r'], "hand_r")
|
||||||
|
. $this->getItemEquiped($char_equip['armor'], "armor")
|
||||||
|
. $this->getItemEquiped($char_equip['belt'], "belt")
|
||||||
|
. "</td>"
|
||||||
|
. "<td width='120' height='220' align='center' valign='middle'><table cellspacing='0' cellpadding='0'>"
|
||||||
|
. "<tr height='20'><td style='font-size: 9px; position: relative;'><div id='HP'></div><div id='MP'></div></td></tr>"
|
||||||
|
. "<tr height='220'><td><div style='position: relative; z-index: 1; width: 120px; height: 220px;'><img src='img/chars/$char_feat[shape]' $char_feat[name]>$effects</div></td></tr>"
|
||||||
|
. "<tr height='40'><td><img src='img/items/slot_bottom0.gif' border='0'></td></tr>"
|
||||||
|
. "</table></td>"
|
||||||
|
. "<td width='60' align='right' valign='top'>"
|
||||||
|
. $this->getItemEquiped($char_equip['earring'], "earring")
|
||||||
|
. $this->getItemEquiped($char_equip['amulet'], "amulet")
|
||||||
|
. $this->getItemEquiped($char_equip['ring1'], "ring")
|
||||||
|
. $this->getItemEquiped($char_equip['ring2'], "ring")
|
||||||
|
. $this->getItemEquiped($char_equip['ring3'], "ring")
|
||||||
|
. $this->getItemEquiped($char_equip['gloves'], "gloves")
|
||||||
|
. $this->getItemEquiped($char_equip['hand_l'], $char_equip['hand_l_s'])
|
||||||
|
. $this->getItemEquiped($char_equip['pants'], "pants")
|
||||||
|
. $this->getItemEquiped($char_equip['boots'], "boots")
|
||||||
|
. "</td></tr></table>";
|
||||||
|
return $equipped;
|
||||||
|
}
|
||||||
|
/*Получение отображаемых эффектов*/
|
||||||
|
function getEffects ()
|
||||||
|
{
|
||||||
|
$i = 1;
|
||||||
|
$left = 0;
|
||||||
|
$top = 0;
|
||||||
|
$return = '';
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$travms = $this->db->select("SELECT * FROM `character_travms` AS `c` LEFT JOIN `player_travms` AS `i` ON `c`.`travm_id` = `i`.`id` WHERE `c`.`guid` = ?d and `c`.`stats` != '';", $this->guid);
|
||||||
|
foreach ($travms as $travm)
|
||||||
|
{
|
||||||
|
$name = (isset($lang['travm_p_'.$travm['power']])) ?$lang['travm_p_'.$travm['power']].' ('.$travm['name'].')' :$travm['name'];
|
||||||
|
$stats = ($travm['type'] == 1) ?'<br>У персонажа '.lowercase($lang['travm_p_'.$travm['power']]).' - ослаблены характеристики.' :'';
|
||||||
|
$modifiers = split(",", $travm['stats']);
|
||||||
|
foreach ($modifiers as $modifier)
|
||||||
|
{
|
||||||
|
$stat = split("=", $modifier);
|
||||||
|
$stats .= '<br>'.$lang[$stat[0]].' -'.$stat[1];
|
||||||
|
}
|
||||||
|
$end_time = 'Осталось: '.getFormatedTime($travm['end_time']);
|
||||||
|
$img = ($travm['type'] == 0) ?'' :$travm['power'];
|
||||||
|
$return .= "<img src='img/icon/effects/eff_travma$img.gif' style='position: absolute; left: {$left}px; top: {$top}px; z-index: 100;' alt='<u><b>$name</b></u> (Эффект)<br>$end_time<br>$stats' width='36' height='23'>";
|
||||||
|
$left += 36;
|
||||||
|
|
||||||
|
if ($i % 3 == 0)
|
||||||
|
{
|
||||||
|
$top += 23;
|
||||||
|
$left = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
|
/*Получение изображения предмета, одетого на персонажа*/
|
||||||
|
function getItemEquiped ($item_id, $i_type)
|
||||||
|
{
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$image = $this->db->selectRow("SELECT `width`, `height`, `default`, `low_level`, `level` FROM `server_images` WHERE `name` = ?s", 'item_'.$i_type);
|
||||||
|
$default = "<img src='img/items/$image[default]' width='$image[width]' height='$image[height]' border='0' alt='".$lang[$i_type.'_f']."'>";
|
||||||
|
|
||||||
|
if (!is_numeric($item_id))
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$level = $this->getChar('char_db', 'level');
|
||||||
|
|
||||||
|
if ($item_id == 0 && $level < $image['level'])
|
||||||
|
return "<img src='img/items/$image[low_level]' width='$image[width]' height='$image[height]' border='0' alt='".$lang[$i_type.'_l']."'>";
|
||||||
|
else if ($item_id == 0)
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$color = '';
|
||||||
|
$img = $image['default'];
|
||||||
|
$desc = $this->getItemAlt($item_id, $color, $img);
|
||||||
|
|
||||||
|
if (!$desc)
|
||||||
|
return $default;
|
||||||
|
|
||||||
|
$slot = $this->getItemSlot($item_id);
|
||||||
|
return "<img src='img/items/$img' width='$image[width]' height='$image[height]' border='0' alt='$desc'$color>";
|
||||||
|
}
|
||||||
|
/*Получение всплывающей подсказки о предмете*/
|
||||||
|
function getItemAlt ($item_id, &$color = '', &$img = '')
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return '';
|
||||||
|
|
||||||
|
$lang = $this->getLang();
|
||||||
|
$i_info = $this->db->selectRow("SELECT `c`.`tear_cur`, `c`.`tear_max`,
|
||||||
|
`i`.`attack`, `i`.`brick`,
|
||||||
|
`i`.`name`, `i`.`img`,
|
||||||
|
`i`.`add_hp`, `i`.`add_mp`,
|
||||||
|
`i`.`def_h`, `i`.`def_a`,
|
||||||
|
`i`.`def_b`, `i`.`def_l`
|
||||||
|
FROM `character_inventory` AS `c`
|
||||||
|
LEFT JOIN `item_template` AS `i`
|
||||||
|
ON `c`.`item_entry` = `i`.`entry`
|
||||||
|
WHERE `c`.`guid` = ?d
|
||||||
|
and `c`.`id` = ?d", $this->guid, $item_id);
|
||||||
|
if (!$i_info)
|
||||||
|
return '';
|
||||||
|
|
||||||
|
$img = $i_info['img'];
|
||||||
|
$tear_check = ($i_info['tear_cur'] >= $i_info['tear_max'] * 0.90);
|
||||||
|
$tear_show = ($tear_check) ?'<font color=#990000>%s</font>' :'%s';
|
||||||
|
$color = ($tear_check) ?" class='broken'" :'';
|
||||||
|
$def = array('h', 'a', 'b', 'l');
|
||||||
|
$desc = $i_info['name'];
|
||||||
|
|
||||||
|
if ($i_info['attack'] > 0)
|
||||||
|
$desc .= "<br>$lang[damage] $i_info[attack] - ".($i_info['attack'] + $i_info['brick']);
|
||||||
|
|
||||||
|
$desc .= "<br>$lang[durability] ".sprintf($tear_show, intval($i_info['tear_cur'])."/".ceil($i_info['tear_max']));
|
||||||
|
return $desc;
|
||||||
|
}
|
||||||
|
/*Получение отформатированного кубика*/
|
||||||
|
private function getFormatedBrick ($min, $brick)
|
||||||
|
{
|
||||||
|
$first = $min - 1;
|
||||||
|
$second = $brick + 1;
|
||||||
|
if ($min == 1) return "(d$second)";
|
||||||
|
if ($brick == 0) return '';
|
||||||
|
if ($min <= 0) return '';
|
||||||
|
return "($first+d$second)";
|
||||||
|
}
|
||||||
|
/*Получение слота в который одет предмет*/
|
||||||
|
function getItemSlot ($item_id)
|
||||||
|
{
|
||||||
|
if (checki($item_id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$char_equip = $this->getChar('char_equip', 'helmet', 'bracer', 'hand_r', 'armor', 'shirt', 'cloak', 'belt', 'earring', 'amulet', 'ring1', 'ring2', 'ring3', 'gloves', 'hand_l', 'pants', 'boots');
|
||||||
|
foreach ($char_equip as $key => $value)
|
||||||
|
{
|
||||||
|
if ($item_id == $value)
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*Показ строки персонажа*/
|
||||||
|
function getLogin ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'login', 'level', 'orden', 'clan', 'clan_short', 'rang');
|
||||||
|
list($login, $level, $orden, $clan_f, $clan_s, $rang) = array_values($char_db);
|
||||||
|
switch ($orden)
|
||||||
|
{
|
||||||
|
case 1: $orden_img = "<img src='img/orden/pal/$rang.gif' width='12' height='15' border='0' title='Белое братство'>"; break;
|
||||||
|
case 2: $orden_img = "<img src='img/orden/arm/$rang.gif' width='12' height='15' border='0' title='Темное братство'>"; break;
|
||||||
|
case 3: $orden_img = "<img src='img/orden/3.gif' width='12' height='15' border='0' title='Нейтральное братство'>"; break;
|
||||||
|
case 4: $orden_img = "<img src='img/orden/4.gif' width='12' height='15' border='0' title='Алхимик'>"; break;
|
||||||
|
case 5: $orden_img = "<img src='img/orden/5.gif' width='12' height='15' border='0' title='Хаос'>"; break;
|
||||||
|
default: $orden_img = ""; break;
|
||||||
|
}
|
||||||
|
$clan = ($clan_s != '') ?"<img src='img/clan/$clan_s.gif' border='0' title='$clan_f'>" :"";
|
||||||
|
$login_link = str_replace(" ", "%20", $login);
|
||||||
|
$login_info = "<a href='info.php?log=$login_link' target='_blank'><img src='img/inf.gif' border='0' title='Инф. о $login'></a>";
|
||||||
|
return "<img src='img/icon/lock3.gif' border='0' onclick=\"window.opener.top.AddToPrivate('$login',true);\" style='cursor: pointer;'>$orden_img$clan<b>$login</b> [$level]$login_info";
|
||||||
|
}
|
||||||
|
/*Показ дополнительной информации по персонажу*/
|
||||||
|
function showInfDetail ()
|
||||||
|
{
|
||||||
|
$char_db = $this->getChar('char_db', 'dealer', 'sex', 'block', 'block_reason', 'chat_shut', 'prison', 'prison_reason');
|
||||||
|
$lang = $this->getLang();
|
||||||
|
echo ($char_db['dealer']) ?"<img src='img/alchemy1.gif' alt='Регистрированный алхимик. Имеет право продавать услуги Анти Бойцовского Клуба.' height='24' width='35'><br>" :""; /*Дилер*/
|
||||||
|
echo ($char_db['block']) ?"Причина блока :<br><b><font class='private'>$char_db[block_reason]</font></b><br>" :""; /*Блок*/
|
||||||
|
echo ($char_db['chat_shut']) ?"<img src='img/icon/sleeps$char_db[sex].gif'><small>На персонажа наложено заклятие молчания. Будет молчать еще ".getFormatedTime($char_db['chat_shut'])."</small><br>" :""; /*Молчанка*/
|
||||||
|
echo ($char_db['prison']) ?"<img src='img/icon/jail.png'><small>В заточении еще ".getFormatedTime($char_db['prison'])."</small><br><br>Сообщение от юстициары:<br><b><font class='private'>$char_db[prison_reason]</font></b><br>" :""; /*Тюрьма*/
|
||||||
|
/*Травма*/
|
||||||
|
$travms = $this->db->select("SELECT *
|
||||||
|
FROM `character_travms` AS `c`
|
||||||
|
LEFT JOIN `player_travms` AS `i`
|
||||||
|
ON `c`.`travm_id` = `i`.`id`
|
||||||
|
WHERE `c`.`guid` = ?d", $this->guid);
|
||||||
|
foreach ($travms as $travm)
|
||||||
|
{
|
||||||
|
$format = '<br><img src="img/icon/travma2.gif"><small>%1$s</small>';
|
||||||
|
switch ($travm['type'])
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if ($travm['id'] == 100)
|
||||||
|
printf($format, "Персонаж ослаблен из-за смерти в бою, еще ".getFormatedTime($travm['end_time']));
|
||||||
|
else if ($travm['id'] == 1)
|
||||||
|
printf($format, "<span alt='Не может драться, перемещаться и передавать предметы'>У персонажа тяжелая травма, <b>\"$travm[name]\"</b> еще ".getFormatedTime($travm['end_time'])."</span>");
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$alt = ($travm['power'] == 5) ?"Не может драться, перемещаться и передавать предметы" :"Ослаблены характеристики";
|
||||||
|
printf($format, "<span alt='$alt'>У персонажа ".lowercase($lang['travm_p_'.$travm['power']])." - <b>\"$travm[name]\"</b> еще ".getFormatedTime($travm['end_time'])."</span>");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$format = '<br><img src="img/icon/mtravma2.gif"><small>%1$s</small>';
|
||||||
|
printf($format, "У персонажа магическая травма, еще ".getFormatedTime($travm['end_time']));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Получение информации о городе*/
|
||||||
|
function getCity ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$args_num = func_num_args();
|
||||||
|
$city = $args[0];
|
||||||
|
unset($args[0]);
|
||||||
|
|
||||||
|
if ($args_num == 2)
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM `server_cities` WHERE `city` = ?s", $args, $city);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM `server_cities` WHERE `city` = ?s", $args, $city);
|
||||||
|
}
|
||||||
|
/*Получение информации о комнате*/
|
||||||
|
function getRoom ()
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$args_num = func_num_args();
|
||||||
|
$room = $args[0];
|
||||||
|
$city = $this->getCity($args[1], 'flag');
|
||||||
|
unset($args[0], $args[1]);
|
||||||
|
|
||||||
|
if ($args_num == 3)
|
||||||
|
return $this->db->selectCell("SELECT ?# FROM `city_rooms` WHERE `room` = ?s and `city` & ?d", $args, $room, $city);
|
||||||
|
else
|
||||||
|
return $this->db->selectRow("SELECT ?# FROM `city_rooms` WHERE `room` = ?s and `city` & ?d", $args, $room, $city);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Вывод js скрипта*/
|
||||||
|
function echoScript ($str, $die = false)
|
||||||
|
{
|
||||||
|
echo "<script>$str</script>";
|
||||||
|
if ($die)
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
/*Преобразование массива в переменные*/
|
||||||
|
function ArrToVar ($arr, $pref = '')
|
||||||
|
{
|
||||||
|
foreach ($arr as $key => $value)
|
||||||
|
{
|
||||||
|
$var = (empty($pref)) ?$key :$pref.$key;
|
||||||
|
global ${$var};
|
||||||
|
${$var} = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Получение времени восстановления здоровья*/
|
||||||
|
function getCureValue ($now, $all, $regen, &$value)
|
||||||
|
{
|
||||||
|
$value = intval(30000*($all-$now)/($all*$regen)) + time();
|
||||||
|
}
|
||||||
|
/*Получение количества восстановленного здоровья*/
|
||||||
|
function getRegeneratedValue ($all, $cure, $regen)
|
||||||
|
{
|
||||||
|
return ($all - intval(0.0001*$all*$cure*$regen/3));
|
||||||
|
}
|
||||||
|
/*Получение отформатированного времени*/
|
||||||
|
function getFormatedTime ($timestamp)
|
||||||
|
{
|
||||||
|
if (!$timestamp)
|
||||||
|
return "0 сек.";
|
||||||
|
|
||||||
|
if (!is_numeric($timestamp))
|
||||||
|
$timestamp = time();
|
||||||
|
|
||||||
|
$seconds = ($timestamp > time()) ?$timestamp - time() :time() - $timestamp;
|
||||||
|
$seconds = ($seconds > 0) ?$seconds :0;
|
||||||
|
$y = intval($seconds / 31536000);
|
||||||
|
$seconds %= 31536000;
|
||||||
|
$m = intval($seconds / 2592000);
|
||||||
|
$seconds %= 2592000;
|
||||||
|
$d = intval($seconds / 86400);
|
||||||
|
$seconds %= 86400;
|
||||||
|
$h = intval($seconds / 3600);
|
||||||
|
$seconds %= 3600;
|
||||||
|
$n = intval($seconds / 60);
|
||||||
|
$seconds %= 60;
|
||||||
|
$s = $seconds;
|
||||||
|
|
||||||
|
if ($y && $m == 0) return "$y г.";
|
||||||
|
if ($y) return "$y г. $m мес.";
|
||||||
|
if ($m && $d == 0) return "$m мес.";
|
||||||
|
if ($m) return "$m мес. $d дн.";
|
||||||
|
if ($d && $h == 0) return "$d дн.";
|
||||||
|
if ($d) return "$d дн. $h ч.";
|
||||||
|
if ($h && $n == 0) return "$h ч.";
|
||||||
|
if ($h) return "$h ч. $n мин.";
|
||||||
|
if ($n && $s == 0) return "$n мин.";
|
||||||
|
if ($n) return "$n мин. $s сек.";
|
||||||
|
return "$s сек.";
|
||||||
|
}
|
||||||
|
/*Получение цвета улучшения*/
|
||||||
|
function getColor ($cur, $add)
|
||||||
|
{
|
||||||
|
$diff = ($add > 0) ?(1 - (($cur - $add) / $cur)) * 255 :($add < 0) ?(1 -(($cur - $add*(-1)) / $cur)) * 255 :-50;
|
||||||
|
$diff = abs (intval ($diff)) + 50;
|
||||||
|
|
||||||
|
if ($diff > 150 && $add > 0) return "#00AA00";
|
||||||
|
if ($diff > 150 && $add < 0) return "#AA0000";
|
||||||
|
if ($add > 0) return "RGB(0, $diff, 0)";
|
||||||
|
if ($add < 0) return "RGB($diff, 0, 0)";
|
||||||
|
return "RGB(0, 0, 0)";
|
||||||
|
}
|
||||||
|
/*Получение разбивки статов*/
|
||||||
|
function getBraces ($stat, $added_stat, $type = '')
|
||||||
|
{
|
||||||
|
if ($added_stat > 0) return " <small>(<font id='inst_$type'>".($stat-$added_stat)."</font> + $added_stat)</small>";
|
||||||
|
if ($added_stat < 0) return " <small>(<font id='inst_$type'>".($stat-$added_stat)."</font> - ".abs($added_stat).")</small>";
|
||||||
|
}
|
||||||
|
/*Error log function*/
|
||||||
|
function databaseErrorHandler ($message, $info)
|
||||||
|
{
|
||||||
|
if (!error_reporting())
|
||||||
|
return;
|
||||||
|
|
||||||
|
echo "<table class = report>";
|
||||||
|
echo "<tbody>";
|
||||||
|
echo "<tr><td>SQL Error: $message<br><pre>".print_r($info, true)."</pre></td></tr>";
|
||||||
|
echo "</tbody>";
|
||||||
|
echo "</table>";
|
||||||
|
}
|
||||||
|
/*Получение переменной GET, POST и COOKIE*/
|
||||||
|
function getVar ($var, $stand = '', $flags = 3)
|
||||||
|
{
|
||||||
|
if (isset($_GET[$var]) && ($flags & 1))
|
||||||
|
$value = $_GET[$var];
|
||||||
|
else if (isset($_POST[$var]) && ($flags & 2))
|
||||||
|
$value = $_POST[$var];
|
||||||
|
else if (isset($_COOKIE[$var]) && ($flags & 4))
|
||||||
|
$value = $_COOKIE[$var];
|
||||||
|
else
|
||||||
|
return $stand;
|
||||||
|
|
||||||
|
if (is_numeric($stand) && is_numeric($value)) return ($flags & 8) ?rdf($value) :$value;
|
||||||
|
else if (!is_numeric($stand)) return htmlspecialchars($value);
|
||||||
|
else return $stand;
|
||||||
|
}
|
||||||
|
/*Получение место перехода*/
|
||||||
|
function toIndex ()
|
||||||
|
{
|
||||||
|
echoScript("location.href = 'index.php';", true);
|
||||||
|
}
|
||||||
|
/*Проверка существования и правильного формата числа*/
|
||||||
|
function checki ($int)
|
||||||
|
{
|
||||||
|
return (!is_numeric($int) || $int == 0);
|
||||||
|
}
|
||||||
|
/*Получение названия таблицы*/
|
||||||
|
function getTable ($name)
|
||||||
|
{
|
||||||
|
switch ($name)
|
||||||
|
{
|
||||||
|
case 'char_db': return 'characters';
|
||||||
|
case 'char_stats': return 'character_stats';
|
||||||
|
case 'char_info': return 'character_info';
|
||||||
|
case 'char_equip': return 'character_equip';
|
||||||
|
case 'char_bars': return 'character_bars';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Преобразование русско-язычной строки в нижний и верхний регистр*/
|
||||||
|
define('UPCASE', 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIKLMNOPQRSTUVWXYZ');
|
||||||
|
define('LOCASE', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghiklmnopqrstuvwxyz');
|
||||||
|
|
||||||
|
function mb_str_split ($str)
|
||||||
|
{
|
||||||
|
preg_match_all('/.{1}|[^\x00]{1}$/us', $str, $ar);
|
||||||
|
return $ar[0];
|
||||||
|
}
|
||||||
|
function mb_strtr ($str, $from, $to)
|
||||||
|
{
|
||||||
|
return str_replace(mb_str_split($from), mb_str_split($to), $str);
|
||||||
|
}
|
||||||
|
function lowercase ($arg = '')
|
||||||
|
{
|
||||||
|
return mb_strtr($arg, UPCASE, LOCASE);
|
||||||
|
}
|
||||||
|
function uppercase ($arg = '')
|
||||||
|
{
|
||||||
|
return mb_strtr($arg, LOCASE, UPCASE);
|
||||||
|
}
|
||||||
|
/*Определение знака зодиака (Неиспользуется)
|
||||||
|
function getZodiac ($birthday)
|
||||||
|
{
|
||||||
|
$b = split('\.', $birthday);
|
||||||
|
$zodiac = array('1.3.21.4.20', '2.4.21.5.20', '3.5.21.6.20', '4.6.21.7.22', '5.7.23.8.22', '6.8.23.9.23', '7.9.24.10.23', '8.10.24.11.21', '9.11.22.12.21', '10.12.22.1.19', '11.1.20.2.18', '12.2.19.3.20');
|
||||||
|
foreach ($zodiac as $value)
|
||||||
|
{
|
||||||
|
$d = split('\.', $value);
|
||||||
|
|
||||||
|
if (($b[1] == $d[1] && $b[0] >= $d[2] && $b[0] <= 31) || ($b[1] == $d[3] && $b[0] >= 1 && $b[0] <= $d[4]))
|
||||||
|
return $d[0];
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
/*Вывод ошибки*/
|
||||||
|
function error ($text)
|
||||||
|
{
|
||||||
|
echoScript("$('title').html('Произошла ошибка');");
|
||||||
|
echoScript("$('link[rel=StyleSheet]').remove();");
|
||||||
|
die("Произошла ошибка:<br><pre>$text</pre><a href='javascript:window.history.go(-1);'><b>Назад</b></a><hr><p align='right'>(c) <a href='../'>Анти Бойцовский клуб</a></p>");
|
||||||
|
}
|
||||||
|
?>
|
53
engline/secpic.php
Normal file
53
engline/secpic.php
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
|
||||||
|
$width = 157; //Øèðèíà èçîáðàæåíèÿ
|
||||||
|
$height = 49; //Âûñîòà èçîáðàæåíèÿ
|
||||||
|
$font_size = 13; //Ðàçìåð øðèôòà
|
||||||
|
$let_amount = 6; //Êîëè÷åñòâî ñèìâîëîâ, êîòîðûå íóæíî íàáðàòü
|
||||||
|
$fon_let_amount = 30; //Êîëè÷åñòâî ñèìâîëîâ, êîòîðûå íàõîäÿòñÿ íà ôîíå
|
||||||
|
$path_fonts = '../fonts/'; //Ïóòü ê øðèôòàì
|
||||||
|
|
||||||
|
|
||||||
|
$letters = array('0','1','2','3','4','5','6','7','9');
|
||||||
|
$colors = array('0');
|
||||||
|
|
||||||
|
$src = imagecreatetruecolor($width, $height);
|
||||||
|
$fon = imagecolorallocate($src, 200, 200, 200);
|
||||||
|
imagefill($src, 0, 0, $fon);
|
||||||
|
|
||||||
|
$fonts = array();
|
||||||
|
$dir = opendir($path_fonts);
|
||||||
|
while($fontName = readdir($dir))
|
||||||
|
{
|
||||||
|
if($fontName != "." && $fontName != "..")
|
||||||
|
$fonts[] = $fontName;
|
||||||
|
}
|
||||||
|
closedir($dir);
|
||||||
|
|
||||||
|
for ($i = 0; $i<$fon_let_amount; $i++)
|
||||||
|
{
|
||||||
|
$color = imagecolorallocatealpha($src, rand(0,255), rand(0,255), rand(0,255), 100);
|
||||||
|
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||||
|
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||||
|
$size = rand($font_size-2,$font_size+2);
|
||||||
|
imagettftext($src, $size, rand(0,45), rand($width*0.1,$width-$width*0.1), rand($height*0.2,$height), $color, $font, $letter);
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0; $i<$let_amount; $i++)
|
||||||
|
{
|
||||||
|
$color = imagecolorallocatealpha($src, $colors[rand(0,sizeof($colors)-1)], $colors[rand(0,sizeof($colors)-1)], $colors[rand(0,sizeof($colors)-1)], rand(0,50));
|
||||||
|
$font = $path_fonts.$fonts[rand(0,sizeof($fonts)-1)];
|
||||||
|
$letter = $letters[rand(0,sizeof($letters)-1)];
|
||||||
|
$size = rand($font_size*2.1-2, $font_size*2.1+2);
|
||||||
|
$x = ($i == 0) ?$font_size + rand(5,10) :$x + $font_size + rand(-5,10);
|
||||||
|
$y = (($height*2)/3) + rand(-5,15);
|
||||||
|
$cod[] = $letter;
|
||||||
|
imagettftext($src, $size, rand(0,15), $x, $y, $color, $font, $letter);
|
||||||
|
}
|
||||||
|
|
||||||
|
$_SESSION['secpic'] = implode('', $cod);
|
||||||
|
|
||||||
|
header("Content-type: image/gif");
|
||||||
|
imagegif($src);
|
||||||
|
?>
|
7
engline/token/bootstrap.php
Normal file
7
engline/token/bootstrap.php
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?
|
||||||
|
if (!function_exists("getallheaders"))
|
||||||
|
include(dirname(__FILE__)."/headers.function.php");
|
||||||
|
|
||||||
|
require_once(dirname(__FILE__)."/lpg.headers.function.php");
|
||||||
|
require_once(dirname(__FILE__)."/lpg.csrf.token.php");
|
||||||
|
?>
|
12
engline/token/headers.function.php
Normal file
12
engline/token/headers.function.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?
|
||||||
|
function getallheaders ()
|
||||||
|
{
|
||||||
|
$headers = array();
|
||||||
|
foreach ($_SERVER as $h => $v)
|
||||||
|
{
|
||||||
|
if (preg_match_all('/HTTP_(.+)/', $h, $hp))
|
||||||
|
$headers[$hp[1][0]] = $v;
|
||||||
|
}
|
||||||
|
return $headers;
|
||||||
|
}
|
||||||
|
?>
|
27
engline/token/lpg.csrf.token.php
Normal file
27
engline/token/lpg.csrf.token.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?
|
||||||
|
function create_token ($token_key)
|
||||||
|
{
|
||||||
|
$_SESSION['token'] = md5(time().$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].$token_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
function lpg_csrf_token ($token_key, $expire_time = 5)
|
||||||
|
{
|
||||||
|
$headers = lpg_getallheaders();
|
||||||
|
|
||||||
|
if (isset($headers['X-CSRF-TOKEN']) && isset($headers['X-REQUESTED-WITH']) && ($headers['X-REQUESTED-WITH'] == 'XMLHttpRequest'))
|
||||||
|
{
|
||||||
|
$token = trim($headers['X-CSRF-TOKEN']);
|
||||||
|
if ($token == '' || $token != $_SESSION['token'])
|
||||||
|
{
|
||||||
|
error_log("[LPG_CSRF_TOKEN] Warning: CSRF Attempt! Ajax attack from site: ".(isset($_SERVER['HTTP_REFERER']) ?$_SERVER['HTTP_REFERER'] :'This site!'));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error_log("[LPG_CSRF_TOKEN] Warning: CSRF Attempt! Ajax attack from site: ".(isset($_SERVER['HTTP_REFERER']) ?$_SERVER['HTTP_REFERER'] :'This site!'));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
?>
|
12
engline/token/lpg.headers.function.php
Normal file
12
engline/token/lpg.headers.function.php
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<?
|
||||||
|
function lpg_getallheaders ()
|
||||||
|
{
|
||||||
|
$arr = getallheaders();
|
||||||
|
$up_arr = array();
|
||||||
|
|
||||||
|
foreach ($arr as $key => $value)
|
||||||
|
$up_arr[str_replace('_', '-', strtoupper($key))] = $value;
|
||||||
|
|
||||||
|
return $up_arr;
|
||||||
|
}
|
||||||
|
?>
|
78
enter.php
Normal file
78
enter.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("engline/config.php");
|
||||||
|
include("engline/dbsimple/Generic.php");
|
||||||
|
include("engline/functions/functions.php");
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$login = getVar('login', '', 2);
|
||||||
|
$password = getVar('password', '', 2);
|
||||||
|
|
||||||
|
$enter = $adb->selectCell("SELECT `login` FROM `server_info`;");
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="Content-Language" content="ru" />
|
||||||
|
<title>Анти Бойцовский Клуб</title>
|
||||||
|
<link rel="SHORTCUT ICON" href="img/favicon.ico" />
|
||||||
|
<script src="scripts/jquery.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
if (!(/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)))
|
||||||
|
{
|
||||||
|
alert('Поддерживается только браузер Mozilla Firefox');
|
||||||
|
location.href = 'index.php';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#ffffff">
|
||||||
|
<?
|
||||||
|
if (!$enter)
|
||||||
|
error('Сервер оффлайн');
|
||||||
|
else if (empty($login))
|
||||||
|
error('Вы не ввели логин');
|
||||||
|
else if (empty($password))
|
||||||
|
error('Укажите пароль');
|
||||||
|
|
||||||
|
$char_info = $adb->selectRow("SELECT `guid`,
|
||||||
|
`password`,
|
||||||
|
`city`,
|
||||||
|
`block`,
|
||||||
|
`room`,
|
||||||
|
`city`
|
||||||
|
FROM `characters`
|
||||||
|
WHERE `login` = ?s", $login) or error("Логин \"$login\" не найден в базе.");
|
||||||
|
|
||||||
|
$guid = $char_info['guid'];
|
||||||
|
|
||||||
|
$char = Char::initialization($guid, $adb);
|
||||||
|
|
||||||
|
if (SHA1($guid.':'.$password) != $char_info['password'])
|
||||||
|
{
|
||||||
|
$char->history->Auth(0, $char_info['city'], 'wrong_password');
|
||||||
|
error("Неверный пароль для \"$login\". Введите логин/пароль на <a href='index.php'>титульной странице");
|
||||||
|
}
|
||||||
|
else if ($char_info['block'])
|
||||||
|
{
|
||||||
|
$char->history->Auth(0, $char_info['city'], 'blocked');
|
||||||
|
error("Внимание!!! Персонаж $login заблокирован!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (checks('guid'))
|
||||||
|
deleteSession();
|
||||||
|
|
||||||
|
$adb->query("DELETE FROM `online` WHERE `guid` = ?d", $guid);
|
||||||
|
$adb->query("INSERT INTO `online` (`guid`, `login_display`, `sid`, `city`, `room`, `last_time`)
|
||||||
|
VALUES (?d, ?s, ?s, ?s, ?s, ?d);", $guid, $login, session_id(), $char_info['city'], $char_info['room'], time());
|
||||||
|
$char->setChar('char_db', array('last_go' => time()));
|
||||||
|
$_SESSION['guid'] = $guid;
|
||||||
|
$char->history->Auth(1, $char_info['city']);
|
||||||
|
echoScript("location.href = 'game.php';");
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
fonts/cour.ttf
Normal file
BIN
fonts/cour.ttf
Normal file
Binary file not shown.
156
forum/index.php
Normal file
156
forum/index.php
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
<?
|
||||||
|
session_start();
|
||||||
|
define('AntiBK', true);
|
||||||
|
|
||||||
|
include("../engline/config.php");
|
||||||
|
include("../engline/dbsimple/Generic.php");
|
||||||
|
include("../engline/functions/functions.php");
|
||||||
|
|
||||||
|
$adb = DbSimple_Generic::connect($database['adb']);
|
||||||
|
$adb->query("SET NAMES ? ",$database['db_encoding']);
|
||||||
|
$adb->setErrorHandler("databaseErrorHandler");
|
||||||
|
|
||||||
|
$lang = getVar('lang', 'ru', 5);
|
||||||
|
$lang = ($lang == 'ru' || $lang == 'en') ?$lang :'ru';
|
||||||
|
$cat = getVar('cat', 1, 5);
|
||||||
|
$cat = ($adb->selectRow("SELECT `id`, `main`, `name`, `text` FROM ?# WHERE `id` = ?d", "forum_menu_$lang", $cat)) ?$cat :1;
|
||||||
|
$cat = ($cat == 2 && $lang == 'ru') ?28 :$cat;
|
||||||
|
setCookie('lang', $lang, time() + 3600);
|
||||||
|
setCookie('cat', $cat, time() + 3600);
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="Content-Language" content="<?echo $lang;?>" />
|
||||||
|
<title>Анти Бойцовский Клуб</title>
|
||||||
|
<link rel="SHORTCUT ICON" href="../img/favicon.ico" />
|
||||||
|
<link href="../styles/main.css" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="../styles/forum.css" rel="stylesheet" type="text/css" />
|
||||||
|
<script src="../scripts/jquery.js" type="text/javascript"></script>
|
||||||
|
<script src="../scripts/forum.js" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
<body bgcolor="#3D3D3B" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
|
||||||
|
<?
|
||||||
|
$forum_menu = "forum_menu_$lang";
|
||||||
|
$forum_topics = "forum_topics_$lang";
|
||||||
|
$language = ($lang == "en") ?"<a href='?lang=ru&cat=1'>RU</a> | EN" :"RU | <a href='?lang=en&cat=1'>EN</a>";
|
||||||
|
|
||||||
|
$lang = $adb->selectCol("SELECT `key` AS ARRAY_KEY, ?# FROM `forum_language`;", $lang);
|
||||||
|
$cat = $adb->selectRow("SELECT `id`, `main`, `prev`, `name`, `text` FROM ?# WHERE `id` = ?d", $forum_menu, $cat);
|
||||||
|
|
||||||
|
if (isset($_SESSION['guid']))
|
||||||
|
$char = Char::initialization($_SESSION['guid'], $adb);
|
||||||
|
?>
|
||||||
|
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
|
||||||
|
<thead><tr><td background="../img/forum/sitebk_02.jpg" align="center"><img src="../img/forum/sitebk_03ru.gif" width="194" height="135"></td></tr></thead>
|
||||||
|
<tfoot>
|
||||||
|
<tr><td width="100%" height="13" background="../img/forum/sitebk_07.jpg"></td></tr>
|
||||||
|
<tr><td width="100%" bgColor="#000" height="20" align="center" class="copyright"><?echo $config['copyright'];?></td></tr>
|
||||||
|
</tfoot>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td align="center" height="90%" valign="top">
|
||||||
|
<table width="96%" height="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#f2e5b1">
|
||||||
|
<tr valign="top">
|
||||||
|
<td width="29" align="right" valign="top" style="background: url(../img/forum/n21_08_1.jpg) repeat-y;"><img src="../img/forum/fr_08.jpg"></td>
|
||||||
|
<? if (!getVar('smile', 0, 1)) {?>
|
||||||
|
<td width="200">
|
||||||
|
<img src="../img/forum/fr_04.jpg"><br>
|
||||||
|
<?echo (isset($char)) ?$char->getLogin() :$lang['nologin'];?><br>
|
||||||
|
<?echo "$lang[lang]: ".$language;?><br><br>
|
||||||
|
<b><span style="color: #8f0000; font-family: arial; font-size: 10pt;"><?echo $lang['conf'];?></span></b><br>
|
||||||
|
<div style="background: url(../img/forum/ram12_34.gif); height: 11px; width: 100%;">
|
||||||
|
<div style="background: url(../img/forum/ram12_33.gif) no-repeat left top;" width="12" height="11">
|
||||||
|
<div align="right"><img src="../img/forum/ram12_35.gif" width="13" height="11"></div></div></div>
|
||||||
|
<? $cats = $adb->select("SELECT `id`, `name` FROM ?# WHERE `main` = '0';", $forum_menu);
|
||||||
|
foreach ($cats as $category)
|
||||||
|
{
|
||||||
|
echo "<b> <img src='../img/forum/ic_acc1.gif' width='10' height='10' title='$lang[onlyread]'> <a href='?cat=$category[id]'>$category[name]</a><br></b>";
|
||||||
|
if ($cat['id'] == $category['id'] || $cat['main'] == $category['id'])
|
||||||
|
{
|
||||||
|
$scats = $adb->select("SELECT `id`, `name` FROM ?# WHERE `prev` = ?d", $forum_menu, $category['id']);
|
||||||
|
foreach ($scats as $scat)
|
||||||
|
{
|
||||||
|
echo "<b> <img src='../img/forum/ic_acc1.gif' width='10' height='10' title='$lang[onlyread]'> <a href='?cat=$scat[id]'>$scat[name]</a><br></b>";
|
||||||
|
if ($cat['id'] == $scat['id'] || $cat['main'] == $scat['id'] || $cat['prev'] == $scat['id'])
|
||||||
|
{
|
||||||
|
$sscats = $adb->select("SELECT `id`, `name` FROM ?# WHERE `prev` = ?d", $forum_menu, $scat['id']);
|
||||||
|
foreach ($sscats as $sscat)
|
||||||
|
echo "<b> <img src='../img/forum/ic_acc1.gif' width='10' height='10' title='$lang[onlyread]'> <a href='?cat=$sscat[id]'>$sscat[name]</a><br></b>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?> <br>
|
||||||
|
<div style="background: url(../img/forum/ram12_34.gif); height: 11px; width: 100%;">
|
||||||
|
<div style="background: url(../img/forum/ram12_33.gif) no-repeat left top;" width="12" height="11">
|
||||||
|
<div align="right"><img src="../img/forum/ram12_35.gif" width="13" height="11"></div></div></div><br>
|
||||||
|
<center><a href="?smile=1"><img src="../img/forum/smiles/icon7.gif" title="<?echo $lang['smiles'];?>" width="15" height="15"></a></center><br>
|
||||||
|
</td>
|
||||||
|
<td width="70%">
|
||||||
|
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||||
|
<tr><td><br><a href="../forum"><img src="../img/forum/formz_10.gif"></a><br><br><br></td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<? echo "<h3>$lang[conf] \"$cat[name]\"</h3>"
|
||||||
|
. "<p>$cat[text]</p>"
|
||||||
|
. "<br>$lang[rss] <img src='../img/forum/rss.png' align='absmiddle'>";
|
||||||
|
?> </td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<? } else {?>
|
||||||
|
<td><img src="../img/forum/fr_04.jpg"><br></td>
|
||||||
|
<td width="75%" align="center">
|
||||||
|
<br><br><br>
|
||||||
|
<table width="100%">
|
||||||
|
<tr>
|
||||||
|
<td align="left"><h2><?echo $lang['legal'];?></h2></td>
|
||||||
|
<td align="left"><p><a href="../forum"><?echo $lang['home'];?></a><p></td>
|
||||||
|
</tr>
|
||||||
|
<tr><td colspan="2"><p><h4><?echo $lang['smilelimit'];?></h4></p> </td></tr>
|
||||||
|
</table><br>
|
||||||
|
<table cellpadding="5" cellspacing="0" class="smile_css">
|
||||||
|
<tr>
|
||||||
|
<? for ($i = 0; $i < 3; $i++)
|
||||||
|
{
|
||||||
|
echo "<td class='smile_css'> $lang[image] </td>"
|
||||||
|
. "<td class='smile_css'> $lang[text] </td>"
|
||||||
|
. "<td class='smile_css'> $lang[atext] </td>";
|
||||||
|
}
|
||||||
|
?> </tr>
|
||||||
|
<tr>
|
||||||
|
<? $smiles = $adb->select("SELECT `text`, `atext`, `img` FROM `forum_smiles`;");
|
||||||
|
$i = 0;
|
||||||
|
foreach ($smiles as $smile)
|
||||||
|
{
|
||||||
|
$i++;
|
||||||
|
echo "<td class='smile_css'><img src='../img/forum/smiles/$smile[img]' /></td>"
|
||||||
|
. "<td class='smile_css'>$smile[text]</td>"
|
||||||
|
. "<td class='smile_css'>$smile[atext]</td>";
|
||||||
|
if ($i == 3)
|
||||||
|
{
|
||||||
|
$i = 0;
|
||||||
|
echo "</tr><tr>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?> </tr></table>
|
||||||
|
<br>
|
||||||
|
<div style="background: url(../img/forum/ram12_34.gif); height: 11px; width: 100%;">
|
||||||
|
<div style="background: url(../img/forum/ram12_33.gif) no-repeat left top;" width="12" height="11">
|
||||||
|
<div align="right"><img src="../img/forum/ram12_35.gif" width="13" height="11"></div></div></div><br>
|
||||||
|
<? }?>
|
||||||
|
</td>
|
||||||
|
<td style="background: url(../img/forum/fr_15.jpg) no-repeat bottom;"><img src="../img/forum/forumru_03.jpg" border="0" valign="top"></td>
|
||||||
|
<td width="23" valign="top" background="../img/forum/nnn21_03_1.jpg"></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
345
forum/topics.php
Normal file
345
forum/topics.php
Normal file
@ -0,0 +1,345 @@
|
|||||||
|
<?
|
||||||
|
|
||||||
|
$f = addslashes($f);
|
||||||
|
$topic = addslashes($topic);
|
||||||
|
|
||||||
|
$conf=mysql_fetch_array(mysql_query("SELECT title FROM forums where name='".$f."'"));
|
||||||
|
echo"<br><center><B class=title><U>Форум :: \"".$conf['title']."\"</U></B></center><br>";
|
||||||
|
|
||||||
|
echo"<script language=JavaScript>
|
||||||
|
function ins (text) {
|
||||||
|
document.all.addtext.focus();
|
||||||
|
document.all.addtext.value+= ''+text+''; }
|
||||||
|
</script>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$topics=mysql_fetch_array(mysql_query("SELECT * FROM topics where id='$topic'"));
|
||||||
|
if (empty($topics['id'])) { $err="Указанная Вами тема не найдена!"; } else {
|
||||||
|
|
||||||
|
|
||||||
|
// Разбиваем на страницы
|
||||||
|
$numo = mysql_numrows(mysql_query("SELECT * FROM posts where top_id='$topic'")); // Число топиков в данной категории
|
||||||
|
|
||||||
|
if ($p=="" or $p=="0" or !isset($p)) { $p="1"; }
|
||||||
|
|
||||||
|
$np=15; // Число новостей на странице
|
||||||
|
|
||||||
|
$pages_count = @ceil($numo/$np); // Определяем число страниц
|
||||||
|
|
||||||
|
if (is_numeric($p)) {
|
||||||
|
if ($p>$pages_count or $p<0) $p=1; // Если страница превышает макс. число, то открываем первую
|
||||||
|
|
||||||
|
elseif ($p!="1") { $min=$np; }} else $p=1;
|
||||||
|
|
||||||
|
$l1=$p*$np-$np;
|
||||||
|
$l2=$np;
|
||||||
|
|
||||||
|
$pages = "";
|
||||||
|
|
||||||
|
for($i=1; $i<=$pages_count; $i++){
|
||||||
|
if ($p != $i) $pages .= " <a href=?topic=$topic&f=$f&p=$i>[<b>$i</b>]</a>";
|
||||||
|
else $pages .= " <b>[$i]</b>"; }
|
||||||
|
//
|
||||||
|
|
||||||
|
$icon="<img src='".$img_server."/i/forum/".$topics['icon'].".gif'>"; // Иконка топа
|
||||||
|
echo"<h4 title='Дата создания: ".$topics['date']."'>".$icon." ".$topics['title']."</h4>";
|
||||||
|
|
||||||
|
if ($p==0 || $p==1 || !isset($p)) {
|
||||||
|
|
||||||
|
echo"
|
||||||
|
<TABLE width=95% cellspacing=0 cellpadding=0 border=0>
|
||||||
|
<TR>
|
||||||
|
<TD height=20 background='i/forum/";
|
||||||
|
|
||||||
|
if ($topics['fixed'] == 1)
|
||||||
|
echo"fixed_line";
|
||||||
|
else
|
||||||
|
echo"standart_line";
|
||||||
|
|
||||||
|
echo".gif' valign=center>
|
||||||
|
<TABLE cellspacing=0 cellpadding=0 width=100%>
|
||||||
|
<TR><TD><IMG src='i/forum/1.gif' WIDTH=22 HEIGHT=1><SCRIPT>show_inf('".$topics['poster']."','".$topics['p_id']."','".$topics['p_level']."','".$topics['p_rank']."','".$topics['p_tribe']."');</SCRIPT></TD><TD WIDTH=220 align=right>";
|
||||||
|
|
||||||
|
echo"
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR HEIGHT=4><TD colspan=2><IMG SRC='i/forum/1.gif'></TD></TR>
|
||||||
|
<TR>
|
||||||
|
<TD colspan=2>";
|
||||||
|
|
||||||
|
$topics['text'] = stripslashes($topics['text']);
|
||||||
|
|
||||||
|
echo $topics['text'];
|
||||||
|
|
||||||
|
echo"</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
<HR COLOR=C1997C WIDTH=80%><BR>";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Посты юзеров
|
||||||
|
$post=mysql_query("SELECT * FROM posts where top_id='".$topic."' ORDER BY id LIMIT ".$l1.", ".$l2."");
|
||||||
|
|
||||||
|
for ($i=0; $i<mysql_num_rows($post); $i++) {
|
||||||
|
$posts=mysql_fetch_array($post);
|
||||||
|
|
||||||
|
echo"
|
||||||
|
<TABLE width=95% cellspacing=0 cellpadding=0 border=0>
|
||||||
|
<TR>
|
||||||
|
<TD height=20 background='i/forum/standart_line.gif' valign=center>
|
||||||
|
<TABLE cellspacing=0 cellpadding=0 width=100%>
|
||||||
|
<TR><TD><IMG src='i/forum/1.gif' WIDTH=22 HEIGHT=1><SCRIPT>show_inf('".$posts['poster']."','".$posts['p_id']."','".$posts['p_level']."','".$posts['p_rank']."','".$posts['p_tribe']."');</SCRIPT></TD><TD WIDTH=220 align=right>";
|
||||||
|
|
||||||
|
|
||||||
|
if (($stat['rank'] >= 11 && $stat['rank'] <= 14) || $stat['rank'] >= 99) {
|
||||||
|
echo" <small>[ <a href='?topic=".$topic."&f=".$f."&delpost=".$posts['id']."&p=".$p."'> Удалить</a> ]</small>";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
echo"
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR HEIGHT=4><TD colspan=2><IMG SRC='i/forum/1.gif'></TD></TR>
|
||||||
|
<TR>
|
||||||
|
<TD colspan=2>";
|
||||||
|
|
||||||
|
$posts['text'] = stripslashes($posts['text']);
|
||||||
|
|
||||||
|
echo $posts['text'];
|
||||||
|
|
||||||
|
echo"</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
<HR COLOR=C1997C WIDTH=80%><BR>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($pages)) echo "<center>Страницы: ".$pages."</center><BR>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo"
|
||||||
|
|
||||||
|
<table cellspacing=0 cellpadding=5 style='border-style: outset; border-width: 2' border=1 bgcolor=C1997C>
|
||||||
|
|
||||||
|
<TR HEIGHT=35>
|
||||||
|
<TD ALIGN=CENTER style='BORDER-BOTTOM: 0px'>
|
||||||
|
<font style='FONT-SIZE: 10pt'><b><U>Добавить ответ</U></b></font><br>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR>
|
||||||
|
<TD ALIGN=CENTER style='BORDER-TOP: 0px'>
|
||||||
|
|
||||||
|
<table border=0 cellspacing=0 cellpadding=0>
|
||||||
|
<form action='' method=post>
|
||||||
|
|
||||||
|
<tr><td>
|
||||||
|
|
||||||
|
<textarea cols=10 rows=10 name=addtext style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; FONT-FAMILY: Verdana, Arial, Helvetica, Tahoma, sans-serif; FONT-SIZE: 9pt; WIDTH: 550px'></textarea></td><td valign=center align=center WIDTH=45>
|
||||||
|
|
||||||
|
<img src='i/forum/bold.gif' onclick=\"ins('<b></b>');\" style='CURSOR: Hand' alt='Жирный'><br><br>
|
||||||
|
<img src='i/forum/italic.gif' onclick=\"ins('<i></i>');\" style='CURSOR: Hand' alt='Курсив'><br><br>
|
||||||
|
<img src='i/forum/underline.gif' onclick=\"ins('<u></u>');\" style='CURSOR: Hand' alt='Подчёркнутый'>
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
|
||||||
|
<tr><td>
|
||||||
|
<input type=submit name=add class=input value=\"Добавить ответ\" style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; border-style: outset; border-width: 2; WIDTH: 273px'>
|
||||||
|
<input type=reset class=input value='Очистить' style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; border-style: outset; border-width: 2; WIDTH: 274px'>
|
||||||
|
</td></tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
<BR>
|
||||||
|
";
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
$f = addslashes($f);
|
||||||
|
|
||||||
|
|
||||||
|
$numo = mysql_numrows(mysql_query("SELECT * FROM topics WHERE cat='".$f."'")); // Число топиков в данной категории
|
||||||
|
|
||||||
|
$np=10; // Число новостей на странице
|
||||||
|
$pages_count = @ceil($numo/$np); // Определяем число страниц
|
||||||
|
|
||||||
|
if (is_numeric($p))
|
||||||
|
{
|
||||||
|
if ($p>$pages_count) $p=1; // Если страница превышает макс. число, то открываем первую
|
||||||
|
if ($p=="" or $p=="0") { $p="1"; }
|
||||||
|
elseif ($p!="1") { $min=$np; }} else $p=1;
|
||||||
|
|
||||||
|
|
||||||
|
$l1=$p*$np-$np;
|
||||||
|
$l2=$np;
|
||||||
|
|
||||||
|
$pages = "";
|
||||||
|
|
||||||
|
for($i=1; $i<=$pages_count; $i++){
|
||||||
|
if ($p != $i) $pages .= " <a href=?f=".$f."&p=".$i.">[".$i."]</a>";
|
||||||
|
else $pages .= " <b>[$i]</b>"; }
|
||||||
|
//
|
||||||
|
|
||||||
|
$conf=mysql_fetch_array(mysql_query("SELECT title FROM forums where name='".$f."'"));
|
||||||
|
echo"<br><center><B class=title><U>Форум :: \"".$conf['title']."\"</U></B></center><br>";
|
||||||
|
|
||||||
|
echo"<script language=JavaScript>
|
||||||
|
function ins (text) {
|
||||||
|
document.all.addtext.focus();
|
||||||
|
document.all.addtext.value+= ''+text+''; }
|
||||||
|
</script>";
|
||||||
|
|
||||||
|
$topic=mysql_query("SELECT * FROM topics where cat='".$f."' ORDER BY fixed DESC, last_update DESC limit ".$l1.",".$l2."");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for ($i=0; $i<mysql_num_rows($topic); $i++) {
|
||||||
|
$topics=mysql_fetch_array($topic);
|
||||||
|
|
||||||
|
echo"
|
||||||
|
<TABLE width=95% cellspacing=0 cellpadding=0 border=0>
|
||||||
|
<TR>
|
||||||
|
<TD height=20 background='i/forum/";
|
||||||
|
|
||||||
|
if ($topics['fixed'] == 1)
|
||||||
|
echo"fixed_line";
|
||||||
|
else
|
||||||
|
echo"standart_line";
|
||||||
|
|
||||||
|
echo".gif' valign=center>
|
||||||
|
<TABLE cellspacing=0 cellpadding=0 width=100%>
|
||||||
|
<TR><TD><IMG src='i/forum/1.gif' WIDTH=22 HEIGHT=1><a href='?topic=".$topics['id']."&f=".$f."' title='Дата создания: ".$topics['date']."'>".$topics['title']."</a> - [ <SCRIPT>show_inf('".$topics['poster']."','".$topics['p_id']."','".$topics['p_level']."','".$topics['p_rank']."','".$topics['p_tribe']."');</SCRIPT> ] - <b>Ответов:</b> ".mysql_numrows(mysql_query("SELECT * FROM posts where top_id='$topics[id]'"))."</TD><TD WIDTH=220 align=right>";
|
||||||
|
|
||||||
|
|
||||||
|
if (($stat['rank'] >= 11 && $stat['rank'] <= 14) || $stat['rank'] >= 99) {
|
||||||
|
echo" <small>[ ";
|
||||||
|
|
||||||
|
if ($topics['fixed'] == 1)
|
||||||
|
echo" <a href='?f=".$f."&unfix=".$topics['id']."&".$now."'><small>Снять прикрепление</small></a>";
|
||||||
|
else
|
||||||
|
echo" <a href='?f=".$f."&fix=".$topics['id']."&".$now."'><small>Прикрепить</small></a>";
|
||||||
|
|
||||||
|
echo" | <a href='?f=".$f."&deltop=".$topics['id']."'><small>Удалить</small></a>";
|
||||||
|
|
||||||
|
echo" ]</small>";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
echo"
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
<TR HEIGHT=4><TD colspan=2><IMG SRC='i/forum/1.gif'></TD></TR>
|
||||||
|
<TR>
|
||||||
|
<TD colspan=2>";
|
||||||
|
|
||||||
|
$topics['text'] = HtmlSpecialChars($topics['text']);
|
||||||
|
|
||||||
|
$topics[text]=str_replace("<b>","",$topics[text]);
|
||||||
|
$topics[text]=str_replace("</b>","",$topics[text]);
|
||||||
|
|
||||||
|
$topics[text]=str_replace("<i>","",$topics[text]);
|
||||||
|
$topics[text]=str_replace("</i>","",$topics[text]);
|
||||||
|
|
||||||
|
$topics[text]=str_replace("<u>","",$topics[text]);
|
||||||
|
$topics[text]=str_replace("</u>","",$topics[text]);
|
||||||
|
|
||||||
|
$topics[text]=str_replace("\n","",$topics[text]);
|
||||||
|
$topics[text]=str_replace("<br>","",$topics[text]);
|
||||||
|
|
||||||
|
for ($j=0; $j<180; $j++) {
|
||||||
|
echo $topics['text'][$j];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($topics['text'][$j]))
|
||||||
|
echo "...";
|
||||||
|
else
|
||||||
|
echo"";
|
||||||
|
|
||||||
|
echo"</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
|
||||||
|
<HR COLOR=C1997C WIDTH=80%><BR>";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (!empty($pages)) echo "<center>Страницы: ".$pages."</center><BR>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
echo"
|
||||||
|
|
||||||
|
<table cellspacing=0 cellpadding=5 style='border-style: outset; border-width: 2' border=1 bgcolor=C1997C>
|
||||||
|
|
||||||
|
<TR HEIGHT=35>
|
||||||
|
<TD ALIGN=CENTER style='BORDER-BOTTOM: 0px'>
|
||||||
|
<font style='FONT-SIZE: 10pt'><b><U>Добавить свой вопрос в форум</U></b></font><br>
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
|
||||||
|
<TR>
|
||||||
|
<TD ALIGN=CENTER style='BORDER-TOP: 0px'>
|
||||||
|
|
||||||
|
<table border=0 cellspacing=0 cellpadding=0>
|
||||||
|
<form action='' method=post>
|
||||||
|
<tr>
|
||||||
|
<td></td><td><input name=addtitle class=input style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; FONT-FAMILY: Verdana, Arial, Helvetica, Tahoma, sans-serif; FONT-SIZE: 9pt; WIDTH: 550px'></td></tr>
|
||||||
|
|
||||||
|
<tr><td align=left valign=center WIDTH=45>
|
||||||
|
<input type=radio name=addicon value=0 checked> <img src='i/forum/0.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
<input type=radio name=addicon value=1> <img src='i/forum/1.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
<input type=radio name=addicon value=2> <img src='i/forum/2.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
<input type=radio name=addicon value=3> <img src='i/forum/3.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
<input type=radio name=addicon value=4> <img src='i/forum/4.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
<input type=radio name=addicon value=5> <img src='i/forum/5.gif' alt='Иконка для вопроса' width=15 height=15>
|
||||||
|
</td><td>
|
||||||
|
|
||||||
|
<textarea cols=10 rows=10 name=addtext style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; FONT-FAMILY: Verdana, Arial, Helvetica, Tahoma, sans-serif; FONT-SIZE: 9pt; WIDTH: 550px' ></textarea></td><td valign=center align=center WIDTH=45>
|
||||||
|
|
||||||
|
<img src='i/forum/bold.gif' onclick=\"ins('<b></b>');\" style='CURSOR: Hand' alt='Жирный'><br><br>
|
||||||
|
<img src='i/forum/italic.gif' onclick=\"ins('<i></i>');\" style='CURSOR: Hand' alt='Курсив'><br><br>
|
||||||
|
<img src='i/forum/underline.gif' onclick=\"ins('<u></u>');\" style='CURSOR: Hand' alt='Подчёркнутый'>
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
|
||||||
|
<tr><td></td><td>
|
||||||
|
<input type=submit name=addtop class=input value=\"Добавить вопрос\" style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; border-style: outset; border-width: 2; WIDTH: 273px'>
|
||||||
|
<input type=reset class=input value='Очистить' style='Background-COLOR: DAB69D; Color: 8A6246; FONT-WEIGHT: Bold; border-style: outset; border-width: 2; WIDTH: 274px'>
|
||||||
|
</td></tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</TD>
|
||||||
|
</TR>
|
||||||
|
</TABLE>
|
||||||
|
<BR>
|
||||||
|
";
|
||||||
|
*/
|
||||||
|
?>
|
35
game.php
Normal file
35
game.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta http-equiv="Content-Language" content="ru" />
|
||||||
|
<title>Анти Бойцовский Клуб</title>
|
||||||
|
<link rel="SHORTCUT ICON" href="img/favicon.ico" />
|
||||||
|
<script src="scripts/jquery.js" type="text/javascript"></script>
|
||||||
|
<script src="scripts/scripts.js" type="text/javascript"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function (){
|
||||||
|
$('[name=menu]').attr('src', 'topp.php');
|
||||||
|
$('[name=msg]').attr('src', 'msg.php');
|
||||||
|
$('[name=user]').attr('src', 'users.php');
|
||||||
|
$('[name=talk]').attr('src', 'talk.php');
|
||||||
|
$('[name=main]').attr('src', 'main.php?action=enter');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<frameset rows="35, *, 30, 5" frameborder="0" border="0" framespacing="0">
|
||||||
|
<frame name="menu" src="" target="_top" scrolling="no" noresize frameborder="0" border="0" framespacing="0" marginwidth="0" marginheight="0" />
|
||||||
|
<frameset cols="9, *, 9" frameborder="0" border="0" framespacing="0">
|
||||||
|
<frame src="styles/game_l.html" target="_top" scrolling="no" noresize frameborder="0" border="0" framespacing="0" marginwidth="0" marginheight="0" />
|
||||||
|
<frameset rows="52%, *" frameborder="1" border="3">
|
||||||
|
<frame name="main" src="" />
|
||||||
|
<frameset cols="*, 220">
|
||||||
|
<frame name="msg" src="" target="_top" scrolling="auto" frameborder="1" border="0" framespacing="0" marginwidth="3" marginheight="3" />
|
||||||
|
<frame name="user" src="" target="_blank" scrolling="auto" frameborder="0" border="0" framespacing="0" marginwidth="3" marginheight="0" />
|
||||||
|
</frameset>
|
||||||
|
</frameset>
|
||||||
|
<frame src="styles/game_r.html" target="_top" scrolling="no" noresize frameborder="0" border="0" framespacing="0" marginwidth="0" marginheight="0" />
|
||||||
|
</frameset>
|
||||||
|
<frame name="talk" src="" scrolling="no" noresize />
|
||||||
|
<frame src="styles/game_b.html" target="_top" scrolling="no" noresize frameborder="0" border="0" framespacing="0" marginwidth="0" marginheight="0" />
|
||||||
|
</frameset>
|
||||||
|
</html>
|
BIN
i/align-1.gif
(Stored with Git LFS)
Normal file
BIN
i/align-1.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align-2.gif
(Stored with Git LFS)
Normal file
BIN
i/align-2.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align.gif
(Stored with Git LFS)
Normal file
BIN
i/align.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align0.5.gif
(Stored with Git LFS)
Normal file
BIN
i/align0.5.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align0.gif
(Stored with Git LFS)
Normal file
BIN
i/align0.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.1.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.1.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.4.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.4.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.5.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.5.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.6.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.6.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.7.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.7.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.75.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.75.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.9.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.9.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.91.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.91.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.92.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.92.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align1.gif
(Stored with Git LFS)
Normal file
BIN
i/align1.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align23.gif
(Stored with Git LFS)
Normal file
BIN
i/align23.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.01.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.01.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.05.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.05.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.06.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.06.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.07.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.07.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.075.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.075.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.09.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.09.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.091.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.091.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.092.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.092.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.99.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.99.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align3.gif
(Stored with Git LFS)
Normal file
BIN
i/align3.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align50.gif
(Stored with Git LFS)
Normal file
BIN
i/align50.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align7.gif
(Stored with Git LFS)
Normal file
BIN
i/align7.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/align9.gif
(Stored with Git LFS)
Normal file
BIN
i/align9.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/artefact.gif
(Stored with Git LFS)
Normal file
BIN
i/artefact.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/b___translit_on.gif
(Stored with Git LFS)
Normal file
BIN
i/b___translit_on.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
i/back.gif
(Stored with Git LFS)
Normal file
BIN
i/back.gif
(Stored with Git LFS)
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user