2022-08-25 11:23:36 +00:00
< ? php
2023-08-30 14:58:56 +00:00
use Core\Db ;
2023-10-13 15:02:45 +00:00
use Helper\Conversion ;
2024-05-14 14:24:54 +00:00
use Model\ActionModel ;
2023-08-30 14:58:56 +00:00
use User\ItemsModel ;
2023-10-13 15:02:45 +00:00
use User\Stats ;
2023-08-30 14:58:56 +00:00
2022-08-25 11:23:36 +00:00
class Dungeon
{
2023-08-30 14:58:56 +00:00
public array $info ;
2023-10-13 15:02:45 +00:00
public string $error ; //карта
public int $gs = 1 ;
public string $information ;
public int $id_dng ;
2023-08-30 14:58:56 +00:00
public array $point ;
2023-10-13 15:02:45 +00:00
/**
* 1 - 9 : передняя стенка , в 2 - х шагах ; < br >
* 10 - 23 : растояние : 1 шаг ; < br >
* 24 : стена прямо слева от персонажа ; < br >
* 25 : стена прямо справа от персонажа ; < br >
* 26 : стена прямо перед персонажем ; < br >
* 27 : стена слева от персонажа ; < br >
* 28 : стена справа от персонажа ;
* @ var array
*/
public readonly array $walls ;
private array $userinfo ;
private array $userstats ;
2023-08-30 14:58:56 +00:00
private array $itbs = [
0 => 558 , 1 => 722 , 2 => 718 , 3 => 700 , 4 => 291 , 5 => 545 , 6 => 533 , 7 => 536 , 8 => 628 , 9 => 710 , 10 => 654 , 11 => 684 , 12 => 689 , 13 => 552 , 14 => 552 , 15 => 716 ,
16 => 320 , 17 => 290 , 18 => 543 , 19 => 528 , 20 => 540 , 21 => 627 , 22 => 709 , 23 => 653 , 24 => 681 , 25 => 687 , 26 => 523 , 27 => 523 , 28 => 712 , 29 => 1151 , 30 => 544 ,
31 => 541 , 32 => 525 , 33 => 539 , 34 => 633 , 35 => 707 , 36 => 647 , 37 => 680 , 38 => 685 , 39 => 567 , 40 => 717 , 41 => 706 , 42 => 527 , 43 => 537 , 44 => 626 , 45 => 708 ,
46 => 723 , 47 => 651 , 48 => 683 , 49 => 686 , 50 => 2862 , 51 => 2863 , 52 => 2864 ,
];
2023-10-13 15:02:45 +00:00
private readonly array $bs ;
private array $map = [];
2023-08-30 14:58:56 +00:00
private array $cord = [ 'x' => 0 ];
private array $sg = [
2022-08-25 11:23:36 +00:00
1 => [ 1 => 1 , 2 => 2 , 3 => 3 , 4 => 4 ],
2 => [ 1 => 2 , 2 => 3 , 3 => 4 , 4 => 1 ],
3 => [ 1 => 3 , 2 => 4 , 3 => 1 , 4 => 2 ],
4 => [ 1 => 4 , 2 => 1 , 3 => 2 , 4 => 3 ],
];
2023-08-30 14:58:56 +00:00
public function __construct ( User $user = null )
2022-08-25 11:23:36 +00:00
{
2023-08-30 14:58:56 +00:00
if ( ! $user ) {
$user = User :: start ();
}
2023-10-13 15:02:45 +00:00
$this -> userinfo = $user -> info ;
$this -> userstats = $user -> stats ;
2023-08-30 14:58:56 +00:00
2023-10-13 15:02:45 +00:00
$this -> info = Db :: getRow ( 'select * from dungeon_now where id = ?' , [ $this -> userinfo [ 'dnow' ]]);
2023-08-30 14:58:56 +00:00
2022-08-25 11:23:36 +00:00
$this -> id_dng = $this -> info [ 'id2' ];
2023-10-13 15:02:45 +00:00
$this -> gs = $this -> userinfo [ 's' ];
2022-08-25 11:23:36 +00:00
if ( $this -> gs < 1 || $this -> gs > 4 ) {
$this -> gs = 1 ;
}
2023-10-13 15:02:45 +00:00
$this -> getBs ();
match ( true ) {
isset ( $_GET [ 'itm_luck' ]) && $this -> info [ 'bsid' ] == 0 => $this -> itmLuck (( int ) $_GET [ 'itm_luck' ]),
isset ( $_GET [ 'itm_unluck' ]) && $this -> info [ 'bsid' ] == 0 => $this -> itmUnluck (( int ) $_GET [ 'itm_unluck' ]),
isset ( $_GET [ 'atack' ]) => $this -> atack (( int ) $_GET [ 'atack' ]),
isset ( $_GET [ 'take' ]) => $this -> takeinv (( int ) $_GET [ 'take' ]),
isset ( $_GET [ 'take_obj' ]) => $this -> takeit (( int ) $_GET [ 'take_obj' ]),
isset ( $_GET [ 'look' ]) => $this -> look (( int ) $_GET [ 'look' ], $user ),
isset ( $_GET [ 'go' ]) => $this -> testGo (( int ) $_GET [ 'go' ]), // перемещение
2023-11-05 02:46:07 +00:00
default => null ,
2023-10-13 15:02:45 +00:00
};
/* генерируем вид персонажа (только карта) */
$queryArgsXY = [
1 => [ $user -> info [ 'x' ] + 2 , $user -> info [ 'x' ] - 2 , $user -> info [ 'y' ] + 4 , $user -> info [ 'y' ],],
2 => [ $user -> info [ 'x' ] + 2 , $user -> info [ 'x' ] - 2 , $user -> info [ 'y' ], $user -> info [ 'y' ] - 4 ,],
3 => [ $user -> info [ 'x' ], $user -> info [ 'x' ] - 4 , $user -> info [ 'y' ] + 2 , $user -> info [ 'y' ] - 2 ,],
4 => [ $user -> info [ 'x' ] + 4 , $user -> info [ 'x' ], $user -> info [ 'y' ] + 2 , $user -> info [ 'y' ] - 2 ,],
];
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
$cellsCount = 1 ;
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
$dungeonMap = Db :: getRows ( " select * from dungeon_map where id_dng = ? and x <= ? and x >= ? and y <= ? and y >= ? order by y, x limit 25 " ,
[ $this -> id_dng , $queryArgsXY [ $this -> gs ][ 1 ], $queryArgsXY [ $this -> gs ][ 2 ], $queryArgsXY [ $this -> gs ][ 3 ], $queryArgsXY [ $this -> gs ][ 4 ]]);
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
foreach ( $dungeonMap as $mapCell ) {
$this -> map [ 0 ][ $mapCell [ 'y' ] . '_' . $mapCell [ 'x' ]] = $mapCell ;
$cellsCount ++ ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
$this -> map [ 'good' ] = $cellsCount ; //целых клеток
2022-08-25 11:23:36 +00:00
$this -> map [ 1 ] = $this -> genMatix ();
$this -> lookDungeon ();
}
2023-10-13 15:02:45 +00:00
private function getBs () : void
2022-08-25 11:23:36 +00:00
{
2023-10-13 15:02:45 +00:00
if ( $this -> info [ 'bsid' ] <= 0 ) {
return ;
2023-01-28 02:24:37 +00:00
}
2023-10-13 15:02:45 +00:00
$this -> bs = Db :: getRow ( 'select * from bs_turnirs where id = ? and time_start = ?' , [ $this -> info [ 'bsid' ], $this -> info [ 'time_start' ]]);
}
private function itmLuck ( int $id ) : void
{
if ( $this -> info [ 'bsid' ] != 0 || empty ( $id )) {
return ;
}
$item = Db :: getRow ( 'select * from dungeon_items left join items_main on items_main.id = item_id where dn = ? and dungeon_items.id = ? and take = 0 and x = ? and y = ?' ,
[ $this -> info [ 'id' ], $id , $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ]]);
$luck = Db :: getValue ( 'select count(id) from dungeon_actions where uid = ? and dn = ? and vars = ?' , [ $this -> userinfo [ 'id' ], $this -> info [ 'id' ], 'luck_itm' . $id ]);
$luck2 = $luck ;
if ( $this -> userstats [ 'silver' ] >= 3 ) { //дополнительный бросок
$luck2 -- ;
}
if ( $item [ 'user' ] > 0 ) {
$this -> error = 'Розыгрыш предмета уже завершился...' ;
} elseif ( ! isset ( $item [ 'id' ])) {
2023-08-30 14:58:56 +00:00
$this -> error .= '<div>Предмет не найден</div>' ;
2023-10-13 15:02:45 +00:00
} elseif ( $luck2 > 0 ) {
$this -> error .= '<div>Вы уже учавствуете в розыгрыше "' . $item [ 'name' ] . '", ожидаем других участников еще ' .
Conversion :: secondsToTimeout ( $item [ 'time' ] - time () + 300 ) . '</div>' ;
2023-01-28 02:24:37 +00:00
} else {
2023-10-13 15:02:45 +00:00
if ( $luck < 1 ) {
Db :: sql ( 'update dungeon_items set time = unix_timestamp() where id = ?' , [ $item [ 'id' ]]);
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
2023-08-30 14:58:56 +00:00
$rndl = rand ( 1 , 100 );
2023-10-13 15:02:45 +00:00
Db :: sql ( 'insert into dungeon_actions (uid, dn, x, y, time, vars, vals) values (?,?,?,?,unix_timestamp(),?,?)' ,
[ $this -> userinfo [ 'id' ], $this -> userinfo [ 'dnow' ], $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], 'luck_itm' . $id , $rndl ]);
if ( $this -> userinfo [ 'sex' ] == 0 ) {
$this -> sys_chat ( sprintf ( '<b>%s</b> выбросил *%s* в споре за предмет «%s»' , $this -> userinfo [ 'login' ], $rndl , $item [ 'name' ]));
2023-08-30 14:58:56 +00:00
} else {
2023-10-13 15:02:45 +00:00
$this -> sys_chat ( sprintf ( '<b>%s</b> выбросила *%s* в споре за предмет «%s»' , $this -> userinfo [ 'login' ], $rndl , $item [ 'name' ]));
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
$this -> error .= sprintf ( '<div>Вы выбросили *%s* в споре за предмет «%s»</div>' , $rndl , $item [ 'name' ]);
2023-01-28 02:24:37 +00:00
}
2023-10-13 15:02:45 +00:00
$this -> testLuck ( $id );
2022-08-25 11:23:36 +00:00
}
2023-08-30 14:58:56 +00:00
public function sys_chat ( $rtxt )
2022-08-25 11:23:36 +00:00
{
2023-08-30 14:58:56 +00:00
$cmsg = new ChatMessage ();
2023-10-13 15:02:45 +00:00
$cmsg -> setDn ( $this -> userinfo [ 'dnow' ]);
$cmsg -> setRoom ( $this -> userinfo [ 'room' ]);
2023-08-30 14:58:56 +00:00
$cmsg -> setText ( $rtxt );
$cmsg -> setType ( 6 );
$cmsg -> setTypeTime ( 1 );
( new Chat ()) -> sendMsg ( $cmsg );
}
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
private function testLuck ( $id ) : void
2023-08-30 14:58:56 +00:00
{
$fxv = [ 'itm' => mysql_fetch_assoc (
2023-01-28 02:24:37 +00:00
mysql_query (
2023-08-30 14:58:56 +00:00
'SELECT `im`.*,`ish`.* FROM `dungeon_items` AS `ish` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `ish`.`item_id`) WHERE `ish`.`dn` = "' . $this -> info [ 'id' ] . '" AND `ish`.`id` = "' . mysql_real_escape_string (
$id
2023-10-13 15:02:45 +00:00
) . '" AND `ish`.`take` = "0" AND `ish`.`delete` = "0" AND `ish`.`x` = "' . $this -> userinfo [ 'x' ] . '" AND `ish`.`y` = "' . $this -> userinfo [ 'y' ] . '" LIMIT 1'
2023-08-30 14:58:56 +00:00
)
), 'luck_count' => mysql_fetch_assoc (
mysql_query (
'SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "' . $this -> info [ 'id' ] . '" AND `vars` = "luck_itm' . mysql_real_escape_string (
$id
2023-01-28 02:24:37 +00:00
) . '" LIMIT 1'
)
2023-08-30 14:58:56 +00:00
), 'user_count' => mysql_fetch_assoc (
mysql_query ( 'SELECT COUNT(*) FROM `stats` WHERE `dnow` = "' . $this -> info [ 'id' ] . '" LIMIT 1' )
)];
$fxv [ 'luck_count' ] = $fxv [ 'luck_count' ][ 0 ];
$fxv [ 'user_count' ] = $fxv [ 'user_count' ][ 0 ];
2022-08-25 11:23:36 +00:00
2023-08-30 14:58:56 +00:00
if (( $fxv [ 'luck_count' ] >= $fxv [ 'user_count' ] || $fxv [ 'itm' ][ 'time' ] + 300 < time ()) && ! empty ( $fxv [ 'itm' ][ 'user' ])) {
$fxv [ 'sp' ] = mysql_query (
'SELECT * FROM `dungeon_actions` WHERE `dn` = "' . $this -> info [ 'id' ] . '" AND `vars` = "luck_itm' . mysql_real_escape_string (
$id
) . '" ORDER BY `vals` DESC LIMIT ' . $fxv [ 'luck_count' ] . ''
);
$fxv [ 'winner' ] = [];
$fxv [ 'win_val' ] = 0 ;
unset ( $fxv [ 'pl' ], $fxv [ 'sp' ]);
if ( count ( $fxv [ 'winner' ]) > 1 ) {
//Розыгрыш еще раз между победителями
$this -> error .= '<div>Розыгрыш завершен!</div>' ;
} elseif ( count ( $fxv [ 'winner' ]) == 1 ) {
$fxv [ 'user_win' ] = mysql_fetch_assoc (
mysql_query (
'SELECT `id`,`login`,`sex` FROM `users` WHERE `id` = "' . $fxv [ 'winner' ][ 0 ] . '" LIMIT 1'
)
);
$fxv [ 'text' ] = '<b>' . $fxv [ 'user_win' ][ 'login' ] . '</b> выигрывает в споре за предмет "' . $fxv [ 'itm' ][ 'name' ] . '"' ;
$this -> sys_chat ( $fxv [ 'text' ]);
mysql_query (
'UPDATE `dungeon_items` SET `time` = "' . time () . '",`user` = "' . $fxv [ 'user_win' ][ 'id' ] . '" WHERE `id` = "' . $fxv [ 'itm' ][ 'id' ] . '" LIMIT 1'
);
$this -> error .= '<div>Розыгрыш завершен! Победитель <b>' . $fxv [ 'user_win' ][ 'login' ] . '</b>!</div>' ;
}
2022-08-25 11:23:36 +00:00
} else {
2023-10-13 15:02:45 +00:00
$this -> error .= '<div>У остальных участников осталось ' . Conversion :: secondsToTimeout (
2023-08-30 14:58:56 +00:00
$fxv [ 'itm' ][ 'time' ] + 300 - time ()
) . ' мин. до конца розыгрыша</div>' ;
}
2023-10-13 15:02:45 +00:00
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
private function itmUnluck ( $id ) : void
2023-08-30 14:58:56 +00:00
{
2023-10-13 15:02:45 +00:00
$item = Db :: getRow ( 'select * from dungeon_items left join items_main on items_main.id = item_id where dn = ? and dungeon_items.id = ? and take = 0 and x = ? and y = ?' ,
[ $this -> info [ 'id' ], $id , $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ]]);
$luck = Db :: getRow ( 'select *, count(id) as count from dungeon_actions where uid = ? and dn = ? and vars = ?' , [ $this -> userinfo [ 'id' ], $this -> info [ 'id' ], 'luck_itm' . $id ]);
if ( $item [ 'user' ] > 0 ) {
2023-08-30 14:58:56 +00:00
$this -> error = 'Розыгрыш предмет уже завершился...' ;
2023-10-13 15:02:45 +00:00
} elseif ( ! isset ( $item [ 'id' ])) {
2023-08-30 14:58:56 +00:00
$this -> error .= '<div>Предмет не найден</div>' ;
2023-10-13 15:02:45 +00:00
} elseif ( isset ( $luck [ 'id' ])) {
if ( $luck [ 'vals' ] == 0 ) {
$this -> error .= '<div>Вы уже отказались от участия в розыгрыше "' . $item [ 'name' ] . '"</div>' ;
2023-08-30 14:58:56 +00:00
} else {
2023-10-13 15:02:45 +00:00
$this -> error .= '<div>Вы уже учавствуете в розыгрыше "' . $item [ 'name' ] . '", ожидаем других участников еще ' . Conversion :: secondsToTimeout (
$item [ 'time' ] - time () + 300
2023-08-30 14:58:56 +00:00
) . '</div>' ;
}
} else {
2023-10-13 15:02:45 +00:00
if ( $luck [ 'count' ] < 1 ) {
Db :: sql ( 'update dungeon_items set time = unix_timestamp() where id = ?' , [ $item [ 'id' ]]);
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
$this -> sys_chat ( sprintf ( '<b>%s</b> отказался от спора за предмет «%s»' , $this -> userinfo [ 'login' ], $item [ 'name' ]));
2022-08-25 11:23:36 +00:00
} else {
2023-10-13 15:02:45 +00:00
$this -> sys_chat ( sprintf ( '<b>%s</b> отказалась от спора за предмет «%s»' , $this -> userinfo [ 'login' ], $item [ 'name' ]));
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
Db :: sql ( 'insert into dungeon_actions (uid, dn, x, y, time, vars, vals) values (?,?,?,?,unix_timestamp(),?,?)' ,
[ $this -> userinfo [ 'id' ], $this -> userinfo [ 'dnow' ], $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], 'luck_itm' . $id , '0' ]);
$this -> error .= '<div>Вы отказались от участия в розыгрыше "' . $item [ 'name' ] . '"</div>' ;
2022-08-25 11:23:36 +00:00
}
}
2023-10-13 15:02:45 +00:00
private function atack ( $id )
2022-08-25 11:23:36 +00:00
{
2023-08-30 14:58:56 +00:00
$bot = mysql_fetch_assoc (
2023-01-28 02:24:37 +00:00
mysql_query (
2023-08-30 14:58:56 +00:00
'SELECT * FROM `dungeon_bots` WHERE `id2` = "' . $id . '" AND `for_dn` = "0" AND `dn` = "' . $this -> info [ 'id' ] . '" AND `delete` = "0" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $bot [ 'id2' ])) {
2023-10-13 15:02:45 +00:00
if (( $this -> userinfo [ 'x' ] != $bot [ 'x' ] || $bot [ 'y' ] != $this -> userinfo [ 'y' ]) && $this -> cellIsGoodforAction (
$this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $bot [ 'x' ], $bot [ 'y' ]
)) {
2023-01-10 16:29:32 +00:00
//Создаем подеинок
2023-01-28 02:24:37 +00:00
$tbtl = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `battle` WHERE `dn_id` = "' . $this -> info [ 'id' ] . '" AND `team_win` = "-1" AND `x` = "' . $bot [ 'x' ] . '" AND `y` = "' . $bot [ 'y' ] . '" LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $tbtl [ 'id' ])) {
2023-01-10 16:29:32 +00:00
//вступаем в поединок
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `battle` = "' . $tbtl [ 'id' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2023-10-13 15:02:45 +00:00
mysql_query ( 'UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1' );
2022-08-25 11:23:36 +00:00
die ( '<script>top.frames[\'main\'].location = "main.php";</script>' );
} else {
$btl_id = 0 ;
//$expB = -77.77;
$expB = 0 ;
$btl = [ 'players' => '' , 'timeout' => 120 , 'type' => 0 , 'invis' => 0 , 'noinc' => 0 , 'travmChance' => 0 , 'typeBattle' => 0 , 'addExp' => $expB , 'money' => 0 ];
2023-01-28 02:24:37 +00:00
$ins = mysql_query (
' INSERT INTO `battle` ( `dungeon` , `dn_id` , `x` , `y` , `city` , `time_start` , `players` , `timeout` , `type` , `invis` , `noinc` , `travmChance` , `typeBattle` , `addExp` , `money` ) VALUES (
2022-08-25 11:23:36 +00:00
" ' . $this->info ['id2'] . ' " ,
" ' . $this->info ['id'] . ' " ,
" ' . $bot['x'] . ' " ,
" ' . $bot['y'] . ' " ,
2023-10-13 15:02:45 +00:00
" ' . $this->userinfo ['city'] . ' " ,
2022-08-25 11:23:36 +00:00
" ' . time() . ' " ,
" ' . $btl['players'] . ' " ,
" ' . $btl['timeout'] . ' " ,
" ' . $btl['type'] . ' " ,
" ' . $btl['invis'] . ' " ,
" ' . $btl['noinc'] . ' " ,
" ' . $btl['travmChance'] . ' " ,
" ' . $btl['typeBattle'] . ' " ,
" ' . $btl['addExp'] . ' " ,
2023-01-28 02:24:37 +00:00
" ' . $btl['money'] . ' " ) '
);
2022-08-25 11:23:36 +00:00
$btl_id = mysql_insert_id ();
if ( $btl_id > 0 ) {
2023-01-10 16:29:32 +00:00
//Добавляем ботов
2023-01-28 02:24:37 +00:00
$sp = mysql_query (
'SELECT * FROM `dungeon_bots` WHERE `for_dn` = "0" AND `dn` = "' . $this -> info [ 'id' ] . '" AND `x` = "' . $bot [ 'x' ] . '" AND `y` = "' . $bot [ 'y' ] . '" AND `delete` = "0" LIMIT 1001'
);
2022-08-25 11:23:36 +00:00
$j = 0 ;
$logins_bot = [];
while ( $pl = mysql_fetch_assoc ( $sp )) {
$jui = 1 ;
2023-01-28 02:24:37 +00:00
mysql_query (
'UPDATE `dungeon_bots` SET `inBattle` = "' . $btl_id . '" WHERE `id2` = "' . $pl [ 'id2' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
while ( $jui <= $pl [ 'colvo' ]) {
2023-10-13 15:02:45 +00:00
$k = User :: start () -> addNewbot ( $pl [ 'id_bot' ], null , null , $logins_bot );
2022-08-25 11:23:36 +00:00
$logins_bot = $k [ 'logins_bot' ];
if ( $k != false ) {
2023-01-28 02:24:37 +00:00
$upd = mysql_query (
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $k [ 'id' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
if ( $upd ) {
2023-01-28 02:24:37 +00:00
$upd = mysql_query (
'UPDATE `stats` SET `x`="' . $bot [ 'x' ] . '",`y`="' . $bot [ 'y' ] . '",`team` = "2" WHERE `id` = "' . $k [ 'id' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
if ( $upd ) {
$j ++ ;
}
}
}
$jui ++ ;
}
}
unset ( $logins_bot );
if ( $j > 0 ) {
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
die ( '<script>top.frames[\'main\'].location = "main.php";</script>' );
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось напасть, ошибка обьекта нападения ...' ;
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось создать поединок ...' ;
2022-08-25 11:23:36 +00:00
}
}
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось напасть ...' ;
2022-08-25 11:23:36 +00:00
}
} else {
if ( isset ( $this -> bs [ 'id' ]) || $this -> info [ 'id2' ] == 15 ) {
2023-01-28 02:24:37 +00:00
$bot = mysql_fetch_assoc (
mysql_query (
'SELECT `u`.*,`st`.* FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`id` = "' . mysql_real_escape_string (
$id
) . '" LIMIT 1'
)
);
2023-10-13 15:02:45 +00:00
if (( $this -> userinfo [ 'x' ] != $bot [ 'x' ] || $bot [ 'y' ] != $this -> userinfo [ 'y' ]) && $this -> cellIsGoodforAction (
$this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $bot [ 'x' ], $bot [ 'y' ]
)) {
2023-01-10 16:29:32 +00:00
//Создаем подеинок
2023-01-28 02:24:37 +00:00
$tbtl = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `battle` WHERE `dn_id` = "' . $this -> info [ 'id' ] . '" AND `team_win` = "-1" AND `x` = "' . $bot [ 'x' ] . '" AND `y` = "' . $bot [ 'y' ] . '" LIMIT 1'
)
);
2023-10-13 15:02:45 +00:00
2022-08-25 11:23:36 +00:00
if ( isset ( $tbtl [ 'id' ])) {
2023-01-10 16:29:32 +00:00
//вступаем в поединок
2023-01-28 02:24:37 +00:00
$lstm = mysql_fetch_assoc (
mysql_query (
'SELECT `u`.*,`st`.* FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`battle`="' . $tbtl [ 'id' ] . '" ORDER BY `st`.`team` DESC LIMIT 1'
)
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `battle` = "' . $tbtl [ 'id' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
$nextteam = $lstm [ 'team' ] + 1 ;
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `team` = "' . $nextteam . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `x` = "' . $bot [ 'x' ] . '", `y` = "' . $bot [ 'y' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2023-10-13 15:02:45 +00:00
2022-08-25 11:23:36 +00:00
if ( $this -> info [ 'bsid' ] > 0 ) {
2023-01-28 02:24:37 +00:00
$me_real = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $this -> userinfo [ 'id' ] . '" AND `login` = "' . $this -> userinfo [ 'login' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
);
$usr_real = mysql_fetch_assoc (
mysql_query (
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $bot [ 'id' ] . '" AND `login` = "' . $bot [ 'login' ] . '" LIMIT 1'
)
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `tactic7`= 20.000 WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2023-01-10 16:29:32 +00:00
//Заносим в лог БС
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
2023-01-10 16:29:32 +00:00
$text = '{u1} вмешался в поединок напав на {u2} <a target=_blank href=/logs.php?log=' . $tbtl [ 'id' ] . ' >»»</a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$text = '{u1} вмешалася в поединок напав на {u2} <a target=_blank href=/logs.php?log=' . $tbtl [ 'id' ] . ' >»»</a>' ;
2022-08-25 11:23:36 +00:00
}
if ( isset ( $usr_real [ 'id' ])) {
$usrreal = '' ;
if ( $usr_real [ 'align' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$usrreal .= '<img src=//img.new-combats.tech/i/align/align' . $usr_real [ 'align' ] . '.gif width=12 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
if ( $usr_real [ 'clan' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$usrreal .= '<img src=//img.new-combats.tech/i/clan/' . $usr_real [ 'clan' ] . '.gif width=24 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
$usrreal .= '<b>' . $usr_real [ 'login' ] . '</b>[' . $usr_real [ 'level' ] . ']<a target=_blank href=/info/' . $usr_real [ 'id' ] . ' ><img width=12 heihgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$mereal = '<i>Невидимка</i>[??]' ;
2022-08-25 11:23:36 +00:00
}
if ( isset ( $me_real [ 'id' ])) {
$mereal = '' ;
if ( $me_real [ 'align' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$mereal .= '<img src=//img.new-combats.tech/i/align/align' . $me_real [ 'align' ] . '.gif width=12 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
if ( $me_real [ 'clan' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$mereal .= '<img src=//img.new-combats.tech/i/clan/' . $me_real [ 'clan' ] . '.gif width=24 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
$mereal .= '<b>' . $me_real [ 'login' ] . '</b>[' . $me_real [ 'level' ] . ']<a target=_blank href=/info/' . $me_real [ 'id' ] . ' ><img width=12 heihgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$mereal = '<i>Невидимка</i>[??]' ;
2022-08-25 11:23:36 +00:00
}
$text = str_replace ( '{u1}' , $mereal , $text );
$text = str_replace ( '{u2}' , $usrreal , $text );
2023-01-10 16:29:32 +00:00
//Добавляем в лог БС
2023-01-28 02:24:37 +00:00
mysql_query (
' INSERT INTO `bs_logs` ( `type` , `text` , `time` , `id_bs` , `count_bs` , `city` , `m` , `u` ) VALUES (
2023-08-30 14:58:56 +00:00
" 1 " , " ' . mysql_real_escape_string( $text ) . ' " , " ' . time() . ' " , " ' . $this->bs ['id'] . ' " , " ' . $this->bs ['count'] . ' " , " ' . $this->bs ['city'] . ' " ,
2022-08-25 11:23:36 +00:00
" ' . round( $this->bs ['money'] * 0.85, 2) . ' " , " ' . $i . ' "
2023-01-28 02:24:37 +00:00
) '
);
2022-08-25 11:23:36 +00:00
//
}
//
2023-10-13 15:02:45 +00:00
$this -> error = 'Нападаем ... <script>location="main.php?rnd=' . PassGen :: intCode () . '";</script>' ;
2022-08-25 11:23:36 +00:00
} else {
if ( $this -> info [ 'id2' ] == 1 ) {
$expB = 200 ;
}
$btl = [ 'players' => '' , 'timeout' => 40 , 'type' => 0 , 'invis' => 0 , 'noinc' => 0 , 'travmChance' => 0 , 'typeBattle' => 0 , 'addExp' => $expB , 'money' => 0 , 'inTurnir' => 0 ];
if ( $this -> info [ 'bsid' ] > 0 ) {
$btl [ 'inTurnir' ] = $this -> info [ 'bsid' ];
}
2023-10-13 15:02:45 +00:00
mysql_query (
2023-01-28 02:24:37 +00:00
' INSERT INTO `battle` ( `inTurnir` , `dungeon` , `dn_id` , `x` , `y` , `city` , `time_start` , `players` , `timeout` , `type` , `invis` , `noinc` , `travmChance` , `typeBattle` , `addExp` , `money` ) VALUES (
2022-08-25 11:23:36 +00:00
" ' . $btl['inTurnir'] . ' " ,
" ' . $this->info ['id2'] . ' " ,
" ' . $this->info ['id'] . ' " ,
" ' . $bot['x'] . ' " ,
" ' . $bot['y'] . ' " ,
2023-10-13 15:02:45 +00:00
" ' . $this->userinfo ['city'] . ' " ,
2022-08-25 11:23:36 +00:00
" ' . time() . ' " ,
" ' . $btl['players'] . ' " ,
" ' . $btl['timeout'] . ' " ,
" ' . $btl['type'] . ' " ,
" ' . $btl['invis'] . ' " ,
" ' . $btl['noinc'] . ' " ,
" ' . $btl['travmChance'] . ' " ,
" ' . $btl['typeBattle'] . ' " ,
" ' . $btl['addExp'] . ' " ,
2023-01-28 02:24:37 +00:00
" ' . $btl['money'] . ' " ) '
);
2022-08-25 11:23:36 +00:00
$btl_id = mysql_insert_id ();
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `x` = "' . $bot [ 'x' ] . '", `y` = "' . $bot [ 'y' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
'UPDATE `stats` SET `x` = "' . $bot [ 'x' ] . '", `y` = "' . $bot [ 'y' ] . '" WHERE `id` = "' . $bot [ 'id' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
if ( $btl_id > 0 ) {
2023-01-10 16:29:32 +00:00
//Добавляем ботов
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $bot [ 'id' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
mysql_query ( 'UPDATE `stats` SET `team` = "2" WHERE `id` = "' . $bot [ 'id' ] . '" LIMIT 1' );
2023-10-13 15:02:45 +00:00
if ( $this -> userstats [ 'hpNow' ] < 1 ) {
$this -> userstats [ 'hpNow' ] = 1 ;
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `hpNow` = "1" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `lose` = `lose` + 1 WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
}
if ( $bot [ 'hpNow' ] < 1 ) {
$bot [ 'hpNow' ] = 1 ;
2023-01-28 02:24:37 +00:00
mysql_query (
'UPDATE `stats` SET `hpNow` = "1" WHERE `id` = "' . $bot [ 'id' ] . '" LIMIT 1'
);
mysql_query (
'UPDATE `users` SET `lose` = `lose` + 1 WHERE `id` = "' . $bot [ 'id' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
}
if ( $this -> info [ 'bsid' ] > 0 ) {
2023-01-28 02:24:37 +00:00
$me_real = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $this -> userinfo [ 'id' ] . '" AND `login` = "' . $this -> userinfo [ 'login' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
);
$usr_real = mysql_fetch_assoc (
mysql_query (
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $bot [ 'id' ] . '" AND `login` = "' . $bot [ 'login' ] . '" LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
2023-01-10 16:29:32 +00:00
//Заносим в лог БС
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
2023-01-10 16:29:32 +00:00
$text = '{u1} напал на {u2} завязался бой <a target=_blank href=/logs.php?log=' . $btl_id . ' >»»</a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$text = '{u1} напала на {u2} завязался бой <a target=_blank href=/logs.php?log=' . $btl_id . ' >»»</a>' ;
2022-08-25 11:23:36 +00:00
}
if ( isset ( $usr_real [ 'id' ])) {
$usrreal = '' ;
if ( $usr_real [ 'align' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$usrreal .= '<img src=//img.new-combats.tech/i/align/align' . $usr_real [ 'align' ] . '.gif width=12 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
if ( $usr_real [ 'clan' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$usrreal .= '<img src=//img.new-combats.tech/i/clan/' . $usr_real [ 'clan' ] . '.gif width=24 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
$usrreal .= '<b>' . $usr_real [ 'login' ] . '</b>[' . $usr_real [ 'level' ] . ']<a target=_blank href=/info/' . $usr_real [ 'id' ] . ' ><img width=12 heihgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$mereal = '<i>Невидимка</i>[??]' ;
2022-08-25 11:23:36 +00:00
}
if ( isset ( $me_real [ 'id' ])) {
$mereal = '' ;
if ( $me_real [ 'align' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$mereal .= '<img src=//img.new-combats.tech/i/align/align' . $me_real [ 'align' ] . '.gif width=12 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
if ( $me_real [ 'clan' ] > 0 ) {
2023-03-31 18:30:14 +00:00
$mereal .= '<img src=//img.new-combats.tech/i/clan/' . $me_real [ 'clan' ] . '.gif width=24 height=15 >' ;
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
$mereal .= '<b>' . $me_real [ 'login' ] . '</b>[' . $me_real [ 'level' ] . ']<a target=_blank href=/info/' . $me_real [ 'id' ] . ' ><img width=12 heihgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$mereal = '<i>Невидимка</i>[??]' ;
2022-08-25 11:23:36 +00:00
}
$text = str_replace ( '{u1}' , $mereal , $text );
$text = str_replace ( '{u2}' , $usrreal , $text );
2023-01-10 16:29:32 +00:00
//Добавляем в лог БС
2023-01-28 02:24:37 +00:00
mysql_query (
' INSERT INTO `bs_logs` ( `type` , `text` , `time` , `id_bs` , `count_bs` , `city` , `m` , `u` ) VALUES (
2023-08-30 14:58:56 +00:00
" 1 " , " ' . mysql_real_escape_string( $text ) . ' " , " ' . time() . ' " , " ' . $this->bs ['id'] . ' " , " ' . $this->bs ['count'] . ' " , " ' . $this->bs ['city'] . ' " ,
2022-08-25 11:23:36 +00:00
" ' . round( $this->bs ['money'] * 0.85, 2) . ' " , " ' . $i . ' "
2023-01-28 02:24:37 +00:00
) '
);
2022-08-25 11:23:36 +00:00
//
}
2023-10-13 15:02:45 +00:00
$this -> error = 'Нападаем ... <script>location="main.php?rnd=' . PassGen :: intCode () . '";</script>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось создать поединок ...' ;
2022-08-25 11:23:36 +00:00
}
}
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось напасть ...' ;
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось напасть, слишком далеко (id' . $id . ') ...' ;
2022-08-25 11:23:36 +00:00
}
}
}
2023-10-13 15:02:45 +00:00
/**
* доступна - ли эта клетка для действий из $x1 , $y1 в $x2 , $y2 ?
* @ param int $x1
* @ param int $y1
* @ param int $x2
* @ param int $y2
* @ return bool
*/
public function cellIsGoodforAction ( int $x1 , int $y1 , int $x2 , int $y2 ) : bool
2022-08-25 11:23:36 +00:00
{
2023-10-13 15:02:45 +00:00
$c1 = self :: getDungeonMapCellRow ( $x1 , $y1 , $this -> info [ 'id2' ]);
$c2 = self :: getDungeonMapCellRow ( $x2 , $y2 , $this -> info [ 'id2' ]);
if ( empty ( $c1 ) || empty ( $c2 )) {
return false ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
return
$x1 === $x2 && $y1 === $y2 ||
$x1 === $x2 - 1 && $c1 [ 'go_1' ] === 1 || //right
$x1 === $x2 + 1 && $c1 [ 'go_2' ] === 1 || // left
$y1 === $y2 - 1 && $c1 [ 'go_3' ] === 1 || // up
$y1 === $y2 + 1 && $c1 [ 'go_4' ] === 1 ; // down
}
private static function getDungeonMapCellRow ( int $x , int $y , int $dungeonId ) : array
{
return Db :: getRow ( 'select * from dungeon_map where id_dng = ? and x = ? and y = ? limit 1' , [ $dungeonId , $x , $y ]) ? : [];
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//Предметы для БС
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
private function takeinv ( $id )
2022-08-25 11:23:36 +00:00
{
2023-01-28 02:24:37 +00:00
$obj = mysql_fetch_assoc (
mysql_query (
2023-08-30 14:58:56 +00:00
'SELECT * FROM `dungeon_items` WHERE `id` = "' . $id . '" AND `for_dn` = "0" AND `dn` = "' . $this -> info [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $obj [ 'id' ])) {
2023-10-13 15:02:45 +00:00
$this -> testLuck ( $id );
2023-08-30 14:58:56 +00:00
$fxv = [ 'luck_count' => mysql_fetch_assoc (
2023-01-28 02:24:37 +00:00
mysql_query (
2023-08-30 14:58:56 +00:00
'SELECT COUNT(*) FROM `dungeon_actions` WHERE `dn` = "' . $this -> info [ 'id' ] . '" AND `vars` = "luck_itm' . mysql_real_escape_string (
$id
) . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
2023-08-30 14:58:56 +00:00
), 'user_count' => mysql_fetch_assoc (
mysql_query ( 'SELECT COUNT(*) FROM `stats` WHERE `dnow` = "' . $this -> info [ 'id' ] . '" LIMIT 1' )
)];
if ( $obj [ 'user' ] == 0 && $fxv [ 'user_count' ][ 0 ] > $fxv [ 'luck_count' ][ 0 ] && $fxv [ 'user_count' ][ 0 ] > 1 && $this -> info [ 'bsid' ] == 0 ) {
2023-10-13 15:02:45 +00:00
$this -> error = 'Вы не можете сейчас поднять этот предмет, дождитесь завершения розыгрыша. Осталось ' . Conversion :: secondsToTimeout (
2023-08-30 14:58:56 +00:00
$obj [ 'time' ] - time () + 300
);
2023-10-13 15:02:45 +00:00
} elseif ( $this -> userinfo [ 'x' ] != $obj [ 'x' ] || $obj [ 'y' ] != $this -> userinfo [ 'y' ]) {
2023-08-30 14:58:56 +00:00
$this -> error = 'Предмет не найден ...' ;
} else {
if ( $obj [ 'take' ] > 0 ) {
$this -> error = 'Кто-то опередил вас ...' ;
} else {
2023-10-13 15:02:45 +00:00
if ( $obj [ 'user' ] > 0 && $obj [ 'user' ] != $this -> userinfo [ 'id' ] && $obj [ 'time' ] > time () - 300 ) {
2023-08-30 14:58:56 +00:00
$uo = mysql_fetch_assoc (
mysql_query (
'SELECT `id`,`login`,`sex` FROM `users` WHERE `id` = "' . $obj [ 'user' ] . '" LIMIT 1'
)
);
}
if ( isset ( $uo [ 'id' ])) {
$this -> error = 'Предмет предназначен для "' . $uo [ 'login' ] . '". Вы сможете забрать этот предмет, если ' ;
if ( $uo [ 'sex' ] == 1 ) {
$this -> error .= 'она ' ;
} else {
$this -> error .= 'он ' ;
}
$this -> error .= ' не поднимет е г о в течении ' . ceil (
5 - ( time () - $obj [ 'time' ]) / 60
) . ' мин.' ;
unset ( $uo );
} else {
$upd = mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `dungeon_items` SET `take` = "' . $this -> userinfo [ 'id' ] . '" WHERE `id` = "' . $obj [ 'id' ] . '" LIMIT 1'
2023-08-30 14:58:56 +00:00
);
if ( $upd ) {
$it = mysql_fetch_assoc (
mysql_query ( 'SELECT * FROM `items_main` WHERE `id` = "' . $obj [ 'item_id' ] . '" LIMIT 1' )
);
if ( isset ( $it [ 'id' ])) {
$data = '|noremont=1|frompisher=' . $this -> info [ 'id2' ];
if ( $it [ 'ts' ] != 0 ) {
2023-10-13 15:02:45 +00:00
$data .= '|sudba=' . $this -> userinfo [ 'login' ];
2023-08-30 14:58:56 +00:00
}
if ( $obj [ 'data' ] != '' ) {
$data .= $obj [ 'data' ];
}
2023-10-13 15:02:45 +00:00
$data = str_replace ( '|sudba=-1' , '|sudba=' . $this -> userinfo [ 'login' ] . '' , $data );
2023-08-30 14:58:56 +00:00
2023-10-13 15:02:45 +00:00
$idl = ItemsModel :: addItem ( $obj [ 'item_id' ], $this -> userinfo [ 'id' ], $data , $obj );
2023-08-30 14:58:56 +00:00
if ( $obj [ 'del' ] > 0 ) {
mysql_query (
'UPDATE `items_users` SET `dn_delete` = 1 WHERE `id` = "' . $idl . '" LIMIT 1'
);
}
unset ( $idl );
if ( $this -> info [ 'bsid' ] == 0 ) {
2023-10-13 15:02:45 +00:00
$rtxt = '<b>' . $this -> userinfo [ 'login' ] . '</b> поднял предмет "' . $it [ 'name' ] . '"' ;
2023-08-30 14:58:56 +00:00
if ( $obj [ 'quest' ] > 0 ) {
$rtxt .= ' (Квест)' ;
}
$this -> sys_chat ( $rtxt );
}
$this -> error = 'Вы подняли "' . $it [ 'name' ] . '"' ;
} else {
$this -> error = 'Н е удалось найти предмет ...' ;
}
} else {
$this -> error = 'Н е удалось добавить предмет в инвентарь ...' ;
}
}
}
}
}
}
2023-10-13 15:02:45 +00:00
/**
* добавляем предмет в пещеру ( возможно выпал из бота или из сундука )
* @ param array $i
* @ return void
*/
private function addItem ( array $i ) : void
2023-08-30 14:58:56 +00:00
{
2023-10-13 15:02:45 +00:00
Db :: sql ( 'insert into dungeon_items (dn, user, item_id, time, x, y, bot, del) values (?,?,?,unix_timestamp(),?,?,0,?)' ,
[ $this -> info [ 'id' ], $i [ 'uid' ], $i [ 'iid' ], $i [ 'x' ], $i [ 'y' ], ( int ) $i [ 'del' ]]);
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
private function takeit ( $id )
2023-08-30 14:58:56 +00:00
{
2023-10-13 15:02:45 +00:00
$u = User :: start ();
2023-08-30 14:58:56 +00:00
$obj = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `dungeon_obj` WHERE `id` = "' . $id . '" AND `for_dn` = "0" AND `dn` = "' . $this -> info [ 'id' ] . '" LIMIT 1'
)
);
if ( isset ( $obj [ 'id' ])) {
$tbot = mysql_fetch_assoc (
mysql_query (
2023-09-30 14:53:26 +00:00
'SELECT id2 FROM `dungeon_bots` WHERE `x` = "' . $obj [ 'x' ] . '" AND `y` = "' . $obj [ 'y' ] . '" AND `dn` = "' . $this -> info [ 'id' ] . '" AND `for_dn` = "0" AND `delete` = "0" LIMIT 1'
2023-08-30 14:58:56 +00:00
)
);
$i = 0 ;
# Создаем МАССИВ { $act_sl['save_pos'] = "save_pos" }или { $act_sl['port'] = "10:20" }
$act_sl = [];
$act_sm = explode ( '|' , $obj [ 'action' ]);
while ( $i < count ( $act_sm )) {
$s = explode ( ':' , $act_sm [ $i ]);
if ( isset ( $s [ 1 ]) && $s [ 1 ] != '' ) {
$act_sl [ $s [ 0 ]] = $s [ 1 ];
} else {
$act_sl [ $s [ 0 ]] = $s [ 0 ];
}
$i ++ ;
2022-08-25 11:23:36 +00:00
}
if ( isset ( $tbot [ 'id2' ])) {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось, что-то или кто-то мешает ...' ;
2023-10-13 15:02:45 +00:00
} elseif ( ! $this -> cellIsGoodforAction ( $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $obj [ 'x' ], $obj [ 'y' ])) {
2023-01-10 16:29:32 +00:00
$this -> error = 'Н е удалось, слишком далеко ...!' ;
2022-08-25 11:23:36 +00:00
} else {
$a = explode ( '|' , $obj [ 'action' ]);
$r = '' ;
$i = 0 ;
while ( $i < count ( $a )) {
$s = explode ( ':' , $a [ $i ]);
if ( $s [ 0 ] == 'kill_bot' ) {
2023-01-10 16:29:32 +00:00
//Требуется убить ботов
2022-08-25 11:23:36 +00:00
$t = explode ( ',' , $s [ 1 ]);
$tr_gd = 0 ;
2023-01-10 16:29:32 +00:00
//Проверяем кого нужно убить и убили-ли
2022-08-25 11:23:36 +00:00
$j = 1 ;
$jn = 0 ;
while ( $j < count ( $t )) {
$itm = explode ( '.' , $t [ $j ]);
//[0] - x , [1] - y
2023-01-28 02:24:37 +00:00
$bot_itm = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `u`.`id2`,`st`.`login` FROM `dungeon_bots` AS `u` LEFT JOIN `test_bot` AS `st` ON (`u`.`id_bot` = `st`.`id`) WHERE `u`.`dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `u`.`x` = "' . $itm [ 0 ] . '" AND `u`.`y` = "' . $itm [ 1 ] . '" AND `u`.`delete` = "0" LIMIT 10'
2023-01-28 02:24:37 +00:00
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $bot_itm [ 'id2' ])) {
$jn ++ ;
}
$j ++ ;
}
if ( $jn == 0 ) {
$tr_gd = 1 ;
}
unset ( $itm , $bot_itm , $jn );
if ( $tr_gd == 0 ) {
if ( $t [ 0 ] == '0' ) {
2023-01-10 16:29:32 +00:00
$r .= 'Н е удалось, что-то или кто-то мешает ...' ;
2022-08-25 11:23:36 +00:00
} else {
$r .= $t [ 0 ];
}
$i = count ( $a );
}
} elseif ( $s [ 0 ] == 'kill_bot_d' ) {
2023-01-10 16:29:32 +00:00
//Требуется убить ботов (все боты нападают , если что-то не так )
2022-08-25 11:23:36 +00:00
$t = explode ( ',' , $s [ 1 ]);
$tr_gd = 0 ;
2023-01-10 16:29:32 +00:00
//Проверяем кого нужно убить и убили-ли
2022-08-25 11:23:36 +00:00
$j = 1 ;
$jn = 0 ;
while ( $j < count ( $t )) {
$itm = explode ( '.' , $t [ $j ]);
//[0] - x , [1] - y
2023-01-28 02:24:37 +00:00
$bot_itm_sp = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `u`.*,`st`.* FROM `dungeon_bots` AS `u` LEFT JOIN `test_bot` AS `st` ON (`u`.`id_bot` = `st`.`id`) WHERE `u`.`dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `u`.`x` = "' . $itm [ 0 ] . '" AND `u`.`y` = "' . $itm [ 1 ] . '" AND `u`.`delete` = "0" LIMIT 50'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
while ( $bot_itm = mysql_fetch_assoc ( $bot_itm_sp )) {
$jn ++ ;
2023-10-13 15:02:45 +00:00
$this -> botAtack ( $bot_itm , $this -> userinfo , 1 );
2022-08-25 11:23:36 +00:00
}
$j ++ ;
}
if ( $jn == 0 ) {
$tr_gd = 1 ;
}
unset ( $itm , $bot_itm , $jn );
if ( $tr_gd == 0 ) {
if ( $t [ 0 ] == '0' ) {
2023-01-10 16:29:32 +00:00
$r .= 'Н е удалось, что-то или кто-то мешает ...' ;
2022-08-25 11:23:36 +00:00
} else {
$r .= $t [ 0 ];
}
2023-01-10 16:29:32 +00:00
$r .= ' Монстры начали атаковать вас!' ;
2022-08-25 11:23:36 +00:00
$i = count ( $a );
}
} elseif ( $s [ 0 ] == 'ditm' ) {
2023-01-10 16:29:32 +00:00
//требует предмет для действия
2022-08-25 11:23:36 +00:00
$j = 0 ;
$t = explode ( ',' , $s [ 1 ]);
$tr_gd = 1 ;
while ( $j < count ( $t )) {
$itm = explode ( '=' , $t [ $j ]);
2023-01-28 02:24:37 +00:00
$uitm = mysql_fetch_array (
mysql_query ( 'SELECT `name` FROM `items_main` WHERE `id` = "' . $itm [ 0 ] . '" LIMIT 1' )
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `items_users` SET `delete` = "' . time () . '" WHERE `item_id` = "' . $itm [ 0 ] . '" AND `uid` = "' . $this -> userinfo [ 'id' ] . '" AND (`delete` = 0 OR `delete` = 100) AND `inShop` = 0 AND `inTransfer` = 0 AND `inOdet` = 0 LIMIT ' . $itm [ 1 ]
2023-01-28 02:24:37 +00:00
);
2023-01-10 16:29:32 +00:00
$r .= 'Предмет "<b>' . $uitm [ 'name' ] . '</b>" (x' . $itm [ 1 ] . ') был утрачен...<br>' ;
2022-08-25 11:23:36 +00:00
$j ++ ;
}
} elseif ( $s [ 0 ] == 'tritm' ) {
2023-01-10 16:29:32 +00:00
//требует предмет для действия
2022-08-25 11:23:36 +00:00
$j = 0 ;
$t = explode ( ',' , $s [ 1 ]);
$tr_gd = 1 ;
while ( $j < count ( $t )) {
$itm = explode ( '=' , $t [ $j ]);
2023-01-28 02:24:37 +00:00
$uitm = mysql_fetch_array (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT COUNT(`id`) FROM `items_users` WHERE `item_id` = "' . $itm [ 0 ] . '" AND `uid` = "' . $this -> userinfo [ 'id' ] . '" AND (`delete` = 0 OR `delete` = 100) AND `inShop` = 0 AND `inTransfer` = 0 AND `inOdet` = 0 LIMIT ' . $itm [ 1 ]
2023-01-28 02:24:37 +00:00
)
);
2022-08-25 11:23:36 +00:00
$uitm = $uitm [ 0 ];
if ( $uitm < $itm [ 1 ]) {
$tr_gd = 0 ;
2023-01-28 02:24:37 +00:00
$uitm = mysql_fetch_assoc (
mysql_query (
'SELECT `name` FROM `items_main` WHERE `id` = "' . $itm [ 0 ] . '" LIMIT 1'
)
);
2023-01-10 16:29:32 +00:00
$r .= 'Требуется предмет "<b>' . $uitm [ 'name' ] . '</b>" (x' . $itm [ 1 ] . ')<br>' ;
2022-08-25 11:23:36 +00:00
}
$j ++ ;
}
if ( rand ( 0 , 10000 ) > $itm [ 2 ] * 100 ) {
$tr_gd = 0 ;
2023-01-10 16:29:32 +00:00
$r .= 'Странно, но ничего не произошло...<br>' ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
if ( $tr_gd != 1 ) {
2022-08-25 11:23:36 +00:00
$i = count ( $a );
}
} elseif ( $s [ 0 ] == 'repl_ptp' ) {
2024-05-14 14:24:54 +00:00
require_once 'dnaction/_dungeon_replace.php' ;
2022-08-25 11:23:36 +00:00
die ();
} elseif ( $s [ 0 ] == 'add_eff' ) {
2023-01-10 16:29:32 +00:00
//Кастуем эффект
2022-08-25 11:23:36 +00:00
$t = explode ( ',' , $s [ 1 ]);
$j = 0 ;
while ( $j < count ( $t )) {
$itm = explode ( '=' , $t [ $j ]);
2024-05-14 14:24:54 +00:00
$ch = ActionModel :: testCount ([ " uid = { $this -> userinfo [ 'id' ] } " , " vars = add_eff_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 2 ]); //кол-во прошлых попыток
$ch2 = ActionModel :: testCount ([ " vars = add_eff_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 4 ]); //кол-во прошлых попыток (все юзеры)
2022-08-25 11:23:36 +00:00
if (( $ch2 < $itm [ 4 ] || $itm [ 4 ] == 0 ) && $ch < $itm [ 2 ]) {
if ( $itm [ 1 ] * 100 >= rand ( 0 , 10000 )) {
2023-01-10 16:29:32 +00:00
//удачно
2023-01-28 02:24:37 +00:00
$eff_d = mysql_fetch_assoc (
mysql_query (
'SELECT `id2`,`mname` FROM `eff_main` WHERE `id2` = "' . $itm [ 0 ] . '" LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $eff_d [ 'id2' ])) {
2023-01-10 16:29:32 +00:00
//добавляем эффект
2023-10-13 15:02:45 +00:00
$us = ( new Magic ()) -> addEffect ( $this -> userinfo [ 'id' ], $itm [ 0 ], 1 );
2022-08-25 11:23:36 +00:00
if ( $us [ 0 ] == 1 ) {
2023-01-10 16:29:32 +00:00
$r .= '<div>Н а В а с наложили заклятие "' . $eff_d [ 'mname' ] . '".</div>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$r .= '<div>Что-то пошло не так... Ощущается чье-то присутствие...</div>' ;
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
$r .= '<div>Что-то пошло не так... Слышен чей-то вой...</div>' ;
2022-08-25 11:23:36 +00:00
}
unset ( $eff_d , $us );
} else {
2023-01-10 16:29:32 +00:00
//не удачно
$r .= '<div>Н е удалось...</div>' ;
2022-08-25 11:23:36 +00:00
}
2023-01-28 02:24:37 +00:00
$u -> addAction (
2023-10-13 15:02:45 +00:00
time (), 'add_eff_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
//уже нельзя юзать
$r .= '<div>Что-то пошло не так...</div>' ;
2022-08-25 11:23:36 +00:00
}
unset ( $ch , $ch2 );
$j ++ ;
}
} elseif ( $s [ 0 ] == 'mfast' ) {
2023-01-10 16:29:32 +00:00
//Добавляем баф //Ловушки и бафы
2022-08-25 11:23:36 +00:00
$j = 0 ;
$t = explode ( ',' , $s [ 1 ]);
while ( $j < count ( $t )) {
$itm = explode ( '=' , $t [ $j ]);
2024-05-14 14:24:54 +00:00
$ch = ActionModel :: testCount ([ " vars = bafit_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 2 ]); //кол-во прошлых попыток
2022-08-25 11:23:36 +00:00
if ( $ch < $itm [ 3 ]) {
if ( $itm [ 2 ] * 1000 >= rand ( 1 , 100000 )) {
if ( $itm [ 0 ] == 'hpNow' ) {
$mm = explode ( 'r' , $itm [ 1 ]);
if ( $mm [ 1 ] != 0 ) {
$itm [ 1 ] = rand ( $mm [ 0 ], $mm [ 1 ]);
}
if ( $itm [ 1 ] < 0 ) {
2023-01-10 16:29:32 +00:00
$r .= '<div>Вы попали в ловушку... Здоровье: <b>' . $itm [ 1 ] . ' HP</b></div>' ;
2022-08-25 11:23:36 +00:00
} elseif ( $itm [ 1 ] > 0 ) {
2023-01-10 16:29:32 +00:00
$r .= '<div>Вы прикоснулись к магии... Здоровье: <b>+' . $itm [ 1 ] . ' HP</b></div>' ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
$this -> userinfo [ 'hpNow' ] += $itm [ 1 ];
if ( $this -> userinfo [ 'hpNow' ] < 1 ) {
2023-01-10 16:29:32 +00:00
$r .= '<div>Вы перемещены в точку возрождения...</div>' ;
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `hpNow` = "' . $this -> userinfo [ 'hpNow' ] . '",`x` = "' . $this -> userinfo [ 'res_x' ] . '",`y` = "' . $this -> userinfo [ 'res_y' ] . '",`s` = "' . $this -> userinfo [ 'res_s' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
} else {
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `hpNow` = "' . $this -> userinfo [ 'hpNow' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
}
}
}
2023-01-28 02:24:37 +00:00
$u -> addAction (
2023-10-13 15:02:45 +00:00
time (), 'bafit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//записываем попытку
2022-08-25 11:23:36 +00:00
$j ++ ;
}
} elseif ( $s [ 0 ] == 'save_pos' ) {
if ( isset ( $act_sl [ 'port' ])) {
$itm = explode ( '=' , $act_sl [ 'port' ]);
$obj [ 'x' ] = $itm [ 0 ];
$obj [ 'y' ] = $itm [ 1 ];
}
2023-01-10 16:29:32 +00:00
#$r .= 'Позиция сохранена. Теперь после смерти вы оживете здесь.';
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `res_x` = "' . $obj [ 'x' ] . '",`res_y` = "' . $obj [ 'y' ] . '",`res_s` = "' . $this -> userinfo [ 's' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
} elseif ( $s [ 0 ] == 'look_text' ) {
$itm = explode ( '=' , $s [ 1 ]);
$r .= $itm [ rand ( 0 , count ( $itm ) - 1 )];
} elseif ( $s [ 0 ] == 'save_pos_xy' ) {
$itm = explode ( '=' , $s [ 1 ]);
2023-10-13 15:02:45 +00:00
$this -> userinfo [ 'res_x' ] = $itm [ 0 ];
$this -> userinfo [ 'res_y' ] = $itm [ 1 ];
2023-01-28 02:24:37 +00:00
$upd = mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `res_x` = "' . $this -> userinfo [ 'x' ] . '",`res_y` = "' . $this -> userinfo [ 'y' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
if ( $upd ) {
2023-01-10 16:29:32 +00:00
$r .= 'Вы куда-то переместились... на этот раз удачно...<br>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$r .= 'Что-то здесь не так ...' ;
2022-08-25 11:23:36 +00:00
}
} elseif ( $s [ 0 ] == 'port' ) {
2023-01-10 16:29:32 +00:00
//телепортирует пользователя
2022-08-25 11:23:36 +00:00
$itm = explode ( '=' , $s [ 1 ]);
2023-10-13 15:02:45 +00:00
$this -> userinfo [ 'x' ] = $itm [ 0 ];
$this -> userinfo [ 'y' ] = $itm [ 1 ];
2023-01-28 02:24:37 +00:00
$upd = mysql_query (
' UPDATE `stats` SET
2023-10-13 15:02:45 +00:00
`x` = " ' . $this->userinfo ['x'] . ' " , `y` = " ' . $this->userinfo ['y'] . ' "
WHERE `id` = " ' . $this->userinfo ['id'] . ' " LIMIT 1 '
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
if ( $upd ) {
2023-01-10 16:29:32 +00:00
$r .= 'Вы куда-то переместились... на этот раз удачно...<br>' ;
2022-08-25 11:23:36 +00:00
} else {
2023-01-10 16:29:32 +00:00
$r .= 'Что-то здесь не так ...' ;
2022-08-25 11:23:36 +00:00
}
} elseif ( $s [ 0 ] == 'save_port' ) {
$itm = explode ( '=' , $s [ 1 ]);
2023-10-13 15:02:45 +00:00
$this -> userinfo [ 'res_x' ] = $itm [ 0 ];
$this -> userinfo [ 'res_y' ] = $itm [ 1 ];
2023-01-28 02:24:37 +00:00
$upd = mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `res_x` = "' . $this -> userinfo [ 'res_x' ] . '", `res_y` = "' . $this -> userinfo [ 'res_y' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
} elseif ( $s [ 0 ] == 'itm' ) {
2023-01-10 16:29:32 +00:00
//Добавляем предмет
2022-08-25 11:23:36 +00:00
$j = 0 ;
$t = explode ( ',' , $s [ 1 ]);
while ( $j < count ( $t )) {
$itm = explode ( '=' , $t [ $j ]);
2024-05-14 14:24:54 +00:00
$ch = ActionModel :: testCount ([ " uid = { $this -> userinfo [ 'id' ] } " , " vars = takeit_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 2 ]); //кол-во прошлых попыток
2022-08-25 11:23:36 +00:00
if ( $ch >= $itm [ 2 ]) {
2023-01-10 16:29:32 +00:00
//закончились попытки
$r = 'ничего не произошло...<br>' ;
2022-08-25 11:23:36 +00:00
} else {
if ( $itm [ 1 ] * 1000 >= rand ( 1 , 100000 )) {
2023-01-10 16:29:32 +00:00
//Случайный предмет (Башня смерти)
2022-08-25 11:23:36 +00:00
if ( $itm [ 0 ] == 'random1' ) {
$itm [ 0 ] = $this -> itbs [ rand ( 0 , count ( $this -> itbs ))];
}
2023-01-10 16:29:32 +00:00
//удачная попытка
2023-01-28 02:24:37 +00:00
$it = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `items_main` WHERE `id`="' . (( int ) $itm [ 0 ]) . '" LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
if ( isset ( $it [ 'id' ])) {
2023-01-10 16:29:32 +00:00
$r .= 'Вы обнаружили предмет "<b>' . $it [ 'name' ] . '</b>".<br>' ;
2024-05-14 14:24:54 +00:00
ItemsModel :: addItem ( $it [ 'id' ], $this -> userinfo [ 'id' ]);
//ItemsModel::addItem(['uid' => $this->userinfo['id'], 'iid' => $it['id'], 'x' => $this->userinfo['x'], 'y' => $this->userinfo['y'], 'del' => (int)$itm[4]]);
2022-08-25 11:23:36 +00:00
}
} else {
2023-01-10 16:29:32 +00:00
//неудачная попытка
$r .= 'Вы ничего не нашли ...<br>' ;
2022-08-25 11:23:36 +00:00
}
2023-01-28 02:24:37 +00:00
$u -> addAction (
2023-10-13 15:02:45 +00:00
time (), 'takeit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
}
2023-01-10 16:29:32 +00:00
//записываем попытку
2022-08-25 11:23:36 +00:00
$j ++ ;
}
} elseif ( $s [ 0 ] == 'itm1' ) {
2023-01-10 16:29:32 +00:00
//Добавляем предмет , только 1 предмет из всех и все юзеры могут тоже
2022-08-25 11:23:36 +00:00
$t = explode ( ',' , $s [ 1 ]);
$j = rand ( 0 , count ( $t ));
2024-05-14 14:24:54 +00:00
$itm = explode ( '=' , $t [ $j ]);
$ch = ActionModel :: testCount ([ " uid = { $this -> userinfo [ 'id' ] } " , " vars = takeit_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 2 ]); //кол-во прошлых попыток
2022-08-25 11:23:36 +00:00
2024-05-14 14:24:54 +00:00
if ( $ch >= $itm [ 2 ]) {
//закончились попытки
$r .= 'Странно, но ничего не произошло... <br>' ;
} else {
if ( $itm [ 1 ] * 1000 >= rand ( 1 , 100000 )) {
2022-08-25 11:23:36 +00:00
2024-05-14 14:24:54 +00:00
//Случайный предмет (Башня смерти)
if ( $itm [ 0 ] == 'random1' ) {
$itm [ 0 ] = $this -> itbs [ rand ( 0 , count ( $this -> itbs ))];
}
//удачная попытка
$it = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `items_main` WHERE `id`="' . (( int ) $itm [ 0 ]) . '" LIMIT 1'
)
);
if ( isset ( $it [ 'id' ])) {
$r .= 'Вы обнаружили предмет "<b>' . $it [ 'name' ] . '</b>".<br>' ;
2023-01-28 02:24:37 +00:00
$u -> addAction (
2023-10-13 15:02:45 +00:00
time (), 'takeit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
2023-01-28 02:24:37 +00:00
);
2024-05-14 14:24:54 +00:00
ItemsModel :: addItem ( $it [ 'id' ], $this -> userinfo [ 'id' ]);
//ItemsModel::addItem(['uid' => $this->userinfo['id'], 'iid' => $it['id'], 'x' => $this->userinfo['x'], 'y' => $this->userinfo['y'], 'del' => (int)$itm[4]]);
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
} else {
//неудачная попытка
$u -> addAction (
time (), 'takeit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
);
$r .= 'Вы ничего не нашли ... <br>' ;
2022-08-25 11:23:36 +00:00
}
}
2024-05-14 14:24:54 +00:00
2022-08-25 11:23:36 +00:00
} elseif ( $s [ 0 ] == 'itm2' ) {
2023-01-10 16:29:32 +00:00
//Добавляем предмет , только 1 предмет из всех и только 1 юзер может поднять
2024-05-14 14:24:54 +00:00
2022-08-25 11:23:36 +00:00
$t = explode ( ',' , $s [ 1 ]);
$j = rand ( 0 , count ( $t ) - 1 );
2024-05-14 14:24:54 +00:00
$itm = explode ( '=' , $t [ $j ]);
$ch = ActionModel :: testCount ([ " vars = takeit_ { $this -> info [ 'id' ] } _ { $obj [ 'id' ] } " ], 1 + ( int ) $itm [ 2 ]); //кол-во прошлых попыток
2022-08-25 11:23:36 +00:00
2024-05-14 14:24:54 +00:00
if ( $ch >= $itm [ 2 ]) {
//закончились попытки
$r .= 'Ничего не произошло... <br>' ;
} else {
if ( $itm [ 1 ] * 1000 >= rand ( 1 , 100000 )) {
2022-08-25 11:23:36 +00:00
2024-05-14 14:24:54 +00:00
//Случайный предмет (Башня смерти)
if ( $itm [ 0 ] == 'random1' ) {
$itm [ 0 ] = $this -> itbs [ rand ( 0 , count ( $this -> itbs ))];
}
//удачная попытка
$it = mysql_fetch_assoc (
mysql_query (
'SELECT * FROM `items_main` WHERE `id`="' . (( int ) $itm [ 0 ]) . '" LIMIT 1'
)
);
if ( isset ( $it [ 'id' ])) {
$r .= 'Вы обнаружили предмет "<b>' . $it [ 'name' ] . '</b>".<br>' ;
2023-01-28 02:24:37 +00:00
$u -> addAction (
2023-10-13 15:02:45 +00:00
time (), 'takeit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
2023-01-28 02:24:37 +00:00
);
2024-05-14 14:24:54 +00:00
ItemsModel :: addItem ( $it [ 'id' ], $this -> userinfo [ 'id' ]);
//ItemsModel::addItem(['uid' => $this->userinfo['id'], 'iid' => $it['id'], 'x' => $this->userinfo['x'], 'y' => $this->userinfo['y'], 'del' => (int)$itm[4]]);
2022-08-25 11:23:36 +00:00
}
2024-05-14 14:24:54 +00:00
} else {
//неудачная попытка
$u -> addAction (
time (), 'takeit_' . $this -> info [ 'id' ] . '_' . $obj [ 'id' ], $this -> userinfo [ 'city' ]
);
$r .= 'Вы ничего не нашли ... <br>' ;
2022-08-25 11:23:36 +00:00
}
}
} elseif ( $s [ 0 ] == 'fileact' ) {
require ( 'dnaction/' . $s [ 1 ] . '.php' );
}
$i ++ ;
}
2024-05-14 14:24:54 +00:00
$r = rtrim ( $r , '\<br>' );
2022-08-25 11:23:36 +00:00
if ( $r == '' ) {
2023-01-10 16:29:32 +00:00
$r = 'В этот раз не удалось найти что-либо еще' ;
2022-08-25 11:23:36 +00:00
}
$this -> error = $r ;
}
} else {
2023-01-10 16:29:32 +00:00
$this -> error = 'Предмет не найден ...' ;
2022-08-25 11:23:36 +00:00
}
}
2023-09-30 14:53:26 +00:00
public function botAtack ( $bot , $uid , $bs ) : void
2022-08-25 11:23:36 +00:00
{
2023-09-30 14:53:26 +00:00
### FIXME ВОЗМОЖНО тут потерялись [dungeon_bots.bot_group], ячейка отвечающая за группу разных ботов. Н е вижу где это ипользуется. Тут только однотипные боты.
global $u ;
2022-08-25 11:23:36 +00:00
2023-09-30 14:53:26 +00:00
$battleId = Db :: getValue ( 'select users.battle from users left join battle on users.battle = battle.id where users.id = ? and team_win = -1' , [ $uid [ 'id' ]]);
2023-08-30 14:58:56 +00:00
2023-09-30 14:53:26 +00:00
if ( empty ( $battleId )) { //Создаем поединок
Db :: sql ( 'insert into battle (dungeon, dn_id, x, y, time_start, type) values (?,?,?,?,unix_timestamp(), 0)' , [ $this -> info [ 'id2' ], $this -> info [ 'id' ], $bot [ 'x' ], $bot [ 'y' ]]);
$battleId = Db :: lastInsertId ();
2023-08-30 14:58:56 +00:00
2023-09-30 14:53:26 +00:00
if ( $battleId > 0 ) { //Добавляем ботов
$addBotQuantity = 0 ;
$dungeonBots = Db :: getRow ( 'select id_bot, colvo from dungeon_bots where for_dn = 0 and dn = ? and id2 = ?' , [ $this -> info [ 'id' ], $bot [ 'id2' ]]); //Только тот, который напал и жив ли он?
Db :: sql ( 'update dungeon_bots set inBattle = ? where id2 = ?' , [ $battleId , $bot [ 'id2' ]]);
for ( $i = 1 ; $i <= $dungeonBots [ 'colvo' ]; $i ++ ) {
$k = $u -> addNewbot ( $dungeonBots [ 'id_bot' ], null , null );
if ( ! $k ) {
continue ;
2022-08-25 11:23:36 +00:00
}
2023-09-30 14:53:26 +00:00
Db :: sql ( 'update users left join stats on users.id = stats.id set battle = ?, team = 2 where users.id = ?' , [ $battleId , $k [ 'id' ]]);
$addBotQuantity ++ ;
2022-08-25 11:23:36 +00:00
}
2023-09-30 14:53:26 +00:00
if ( $addBotQuantity > 0 ) {
Db :: sql ( 'update users left join stats on users.id = stats.id set battle = ?, team = 1 where users.id = ?' , [ $battleId , $uid [ 'id' ]]);
2023-08-30 14:58:56 +00:00
}
2022-08-25 11:23:36 +00:00
}
2023-09-30 14:53:26 +00:00
2023-08-30 14:58:56 +00:00
} else {
//Добавляем ботов
2023-09-30 14:53:26 +00:00
$dungeonBots = Db :: getRow ( 'select id_bot, colvo from dungeon_bots where for_dn = 0 and dn = ? and id2 = ?' , [ $this -> info [ 'id' ], $bot [ 'id2' ]]);
Db :: sql ( 'update dungeon_bots set inBattle = ? where id2 = ?' , [ $battleId , $bot [ 'id2' ]]);
$addBotQuantity = 0 ;
$botNamesArray = [];
for ( $i = 1 ; $i <= $dungeonBots [ 'colvo' ]; $i ++ ) {
$k = $u -> addNewbot ( $dungeonBots [ 'id_bot' ], null , null );
if ( ! $k ) {
continue ;
2023-08-30 14:58:56 +00:00
}
2023-09-30 14:53:26 +00:00
$botNamesArray [] = $k [ 'login' ];
Db :: sql ( 'update users left join stats on users.id = stats.id set battle = ?, team = 2 where users.id = ?' , [ $battleId , $k [ 'id' ]]);
$addBotQuantity ++ ;
}
if ( $addBotQuantity > 0 ) {
$turnId = Db :: getValue ( 'select id_hod from battle_logs where battle = ? order by id_hod desc limit 1' , [ $battleId ]);
if ( $turnId > 0 ) {
Db :: sql (
" insert into battle_logs (time, battle, id_hod, text, vars, zona1, zona2, zonb1, zonb2, type) values (unix_timestamp(),?,?,?,concat('time1=', unix_timestamp()),'','','','',1) " ,
[
$battleId ,
$turnId + 1 ,
'{tm1} В поединок вмешались: <strong>' . implode ( ', ' , $botNamesArray ) . '</strong>.' ,
]
2023-08-30 14:58:56 +00:00
);
}
2023-09-30 14:53:26 +00:00
Db :: sql ( 'update users left join stats on users.id = stats.id set battle = ?, team = 1 where users.id = ?' , [ $battleId , $uid [ 'id' ]]);
2022-08-25 11:23:36 +00:00
}
}
}
2023-10-13 15:02:45 +00:00
/**
* @ param int $a
* @ param User $user
* @ return void
*/
private function look ( int $a , User $user ) : void
2022-08-25 11:23:36 +00:00
{
2023-10-13 15:02:45 +00:00
if ( ! in_array ( $a , [ 1 , 2 ])) {
return ;
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
match ( $a ) {
1 => match ( $this -> gs ) {
1 => $this -> gs = 2 ,
2 => $this -> gs = 3 ,
3 => $this -> gs = 4 ,
4 => $this -> gs = 1 ,
},
2 => match ( $this -> gs ) {
1 => $this -> gs = 4 ,
2 => $this -> gs = 1 ,
3 => $this -> gs = 2 ,
4 => $this -> gs = 3 ,
},
};
Db :: sql ( 'update stats set s = ? where id = ?' , [ $this -> gs , $user -> info [ 'id' ]]);
$user -> info [ 's' ] = $this -> gs ;
}
//Розыгрыш предмета
2023-11-05 02:46:07 +00:00
private function testGo ( $id ) : void
2023-10-13 15:02:45 +00:00
{
match ( $id ) {
1 => $go = $this -> sg [ $this -> gs ][ 1 ], // up
2 => $go = $this -> sg [ $this -> gs ][ 3 ], // down
3 => $go = $this -> sg [ $this -> gs ][ 4 ], // right
4 => $go = $this -> sg [ $this -> gs ][ 2 ], // left
};
$thp = self :: getDungeonMapCellRow ( $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $this -> info [ 'id2' ]);
2023-08-30 14:58:56 +00:00
$ng = [ 4 => 1 , 2 => 2 , 1 => 3 , 3 => 4 ];
if ( isset ( $thp [ 'id' ]) && $thp [ 'go_' . $ng [ $go ]] == 0 ) {
$go = 0 ;
}
$tgo = [ 0 => 0 , 1 => 0 ];
if ( $go == 1 ) {
$tgo [ 1 ] += 1 ;
} elseif ( $go == 2 ) {
$tgo [ 0 ] -= 1 ;
} elseif ( $go == 3 ) {
$tgo [ 1 ] -= 1 ;
} elseif ( $go == 4 ) {
$tgo [ 0 ] += 1 ;
}
2023-10-13 15:02:45 +00:00
$tbot = $this -> getBot ( $this -> userinfo [ 'x' ] + ( int ) $tgo [ 0 ], $this -> userinfo [ 'y' ] + ( int ) $tgo [ 1 ], $this -> info [ 'id' ]);
if ( isset ( $tbot [ 'id2' ]) && $this -> userinfo [ 'admin' ] == 0 ) {
2023-08-30 14:58:56 +00:00
$go = 0 ;
}
2023-10-13 15:02:45 +00:00
$tmap = self :: getDungeonMapCellRow ( $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $this -> info [ 'id2' ]);
2023-08-30 14:58:56 +00:00
//наличие предмета
if ( $tmap [ 'tr_items' ] != '' ) {
$ti = explode ( ',' , $tmap [ 'tr_items' ]);
$i = 0 ;
$trnit = '' ;
while ( $i < count ( $ti )) {
$ti2 = explode ( '=' , $ti [ $i ]);
if ( $ti2 [ 0 ] > 0 && $ti2 [ 1 ] > 0 ) {
2023-10-13 15:02:45 +00:00
$num_rows = Db :: getValue ( 'select count(*) from items_users where uid = ? and inShop = 0 and item_id = ? limit ?' , [ $this -> userinfo [ 'id' ], ( int ) $ti2 [ 0 ], ( int ) $ti2 [ 1 ]]);
if ( $num_rows < ( int ) $ti2 [ 1 ] && $ti2 [ 2 ] != '0000' && $ti2 [ 2 ][ $ng [ $go ] - 1 ] == 1 ) {
$go = 0 ;
$trm = Db :: getValue ( 'select name from items_main where id = ?' , [( int ) $ti2 [ 0 ]]);
$trnit .= '"' . $trm . '", ' ;
2023-08-30 14:58:56 +00:00
}
}
$i ++ ;
}
if ( $trnit != '' ) {
$trnit = rtrim ( $trnit , ', ' );
$this -> error = 'У вас нет подходящего предмета. Требуется ' . $trnit ;
}
2022-08-25 11:23:36 +00:00
}
2023-08-30 14:58:56 +00:00
2023-10-13 15:02:45 +00:00
$tmGo = $this -> userinfo [ 'timeGo' ] - time (); //сколько секунд осталось
2023-08-30 14:58:56 +00:00
if ( $tmGo > 0 ) {
$go = 0 ;
$this -> error = 'Н е так быстро...' ;
}
2023-10-13 15:02:45 +00:00
if ( User :: start () -> aves [ 'now' ] >= User :: start () -> aves [ 'max' ]) {
2023-08-30 14:58:56 +00:00
$go = 0 ;
$this -> error = 'Вы не можете перемещаться, рюкзак переполнен ...' ;
}
if ( $go > 0 ) {
2023-10-13 15:02:45 +00:00
match ( $go ) {
1 => $this -> userinfo [ 'y' ] += 1 ,
2 => $this -> userinfo [ 'x' ] -= 1 ,
3 => $this -> userinfo [ 'y' ] -= 1 ,
4 => $this -> userinfo [ 'x' ] += 1 ,
};
if ( $this -> userstats [ 'speed_dungeon' ] > 0 ) {
$tmap [ 'timeGO' ] = round ( $tmap [ 'timeGO' ] / 100 * ( 100 - $this -> userstats [ 'speed_dungeon' ]));
2023-08-30 14:58:56 +00:00
if ( $tmap [ 'timeGO' ] < 2 ) {
$tmap [ 'timeGO' ] = 1 ;
}
}
2023-10-13 15:02:45 +00:00
$this -> userinfo [ 'timeGo' ] = time () + $tmap [ 'timeGO' ];
$this -> userinfo [ 'timeGoL' ] = time ();
$tmaps = Db :: getRow ( 'select id, x, y from dungeon_map where id = (select teleport from dungeon_map where id_dng = ? and x = ? and y = ?)' ,
[ $tmap [ 'id_dng' ], $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ]]);
if ( isset ( $tmaps [ 'id' ])) {
$this -> userinfo [ 'x' ] = $tmaps [ 'x' ];
$this -> userinfo [ 'y' ] = $tmaps [ 'y' ];
$this -> error = 'Вы переместились в другую комнату...' ;
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
Db :: sql ( 'update stats set x = ?, y = ?, timeGo = ?, timeGoL = ? where id = ?' ,
[ $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $this -> userinfo [ 'timeGo' ], $this -> userinfo [ 'timeGoL' ], $this -> userinfo [ 'id' ]]);
2023-08-30 14:58:56 +00:00
}
}
2023-10-13 15:02:45 +00:00
private function getBot ( int $x , int $y , int $dn )
{
return Db :: getRow ( 'select * from dungeon_bots where x = ? and y = ? and dn = ? and for_dn = 0' , [ $x , $y , $dn ]);
}
2023-08-30 14:58:56 +00:00
2023-10-13 15:02:45 +00:00
private function genMatix () : array
2023-08-30 14:58:56 +00:00
{
$r = [];
if ( $this -> gs == 1 ) {
//1; //смотрим прямо
$r [ 1 ] = $this -> getMatrix ( 0 , - 1 ); # слева от меня
$r [ 2 ] = $this -> getMatrix ( 0 , 0 ); # подомной
$r [ 3 ] = $this -> getMatrix ( 0 , 1 ); # справа от меня
$r [ 4 ] = $this -> getMatrix ( 1 , - 1 ); # слева +1 вперед
$r [ 5 ] = $this -> getMatrix ( 1 , 0 ); # передомной +1
$r [ 6 ] = $this -> getMatrix ( 1 , 1 ); # справа +1 вперед
$r [ 7 ] = $this -> getMatrix ( 2 , 1 ); # справа +2 вперед
$r [ 8 ] = $this -> getMatrix ( 2 , 0 ); # передомной +2
$r [ 9 ] = $this -> getMatrix ( 2 , - 1 ); # слева +2 вперед
$r [ 10 ] = $this -> getMatrix ( 3 , - 2 ); # слева через одну, +3 вперед
$r [ 11 ] = $this -> getMatrix ( 3 , - 1 ); # слева +3 вперед
$r [ 12 ] = $this -> getMatrix ( 3 , 0 ); # передомной +3
$r [ 13 ] = $this -> getMatrix ( 3 , 1 ); # справа +3 вперед
$r [ 14 ] = $this -> getMatrix ( 3 , 2 ); # справа через одну, +3 вперед
$r [ 15 ] = $this -> getMatrix ( 4 , 0 ); # передомной +4
$r [ 16 ] = $this -> getMatrix ( 4 , - 1 ); # слева +4 вперед
$r [ 17 ] = $this -> getMatrix ( 4 , 1 ); # справа +4 вперед
$r [ 18 ] = $this -> getMatrix ( 4 , 2 ); # справа через одну, +4 вперед
$r [ 19 ] = $this -> getMatrix ( 4 , - 2 ); # слева через одну, +4 вперед
} elseif ( $this -> gs == 2 ) {
//2; //смотрим лево
$r [ 1 ] = $this -> getMatrix ( - 1 , 0 );
$r [ 2 ] = $this -> getMatrix ( 0 , 0 );
$r [ 3 ] = $this -> getMatrix ( 1 , 0 );
$r [ 4 ] = $this -> getMatrix ( - 1 , - 1 );
$r [ 5 ] = $this -> getMatrix ( 0 , - 1 );
$r [ 6 ] = $this -> getMatrix ( 1 , - 1 );
$r [ 7 ] = $this -> getMatrix ( 1 , - 2 );
$r [ 8 ] = $this -> getMatrix ( 0 , - 2 );
$r [ 9 ] = $this -> getMatrix ( - 1 , - 2 );
$r [ 10 ] = $this -> getMatrix ( - 2 , - 3 );
$r [ 11 ] = $this -> getMatrix ( - 1 , - 3 );
$r [ 12 ] = $this -> getMatrix ( 0 , - 3 );
$r [ 13 ] = $this -> getMatrix ( 1 , - 3 );
$r [ 14 ] = $this -> getMatrix ( 2 , - 3 );
$r [ 15 ] = $this -> getMatrix ( 0 , - 4 );
$r [ 16 ] = $this -> getMatrix ( - 1 , - 4 );
$r [ 17 ] = $this -> getMatrix ( 1 , - 4 );
$r [ 18 ] = $this -> getMatrix ( 2 , - 4 );
$r [ 19 ] = $this -> getMatrix ( - 2 , - 4 );
} elseif ( $this -> gs == 3 ) {
//3; //смотрим вниз
$r [ 1 ] = $this -> getMatrix ( 0 , 1 );
$r [ 2 ] = $this -> getMatrix ( 0 , 0 );
$r [ 3 ] = $this -> getMatrix ( 0 , - 1 );
$r [ 4 ] = $this -> getMatrix ( - 1 , 1 );
$r [ 5 ] = $this -> getMatrix ( - 1 , 0 );
$r [ 6 ] = $this -> getMatrix ( - 1 , - 1 );
$r [ 7 ] = $this -> getMatrix ( - 2 , - 1 );
$r [ 8 ] = $this -> getMatrix ( - 2 , 0 );
$r [ 9 ] = $this -> getMatrix ( - 2 , 1 );
$r [ 10 ] = $this -> getMatrix ( - 3 , 2 );
$r [ 11 ] = $this -> getMatrix ( - 3 , 1 );
$r [ 12 ] = $this -> getMatrix ( - 3 , 0 );
$r [ 13 ] = $this -> getMatrix ( - 3 , - 1 );
$r [ 14 ] = $this -> getMatrix ( - 3 , - 2 );
$r [ 15 ] = $this -> getMatrix ( - 4 , 0 );
$r [ 16 ] = $this -> getMatrix ( - 4 , 1 );
$r [ 17 ] = $this -> getMatrix ( - 4 , - 1 );
$r [ 18 ] = $this -> getMatrix ( - 4 , - 2 );
$r [ 19 ] = $this -> getMatrix ( - 4 , 2 );
} elseif ( $this -> gs == 4 ) {
//4; //смотрим право
$r [ 1 ] = $this -> getMatrix ( 1 , 0 );
$r [ 2 ] = $this -> getMatrix ( 0 , 0 );
$r [ 3 ] = $this -> getMatrix ( - 1 , 0 );
$r [ 4 ] = $this -> getMatrix ( 1 , 1 );
$r [ 5 ] = $this -> getMatrix ( 0 , 1 );
$r [ 6 ] = $this -> getMatrix ( - 1 , 1 );
$r [ 7 ] = $this -> getMatrix ( - 1 , 2 );
$r [ 8 ] = $this -> getMatrix ( 0 , 2 );
$r [ 9 ] = $this -> getMatrix ( 1 , 2 );
$r [ 10 ] = $this -> getMatrix ( 2 , 3 );
$r [ 11 ] = $this -> getMatrix ( 1 , 3 );
$r [ 12 ] = $this -> getMatrix ( 0 , 3 );
$r [ 13 ] = $this -> getMatrix ( - 1 , 3 );
$r [ 14 ] = $this -> getMatrix ( - 2 , 3 );
$r [ 15 ] = $this -> getMatrix ( 0 , 4 );
$r [ 16 ] = $this -> getMatrix ( 1 , 4 );
$r [ 17 ] = $this -> getMatrix ( - 1 , 4 );
$r [ 18 ] = $this -> getMatrix ( - 2 , 4 );
$r [ 19 ] = $this -> getMatrix ( 2 , 4 );
}
return $r ;
}
2023-10-13 15:02:45 +00:00
private function getMatrix ( $y , $x )
2023-08-30 14:58:56 +00:00
{
$this -> cord [ 'x' ] ++ ;
2023-10-13 15:02:45 +00:00
$this -> cord [( $this -> userinfo [ 'y' ] + $y ) . '_' . ( $this -> userinfo [ 'x' ] + $x )] = $this -> cord [ 'x' ];
return $this -> map [ 0 ][( $this -> userinfo [ 'y' ] + $y ) . '_' . ( $this -> userinfo [ 'x' ] + $x )] ? ? [];
2023-08-30 14:58:56 +00:00
}
2023-10-13 15:02:45 +00:00
private function lookDungeon () : array
2023-08-30 14:58:56 +00:00
{
2023-09-30 01:31:32 +00:00
$pd = array_fill ( 1 , 28 , 0 );
2023-11-06 00:40:12 +00:00
//global $pd;
2023-09-30 01:31:32 +00:00
/* Генерируем изображение карты */
2023-08-30 14:58:56 +00:00
2023-09-30 01:31:32 +00:00
/* LEVEL 1 */
if ( $this -> testSt ( 2 , 4 )) {
2023-08-30 14:58:56 +00:00
$pd [ 28 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 2 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 27 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 2 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 26 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 3 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 25 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 1 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 24 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
2023-08-30 14:58:56 +00:00
/* LEVEL 2 */
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 5 , 4 )) {
2023-08-30 14:58:56 +00:00
$pd [ 23 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 5 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 22 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 5 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 21 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 6 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 20 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 4 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 19 ] = 1 ;
}
/* LEVEL 3 */
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 8 , 4 )) {
2023-08-30 14:58:56 +00:00
$pd [ 18 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 8 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 17 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 8 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 16 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 7 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 15 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 9 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 14 ] = 1 ;
}
/* LEVEL 4 */
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 12 , 4 ) || $this -> testSt ( 13 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 13 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 12 , 2 ) || $this -> testSt ( 11 , 4 )) {
2023-08-30 14:58:56 +00:00
$pd [ 12 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 13 , 1 ) || $this -> testSt ( 17 , 3 )) {
2023-08-30 14:58:56 +00:00
$pd [ 11 ] = 1 ;
} //8
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 11 , 1 ) || $this -> testSt ( 16 , 3 )) {
2023-08-30 14:58:56 +00:00
$pd [ 10 ] = 1 ;
} //7
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 12 , 1 )) {
2023-08-30 14:58:56 +00:00
$pd [ 9 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 14 , 1 ) || $this -> testSt ( 18 , 3 )) {
2023-08-30 14:58:56 +00:00
$pd [ 6 ] = 1 ;
} //2
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 10 , 1 ) || $this -> testSt ( 19 , 3 )) {
2023-08-30 14:58:56 +00:00
$pd [ 5 ] = 1 ;
} //1
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 16 , 4 ) || $this -> testSt ( 15 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 4 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
if ( $this -> testSt ( 15 , 4 ) || $this -> testSt ( 17 , 2 )) {
2023-08-30 14:58:56 +00:00
$pd [ 3 ] = 1 ;
}
2023-09-30 01:31:32 +00:00
$this -> walls = $pd ;
2023-08-30 14:58:56 +00:00
/* Генерируем предметы на карте */
/* Генерируем персонажей и ботов на карте */
2023-10-13 15:02:45 +00:00
return $pd ;
2023-08-30 14:58:56 +00:00
}
2023-09-30 01:31:32 +00:00
/** Видим ли мы стену ?
* @ param int $id
* @ param int $s в какую сторону смотрим
* @ return bool
*/
private function testSt ( int $id , int $s ) : bool
2023-08-30 14:58:56 +00:00
{
$r = 0 ;
//заменяем отображение стен в зависимости от угла обзора
$s = $this -> sg [ $this -> gs ][ $s ];
if ( isset ( $this -> map [ 1 ][ $id ][ 'id' ])) {
$r = $this -> map [ 1 ][ $id ][ 'st' ][( $s - 1 )];
}
2023-09-30 01:31:32 +00:00
return $r > 0 ;
2023-08-30 14:58:56 +00:00
}
public function pickitem ( $obj , int $itm , $for , $data = '' , $dn_delete = false , $chat = 0 ) : bool
{
$itm = mysql_fetch_assoc (
mysql_query ( 'SELECT `id`,`name` FROM `items_main` WHERE `id` = "' . $itm . '" LIMIT 1' )
);
if ( ! isset ( $itm [ 'id' ])) {
return false ;
}
$tou = 0 ; //какому юзеру предназначено
/* выделяем случайного юзера из команды */
$asex = '' ;
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 1 ) {
2023-08-30 14:58:56 +00:00
$asex = 'а ' ;
}
if ( $for > 0 ) {
$tou = $for ;
2023-10-13 15:02:45 +00:00
$rtxt = '<b>' . $this -> userinfo [ 'login' ] . '</b> обнаружил' . $asex . ' предмет "' . $itm [ 'name' ] . '" в "' . $obj [ 'name' ] . '"' ;
2023-08-30 14:58:56 +00:00
} else {
2023-10-13 15:02:45 +00:00
$rtxt = '<b>' . $this -> userinfo [ 'login' ] . '</b> обнаружил' . $asex . ' предмет "' . $itm [ 'name' ] . '" в "' . $obj [ 'name' ] . '", и вы решили разыграть е г о ' ;
2023-08-30 14:58:56 +00:00
}
$dn_delete = $dn_delete ? 1 : 0 ;
if ( $chat == 0 ) {
$this -> sys_chat ( $rtxt );
}
mysql_query (
' INSERT INTO `dungeon_items` ( `dn_delete` , `data` , `dn` , `user` , `item_id` , `time` , `x` , `y` ) VALUES (
" ' . $dn_delete . ' " ,
" ' . mysql_real_escape_string( $data ) . ' " ,
2023-10-13 15:02:45 +00:00
" ' . $this->userinfo ['dnow'] . ' " ,
2023-08-30 14:58:56 +00:00
" ' . $tou . ' " ,
" ' . $itm['id'] . ' " ,
" ' . time() . ' " ,
2023-10-13 15:02:45 +00:00
" ' . $this->userinfo ['x'] . ' " ,
" ' . $this->userinfo ['y'] . ' " ) '
2023-08-30 14:58:56 +00:00
);
return true ;
}
2023-09-30 01:31:32 +00:00
public function n_lead ( string $who , int $lead ) : void
2023-08-30 14:58:56 +00:00
{
2023-09-30 01:31:32 +00:00
$to = Db :: getRow ( 'select stats.id, dnow from users left join stats on users.id = stats.id where login = ?' , [ $who ]);
2023-08-30 14:58:56 +00:00
if ( $this -> info [ 'uid' ] != $lead ) {
$this -> error = '<b>Вы не лидер...</b>' ;
} elseif ( ! isset ( $to [ 'id' ])) {
$this -> error = '<b>Персонаж не найден...</b>' ;
} elseif ( $to [ 'id' ] == $this -> info [ 'uid' ]) {
$this -> error = '<b>Вы и так лидер...</b>' ;
} elseif ( $to [ 'dnow' ] != $this -> info [ 'id' ]) {
$this -> error = '<b>Персонаж не найден в вашей команде...</b>' ;
} else {
mysql_query (
'UPDATE `dungeon_now` SET `uid` = "' . $to [ 'id' ] . '" WHERE `id` = "' . $this -> info [ 'id' ] . '" LIMIT 1'
);
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
2023-08-30 14:58:56 +00:00
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> передал лидерство в группе персонажу <b>' . $who . '</b>'
2023-08-30 14:58:56 +00:00
);
} else {
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> передала лидерство в группе персонажу <b>' . $who . '</b>'
2023-08-30 14:58:56 +00:00
);
}
2023-09-30 01:31:32 +00:00
exit ( " <script>top.frames['main'].location = 'main.php'</script> " );
2023-08-30 14:58:56 +00:00
}
}
2023-09-30 01:31:32 +00:00
public function go_to_hell ( string $who , int $lead ) : void
2023-08-30 14:58:56 +00:00
{
2023-09-30 01:31:32 +00:00
$to = Db :: getRow ( 'select stats.id, dnow from users left join stats on users.id = stats.id where login = ?' , [ $who ]);
2023-08-30 14:58:56 +00:00
if ( $this -> info [ 'uid' ] != $lead ) {
$this -> error = '<b>Вы не лидер...</b>' ;
} elseif ( ! isset ( $to [ 'id' ])) {
$this -> error = '<b>Персонаж не найден...</b>' ;
} elseif ( $to [ 'id' ] == $this -> info [ 'uid' ]) {
$this -> error = '<b>Лидера нельзя выгнать...</b>' ;
} elseif ( $to [ 'dnow' ] != $this -> info [ 'id' ]) {
$this -> error = '<b>Персонаж не найден в вашей команде...</b>' ;
} else {
$rb = 321 ; // Магический портал
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'room' ] == 304 ) {
2023-08-30 14:58:56 +00:00
$rb = 209 ; // Вход в ледяную пещеру
2023-10-13 15:02:45 +00:00
} elseif ( $this -> userinfo [ 'room' ] == 396 ) {
2023-08-30 14:58:56 +00:00
$rb = 395 ; // Канализация (Ангелс)
} elseif ( $this -> info [ 'id2' ] == 3 ) {
$rb = 293 ; // Вход в Катакомбы
} elseif ( $this -> info [ 'id2' ] == 1 ) {
$rb = 188 ; // Вход в Канализацию
} elseif ( $this -> info [ 'id2' ] == 13 ) {
$rb = 275 ; // Гора Легиона
} elseif ( $this -> info [ 'id2' ] == 12 ) {
$rb = 372 ; // Вход в Пещеру Тысячи Проклятий
}
2023-09-30 01:31:32 +00:00
2024-05-14 14:24:54 +00:00
$sp = mysql_query ( 'select * from dungeon_now where time_finish = 0 limit 50' );
2023-08-30 14:58:56 +00:00
while ( $pl = mysql_fetch_assoc ( $sp )) {
$cn = mysql_fetch_assoc (
mysql_query ( 'SELECT `id` FROM `stats` WHERE `dnow` = "' . $pl [ 'id' ] . '" LIMIT 1' )
);
if ( ! isset ( $cn [ 'id' ])) {
mysql_query ( 'DELETE FROM `dungeon_bots` WHERE `dn` = "' . $pl [ 'id' ] . '" AND `for_dn` = "0"' );
mysql_query ( 'DELETE FROM `dungeon_obj` WHERE `dn` = "' . $pl [ 'id' ] . '" AND `for_dn` = "0"' );
mysql_query ( 'DELETE FROM `dungeon_items` WHERE `dn` = "' . $pl [ 'id' ] . '" AND `for_dn` = "0"' );
mysql_query ( 'DELETE FROM `dungeon_bots` WHERE `dn` = "' . $pl [ 'id' ] . '" AND `for_dn` = "0"' );
mysql_query ( 'DELETE FROM `dungeon_actions` WHERE `dn` = "' . $pl [ 'id' ] . '"' );
mysql_query (
'UPDATE `dungeon_now` SET `time_finish` = "' . time () . '" WHERE `id` = "' . $pl [ 'id' ] . '" LIMIT 1'
);
}
}
$city = mysql_fetch_assoc (
mysql_query ( 'SELECT `id`, `city` FROM `room` WHERE `id` = "' . $rb . '" LIMIT 1' )
);
2023-10-13 15:02:45 +00:00
mysql_query ( 'UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1' );
2023-08-30 14:58:56 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `users` SET `room` = "' . $rb . '", `city`="' . $city [ 'city' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-08-30 14:58:56 +00:00
);
//удаляем все предметы которые пропадают после выхода из пещеры
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `items_users` SET `delete` = "' . time () . '" WHERE `uid` = "' . $this -> userinfo [ 'id' ] . '" AND `dn_delete` = "1" LIMIT 1000'
2023-08-30 14:58:56 +00:00
);
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `items_users` SET `delete` = "' . time () . '" WHERE `uid` = "' . $this -> userinfo [ 'id' ] . '" AND (`item_id` = "1189" OR `item_id` = "4447" OR `item_id` = "1174") LIMIT 1000'
2023-08-30 14:58:56 +00:00
);
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
2023-08-30 14:58:56 +00:00
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> выгнал из похода персонажа <b>' . $who . '</b>'
2023-08-30 14:58:56 +00:00
);
} else {
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> выгнала из похода персонажа <b>' . $who . '</b>'
2023-08-30 14:58:56 +00:00
);
}
2023-09-30 01:31:32 +00:00
exit ( " <script>top.frames['main'].location = 'main.php'</script> " );
2023-08-30 14:58:56 +00:00
}
}
2023-10-13 15:02:45 +00:00
public function usersDng ( $laba = false ) : string
2023-08-30 14:58:56 +00:00
{
$r = '' ;
2023-10-13 15:02:45 +00:00
if ( ! $laba ) {
2023-08-30 14:58:56 +00:00
$sp = mysql_query (
'SELECT `u`.`id`,`st`.`id` FROM `stats` AS `u` LEFT JOIN `users` AS `st` ON (`st`.`id` = `u`.`id`) WHERE `u`.`dnow` = "' . $this -> info [ 'id' ] . '" LIMIT 10'
);
} else {
$sp = mysql_query (
'SELECT `u`.`id` FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`st`.`id` = `u`.`id`) WHERE `u`.`room` = 370 AND `st`.`dnow` = "' . $laba . '" AND `st`.`bot` = 0 LIMIT 6'
);
}
while ( $pl = mysql_fetch_assoc ( $sp )) {
2023-10-13 15:02:45 +00:00
$stt = ( new Stats ( User :: start ())) -> getStats ( $pl [ 'id' ]);
2023-08-30 14:58:56 +00:00
if ( $stt [ 'mpAll' ] > 0 ) {
$pm = $stt [ 'mpNow' ] / $stt [ 'mpAll' ] * 100 ;
}
$ph = $stt [ 'hpNow' ] / $stt [ 'hpAll' ] * 100 ;
$r .= ' < table border = " 0 " cellspacing = " 0 " cellpadding = " 0 " height = " 20 " >
2023-12-05 01:01:04 +00:00
< tr >< td valign = " middle " > & nbsp ; < font color = " #990000 " > ' . User::getLogin($pl[' id ']) . ' </ font > & nbsp ; </ td >
2023-08-30 14:58:56 +00:00
< td valign = " middle " width = " 120 " ' ;
if ( $stt [ 'mpAll' ] < 1 ) {
$r .= 'style="padding-top:12px"' ;
}
$r .= ' >
< div style = " position:relative; " >< div id = " vhp' . ( $pl['id'] + 1000000000000) . ' " title = " Уровень жизни " align = " left " class = " seehp " style = " position:absolute; top:-10px; width:120px; height:10px; z-index:12; " > ' . floor (
$stt [ 'hpNow' ]
) . '/' . $stt [ 'hpAll' ] . ' </ div >
< div title = " Уровень жизни " class = " hpborder " style = " position:absolute; top:-10px; width:120px; height:9px; z-index:13; " >< img src = " //img.new-combats.tech/1x1.gif " height = " 9 " width = " 1 " ></ div >
< div class = " hp_3 senohp " style = " height:9px; width:' . floor(
120 / 100 * $ph
) . 'px; position:absolute; top:-10px; z-index:11;" id="lhp' . ( $pl [ 'id' ] + 1000000000000 ) . ' " ><img src= " //img.new-combats.tech/1x1.gif" height="9" width="1"></div>
< div title = " Уровень жизни " class = " hp_none " style = " position:absolute; top:-10px; width:120px; height:10px; z-index:10; " >< img src = " //img.new-combats.tech/1x1.gif " height = " 10 " ></ div >
' ;
if ( $stt [ 'mpAll' ] > 0 ) {
$r .= '<div id="vmp' . ( $pl [ 'id' ] + 1000000000000 ) . '" title="Уровень маны" align="left" class="seemp" style="position:absolute; top:0px; width:120px; height:10px; z-index:12;"> ' . floor (
$stt [ 'mpNow' ]
) . '/' . $stt [ 'mpAll' ] . ' </ div >
< div title = " Уровень маны " class = " hpborder " style = " position:absolute; top:0px; width:120px; height:9px; z-index:13; " >< img src = " //img.new-combats.tech/1x1.gif " height = " 9 " width = " 1 " ></ div >
< div class = " hp_mp senohp " style = " height:9px; position:absolute; top:0px; width:' . floor(
120 / 100 * $pm
) . 'px; z-index:11;" id="lmp' . ( $pl [ 'id' ] + 1000000000000 ) . ' " ><img src= " //img.new-combats.tech/1x1.gif" height="9" width="1"></div>
< div title = " Уровень маны " class = " hp_none " style = " position:absolute; top:0px; width:120px; height:10px; z-index:10; " ></ div > ' ;
2022-08-25 11:23:36 +00:00
}
2023-08-30 14:58:56 +00:00
$r .= '</div></td><td>' ;
if ( $this -> info [ 'uid' ] == $pl [ 'id' ]) {
$r .= '<img src="//img.new-combats.tech/i/lead1.gif" title="Лидер группы" >' ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
if ( $this -> info [ 'uid' ] == $this -> userinfo [ 'id' ] && $pl [ 'id' ] == $this -> userinfo [ 'id' ] && $this -> info [ 'id2' ] != 15 ) {
2023-08-30 14:58:56 +00:00
$r .= '<a href="javascript: void(0);" onclick="top.n_lead();"><img src="//img.new-combats.tech/i/ico/ico_change_leader.gif" title="Новый лидер" /></a> ' ;
$r .= '<a href="javascript: void(0);" onclick="top.go_from_psh();"><img src="//img.new-combats.tech/i/ico/ico_kill_member.gif" title="Выгнать супостата" /></a> ' ;
}
$r .= '</td></tr></table><br>' ;
$r .= '<script>top.startHpRegen("main",' . ( $pl [ 'id' ] + 1000000000000 ) . ',' . ( 0 + $stt [ 'hpNow' ]) . ',' . ( 0 + $stt [ 'hpAll' ]) . ',' . ( 0 + $stt [ 'mpNow' ]) . ',' . ( 0 + $stt [ 'mpAll' ]) . ',0,0,0,0,1)</script>' ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
2023-08-30 14:58:56 +00:00
return $r ;
2022-08-25 11:23:36 +00:00
}
2023-08-30 14:58:56 +00:00
public function testDie ()
2022-08-25 11:23:36 +00:00
{
2023-08-30 14:58:56 +00:00
$dies = mysql_fetch_assoc (
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $this -> userinfo [ 'id' ] . '" AND `dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `vars` = "die" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
2023-08-30 14:58:56 +00:00
);
$dies = $dies [ 0 ];
2023-10-13 15:02:45 +00:00
if ( $this -> userstats [ 'hpNow' ] < 1 || $dies > 2 ) {
mysql_query (
' INSERT INTO `dungeon_actions` ( `dn` , `uid` , `x` , `y` , `time` , `vars` , `vals` ) VALUES (
" ' . $this->userinfo ['dnow'] . ' " , " ' . $this->userinfo ['id'] . ' " , " ' . $this->userinfo ['x'] . ' " , " ' . $this->userinfo ['y'] . ' " , " ' . time() . ' " , " die " , " "
) '
);
2023-08-30 14:58:56 +00:00
if ( $dies < 2 ) {
//21:50 Ярополк трагически погиб и находится в комнате "Этаж 2 - Водосток"
$dnow = mysql_fetch_assoc (
2023-10-13 15:02:45 +00:00
mysql_query ( 'SELECT id2 FROM `dungeon_now` WHERE `id` = "' . $this -> userinfo [ 'dnow' ] . '" LIMIT 1' )
2023-08-30 14:58:56 +00:00
);
$room = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT name FROM `dungeon_map_info` WHERE `x` = "' . $this -> userinfo [ 'res_x' ] . '" AND `y` = "' . $this -> userinfo [ 'res_y' ] . '" AND `id_dng` = "' . $dnow [ 'id2' ] . '" LIMIT 1'
2023-08-30 14:58:56 +00:00
)
);
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
2023-08-30 14:58:56 +00:00
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> трагически погиб и находится в комнате "' . $room [ 'name' ] . '"'
2023-08-30 14:58:56 +00:00
);
} else {
$this -> sys_chat (
2023-10-13 15:02:45 +00:00
'<b>' . $this -> userinfo [ 'login' ] . '</b> трагически погибла и находится в комнате "' . $room [ 'name' ] . '"'
2023-08-30 14:58:56 +00:00
);
}
2023-01-28 02:24:37 +00:00
mysql_query (
2023-10-13 15:02:45 +00:00
'UPDATE `stats` SET `hpNow` = "1",`x` = "' . $this -> userinfo [ 'res_x' ] . '",`y` = "' . $this -> userinfo [ 'res_y' ] . '",`s` = "' . $this -> userinfo [ 'res_s' ] . '" WHERE `id` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
);
2023-08-30 14:58:56 +00:00
//header('location: main.php');
die ( '<script>top.frames[\'main\'].location = "main.php";</script>' );
2022-08-25 11:23:36 +00:00
} else {
2023-08-30 14:58:56 +00:00
//21:50 Ярополк трагически погиб и находится в комнате "Этаж 2 - Водосток"
2023-10-13 15:02:45 +00:00
if ( $this -> userinfo [ 'sex' ] == 0 ) {
$this -> sys_chat ( '<b>' . $this -> userinfo [ 'login' ] . '</b> трагически погиб без права на воскрешение' );
2023-08-30 14:58:56 +00:00
} else {
2023-10-13 15:02:45 +00:00
$this -> sys_chat ( '<b>' . $this -> userinfo [ 'login' ] . '</b> трагически погибла без права на воскрешение' );
2023-08-30 14:58:56 +00:00
}
$_GET [ 'exitd' ] = true ;
2022-08-25 11:23:36 +00:00
}
}
}
2023-10-13 15:02:45 +00:00
public function itemsMap () : string
2022-08-25 11:23:36 +00:00
{
$r = '' ;
2023-08-30 14:58:56 +00:00
$liveUsers = Db :: getValue ( 'select count(*) from stats where dnow = ?' , [ $this -> info [ 'id' ]]);
2023-01-28 02:24:37 +00:00
$sp = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `im`.*,`ish`.* FROM `dungeon_items` AS `ish` LEFT JOIN `items_main` AS `im` ON (`im`.`id` = `ish`.`item_id`) WHERE `ish`.`dn` = "' . $this -> info [ 'id' ] . '" AND `ish`.`take` = "0" AND `ish`.`delete` = "0" AND ( `ish`.`onlyfor` = "0" OR `ish`.`onlyfor` = "' . $this -> userinfo [ 'id' ] . '" ) AND `ish`.`x` = "' . $this -> userinfo [ 'x' ] . '" AND `ish`.`y` = "' . $this -> userinfo [ 'y' ] . '" LIMIT 100'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
while ( $pl = mysql_fetch_assoc ( $sp )) {
$action = 'main.php?take=' . $pl [ 'id' ] . '' ;
$tk = 0 ;
2023-01-28 02:24:37 +00:00
$luck_users = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $this -> userinfo [ 'id' ] . '" AND `dn` = "' . $this -> info [ 'id' ] . '" AND `vars` = "luck_itm' . mysql_real_escape_string (
2023-01-28 02:24:37 +00:00
$pl [ 'id' ]
) . '" LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
$luck_users = $luck_users [ 0 ];
2023-08-30 14:58:56 +00:00
if ( $pl [ 'user' ] == 0 && $liveUsers > 1 && ( $pl [ 'time' ] + 300 > time () || $luck_users < 1 )) {
2023-01-28 02:24:37 +00:00
$fxv = mysql_fetch_assoc (
mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT * FROM `dungeon_actions` WHERE `uid` = "' . $this -> userinfo [ 'id' ] . '" AND `dn` = "' . $this -> info [ 'id' ] . '" AND `vars` = "luck_itm' . $pl [ 'id' ] . '" LIMIT 1'
2023-01-28 02:24:37 +00:00
)
);
2023-06-13 00:44:13 +00:00
//Розыгрыш
if ( ! isset ( $fxv [ 'id' ]) && $this -> info [ 'bsid' ] == 0 ) {
$action = " javascript: top.fartgame(' { $pl [ 'id' ] } ', ' { $pl [ 'img' ] } ', ' { $pl [ 'name' ] } ') " ;
$tk = 1 ;
2022-08-25 11:23:36 +00:00
}
}
if ( $tk == 0 ) {
2023-03-31 18:30:14 +00:00
$r .= '<a onclick="takeItem(' . $pl [ 'id' ] . ')"><img style="padding: 5px; cursor: pointer;" title="Взять "' . $pl [ 'name' ] . '"" src="//img.new-combats.tech/i/items/' . $pl [ 'img' ] . '" /></a>' ;
2022-08-25 11:23:36 +00:00
} elseif ( $tk == 1 ) {
2023-03-31 18:30:14 +00:00
$r .= '<a href="' . $action . '"><img style="padding: 5px; cursor: pointer;" title="Взять "' . $pl [ 'name' ] . '"" src="//img.new-combats.tech/i/items/' . $pl [ 'img' ] . '" /></a>' ;
2022-08-25 11:23:36 +00:00
}
}
if ( $r != '' ) {
2023-01-10 16:29:32 +00:00
$r = '<H4>В комнате разбросаны вещи:</H4>' . $r ; //<br> <a onclick="takeItemAll">Подобрать все</a><br>
2022-08-25 11:23:36 +00:00
}
return $r ;
}
2023-10-13 15:02:45 +00:00
public function genObjects () : string
2022-08-25 11:23:36 +00:00
{
////i:{id,name,mapPoint,action,img,type},
2023-01-10 16:29:32 +00:00
//'count':1,0:{0:1234,1:'Сундук',2:5,3:'',4:'test.gif',5:0,6:position,7:width,8:heigh,9:left,10:top},
//psition 0 - по центру , 1- сверху, 2- слева, 3- снизу, 4- справа
2022-08-25 11:23:36 +00:00
$r = '' ;
2023-10-13 15:02:45 +00:00
$whr = [ 1 => ' (((`u`.`x` <= ' . ( $this -> userinfo [ 'x' ] + 2 ) . ' && `u`.`x` >= ' . ( $this -> userinfo [ 'x' ] - 2 ) . ') && (`u`.`y` >= ' . ( $this -> userinfo [ 'y' ] + 1 ) . ' && `u`.`y` <= ' . ( $this -> userinfo [ 'y' ] + 4 ) . ')) OR (`u`.`y` = ' . $this -> userinfo [ 'y' ] . ' && `u`.`x` = ' . $this -> userinfo [ 'x' ] . ')) ' , //прямо
3 => ' (((`u`.`x` <= ' . ( $this -> userinfo [ 'x' ] + 2 ) . ' && `u`.`x` >= ' . ( $this -> userinfo [ 'x' ] - 2 ) . ') && (`u`.`y` <= ' . ( $this -> userinfo [ 'y' ] - 1 ) . ' && `u`.`y` >= ' . ( $this -> userinfo [ 'y' ] - 4 ) . ')) OR (`u`.`y` = ' . $this -> userinfo [ 'y' ] . ' && `u`.`x` = ' . $this -> userinfo [ 'x' ] . ')) ' , //вниз
2 => ' (((`u`.`x` <= ' . ( $this -> userinfo [ 'x' ] - 1 ) . ' && `u`.`x` >= ' . ( $this -> userinfo [ 'x' ] - 4 ) . ') && (`u`.`y` <= ' . ( $this -> userinfo [ 'y' ] + 2 ) . ' && `u`.`y` >= ' . ( $this -> userinfo [ 'y' ] - 2 ) . '))OR (`u`.`y` = ' . $this -> userinfo [ 'y' ] . ' && `u`.`x` = ' . $this -> userinfo [ 'x' ] . ')) ' , //лево
4 => ' (((`u`.`x` >= ' . ( $this -> userinfo [ 'x' ] + 1 ) . ' && `u`.`x` <= ' . ( $this -> userinfo [ 'x' ] + 4 ) . ') && (`u`.`y` <= ' . ( $this -> userinfo [ 'y' ] + 2 ) . ' && `u`.`y` >= ' . ( $this -> userinfo [ 'y' ] - 2 ) . ')) OR (`u`.`y` = ' . $this -> userinfo [ 'y' ] . ' && `u`.`x` = ' . $this -> userinfo [ 'x' ] . ')) ' , //право
2022-08-25 11:23:36 +00:00
];
2023-01-28 02:24:37 +00:00
$sp = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `u`.* FROM `dungeon_obj` AS `u` WHERE `u`.`dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `u`.`for_dn` = "0" AND ((`u`.`s` = "0" OR `u`.`s` = "' . $this -> gs . '") OR `u`.`s2` = "' . $this -> gs . '") AND ' . $whr [ $this -> gs ] . ' LIMIT 150'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
$i = 0 ;
$pos = [];
while ( $pl = mysql_fetch_assoc ( $sp )) {
2023-09-30 01:31:32 +00:00
if ( ! isset ( $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]])) {
2023-09-30 14:53:26 +00:00
continue ;
2023-09-30 01:31:32 +00:00
}
2022-08-25 11:23:36 +00:00
2023-09-30 01:31:32 +00:00
if (
$pl [ 'fix_x_y' ] != 0 &&
2023-10-13 15:02:45 +00:00
( $pl [ 'fix_x_y' ] != 1 || $pl [ 'x' ] != $this -> userinfo [ 'x' ]) &&
( $pl [ 'fix_x_y' ] != 2 || $pl [ 'y' ] != $this -> userinfo [ 'y' ]) &&
( $pl [ 'fix_x_y' ] != 3 || $pl [ 'x' ] != $this -> userinfo [ 'x' ] || $pl [ 'y' ] != $this -> userinfo [ 'y' ])
2023-09-30 01:31:32 +00:00
) {
continue ;
}
2022-08-25 11:23:36 +00:00
2023-09-30 01:31:32 +00:00
if (
( $pl [ 'os1' ] == 0 && $pl [ 'os2' ] == 0 && $pl [ 'os3' ] == 0 && $pl [ 'os4' ] == 0 ) ||
(
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os1' ] ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os2' ] ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os3' ] ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os4' ]
)
) {
$i ++ ;
if ( ! isset ( $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]])) {
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] = 0 ;
}
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] ++ ;
$r .= ',' . ( $i - 1 ) . ':{0:' . $pl [ 'id' ] . ',1:\'' . $pl [ 'name' ] . '\',2:' . ( 0 + $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:\'action\',4:\'' . $pl [ 'img' ] . '\',5:' . $pl [ 'type' ] . ',6:0,7:' . $pl [ 'w' ] . ',8:' . $pl [ 'h' ] . ',9:' . $pl [ 'left' ] . ',10:' . $pl [ 'top' ] . ',11:' . $pl [ 'date' ] . '}' ;
} elseif (
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os1' ] - 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os2' ] - 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os3' ] - 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os4' ] - 1
) {
$dt2 = explode ( ',' , ltrim ( rtrim ( $pl [ 'date' ], '\}' ), '\{' ));
$da = [];
$is = 0 ;
while ( $is < count ( $dt2 )) {
$dt2 [ $is ] = explode ( ':' , $dt2 [ $is ]);
$da [ $dt2 [ $is ][ 0 ]] = $dt2 [ $is ][ 1 ];
$is ++ ;
}
if ( isset ( $da [ 'use' ])) {
unset ( $da [ 'use' ]);
} // Справа
if ( isset ( $da [ 'rl2' ])) {
$da [ 'rl2' ] = - round (( int ) $da [ 'rl2' ] * 1.55 );
} // Слева
if ( isset ( $da [ 'rl3' ])) {
$da [ 'rl3' ] = round (( int ) $da [ 'rl3' ] + 160 );
}
if ( isset ( $da [ 'rl4' ])) {
$da [ 'rl4' ] = round (( int ) $da [ 'rl4' ] - 120 );
}
$pl [ 'date' ] = str_replace ( '"' , '' , json_encode ( $da ));
$i ++ ;
if ( ! isset ( $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]])) {
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] = 0 ;
}
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] ++ ;
$r .= ',' . ( $i - 1 ) . ':{0:' . $pl [ 'id' ] . ',1:\'' . $pl [ 'name' ] . '\',2:' . ( 0 + $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:\'\',4:\'' . $pl [ 'img' ] . '\',5:' . $pl [ 'type' ] . ',6:0,7:' . $pl [ 'w' ] . ',8:' . $pl [ 'h' ] . ',9:' . $pl [ 'left' ] . ',10:' . $pl [ 'top' ] . ',11:' . $pl [ 'date' ] . '}' ;
} elseif (
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os1' ] + 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os2' ] + 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os3' ] + 1 ||
$this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]] == $pl [ 'os4' ] + 1
) {
$dt2 = explode ( ',' , ltrim ( rtrim ( $pl [ 'date' ], '\}' ), '\{' ));
$da = [];
$is = 0 ;
while ( $is < count ( $dt2 )) {
$dt2 [ $is ] = explode ( ':' , $dt2 [ $is ]);
$da [ $dt2 [ $is ][ 0 ]] = $dt2 [ $is ][ 1 ];
$is ++ ;
2022-08-25 11:23:36 +00:00
}
2023-09-30 01:31:32 +00:00
if ( isset ( $da [ 'use' ])) {
unset ( $da [ 'use' ]);
} // Справа
if ( isset ( $da [ 'rl2' ])) {
$da [ 'rl2' ] = 355 - round (( int ) $da [ 'rl2' ] * 0.30 );
} // Справа
if ( isset ( $da [ 'rl3' ])) {
$da [ 'rl3' ] = round (( int ) $da [ 'rl3' ] - 160 );
}
if ( isset ( $da [ 'rl4' ])) {
$da [ 'rl4' ] = round (( int ) $da [ 'rl4' ] + 120 );
}
$pl [ 'date' ] = str_replace ( '"' , '' , json_encode ( $da ));
$i ++ ;
if ( ! isset ( $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]])) {
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] = 0 ;
}
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] ++ ;
$r .= ',' . ( $i - 1 ) . ':{0:' . $pl [ 'id' ] . ',1:\'' . $pl [ 'name' ] . '\',2:' . ( 0 + $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:\'\',4:\'' . $pl [ 'img' ] . '\',5:' . $pl [ 'type' ] . ',6:0,7:' . $pl [ 'w' ] . ',8:' . $pl [ 'h' ] . ',9:' . $pl [ 'left' ] . ',10:' . $pl [ 'top' ] . ',11:' . $pl [ 'date' ] . '}' ;
2022-08-25 11:23:36 +00:00
}
}
2023-08-30 14:58:56 +00:00
return 'count:' . $i . $r ;
2022-08-25 11:23:36 +00:00
}
2023-10-13 15:02:45 +00:00
public function genUsers () : string
2022-08-25 11:23:36 +00:00
{
////i:{id,login,mapPoint,sex,obraz,type,users_p},
//'count':1,0:{0:1015,1:'Test1',2:5,3:0,4:'1',5:'user',6:1},
$r = '' ;
2023-09-30 01:31:32 +00:00
$whr = [
2023-10-13 15:02:45 +00:00
1 => ' ((x <= ' . ( $this -> userinfo [ 'x' ] + 2 ) . ' && x >= ' . ( $this -> userinfo [ 'x' ] - 2 ) . ') && (y >= ' . $this -> userinfo [ 'y' ] . ' && y <= ' . ( $this -> userinfo [ 'y' ] + 4 ) . ')) ' , //прямо
2 => ' ((x <= ' . $this -> userinfo [ 'x' ] . ' && x >= ' . ( $this -> userinfo [ 'x' ] - 4 ) . ') && (y <= ' . ( $this -> userinfo [ 'y' ] + 2 ) . ' && y >= ' . ( $this -> userinfo [ 'y' ] - 2 ) . ')) ' , //лево
3 => ' ((x <= ' . ( $this -> userinfo [ 'x' ] + 2 ) . ' && x >= ' . ( $this -> userinfo [ 'x' ] - 2 ) . ') && (y <= ' . $this -> userinfo [ 'y' ] . ' && y >= ' . ( $this -> userinfo [ 'y' ] - 4 ) . ')) ' , //вниз
4 => ' ((x >= ' . $this -> userinfo [ 'x' ] . ' && x <= ' . ( $this -> userinfo [ 'x' ] + 4 ) . ') && (y <= ' . ( $this -> userinfo [ 'y' ] + 2 ) . ' && y >= ' . ( $this -> userinfo [ 'y' ] - 2 ) . ')) ' , //право
2023-09-30 01:31:32 +00:00
];
$whrVals = [ // x <= ? && x >= ? && y <= ? && y >= ?
2023-10-13 15:02:45 +00:00
1 => [ $this -> userinfo [ 'x' ] + 2 , $this -> userinfo [ 'x' ] - 2 , $this -> userinfo [ 'y' ] + 4 , $this -> userinfo [ 'y' ],], // прямо x< x> y< y>
2 => [ $this -> userinfo [ 'x' ], $this -> userinfo [ 'x' ] - 4 , $this -> userinfo [ 'y' ] + 2 , $this -> userinfo [ 'y' ] - 2 ,], // лево x< x> y< y>
3 => [ $this -> userinfo [ 'x' ] + 2 , $this -> userinfo [ 'x' ] - 2 , $this -> userinfo [ 'y' ], $this -> userinfo [ 'y' ] - 4 ,], // низ x< x> y< y>
4 => [ $this -> userinfo [ 'x' ] + 4 , $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ] + 2 , $this -> userinfo [ 'y' ] - 2 ,], // право x< x> y< y>
2022-08-25 11:23:36 +00:00
];
2023-09-30 01:31:32 +00:00
2022-08-25 11:23:36 +00:00
//
2023-01-28 02:24:37 +00:00
$tmsu = mysql_fetch_assoc (
2023-10-13 15:02:45 +00:00
mysql_query ( 'SELECT * FROM `katok_now` WHERE `clone` = "' . $this -> userinfo [ 'id' ] . '" LIMIT 1' )
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
//
2023-01-28 02:24:37 +00:00
$sp = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `u`.*,`st`.* FROM `stats` AS `u` LEFT JOIN `users` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`dnow` = "' . $this -> userinfo [ 'dnow' ] . '" AND ' . $whr [ $this -> gs ] . ' AND `u`.`id` != "' . $this -> userinfo [ 'id' ] . '" LIMIT 100'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
$i = 0 ;
$pos = [];
while ( $pl = mysql_fetch_assoc ( $sp )) {
$i ++ ;
if ( ! isset ( $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]])) {
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] = 0 ;
}
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] ++ ;
$noat = 0 ;
if ( $this -> info [ 'bsid' ] > 0 ) {
$noat = 1 ;
}
if ( $this -> info [ 'id2' ] == 15 ) {
2023-01-10 16:29:32 +00:00
//Хоккей
2023-01-28 02:24:37 +00:00
$r .= ',' . ( $i - 1 ) . ':{8:' . $noat . ',0:' . $pl [ 'id' ] . ',1:\'' . $pl [ 'login' ] . '\',2:' . ( 0 + $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:' . $pl [ 'sex' ] . ',4:\'' . str_replace (
'.gif' , '' , $pl [ 'obraz' ]
) . '\',5:\'user\',6:' . $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] . '' ;
2022-08-25 11:23:36 +00:00
//
2023-01-28 02:24:37 +00:00
$tms = mysql_fetch_assoc (
mysql_query ( 'SELECT * FROM `katok_now` WHERE `clone` = "' . $pl [ 'id' ] . '" LIMIT 1' )
);
2022-08-25 11:23:36 +00:00
if ( $tms [ 'team' ] == $tmsu [ 'team' ]) {
$r .= ',9:1' ;
} else {
$r .= ',9:2' ;
}
$r .= '' ;
//
$r .= '}' ;
} else {
2023-01-28 02:24:37 +00:00
$r .= ',' . ( $i - 1 ) . ':{9:0,8:' . $noat . ',0:' . $pl [ 'id' ] . ',1:\'' . $pl [ 'login' ] . '\',2:' . ( 0 + $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:' . $pl [ 'sex' ] . ',4:\'' . str_replace (
'.gif' , '' , $pl [ 'obraz' ]
) . '\',5:\'user\',6:' . $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] . '}' ;
2022-08-25 11:23:36 +00:00
}
}
2023-01-10 16:29:32 +00:00
//отображаем ботов
2022-08-25 11:23:36 +00:00
//
2023-10-13 15:02:45 +00:00
//$sp = mysql_query('SELECT `u`.*,`st`.* FROM `dungeon_bots` AS `u` LEFT JOIN `test_bot` AS `st` ON (`u`.`id_bot` = `st`.`id`) WHERE `u`.`dn` = "'.$this->userinfo['dnow'].'" AND `u`.`atack` = "0" AND `u`.`delete` = "0" AND `u`.`inBattle` = "0" AND `u`.`go_bot` > 0 ORDER BY `u`.`go_bot` ASC LIMIT 35');
2022-08-25 11:23:36 +00:00
2023-01-10 16:29:32 +00:00
// Выбираем Ботов в подземельи, которые Н е в бою, Живые, и не дальше чем -\+30 по X и -\+35 по Y (дабы не гонять всех ботов, меньше выборка).
2022-08-25 11:23:36 +00:00
2023-01-28 02:24:37 +00:00
$sp = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `db`.*, `tb`.* FROM `dungeon_bots` AS `db` LEFT JOIN `test_bot` AS `tb` ON (`db`.`id_bot` = `tb`.`id`) LEFT JOIN `stats` as `st` ON (`st`.`dnow` = `db`.`dn`) WHERE `db`.`dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `db`.`x` > `st`.`x`-30 AND `db`.`x` < `st`.`x`+30 AND `db`.`y` > `st`.`y`-35 AND `db`.`y` < `st`.`y`+35 AND `db`.`atack` = "0" AND `db`.`delete` = "0" AND `db`.`inBattle` = "0" AND `db`.`go_bot` > 0 GROUP BY `db`.`id2` ORDER BY `db`.`go_bot` ASC LIMIT 100'
2023-01-28 02:24:37 +00:00
);
2022-08-25 11:23:36 +00:00
while ( $pl = mysql_fetch_assoc ( $sp )) {
2023-01-10 16:29:32 +00:00
//перемещение бота, каждые 3-10 сек.
2022-08-25 11:23:36 +00:00
if ( $pl [ 'go_bot' ] > 0 && $pl [ 'go_bot' ] <= time ()) {
$tgx = rand ( - 1 , 1 );
$tgy = rand ( - 1 , 1 );
if ( $tgx != 0 && $tgy != 0 ) {
if ( rand ( 0 , 1 ) == 1 ) {
$tgy = 0 ;
} else {
$tgx = 0 ;
}
}
2023-10-13 15:02:45 +00:00
$vlb = $this -> cellIsGoodforAction ( $pl [ 'x' ], $pl [ 'y' ], $pl [ 'x' ] + $tgx , $pl [ 'y' ] + $tgy );
2023-01-10 16:29:32 +00:00
//Кто-то рядом
2023-01-28 02:24:37 +00:00
$tuz = mysql_fetch_assoc (
mysql_query (
'SELECT `x`,`y`,`id`,`hpNow` FROM `stats` WHERE `dnow` = "' . $this -> info [ 'id' ] . '" AND ( (`x` = ' . ( $pl [ 'x' ] + 1 ) . ' AND `y` = ' . ( $pl [ 'y' ]) . ') OR (`x` = ' . ( $pl [ 'x' ] - 1 ) . ' AND `y` = ' . ( $pl [ 'y' ]) . ') OR (`x` = ' . ( $pl [ 'x' ]) . ' AND `y` = ' . ( $pl [ 'y' ] + 1 ) . ') OR (`x` = ' . ( $pl [ 'x' ]) . ' AND `y` = ' . ( $pl [ 'y' ] - 1 ) . ') ) LIMIT 1'
)
);
2022-08-25 11:23:36 +00:00
2023-10-13 15:02:45 +00:00
if ( isset ( $tuz [ 'id' ]) && $this -> cellIsGoodforAction ( $pl [ 'x' ], $pl [ 'y' ], $tuz [ 'x' ], $tuz [ 'y' ])) {
2022-08-25 11:23:36 +00:00
$tuz [ 'x' ] = $pl [ 'x' ];
2023-08-30 14:58:56 +00:00
$tuz [ 'y' ] = $pl [ 'y' ];
2023-01-28 02:24:37 +00:00
mysql_query (
2023-08-30 14:58:56 +00:00
'UPDATE `stats` SET `x` = "' . $tuz [ 'x' ] . '" , `y` = "' . $tuz [ 'y' ] . '" WHERE `id` = "' . $tuz [ 'id' ] . '" LIMIT 1'
);
$this -> botAtack ( $pl , $tuz , 1 ); //Тут
$sps = mysql_query (
2023-10-13 15:02:45 +00:00
'SELECT `db`.*, `tb`.* FROM `dungeon_bots` AS `db` LEFT JOIN `test_bot` AS `tb` ON (`db`.`id_bot` = `tb`.`id`) LEFT JOIN `stats` as `st` ON (`st`.`dnow` = `db`.`dn`) WHERE `db`.`dn` = "' . $this -> userinfo [ 'dnow' ] . '" AND `db`.`x` ="' . $tuz [ 'x' ] . '" AND `db`.`y` ="' . $tuz [ 'y' ] . '" AND `db`.`atack` = "0" AND `db`.`delete` = "0" AND `db`.`inBattle` = "0" GROUP BY `db`.`id2` ORDER BY `db`.`go_bot` ASC LIMIT 50'
2023-08-30 14:58:56 +00:00
);
while ( $pll = mysql_fetch_assoc ( $sps )) {
$this -> botAtack ( $pll , $tuz , 1 );
}
2023-10-13 15:02:45 +00:00
} elseif ( $vlb ) { // Передвижение ботов.
2023-08-30 14:58:56 +00:00
$pl [ 'go_bot' ] = time () + 10 + rand ( 1 , 5 );
$pl [ 'x' ] += $tgx ;
$pl [ 'y' ] += $tgy ;
mysql_query (
'UPDATE `dungeon_bots` SET `x` = "' . $pl [ 'x' ] . '",`y` = "' . $pl [ 'y' ] . '",`go_bot` = "' . $pl [ 'go_bot' ] . '" WHERE `id2` = "' . $pl [ 'id2' ] . '" LIMIT 1'
);
2022-08-25 11:23:36 +00:00
}
}
}
2023-08-30 14:58:56 +00:00
2023-09-30 01:31:32 +00:00
2023-09-30 14:53:26 +00:00
$botsArr = Db :: getRows (
2023-10-13 15:02:45 +00:00
'select * from dungeon_bots left join test_bot on dungeon_bots.id_bot = test_bot.id where dn = ? and x <= ? and x >= ? and y <= ? and y >= ? limit 50' ,
[ $this -> userinfo [ 'dnow' ], $whrVals [ $this -> gs ][ 0 ], $whrVals [ $this -> gs ][ 1 ], $whrVals [ $this -> gs ][ 2 ], $whrVals [ $this -> gs ][ 3 ],]
2023-09-30 14:53:26 +00:00
);
2023-09-30 01:31:32 +00:00
foreach ( $botsArr as $pl ) {
2023-09-30 14:53:26 +00:00
if ( ! isset ( $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]])) {
continue ;
}
// }
//
// $sp = mysql_query(
2023-10-13 15:02:45 +00:00
// 'SELECT `u`.*,`st`.* FROM `dungeon_bots` AS `u` LEFT JOIN `test_bot` AS `st` ON (`u`.`id_bot` = `st`.`id`) WHERE `u`.`dn` = "' . $this->userinfo['dnow'] . '" AND ' . $whr[$this->gs] . ' AND `u`.`delete` = "0" LIMIT 50'
2023-09-30 14:53:26 +00:00
// );
// while ($pl = mysql_fetch_assoc($sp)) {
2023-08-30 14:58:56 +00:00
$i ++ ;
if ( ! isset ( $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]])) {
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] = 0 ;
}
$pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] ++ ;
$dlg = 0 ;
if ( $pl [ 'dialog' ] > 0 ) {
$dlg = $pl [ 'dialog' ];
}
$noat = 1 ;
if ( $pl [ 'noatack' ] == 1 && $this -> info [ 'bsid' ] == 0 ) {
$noat = 0 ;
}
2023-09-30 14:53:26 +00:00
$r .= ',' . ( $i - 1 ) . ':{9:0,0:' . $pl [ 'id2' ] . ',1:\'' . $pl [ 'login' ] . '\',2:' . (( int ) $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]) . ',3:' . $pl [ 'sex' ] . ',4:\'' . str_replace (
2023-08-30 14:58:56 +00:00
'.gif' , '' , $pl [ 'obraz' ]
) . '\',5:\'bot\',6:' . $pos [ $this -> cord [ $pl [ 'y' ] . '_' . $pl [ 'x' ]]] . ',7:' . $dlg . ',8:' . $noat . '}' ;
}
return 'count:' . $i . $r ;
2022-08-25 11:23:36 +00:00
}
public function testGone ( $id )
{
$go = 0 ;
if ( $id == 1 ) {
2023-01-10 16:29:32 +00:00
//вперед
2022-08-25 11:23:36 +00:00
$go = $this -> sg [ $this -> gs ][ 1 ];
} elseif ( $id == 2 ) {
2023-01-10 16:29:32 +00:00
//назад
2022-08-25 11:23:36 +00:00
$go = $this -> sg [ $this -> gs ][ 3 ];
} elseif ( $id == 3 ) {
2023-01-10 16:29:32 +00:00
//на право
2022-08-25 11:23:36 +00:00
$go = $this -> sg [ $this -> gs ][ 4 ];
} elseif ( $id == 4 ) {
2023-01-10 16:29:32 +00:00
//на лево
2022-08-25 11:23:36 +00:00
$go = $this -> sg [ $this -> gs ][ 2 ];
}
2023-10-13 15:02:45 +00:00
$thp = self :: getDungeonMapCellRow ( $this -> userinfo [ 'x' ], $this -> userinfo [ 'y' ], $this -> info [ 'id2' ]);
2022-08-25 11:23:36 +00:00
$ng = [ 4 => 1 , 2 => 2 , 1 => 3 , 3 => 4 ];
if ( isset ( $thp [ 'id' ]) && $thp [ 'go_' . $ng [ $go ]] == 0 ) {
$go = 0 ;
}
$tgo = [ 0 => 0 , 1 => 0 ];
if ( $go == 1 ) {
$tgo [ 1 ] += 1 ;
} elseif ( $go == 2 ) {
$tgo [ 0 ] -= 1 ;
} elseif ( $go == 3 ) {
$tgo [ 1 ] -= 1 ;
} elseif ( $go == 4 ) {
$tgo [ 0 ] += 1 ;
}
2023-10-13 15:02:45 +00:00
$tbot = $this -> getBot ( $this -> userinfo [ 'x' ] + ( int ) $tgo [ 0 ], $this -> userinfo [ 'y' ] + ( int ) $tgo [ 1 ], $this -> info [ 'id' ]);
if ( isset ( $tbot [ 'id2' ]) && $this -> userinfo [ 'admin' ] == 0 ) {
2022-08-25 11:23:36 +00:00
$go = 0 ;
}
return $go ;
}
2023-10-13 15:02:45 +00:00
public function initPoint ( int $x , int $y ) : void
{
$this -> point = self :: getDungeonMapCellRow ( $this -> info [ 'id2' ], $x , $y );
}
2022-08-25 11:23:36 +00:00
}