2018-01-28 16:40:49 +00:00
< ? php
2018-01-29 22:05:41 +00:00
/**
* Copyright ( c ) 2018.
* Author : Igor Barkov < lopar . 4 ever @ gmail . com >
* Project name : Battles - Game
*/
2021-01-27 15:19:05 +00:00
2021-01-31 23:51:56 +00:00
use Battles\Database\DBPDO ;
2021-08-20 17:40:06 +00:00
use Battles\DressedItems ;
use Battles\InventoryItem ;
2021-01-27 15:19:05 +00:00
use Battles\Travel ;
use Battles\User ;
2021-08-27 15:55:18 +00:00
use Battles\UserStats ;
2021-01-27 15:19:05 +00:00
2018-01-28 16:40:49 +00:00
require_once 'config.php' ;
2021-08-26 16:15:47 +00:00
2021-01-29 15:21:14 +00:00
if ( empty ( $_SESSION [ 'uid' ])) {
header ( " Location: index.php " );
exit ;
2021-08-27 15:55:18 +00:00
} elseif ( empty ( $user )) {
$user = new User ( $_SESSION [ 'uid' ]);
2021-01-29 15:21:14 +00:00
}
2021-08-27 15:55:18 +00:00
if ( User :: $current -> getBlock ()) {
2020-08-30 00:09:53 +00:00
exit ( 'user blocked!' );
2018-06-24 01:18:49 +00:00
}
2020-06-23 15:13:20 +00:00
2020-10-29 23:30:05 +00:00
/*
* Проверки на соответствие скрипта и комнаты , которые были натыканы по всем файлам .
*/
$fbattleCheckFiles = [
'c_haos_in.php' ,
'c_haos.php' ,
'c_park.php' ,
'city.php' ,
'clan_castle.php' ,
'enter_cave.php' ,
'library.php' ,
'atk.php' ,
'podzem_dialog.php' ,
'post.php' ,
'shop.php' ,
'tournament.php' ,
'vxod.php' ,
'bank.php' ,
'canalizaciya,php' ,
'forest.php' ,
'main.php' ,
'repair.php' ,
'towerstamp.php' ,
'hell.php' ,
'ul_clans.php' ,
'labirint.php' ,
'akadem.php' ,
'towerin.php' ,
'user_anketa.php' ,
'zayavka.php' ,
];
//Может просто отовсюду? О _о
2021-08-25 01:44:36 +00:00
if ( User :: $current -> getBattle () && in_array ( pathinfo ( debug_backtrace ()[ 0 ][ 'file' ])[ 'basename' ], $fbattleCheckFiles )) {
2020-10-29 23:30:05 +00:00
header ( 'location: fbattle.php' );
exit ;
}
$towerinCheckFiles = [ 'main.php' , 'city.php' , 'tower.php' ];
2021-08-25 01:44:36 +00:00
if ( User :: $current -> getInTower () && in_array ( pathinfo ( debug_backtrace ()[ 0 ][ 'file' ])[ 'basename' ], $towerinCheckFiles )) {
2020-10-29 23:30:05 +00:00
header ( 'location: towerin.php' );
exit ;
}
$roomsCheck = [ 22 , 23 , 25 , 27 , 29 , 30 , 31 , 37 , 38 , 39 , 40 , 41 , 45 , 53 , 61 , 401 , 402 , 600 , 601 , 602 , 621 , 650 , 1051 , 1052 ];
// Если я в одной из этих комнат,
// [И] Имя файла который инклюдит файл с проверкой не совпадает с именем файла локации в которой я нахожусь
// [И] Номер комнаты который я пытаюсь открыть есть в списке проверяемых
2021-08-25 01:44:36 +00:00
if ( in_array ( User :: $current -> getRoom (), $roomsCheck )
&& pathinfo ( debug_backtrace ()[ 0 ][ 'file' ])[ 'basename' ] != Travel :: $roomFileName [ User :: $current -> getRoom ()]
2021-01-27 15:19:05 +00:00
&& in_array ( array_search ( pathinfo ( debug_backtrace ()[ 0 ][ 'file' ])[ 'basename' ], Travel :: $roomFileName ), $roomsCheck )) {
2020-10-29 23:30:05 +00:00
header ( 'location: main.php' );
exit ;
}
2021-08-27 15:55:18 +00:00
if ( ! empty ( $_GET [ 'goto' ]) && ! empty ( $_GET [ 'tStamp' ]) && ! empty ( $_GET [ 'vcode' ]) && $_GET [ 'vcode' ] == md5 ( sha1 ( $_GET [ 'goto' ] . $_GET [ 'tStamp' ]))) {
$query = 'update users u, online o set u.room = ?, o.room = ? where user_id = id and user_id = ?' ;
DBPDO :: $db -> execute ( $query , [ $_GET [ 'goto' ], $_GET [ 'goto' ], User :: $current -> getId ()]);
2021-08-25 01:44:36 +00:00
User :: $current -> setRoom ( intval ( $_GET [ 'goto' ]));
2020-06-23 19:34:52 +00:00
}
2018-01-28 16:40:49 +00:00
function createbot ( $bot , $login = " " )
{
$rec = db :: c () -> query ( 'SELECT `id`, `login`, `maxhp` FROM `users` WHERE `id` = "?s" LIMIT 1' , $bot ) -> fetch_assoc ();
if ( isset ( $rec [ 'id' ])) {
if ( $login ) {
$rec [ 'login' ] = $login ;
}
$botname = $rec [ 'login' ];
2018-12-10 20:16:42 +00:00
db :: c () -> query ( 'INSERT INTO `bots` (`name`, `prototype`, `hp`) VALUES ("?s", "?s", "?s")' , $botname , $bot , $rec [ 'maxhp' ]);
2018-01-28 21:22:28 +00:00
$nid = db :: c () -> getLastInsertId ();
2018-12-27 14:46:00 +00:00
return [ " id " => $nid , " login " => $botname ];
2018-01-28 16:40:49 +00:00
} else {
return false ;
}
}
2018-12-27 14:46:00 +00:00
$var_map = [
2018-01-28 16:40:49 +00:00
'cell_1' => 'Березовая роща' , 'cell_2' => 'Березовая просека' , 'cell_3' => 'Тёмный угол' , 'cell_4' => 'Мрачная опушка' ,
'cell_5' => 'Тёмное урочище' , 'cell_6' => 'Бурелом' , 'cell_7' => 'Старая ива' , 'cell_8' => 'Разнолесье' ,
'cell_9' => 'Сосновая тропа' , 'cell_10' => 'Забытая дорога' , 'cell_11' => 'Новая дорога' , 'cell_12' => 'Мщаник' ,
'cell_13' => 'Ясная поляна' , 'cell_14' => 'Заросший тракт' , 'cell_15' => 'Смутный ельник' , 'cell_16' => 'Сосновый б о р ' ,
'cell_17' => 'Тихоход' , 'cell_18' => 'Сосновый гай' , 'cell_19' => 'Смешаный лес' , 'cell_20' => 'Темная поляна' ,
'cell_21' => 'Осенний угол' , 'cell_22' => 'Грибное место' , 'cell_23' => 'Опушка' , 'cell_24' => 'Рыжий лес' ,
2020-06-23 16:57:16 +00:00
'cell_25' => 'Полесье' ,
2018-12-27 14:46:00 +00:00
];
2018-01-28 16:40:49 +00:00
2020-06-23 16:57:16 +00:00
function get_out ( $u )
{
2020-06-23 15:57:20 +00:00
$pers = db :: c () -> query ( 'SELECT * FROM users WHERE id = ?i' , $u ) -> fetch_assoc_array ();
2021-08-20 17:40:06 +00:00
DressedItems :: undressAllItems ( $pers [ 'id' ]);
2020-06-23 15:57:20 +00:00
db :: c () -> query ( 'UPDATE inventory SET owner = ?i WHERE owner = ?i' , $pers [ 'id' ], $pers [ 'id' ] + _BOTSEPARATOR_ );
2018-01-28 16:40:49 +00:00
###
2020-06-23 16:57:16 +00:00
$row = db :: c () -> query ( 'SELECT * FROM `effects` WHERE `owner` = ?i' , $pers [ 'id' ] + _BOTSEPARATOR_ );
2018-12-27 14:46:00 +00:00
$travm = [ 11 , 12 , 13 , 14 ];
2020-06-23 15:57:20 +00:00
while ( $efs = $row -> fetch_assoc ()) {
2018-07-02 15:35:25 +00:00
if ( in_array ( $efs [ 'type' ], $travm )) {
$pers [ 'sila' ] -= $efs [ 'sila' ];
$pers [ 'lovk' ] -= $efs [ 'lovk' ];
$pers [ 'inta' ] -= $efs [ 'inta' ];
$pers [ 'vinos' ] -= $efs [ 'vinos' ];
} else {
$pers [ 'sila' ] += $efs [ 'sila' ];
$pers [ 'lovk' ] += $efs [ 'lovk' ];
$pers [ 'inta' ] += $efs [ 'inta' ];
$pers [ 'vinos' ] += $efs [ 'vinos' ];
$pers [ 'maxhp' ] += $efs [ 'hp' ];
}
2018-12-10 20:16:42 +00:00
$efs [ 'owner' ] = $_SESSION [ 'uid' ];
2020-06-23 15:57:20 +00:00
//mysql_query('UPDATE `effects` SET `owner` = "' . $efs['owner'] . '" WHERE `id` = "' . $efs['id'] . '" LIMIT 1');
//mysql_query('UPDATE `users` SET `sila` = "' . $pers['sila'] . '", `lovk` = "' . $pers['lovk'] . '", `inta` = "' . $pers['inta'] . '", `vinos` = "' . $pers['vinos'] . '", `maxhp` = "' . $pers['maxhp'] . '" WHERE `id` = "' . $pers['id'] . '" LIMIT 1');
2018-01-28 16:40:49 +00:00
}
###
}
2021-08-26 14:44:14 +00:00
const _BOTSEPARATOR_ = 10000000 ;
2020-06-24 05:30:01 +00:00
2018-01-28 16:40:49 +00:00
function savecavedata ( $cavedata , $caveleader , $floor )
{
$f1 = fopen ( " cavedata/ $caveleader - $floor .dat " , " wb+ " );
flock ( $f1 , LOCK_EX );
fwrite ( $f1 , serialize ( $cavedata ));
flock ( $f1 , LOCK_UN );
fclose ( $f1 );
}
2020-06-23 20:24:15 +00:00
function GiveExp ( $id , $exp )
{
2020-06-23 19:10:00 +00:00
db :: c () -> query ( 'UPDATE users SET exp = exp + ?i WHERE id = ?i' , $exp , $id );
2018-01-28 16:40:49 +00:00
}
2018-12-27 13:18:55 +00:00
/**
2020-08-29 23:21:22 +00:00
* Генератор прогрессбара .
2020-08-30 00:09:53 +00:00
* @ param $current - Текущее значение .
* @ param $maximum - Максимальное значение .
2020-08-29 23:21:22 +00:00
* @ param string $line_color - Цвет полоски прогрессбара .
2020-08-30 00:09:53 +00:00
* @ param string $bg_color - Фон прогрессбара .
2020-08-29 23:21:22 +00:00
* @ return string
2018-12-27 13:18:55 +00:00
*/
2021-08-26 14:44:14 +00:00
function showProgressBar ( $current , $maximum , string $line_color = 'limegreen' , string $bg_color = 'silver' ) : string
2018-12-27 12:59:45 +00:00
{
2018-12-27 23:13:46 +00:00
$bar = round ( $current / $maximum * 100 );
2020-06-23 20:24:15 +00:00
return <<< HTML
2018-12-27 23:13:46 +00:00
< div style = " width: 100%; height: 16px; background: $bg_color ; overflow: hidden; border-radius: 3px; " >
< div style = " height: 16px; background: $line_color ; border-radius: 3px; width: $bar %; " ></ div >
2018-12-27 12:59:45 +00:00
</ div >
2018-12-27 13:18:55 +00:00
< div style = " width: 100%; height: 16px; font-size: 14px; text-align: center; margin-top: -16px; " >
2018-12-27 23:13:46 +00:00
$current / $maximum
2018-12-27 12:59:45 +00:00
</ div >
2018-12-27 13:18:55 +00:00
HTML ;
2018-12-27 12:59:45 +00:00
}
2020-06-24 06:45:32 +00:00
/**
* Функция отображает слот для свитков в окне персонажа .
2020-07-03 15:36:06 +00:00
*
2020-06-24 06:45:32 +00:00
* @ param $slot
2020-07-03 15:36:06 +00:00
*
2020-06-24 06:45:32 +00:00
* @ throws \Krugozor\Database\Mysql\Exception
*/
2018-01-28 16:40:49 +00:00
function echoscroll ( $slot )
{
2020-06-24 06:45:32 +00:00
$all_magic = 0 ;
2021-08-25 01:44:36 +00:00
if ( User :: $current -> getBattle ()) {
2018-01-28 16:40:49 +00:00
$script = 'fbattle' ;
2021-08-25 01:44:36 +00:00
$bat = db :: c () -> query ( 'SELECT `magic` FROM `battle` WHERE `id` = ?i' , User :: $current -> getBattle ()) -> fetch_assoc ();
2018-03-08 22:30:57 +00:00
$all_magic = unserialize ( $bat [ 'magic' ]);
2020-06-24 06:45:32 +00:00
} else {
$script = 'main' ;
2018-03-08 22:30:57 +00:00
}
2021-08-25 01:44:36 +00:00
$dress = db :: c () -> query ( 'SELECT `id`, `magic`, `name`, `img`, `duration`, `maxdur` FROM `inventory` WHERE `id` = ?i' , User :: $current -> $slot ) -> fetch_assoc ();
2018-03-08 22:14:29 +00:00
$need_charge = db :: c () -> query ( 'SELECT `needcharge` FROM `magic` WHERE `id` = ?i' , $dress [ 'magic' ]) -> fetch_assoc ();
2018-03-08 22:30:57 +00:00
2021-08-25 01:44:36 +00:00
if (( User :: $current -> $slot > 0 ) && ( $all_magic [ User :: $current -> getId ()] < 1 || empty ( $need_charge [ 'needcharge' ]))) {
$row [ 'id' ] = User :: $current -> $slot ;
2018-01-28 16:40:49 +00:00
if ( $dress [ 'magic' ]) {
2020-06-24 06:45:32 +00:00
$magic = db :: c () -> query ( 'SELECT targeted FROM `magic` WHERE `id` = ?i' , $dress [ 'magic' ]) -> fetch_assoc ();
2018-01-28 16:40:49 +00:00
echo " <a onclick= \" " ;
if ( $magic [ 'targeted' ] == 1 ) {
echo " okno('Введите название предмета', ' " . $script . " .php?use= { $row [ 'id' ] } ', 'target'); " ;
} else
if ( $magic [ 'targeted' ] == 2 ) {
echo " findlogin('Введите имя персонажа', ' " . $script . " .php?use= { $row [ 'id' ] } ', 'target'); " ;
} else {
echo " if(confirm('Использовать сейчас?')) { window.location=' " . $script . " .php?use= " . $row [ 'id' ] . " ';} " ;
}
echo " \" href='#'> " ;
}
2020-06-24 06:45:32 +00:00
echo <<< ACTIVE_SCROLL
< img class = 'tooltip' src = " i/sh/ { $dress [ 'img' ] } " width = '40' title = " <b> { $dress [ 'name' ] } </b><br> Прочность { $dress [ 'duration' ] } / { $dress [ 'maxdur' ] } " height = '25' alt = " Свиток " ></ a >
ACTIVE_SCROLL ;
2021-08-25 01:44:36 +00:00
} elseif (( User :: $current -> $slot > 0 ) && ( $all_magic [ User :: $current -> getId ()] >= 1 ) && $need_charge [ 'needcharge' ] > 0 ) {
2020-06-24 06:45:32 +00:00
echo <<< INACTIVE_SCROLL
< img src = " i/sh/magicclock.gif " width = " 40 " height = " 25 " title = 'Произведите размен ударами и магия снова станет доступна' alt = " Свиток " >
INACTIVE_SCROLL ;
2018-01-28 16:40:49 +00:00
} else {
2020-06-24 06:45:32 +00:00
echo <<< EMPTY_SLOT
< img class = " tooltip " src = " i/w13.gif " width = " 40 " height = " 25 " title = '<b>Пустой слот магия</b>' alt = " Слот для свитка " >
EMPTY_SLOT ;
2018-01-28 16:40:49 +00:00
}
}
// ссылка на магию
function showhrefmagic ( $dress )
{
2019-01-12 21:35:48 +00:00
$user = db :: c () -> query ( 'SELECT `battle` FROM `users` WHERE `id` = ?i' , $_SESSION [ 'uid' ]) -> fetch_assoc ();
2018-12-27 16:13:40 +00:00
$magic = db :: c () -> query ( 'SELECT * FROM `magic` WHERE `id` = ?i' , $dress [ 'includemagic' ]) -> fetch_assoc ();
2018-01-28 16:40:49 +00:00
$r = '' ;
2018-12-27 16:13:40 +00:00
$script = 'main' ;
2020-06-23 20:24:15 +00:00
if ( $user [ 'battle' ]) {
$script = 'fbattle' ;
}
2018-01-28 16:40:49 +00:00
$r .= " <a onclick= \" " ;
if ( $magic [ 'targeted' ] == 1 ) {
$r .= " okno('Введите название предмета', ' { $script } .php?use= { $dress [ 'id' ] } ', 'target') " ;
} elseif ( $magic [ 'targeted' ] == 2 ) {
$r .= " findlogin(' " . $magic [ 'name' ] . " ', ' { $script } .php?use= { $dress [ 'id' ] } ', 'target') " ;
} else {
$r .= " if (confirm('Использовать сейчас?')) window.location=' " . $script . " .php?use= " . $dress [ 'id' ] . " '; " ;
}
$r .= " \" href='#'> " ;
2019-01-12 21:35:48 +00:00
$r .= " <img src= \" i/sh/ { $dress [ 'img' ] } \" style= \" filter:shadow(color=red, direction=90, strength=3); \" title= \" " . $dress [ 'name' ] . (( $dress [ 'text' ] != null ) ? " <br />Н а оружии выгравировано ' { $dress [ 'text' ] } ' " : " " ) . " \" ><br> " ;
2018-01-28 16:40:49 +00:00
return $r ;
}
function timeOut ( $ttm )
{
$out = '' ;
$time_still = $ttm ;
$tmp = floor ( $time_still / 2592000 );
$id = 0 ;
if ( $tmp > 0 ) {
$id ++ ;
if ( $id < 3 ) {
$out .= $tmp . " мес. " ;
}
$time_still = $time_still - $tmp * 2592000 ;
}
$tmp = floor ( $time_still / 86400 );
if ( $tmp > 0 ) {
$id ++ ;
if ( $id < 3 ) {
$out .= $tmp . " дн. " ;
}
$time_still = $time_still - $tmp * 86400 ;
}
$tmp = floor ( $time_still / 3600 );
if ( $tmp > 0 ) {
$id ++ ;
if ( $id < 3 ) {
$out .= $tmp . " ч. " ;
}
$time_still = $time_still - $tmp * 3600 ;
}
$tmp = floor ( $time_still / 60 );
if ( $tmp > 0 ) {
$id ++ ;
if ( $id < 3 ) {
$out .= $tmp . " мин. " ;
}
}
if ( $out == '' ) {
if ( $time_still < 0 ) {
$time_still = 0 ;
}
$out = $time_still . ' сек.' ;
}
return $out ;
}
2018-03-01 10:57:27 +00:00
/**
* @ param $time
* @ param $vars
* @ param $vls
* @ param $uid
2018-12-27 14:46:00 +00:00
*
2018-03-01 10:57:27 +00:00
* @ return bool
*/
2018-01-28 16:40:49 +00:00
function addActions ( $time , $vars , $vls , $uid )
{
2018-03-01 10:57:27 +00:00
db :: c () -> query ( 'LOCK TABLES `actions` WRITE' );
2021-03-10 21:26:53 +00:00
$ins = db :: c () -> query ( 'INSERT INTO `actions` (`uid`,`time`,`city`,`room`,`vars`,`ip`,`vals`) VALUES (?i, ?i, "?s", ?i, "?s", "?s", "?s")' , $uid , $time , " capitalcity " , 0 , $vars , $_SERVER [ 'REMOTE_ADDR' ], $vls );
2018-03-01 10:57:27 +00:00
db :: c () -> query ( 'UNLOCK TABLES' );
2020-06-23 20:24:15 +00:00
return $ins ;
2018-01-28 16:40:49 +00:00
}
2020-10-30 00:33:02 +00:00
#15
2018-01-28 21:51:21 +00:00
function ref_drop ()
2018-01-28 16:40:49 +00:00
{
2018-06-24 01:18:49 +00:00
//сможет держать
function derj ( $id )
{
2018-12-10 23:52:46 +00:00
$user = db :: c () -> query ( 'SELECT `id`, `align` FROM `users` WHERE `id` = ?i' , $_SESSION [ 'uid' ]) -> fetch_assoc ();
$ts = db :: c () -> query ( 'SELECT `id`, `nalign` FROM `inventory` WHERE `id` = ?i' , $id ) -> fetch_assoc ();
2018-06-24 01:18:49 +00:00
$al = '(1 = 1)' ;
2020-06-23 20:24:15 +00:00
if ( $ts [ 'nalign' ] == 1.1 ) {
$al = '(1 = 2)' ;
}
2018-12-10 20:16:42 +00:00
$dd = db :: c () -> query ( ' SELECT `i` . `id` FROM `users` AS `u` , `inventory` AS `i`
2018-06-24 01:18:49 +00:00
WHERE
2018-11-01 15:33:21 +00:00
`i` . `needident` = 0 AND
`i` . `id` = ? i AND
`i` . `duration` < `i` . `maxdur` AND
`i` . `owner` = ? i AND
`u` . `sila` >= `i` . `nsila` AND
`u` . `lovk` >= `i` . `nlovk` AND
`u` . `inta` >= `i` . `ninta` AND
`u` . `vinos` >= `i` . `nvinos` AND
`u` . `intel` >= `i` . `nintel` AND
`u` . `mudra` >= `i` . `nmudra` AND
`u` . `level` >= `i` . `nlevel` AND
2018-11-01 15:35:12 +00:00
( " ?s " OR ( ? i = `i` . `nalign` ) or ( `i` . `nalign` = 0 )) AND
2018-11-01 15:33:21 +00:00
`u` . `noj` >= `i` . `nnoj` AND
`u` . `topor` >= `i` . `ntopor` AND
`u` . `dubina` >= `i` . `ndubina` AND
`u` . `mec` >= `i` . `nmech` AND
`u` . `mfire` >= `i` . `nfire` AND
`u` . `mwater` >= `i` . `nwater` AND
`u` . `mair` >= `i` . `nair` AND
`u` . `mearth` >= `i` . `nearth` AND
`u` . `mlight` >= `i` . `nlight` AND
`u` . `mgray` >= `i` . `ngray` AND
`u` . `mdark` >= `i` . `ndark` AND
`i` . `setsale` = 0 AND
2018-12-10 23:52:46 +00:00
`u` . `id` = ? i ', $id, $user[' id '], $al, $user[' align '], $user[' id ' ]);
2020-06-23 20:24:15 +00:00
return $dd -> getNumRows () > 0 ;
2018-06-24 01:18:49 +00:00
}
2018-12-11 13:09:21 +00:00
2018-12-11 13:00:16 +00:00
$slot = [ 'sergi' , 'kulon' , 'weap' , 'bron' , 'r1' , 'r2' , 'r3' , 'helm' , 'perchi' , 'shit' , 'boots' , 'm1' , 'm2' , 'm3' , 'm4' , 'm5' , 'm6' , 'm7' , 'm8' , 'm9' , 'm10' ];
2018-12-11 13:09:21 +00:00
$user = db :: c () -> query ( 'SELECT `sergi`,`kulon`,`weap`,`bron`,`r1`,`r2`,`r3`,`helm`,`perchi`,`shit`,`boots`,`m1`,`m2`,`m3`,`m4`,`m5`,`m6`,`m7`,`m8`,`m9`,`m10` FROM `users` WHERE id = ?i' , $_SESSION [ 'uid' ]) -> fetch_assoc ();
2018-01-28 16:40:49 +00:00
for ( $i = 0 ; $i <= 20 ; $i ++ ) {
if ( $user [ $slot [ $i ]] && ! derj ( $user [ $slot [ $i ]])) {
2021-08-20 17:40:06 +00:00
$item = new DressedItems ( $_SESSION [ 'uid' ]);
2021-03-11 18:42:36 +00:00
$item -> undressItem ( $i + 1 );
2018-01-28 16:40:49 +00:00
$user [ $slot [ $i ]] = null ;
}
}
}
// использовать магию
2020-08-29 23:21:22 +00:00
function usemagic ( $id , $target )
2018-01-28 16:40:49 +00:00
{
2021-08-25 01:44:36 +00:00
$row = db :: c () -> query ( 'SELECT * FROM `inventory` WHERE `owner` = ?i AND id = ?i' , User :: $current -> getId (), $id ) -> fetch_assoc_array ();
$bat = db :: c () -> query ( 'SELECT * FROM `battle` WHERE `id` = ?i' , User :: $current -> getBattle ()) -> fetch_assoc_array ();
2018-01-28 16:40:49 +00:00
$all_magic = unserialize ( $bat [ 'magic' ]);
$charge = 0 ;
2020-06-23 19:10:00 +00:00
$magic = db :: c () -> query ( 'SELECT * FROM `magic` WHERE `id` = ?i' , $row [ 'magic' ]) -> fetch_assoc_array ();
2018-01-28 16:40:49 +00:00
if ( $magic [ 'needcharge' ] > 0 ) {
$charge = $magic [ 'needcharge' ];
}
2020-06-23 19:10:00 +00:00
$incmagic = db :: c () -> query ( 'SELECT * FROM `magic` WHERE `id` = ?i' , $row [ 'includemagic' ]) -> fetch_assoc_array ();
2018-01-28 16:40:49 +00:00
if ( $incmagic [ 'needcharge' ] > 0 ) {
$charge = $incmagic [ 'needcharge' ];
}
2020-10-30 00:33:02 +00:00
//Переделать под новую базу
2021-08-25 01:44:36 +00:00
if (( $all_magic [ User :: $current -> getId ()] < 1 || $charge == 0 ) &&
2020-08-30 00:09:53 +00:00
( $user [ 'sila' ] >= $row [ 'nsila' ] &&
$user [ 'lovk' ] >= $row [ 'nlovk' ] &&
$user [ 'inta' ] >= $row [ 'ninta' ] &&
$user [ 'vinos' ] >= $row [ 'nvinos' ] &&
$user [ 'intel' ] >= $row [ 'nintel' ] &&
$user [ 'level' ] >= $row [ 'nlevel' ] &&
2020-06-23 20:24:15 +00:00
(( $user [ 'align' ] > 7 && $user [ 'align' ] < 8 ) || (( int ) $user [ 'align' ] == ( int ) $row [ 'nalign' ]) || ( $row [ 'nalign' ] == 0 )) &&
2020-08-30 00:09:53 +00:00
$user [ 'noj' ] >= $row [ 'nnoj' ] &&
$user [ 'topor' ] >= $row [ 'ntopor' ] &&
$user [ 'dubina' ] >= $row [ 'ndubina' ] &&
$user [ 'mec' ] >= $row [ 'nmech' ] &&
2020-06-23 20:24:15 +00:00
( $row [ 'type' ] < 13 || $row [ 'type' ] == 50 ) && ( $user [ 'mfire' ] >= $row [ 'nfire' ]) &&
2020-08-30 00:09:53 +00:00
$user [ 'mwater' ] >= $row [ 'nwater' ] &&
$user [ 'mair' ] >= $row [ 'nair' ] &&
$user [ 'mearth' ] >= $row [ 'nearth' ] &&
$user [ 'mlight' ] >= $row [ 'nlight' ] &&
$user [ 'mgray' ] >= $row [ 'ngray' ] &&
$user [ 'mdark' ] >= $row [ 'ndark' ] &&
$row [ 'needident' ] == 0
2020-06-23 20:24:15 +00:00
) || $row [ 'magic' ] == 48 || $row [ 'magic' ] == 50 ) {
if ( ! $row [ 'magic' ]) {
$incmagic [ 'name' ] = $row [ 'includemagicname' ];
$incmagic [ 'cur' ] = $row [ 'includemagicdex' ];
$incmagic [ 'max' ] = $row [ 'includemagicmax' ];
if ( $incmagic [ 'cur' ] <= 0 ) {
return false ;
2018-01-28 16:40:49 +00:00
}
2020-06-23 20:24:15 +00:00
$magic [ 'targeted' ] = $incmagic [ 'targeted' ];
echo " <span class='error'> " ;
include ( " magic/ " . $incmagic [ 'file' ]);
echo " </span> " ;
} else {
echo " <span class='error'> " ;
include ( " magic/ " . $magic [ 'file' ]);
echo " </span> " ;
}
if ( $bat ) {
if ( $row [ 'maxdur' ] <= ( $row [ 'duration' ] + 1 )) {
2021-08-20 17:40:06 +00:00
InventoryItem :: destroyItem ( $row [ 'id' ]);
2020-06-23 20:24:15 +00:00
} else {
if ( ! $row [ 'magic' ]) {
2021-08-27 15:55:18 +00:00
$query = 'update inventory set includemagicdex = includemagicdex - ? where item_id = ?' ;
2018-01-28 16:40:49 +00:00
} else {
2021-08-27 15:55:18 +00:00
$query = 'update inventory set durability = durability + ? where item_id = ?' ;
2018-01-28 16:40:49 +00:00
}
2021-08-27 15:55:18 +00:00
DBPDO :: $db -> execute ( $query , [ $bat , $row [ 'id' ]]);
2018-01-28 16:40:49 +00:00
}
2020-06-23 20:24:15 +00:00
if ( ! $charge ) {
$charge = 0 ;
}
//ограничение по кол-ву за ход
2021-08-25 01:44:36 +00:00
if ( User :: $current -> getBattle ()) {
2021-08-27 15:55:18 +00:00
$bat = DBPDO :: $db -> fetch ( 'select * from battle where battle_id = ?' , User :: $current -> getBattle ());
2020-06-23 20:24:15 +00:00
}
if ( $bat [ 'magic' ] == '' ) {
$all_magic = [];
} else {
$all_magic = unserialize ( $bat [ 'magic' ]);
}
2021-08-25 01:44:36 +00:00
$all_magic [ User :: $current -> getId ()] += $charge ;
2021-08-27 15:55:18 +00:00
DBPDO :: $db -> execute ( 'update battle set magic = ? where battle_id = ?' , [ serialize ( $all_magic ), User :: $current -> getBattle ()]);
2018-01-28 16:40:49 +00:00
}
2020-06-23 19:10:00 +00:00
}
2020-06-23 20:24:15 +00:00
return false ;
2018-01-28 16:40:49 +00:00
}
2021-08-27 15:55:18 +00:00
/* ВАЖНО ! ( #44)
* addch () и addchp () заменяются на Chat :: class -> addSYSMessage ( $message , [ optional ] $receiver );
* Для addchp () используется второй опциональный ключ .
* Это 150 + вхождений в куче файлов , где надо менять структуру вызова функции из - за их несовместимости .
* Возможно , приоритетом стоит сделать унификацию свитков нападения , которых самих около 20 и которые
* по нескольку раз вызывают эти функции .
*/
2018-01-28 16:40:49 +00:00
function addch ( $text , $room = 0 )
{
if ( $room == 0 ) {
2021-08-25 01:44:36 +00:00
$room = User :: $current -> getRoom ();
2018-01-28 16:40:49 +00:00
}
if ( $fp = @ fopen ( " tmp/chat.txt " , " a " )) { //открытие
flock ( $fp , LOCK_EX ); //БЛОКИРОВКА ФАЙЛА
fputs ( $fp , " :[ " . time () . " ]:[!sys!!]:[ " . ( $text ) . " ]:[ " . $room . " ] \r \n " ); //работа с файлом
fflush ( $fp ); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
flock ( $fp , LOCK_UN ); //СНЯТИЕ БЛОКИРОВКИ
fclose ( $fp ); //закрытие
}
}
function addchp ( $text , $who , $room = 0 )
{
if ( $room == 0 ) {
2021-08-25 01:44:36 +00:00
$room = User :: $current -> getRoom ();
2018-01-28 16:40:49 +00:00
}
$fp = fopen ( " tmp/chat.txt " , " a " ); //открытие
flock ( $fp , LOCK_EX ); //БЛОКИРОВКА ФАЙЛА
fputs ( $fp , " :[ " . time () . " ]:[ { $who } ]:[ " . ( $text ) . " ]:[ " . $room . " ] \r \n " ); //работа с файлом
fflush ( $fp ); //ОЧИЩЕНИЕ ФАЙЛОВОГО БУФЕРА И ЗАПИСЬ В ФАЙЛ
flock ( $fp , LOCK_UN ); //СНЯТИЕ БЛОКИРОВКИ
fclose ( $fp ); //закрытие
}
function err ( $t )
{
2020-06-23 09:24:37 +00:00
echo '<span class="error">' . $t . '</span>' ;
2018-01-28 16:40:49 +00:00
}
2020-06-23 15:13:20 +00:00
2019-02-15 22:03:02 +00:00
/**
2021-02-01 01:39:50 +00:00
* @ param int $userId
* @ param string $text
2019-09-17 14:37:44 +00:00
*
2019-02-15 22:03:02 +00:00
*/
2021-02-01 01:39:50 +00:00
function telegraph ( int $userId , string $text )
2019-02-15 22:03:02 +00:00
{
2021-08-25 01:44:36 +00:00
if ( DBPDO :: $db -> ofetch ( 'SELECT 1 FROM users WHERE id = ?' , $userId )) {
DBPDO :: $db -> execute ( 'INSERT INTO chat (user_id,receiver_id,msg,type) VALUES (-1,?,?,?)' , [ $userId , $text , 'sms' ]);
2020-06-23 20:24:15 +00:00
}
2018-01-28 16:40:49 +00:00
}
2021-08-27 15:55:18 +00:00
function SolveExp ( $at_id , $def_id , $damage ) : float
2018-01-28 16:40:49 +00:00
{
2021-08-27 15:55:18 +00:00
$mods = [
'bloodb' => 1.2 ,
'btl_1' => 1 ,
'btl_2' => 0.5 ,
'btl_3' => 0.05 ,
];
$baseexp = [
" 0 " => " 2 " ,
" 1 " => " 5 " ,
" 2 " => " 10 " ,
" 3 " => " 15 " ,
" 4 " => " 30 " ,
" 5 " => " 60 " ,
" 6 " => " 90 " ,
" 7 " => " 115 " ,
" 8 " => " 300 " ,
" 9 " => " 400 " ,
" 10 " => " 500 " ,
" 11 " => " 600 " ,
" 12 " => " 700 " ,
" 13 " => " 800 " ,
" 14 " => " 900 " ,
" 15 " => " 1000 " ,
" 16 " => " 1100 " ,
" 17 " => " 1200 " ,
" 18 " => " 1300 " ,
" 19 " => " 1400 " ,
" 20 " => " 1500 " ,
" 21 " => " 1600 " ,
];
2018-12-10 20:16:42 +00:00
$expmf = 0 ;
$bot_active = false ;
$bot_def = false ;
2018-01-28 16:40:49 +00:00
if ( $at_id > _BOTSEPARATOR_ ) {
2021-08-27 15:55:18 +00:00
$bots = DBPDO :: $db -> fetch ( 'select * from bots where bot_id = ?' , $at_id );
2018-01-28 16:40:49 +00:00
$at_id = $bots [ 'prototype' ];
$bot_active = true ;
}
2021-08-27 15:55:18 +00:00
$query = 'select greatest(1, sum(price)) as allprice from users left join inventory on users.id = inventory.owner_id where id = ?' ;
$at = DBPDO :: $db -> fetch ( $query , $at_id );
$def = DBPDO :: $db -> fetch ( $query , $def_id );
2018-01-28 16:40:49 +00:00
2021-08-27 15:55:18 +00:00
$atInfo = new UserStats ( $at_id );
$defInfo = new UserStats ( $def_id );
$table_name = $at_id > _BOTSEPARATOR_ ? 'bots' : 'users' ;
$bt = DBPDO :: $db -> fetch ( 'select blood, type, t1, t2 from battle where battle_id = (select battle from ? where id = ?)' , [ $table_name , $at_id ]);
2018-01-28 16:40:49 +00:00
if ( $def_id > _BOTSEPARATOR_ ) {
2021-08-27 15:55:18 +00:00
$bots = DBPDO :: $db -> fetch ( 'select * from bots where bot_id = ?' , $def_id );
2018-01-28 16:40:49 +00:00
$def_id = $bots [ 'prototype' ];
$bot_def = true ;
}
if ( $bt [ 'blood' ]) {
2018-02-27 02:48:51 +00:00
$expmf = $mods [ 'bloodb' ];
2018-01-28 16:40:49 +00:00
}
$filebtl = '/tmp/' . $at_id . '.btl' ;
if ( $bt [ 'type' ] == 1 && file_exists ( $filebtl )) {
$btfl = fopen ( $filebtl , 'r' );
$contents = fread ( $btfl , filesize ( $filebtl ));
fclose ( $btfl );
$cnt = substr_count ( $contents , $def_id );
$exmod = 1 ;
if ( $cnt <= 1 ) {
$exmod = $mods [ 'btl_1' ];
} elseif ( $cnt == 2 ) {
$exmod = $mods [ 'btl_2' ];
} elseif ( $cnt > 2 ) {
$exmod = $mods [ 'btl_3' ];
}
$expmf = $expmf * $exmod ;
}
2018-02-27 02:48:51 +00:00
$standart = [
" 0 " => 1 ,
" 1 " => 1 ,
" 2 " => 15 ,
" 3 " => 111 ,
" 4 " => 265 ,
" 5 " => 526 ,
" 6 " => 882 ,
" 7 " => 919 ,
" 8 " => 919 ,
" 9 " => 919 ,
" 10 " => 919 ,
" 11 " => 919 ,
" 12 " => 919 ,
2021-08-27 15:55:18 +00:00
" 13 " => 919 ,
" 14 " => 919 ,
" 15 " => 919 ,
" 16 " => 919 ,
" 17 " => 919 ,
" 18 " => 919 ,
" 19 " => 919 ,
" 20 " => 919 ,
" 21 " => 919 ,
" 22 " => 919 ,
" 23 " => 919 ,
" 24 " => 919 ,
" 25 " => 919
];
$mfit = ( $at [ 'allprice' ] / ( $standart [ $atInfo -> getLevel ()] / 3 ));
2018-01-28 16:40:49 +00:00
if ( $mfit < 0.8 ) {
$mfit = 0.8 ;
}
if ( $mfit > 1.5 ) {
$mfit = 1.5 ;
}
$pls = count ( explode ( " ; " , $bt [ 't1' ])) + count ( explode ( " ; " , $bt [ 't2' ]));
if ( $pls > 2 ) {
2020-06-23 20:24:15 +00:00
$mfbot = $bot_active ? 0.3 : 1 ;
$mfbot2 = $bot_def ? 0.7 : 1 ;
2018-01-28 16:40:49 +00:00
} else {
$mfbot = 1 ;
$mfbot2 = 1 ;
}
if ( $expmf == 0 ) {
$expmf = 1 ;
}
2020-06-23 20:24:15 +00:00
2021-08-27 15:55:18 +00:00
return round ((( $baseexp [ $defInfo -> getLevel ()]) * ( $def [ 'allprice' ] / (( $at [ 'allprice' ] + $def [ 'allprice' ]) / 2 )) * ( $damage / $defInfo -> getMaxHealth ()) * $expmf * $mfit * $mfbot * $mfbot2 ) / 3 );
}