game/_incl_data/class/Dungeon.php

2337 lines
121 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use Core\Db;
use User\ItemsModel;
class Dungeon
{
public array $info;
public $error; //карта
public $gs = 1;
public $information;
public $id_dng;
public $see;
public array $point;
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,
];
private $bs;
private array $map = [0 => []];
private array $cord = ['x' => 0];
private array $sg = [
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],
];
/**
* 1-9: передняя стенка, в 2-х шагах;<br>
* 10-23: растояние: 1 шаг;<br>
* 24: стена прямо слева от персонажа;<br>
* 25: стена прямо справа от персонажа;<br>
* 26: стена прямо перед персонажем;<br>
* 27: стена слева от персонажа;<br>
* 28: стена справа от персонажа;
* @var array
*/
public readonly array $walls;
public function __construct(User $user = null)
{
if (!$user) {
$user = User::start();
}
global $u;
$this->info = Db::getRow('select * from dungeon_now where id = ?', [$user->info['dnow']]);
$this->id_dng = $this->info['id2'];
$this->gs = $u->info['s'];
if ($this->gs < 1 || $this->gs > 4) {
$this->gs = 1;
}
if ($this->info['bsid'] > 0) {
$this->bs = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `bs_turnirs` WHERE `city` = "' . $u->info['city'] . '" AND `id` = "' . $this->info['bsid'] . '" AND `time_start` = "' . $this->info['time_start'] . '" LIMIT 1'
)
);
}
if (isset($_GET['itm_luck']) && $this->info['bsid'] == 0) {
$this->itm_luck((int)$_GET['itm_luck']);
} elseif (isset($_GET['itm_unluck']) && $this->info['bsid'] == 0) {
$this->itm_unluck((int)$_GET['itm_unluck']);
} elseif (isset($_GET['atack'])) {
$this->atack((int)$_GET['atack']);
} elseif (isset($_GET['take'])) {
$this->takeinv((int)$_GET['take']);
} elseif (isset($_GET['take_obj'])) {
$this->takeit((int)$_GET['take_obj']);
} elseif (isset($_GET['look'])) {
if ((int)$_GET['look'] == 1) {
if ($this->gs == 1) {
$this->gs = 2;
} elseif ($this->gs == 2) {
$this->gs = 3;
} elseif ($this->gs == 3) {
$this->gs = 4;
} elseif ($this->gs == 4) {
$this->gs = 1;
}
} elseif ((int)$_GET['look'] == 2) {
if ($this->gs == 1) {
$this->gs = 4;
} elseif ($this->gs == 2) {
$this->gs = 1;
} elseif ($this->gs == 3) {
$this->gs = 2;
} elseif ($this->gs == 4) {
$this->gs = 3;
}
}
mysql_query(
'UPDATE `stats` SET `s` = "' . ((int)$this->gs) . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
$u->info['s'] = $this->gs;
} elseif (isset($_GET['go'])) {
//перемещение
$this->testGo((int)$_GET['go']);
}
/* генерируем вид персонажа (только карта)
$this->gs = 1; //смотрим прямо
2; //смотрим лево
3; //смотрим вниз
4; //смотрим право
( ( ( `y` >= '.$u->info['y'].' && `y` <= '.($u->info['y']+4).' ) && ( `x` >= '.($u->info['x']-1).' && `x` <= '.($u->info['x']+1).' ) ) || ( (`x` = '.($u->info['x']+2).' || `x` = '.($u->info['x']-2).') && ( `y` = '.($u->info['y']+3).' || `y` = '.($u->info['y']+4).' ) ) )
*/
$whr = [1 => ' ((`x` <= ' . ($u->info['x'] + 2) . ' && `x` >= ' . ($u->info['x'] - 2) . ') && (`y` >= ' . $u->info['y'] . ' && `y` <= ' . ($u->info['y'] + 4) . ')) ', //прямо
3 => ' ((`x` <= ' . ($u->info['x'] + 2) . ' && `x` >= ' . ($u->info['x'] - 2) . ') && (`y` <= ' . $u->info['y'] . ' && `y` >= ' . ($u->info['y'] - 4) . ')) ', //вниз
2 => ' ((`x` <= ' . $u->info['x'] . ' && `x` >= ' . ($u->info['x'] - 4) . ') && (`y` <= ' . ($u->info['y'] + 2) . ' && `y` >= ' . ($u->info['y'] - 2) . ')) ', //лево
4 => ' ((`x` >= ' . $u->info['x'] . ' && `x` <= ' . ($u->info['x'] + 4) . ') && (`y` <= ' . ($u->info['y'] + 2) . ' && `y` >= ' . ($u->info['y'] - 2) . ')) ', //право
];
$i = 1;
$sp = mysql_query(
'SELECT * FROM `dungeon_map` WHERE `id_dng` = "' . $this->id_dng . '" AND ' . $whr[$this->gs] . ' ORDER BY `y` ASC , `x` ASC LIMIT 25'
);
while ($pl = mysql_fetch_assoc($sp)) {
$this->map[0][$pl['y'] . '_' . $pl['x']] = $pl;
$i++;
}
$this->map['good'] = $i; //целых клеток
$this->map[1] = $this->genMatix();
$this->lookDungeon();
}
public function itm_luck($id)
{
global $u;
$fxv = ['itm' => mysql_fetch_assoc(
mysql_query(
'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
) . '" AND `ish`.`take` = "0" AND `ish`.`delete` = "0" AND `ish`.`x` = "' . $u->info['x'] . '" AND `ish`.`y` = "' . $u->info['y'] . '" LIMIT 1'
)
), 'luck' => mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$id
) . '" LIMIT 1'
)
), 'luck2' => mysql_fetch_assoc(
mysql_query(
'SELECT COUNT(*) FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$id
) . '" LIMIT 1'
)
)];
if ($u->stats['silver'] >= 3) { //дополнительный бросок
$fxv['luck2'][0]--;
}
if ($fxv['itm']['user'] > 0) {
$this->error = 'Розыгрыш предмет уже завершился...';
} elseif (!isset($fxv['itm']['id'])) {
$this->error .= '<div>Предмет не найден</div>';
} elseif ($fxv['luck2'][0] > 0) {
$this->error .= '<div>Вы уже учавствуете в розыгрыше &quot;' . $fxv['itm']['name'] . '&quot;, ожидаем других участников еще ' . $u->timeOut(
$fxv['itm']['time'] - time() + 300
) . '</div>';
} else {
$luck_users = mysql_fetch_assoc(
mysql_query(
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$id
) . '" LIMIT 1'
)
);
$luck_users = $luck_users[0];
if ($luck_users < 1) {
mysql_query(
'UPDATE `dungeon_items` SET `time` = "' . time() . '" WHERE `id` = "' . $fxv['itm']['id'] . '" LIMIT 1'
);
}
$rndl = rand(1, 100);
mysql_query(
'INSERT INTO `dungeon_actions` (`uid`,`dn`,`x`,`y`,`time`,`vars`,`vals`) VALUES (
"' . $u->info['id'] . '","' . $u->info['dnow'] . '","' . $u->info['x'] . '","' . $u->info['y'] . '","' . time() . '",
"luck_itm' . mysql_real_escape_string($id) . '","' . $rndl . '"
)'
);
if ($u->info['sex'] == 0) {
$fxv['text'] = '<b>' . $u->info['login'] . '</b> выбросил *' . $rndl . '* в споре за предмет &quot;' . $fxv['itm']['name'] . '&quot;';
} else {
$fxv['text'] = '<b>' . $u->info['login'] . '</b> выбросила *' . $rndl . '* в споре за предмет &quot;' . $fxv['itm']['name'] . '&quot;';
}
$this->sys_chat($fxv['text']);
$this->error .= '<div>Вы выбросили <b>' . $rndl . '</b> в споре за &quot;' . $fxv['itm']['name'] . '&quot;</div>';
}
$this->test_luck($id);
unset($fxv);
}
public function sys_chat($rtxt)
{
global $u;
$cmsg = new ChatMessage();
$cmsg->setDn($u->info['dnow']);
$cmsg->setCity($u->info['city']);
$cmsg->setRoom($u->info['room']);
$cmsg->setText($rtxt);
$cmsg->setType(6);
$cmsg->setTypeTime(1);
(new Chat())->sendMsg($cmsg);
}
public function test_luck($id)
{
global $u;
$fxv = ['itm' => mysql_fetch_assoc(
mysql_query(
'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
) . '" AND `ish`.`take` = "0" AND `ish`.`delete` = "0" AND `ish`.`x` = "' . $u->info['x'] . '" AND `ish`.`y` = "' . $u->info['y'] . '" LIMIT 1'
)
), '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
) . '" LIMIT 1'
)
), '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];
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> выигрывает в споре за предмет &quot;' . $fxv['itm']['name'] . '&quot;';
$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>';
}
} else {
$this->error .= '<div>У остальных участников осталось ' . $u->timeOut(
$fxv['itm']['time'] + 300 - time()
) . ' мин. до конца розыгрыша</div>';
}
unset($fxv);
}
public function itm_unluck($id)
{
global $u;
$fxv = ['itm' => mysql_fetch_assoc(
mysql_query(
'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
) . '" AND `ish`.`take` = "0" AND `ish`.`delete` = "0" AND `ish`.`x` = "' . $u->info['x'] . '" AND `ish`.`y` = "' . $u->info['y'] . '" LIMIT 1'
)
), 'luck' => mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$id
) . '" LIMIT 1'
)
)];
if ($fxv['itm']['user'] > 0) {
$this->error = 'Розыгрыш предмет уже завершился...';
} elseif (!isset($fxv['itm']['id'])) {
$this->error .= '<div>Предмет не найден</div>';
} elseif (isset($fxv['luck']['id'])) {
if ($fxv['luck']['vals'] == 0) {
$this->error .= '<div>Вы уже отказались от участия в розыгрыше &quot;' . $fxv['itm']['name'] . '&quot;</div>';
} else {
$this->error .= '<div>Вы уже учавствуете в розыгрыше &quot;' . $fxv['itm']['name'] . '&quot;, ожидаем других участников еще ' . $u->timeOut(
$fxv['itm']['time'] - time() + 300
) . '</div>';
}
} else {
$luck_users = mysql_fetch_assoc(
mysql_query(
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$id
) . '" LIMIT 1'
)
);
$luck_users = $luck_users[0];
if ($luck_users < 1) {
mysql_query(
'UPDATE `dungeon_items` SET `time` = "' . time() . '" WHERE `id` = "' . $fxv['itm']['id'] . '" LIMIT 1'
);
}
if ($u->info['sex'] == 0) {
$fxv['text'] = '<b>' . $u->info['login'] . '</b> отказался от спора за предмет &quot;' . $fxv['itm']['name'] . '&quot;';
} else {
$fxv['text'] = '<b>' . $u->info['login'] . '</b> отказалась от спора за предмет &quot;' . $fxv['itm']['name'] . '&quot;';
}
$this->sys_chat($fxv['text']);
mysql_query(
'INSERT INTO `dungeon_actions` (`uid`,`dn`,`x`,`y`,`time`,`vars`,`vals`) VALUES (
"' . $u->info['id'] . '","' . $u->info['dnow'] . '","' . $u->info['x'] . '","' . $u->info['y'] . '","' . time() . '",
"luck_itm' . mysql_real_escape_string($id) . '","0"
)'
);
$this->error .= '<div>Вы отказались от участия в розыгрыше &quot;' . $fxv['itm']['name'] . '&quot;</div>';
}
unset($fxv);
}
public function atack($id)
{
global $u, $c, $code;
$bot = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_bots` WHERE `id2` = "' . $id . '" AND `for_dn` = "0" AND `dn` = "' . $this->info['id'] . '" AND `delete` = "0" LIMIT 1'
)
);
if (isset($bot['id2'])) {
if (($u->info['x'] != $bot['x'] || $bot['y'] != $u->info['y']) && $this->testLike(
$u->info['x'], $u->info['y'], $bot['x'], $bot['y']
) == 1) {
//Создаем подеинок
$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'
)
);
if (isset($tbtl['id'])) {
//вступаем в поединок
mysql_query(
'UPDATE `users` SET `battle` = "' . $tbtl['id'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query('UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
/*#$this->error = 'Нападаем ... '; // <script>location="main.php?rnd='.$code.'";</script>*/
//header('location: main.php');
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];
$ins = mysql_query(
'INSERT INTO `battle` (`dungeon`,`dn_id`,`x`,`y`,`city`,`time_start`,`players`,`timeout`,`type`,`invis`,`noinc`,`travmChance`,`typeBattle`,`addExp`,`money`) VALUES (
"' . $this->info['id2'] . '",
"' . $this->info['id'] . '",
"' . $bot['x'] . '",
"' . $bot['y'] . '",
"' . $u->info['city'] . '",
"' . time() . '",
"' . $btl['players'] . '",
"' . $btl['timeout'] . '",
"' . $btl['type'] . '",
"' . $btl['invis'] . '",
"' . $btl['noinc'] . '",
"' . $btl['travmChance'] . '",
"' . $btl['typeBattle'] . '",
"' . $btl['addExp'] . '",
"' . $btl['money'] . '")'
);
$btl_id = mysql_insert_id();
if ($btl_id > 0) {
//Добавляем ботов
$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'
);
$j = 0;
$logins_bot = [];
while ($pl = mysql_fetch_assoc($sp)) {
$jui = 1;
mysql_query(
'UPDATE `dungeon_bots` SET `inBattle` = "' . $btl_id . '" WHERE `id2` = "' . $pl['id2'] . '" LIMIT 1'
);
while ($jui <= $pl['colvo']) {
$k = $u->addNewbot($pl['id_bot'], null, null, $logins_bot);
$logins_bot = $k['logins_bot'];
if ($k != false) {
$upd = mysql_query(
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $k['id'] . '" LIMIT 1'
);
if ($upd) {
$upd = mysql_query(
'UPDATE `stats` SET `x`="' . $bot['x'] . '",`y`="' . $bot['y'] . '",`team` = "2" WHERE `id` = "' . $k['id'] . '" LIMIT 1'
);
if ($upd) {
$j++;
}
}
}
$jui++;
}
}
unset($logins_bot);
if ($j > 0) {
mysql_query(
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
/*#$this->error = 'Нападаем ...';// <script>location="main.php?rnd='.$code.'";</script>*/ //
//header('location: main.php');
die('<script>top.frames[\'main\'].location = "main.php";</script>');
} else {
$this->error = 'Не удалось напасть, ошибка обьекта нападения ...';
}
} else {
$this->error = 'Не удалось создать поединок ...';
}
}
} else {
$this->error = 'Не удалось напасть ...';
}
} else {
if (isset($this->bs['id']) || $this->info['id2'] == 15) {
$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'
)
);
if (($u->info['x'] != $bot['x'] || $bot['y'] != $u->info['y']) && $this->testLike(
$u->info['x'], $u->info['y'], $bot['x'], $bot['y']
) == 1) {
//Создаем подеинок
$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'
)
);
//die('Нападения временно запрещены. ['.$tbtl['id'].'] 5-10 мин.');
if (isset($tbtl['id'])) {
//вступаем в поединок
$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(
'UPDATE `users` SET `battle` = "' . $tbtl['id'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
$nextteam = $lstm['team'] + 1;
mysql_query(
'UPDATE `stats` SET `team` = "' . $nextteam . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `stats` SET `x` = "' . $bot['x'] . '", `y` = "' . $bot['y'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
//
if ($this->info['bsid'] > 0) {
$me_real = mysql_fetch_assoc(
mysql_query(
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $u->info['id'] . '" AND `login` = "' . $u->info['login'] . '" LIMIT 1'
)
);
$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(
'UPDATE `stats` SET `tactic7`= 20.000 WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
//Заносим в лог БС
if ($u->info['sex'] == 0) {
$text = '{u1} вмешался в поединок напав на {u2} <a target=_blank href=/logs.php?log=' . $tbtl['id'] . ' >»»</a>';
} else {
$text = '{u1} вмешалася в поединок напав на {u2} <a target=_blank href=/logs.php?log=' . $tbtl['id'] . ' >»»</a>';
}
if (isset($usr_real['id'])) {
$usrreal = '';
if ($usr_real['align'] > 0) {
$usrreal .= '<img src=//img.new-combats.tech/i/align/align' . $usr_real['align'] . '.gif width=12 height=15 >';
}
if ($usr_real['clan'] > 0) {
$usrreal .= '<img src=//img.new-combats.tech/i/clan/' . $usr_real['clan'] . '.gif width=24 height=15 >';
}
$usrreal .= '<b>' . $usr_real['login'] . '</b>[' . $usr_real['level'] . ']<a target=_blank href=/info/' . $usr_real['id'] . ' ><img width=12 hiehgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>';
} else {
$mereal = '<i>Невидимка</i>[??]';
}
if (isset($me_real['id'])) {
$mereal = '';
if ($me_real['align'] > 0) {
$mereal .= '<img src=//img.new-combats.tech/i/align/align' . $me_real['align'] . '.gif width=12 height=15 >';
}
if ($me_real['clan'] > 0) {
$mereal .= '<img src=//img.new-combats.tech/i/clan/' . $me_real['clan'] . '.gif width=24 height=15 >';
}
$mereal .= '<b>' . $me_real['login'] . '</b>[' . $me_real['level'] . ']<a target=_blank href=/info/' . $me_real['id'] . ' ><img width=12 hiehgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>';
} else {
$mereal = '<i>Невидимка</i>[??]';
}
$text = str_replace('{u1}', $mereal, $text);
$text = str_replace('{u2}', $usrreal, $text);
//Добавляем в лог БС
mysql_query(
'INSERT INTO `bs_logs` (`type`,`text`,`time`,`id_bs`,`count_bs`,`city`,`m`,`u`) VALUES (
"1", "' . mysql_real_escape_string($text) . '", "' . time() . '", "' . $this->bs['id'] . '", "' . $this->bs['count'] . '", "' . $this->bs['city'] . '",
"' . round($this->bs['money'] * 0.85, 2) . '","' . $i . '"
)'
);
//
}
//
$this->error = 'Нападаем ... <script>location="main.php?rnd=' . $code . '";</script>';
} else {
$btl_id = 0;
//$expB = -77.77;
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'];
}
$ins = mysql_query(
'INSERT INTO `battle` (`inTurnir`,`dungeon`,`dn_id`,`x`,`y`,`city`,`time_start`,`players`,`timeout`,`type`,`invis`,`noinc`,`travmChance`,`typeBattle`,`addExp`,`money`) VALUES (
"' . $btl['inTurnir'] . '",
"' . $this->info['id2'] . '",
"' . $this->info['id'] . '",
"' . $bot['x'] . '",
"' . $bot['y'] . '",
"' . $u->info['city'] . '",
"' . time() . '",
"' . $btl['players'] . '",
"' . $btl['timeout'] . '",
"' . $btl['type'] . '",
"' . $btl['invis'] . '",
"' . $btl['noinc'] . '",
"' . $btl['travmChance'] . '",
"' . $btl['typeBattle'] . '",
"' . $btl['addExp'] . '",
"' . $btl['money'] . '")'
);
$btl_id = mysql_insert_id();
mysql_query(
'UPDATE `stats` SET `x` = "' . $bot['x'] . '", `y` = "' . $bot['y'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `stats` SET `x` = "' . $bot['x'] . '", `y` = "' . $bot['y'] . '" WHERE `id` = "' . $bot['id'] . '" LIMIT 1'
);
if ($btl_id > 0) {
//Добавляем ботов
mysql_query(
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `stats` SET `team` = "1" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `users` SET `battle` = "' . $btl_id . '" WHERE `id` = "' . $bot['id'] . '" LIMIT 1'
);
mysql_query('UPDATE `stats` SET `team` = "2" WHERE `id` = "' . $bot['id'] . '" LIMIT 1');
if ($u->stats['hpNow'] < 1) {
$u->stats['hpNow'] = 1;
mysql_query(
'UPDATE `stats` SET `hpNow` = "1" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
mysql_query(
'UPDATE `users` SET `lose` = `lose` + 1 WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
}
if ($bot['hpNow'] < 1) {
$bot['hpNow'] = 1;
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'
);
}
if ($this->info['bsid'] > 0) {
$me_real = mysql_fetch_assoc(
mysql_query(
'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `inUser` = "' . $u->info['id'] . '" AND `login` = "' . $u->info['login'] . '" LIMIT 1'
)
);
$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'
)
);
//Заносим в лог БС
if ($u->info['sex'] == 0) {
$text = '{u1} напал на {u2} завязался бой <a target=_blank href=/logs.php?log=' . $btl_id . ' >»»</a>';
} else {
$text = '{u1} напала на {u2} завязался бой <a target=_blank href=/logs.php?log=' . $btl_id . ' >»»</a>';
}
if (isset($usr_real['id'])) {
$usrreal = '';
if ($usr_real['align'] > 0) {
$usrreal .= '<img src=//img.new-combats.tech/i/align/align' . $usr_real['align'] . '.gif width=12 height=15 >';
}
if ($usr_real['clan'] > 0) {
$usrreal .= '<img src=//img.new-combats.tech/i/clan/' . $usr_real['clan'] . '.gif width=24 height=15 >';
}
$usrreal .= '<b>' . $usr_real['login'] . '</b>[' . $usr_real['level'] . ']<a target=_blank href=/info/' . $usr_real['id'] . ' ><img width=12 hiehgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>';
} else {
$mereal = '<i>Невидимка</i>[??]';
}
if (isset($me_real['id'])) {
$mereal = '';
if ($me_real['align'] > 0) {
$mereal .= '<img src=//img.new-combats.tech/i/align/align' . $me_real['align'] . '.gif width=12 height=15 >';
}
if ($me_real['clan'] > 0) {
$mereal .= '<img src=//img.new-combats.tech/i/clan/' . $me_real['clan'] . '.gif width=24 height=15 >';
}
$mereal .= '<b>' . $me_real['login'] . '</b>[' . $me_real['level'] . ']<a target=_blank href=/info/' . $me_real['id'] . ' ><img width=12 hiehgt=11 src=//img.new-combats.tech/i/inf_capitalcity.gif ></a>';
} else {
$mereal = '<i>Невидимка</i>[??]';
}
$text = str_replace('{u1}', $mereal, $text);
$text = str_replace('{u2}', $usrreal, $text);
//Добавляем в лог БС
mysql_query(
'INSERT INTO `bs_logs` (`type`,`text`,`time`,`id_bs`,`count_bs`,`city`,`m`,`u`) VALUES (
"1", "' . mysql_real_escape_string($text) . '", "' . time() . '", "' . $this->bs['id'] . '", "' . $this->bs['count'] . '", "' . $this->bs['city'] . '",
"' . round($this->bs['money'] * 0.85, 2) . '","' . $i . '"
)'
);
//
}
$this->error = 'Нападаем ... <script>location="main.php?rnd=' . $code . '";</script>';
} else {
$this->error = 'Не удалось создать поединок ...';
}
}
} else {
$this->error = 'Не удалось напасть ...';
}
} else {
$this->error = 'Не удалось напасть, слишком далеко (id' . $id . ') ...';
}
}
}
public function testLike($x1, $y1, $x2, $y2)
{
//из $x1,$y1 в $x2,$y2
//доступна-ли эта клетка для действий
$r = 0;
$c1 = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_map` WHERE `x` = "' . $x1 . '" AND `y` = "' . $y1 . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'
)
);
$c2 = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_map` WHERE `x` = "' . $x2 . '" AND `y` = "' . $y2 . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'
)
);
if (isset($c1['id']) && isset($c2['id'])) {
if ($x1 == $x2 && $y1 == $y2) {
$r = 1;
} elseif ($x1 == $x2 - 1 && $c1['go_1'] == 1) //право
{
$r = 1;
} elseif ($x1 == $x2 + 1 && $c1['go_2'] == 1) //лево
{
$r = 1;
} elseif ($y1 == $y2 - 1 && $c1['go_3'] == 1) //верх
{
$r = 1;
} elseif ($y1 == $y2 + 1 && $c1['go_4'] == 1) //низ
{
$r = 1;
}
}
return $r;
}
//Предметы для БС
public function takeinv($id)
{
global $u, $c, $code;
$obj = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_items` WHERE `id` = "' . $id . '" AND `for_dn` = "0" AND `dn` = "' . $this->info['id'] . '" LIMIT 1'
)
);
if (isset($obj['id'])) {
$this->test_luck($id);
$fxv = ['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
) . '" LIMIT 1'
)
), '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) {
$this->error = 'Вы не можете сейчас поднять этот предмет, дождитесь завершения розыгрыша. Осталось ' . $u->timeOut(
$obj['time'] - time() + 300
);
} elseif ($u->info['x'] != $obj['x'] || $obj['y'] != $u->info['y']) {
$this->error = 'Предмет не найден ...';
} else {
if ($obj['take'] > 0) {
$this->error = 'Кто-то опередил вас ...';
} else {
if ($obj['user'] > 0 && $obj['user'] != $u->info['id'] && $obj['time'] > time() - 300) {
$uo = mysql_fetch_assoc(
mysql_query(
'SELECT `id`,`login`,`sex` FROM `users` WHERE `id` = "' . $obj['user'] . '" LIMIT 1'
)
);
}
if (isset($uo['id'])) {
$this->error = 'Предмет предназначен для &quot;' . $uo['login'] . '&quot;. Вы сможете забрать этот предмет, если ';
if ($uo['sex'] == 1) {
$this->error .= 'она ';
} else {
$this->error .= 'он ';
}
$this->error .= ' не поднимет его в течении ' . ceil(
5 - (time() - $obj['time']) / 60
) . ' мин.';
unset($uo);
} else {
$upd = mysql_query(
'UPDATE `dungeon_items` SET `take` = "' . $u->info['id'] . '" WHERE `id` = "' . $obj['id'] . '" LIMIT 1'
);
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) {
$data .= '|sudba=' . $u->info['login'];
}
if ($obj['data'] != '') {
$data .= $obj['data'];
}
$data = str_replace('|sudba=-1', '|sudba=' . $u->info['login'] . '', $data);
$idl = ItemsModel::addItem($obj['item_id'], $u->info['id'], $data, $obj);
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) {
$rtxt = '<b>' . $u->info['login'] . '</b> поднял предмет &quot;' . $it['name'] . '&quot;';
if ($obj['quest'] > 0) {
$rtxt .= ' (Квест)';
}
$this->sys_chat($rtxt);
}
$this->error = 'Вы подняли &quot;' . $it['name'] . '&quot;';
} else {
$this->error = 'Не удалось найти предмет ...';
}
} else {
$this->error = 'Не удалось добавить предмет в инвентарь ...';
}
}
}
}
}
}
public function addItem($i)
{
//добавляем предмет в пещеру (возможно выпал из бота или из сундука)
return mysql_query(
'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`,`bot`,`del`) VALUES ("' . $this->info['id'] . '","' . $i['uid'] . '","' . $i['iid'] . '","' . $i['time'] . '","' . $i['x'] . '","' . $i['y'] . '","' . $i['bid'] . '","' . ((int)$i['del']) . '")'
);
}
public function takeit($id)
{
global $u, $c, $code, $magic;
$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(
'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'
)
);
$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++;
}
if (isset($tbot['id2'])) {
$this->error = 'Не удалось, что-то или кто-то мешает ...';
} elseif ($this->testLike($u->info['x'], $u->info['y'], $obj['x'], $obj['y']) != 1) {
$this->error = 'Не удалось, слишком далеко ...!';
} else {
$a = explode('|', $obj['action']);
$r = '';
$i = 0;
while ($i < count($a)) {
$s = explode(':', $a[$i]);
if ($s[0] == 'kill_bot') {
//Требуется убить ботов
$t = explode(',', $s[1]);
$tr_gd = 0;
//Проверяем кого нужно убить и убили-ли
$j = 1;
$jn = 0;
while ($j < count($t)) {
$itm = explode('.', $t[$j]);
//[0] - x , [1] - y
$bot_itm = mysql_fetch_assoc(
mysql_query(
'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` = "' . $u->info['dnow'] . '" AND `u`.`x` = "' . $itm[0] . '" AND `u`.`y` = "' . $itm[1] . '" AND `u`.`delete` = "0" LIMIT 10'
)
);
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') {
$r .= 'Не удалось, что-то или кто-то мешает ...';
} else {
$r .= $t[0];
}
$i = count($a);
}
} elseif ($s[0] == 'kill_bot_d') {
//Требуется убить ботов (все боты нападают , если что-то не так )
$t = explode(',', $s[1]);
$tr_gd = 0;
//Проверяем кого нужно убить и убили-ли
$j = 1;
$jn = 0;
mysql_fetch_assoc(
mysql_query(
'SELECT `x`,`y`,`id`,`hpNow` FROM `stats` WHERE `dnow` = "' . $this->info['id'] . '" AND ( (`x` = ' . ($obj['x'] + 1) . ' AND `y` = ' . ($obj['y']) . ') OR (`x` = ' . ($obj['x'] - 1) . ' AND `y` = ' . ($obj['y']) . ') OR (`x` = ' . ($obj['x']) . ' AND `y` = ' . ($obj['y'] + 1) . ') OR (`x` = ' . ($obj['x']) . ' AND `y` = ' . ($obj['y'] - 1) . ') ) LIMIT 1'
)
);
while ($j < count($t)) {
$itm = explode('.', $t[$j]);
//[0] - x , [1] - y
$bot_itm_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` = "' . $u->info['dnow'] . '" AND `u`.`x` = "' . $itm[0] . '" AND `u`.`y` = "' . $itm[1] . '" AND `u`.`delete` = "0" LIMIT 50'
);
while ($bot_itm = mysql_fetch_assoc($bot_itm_sp)) {
$jn++;
$this->botAtack($bot_itm, $u->info, 1);
}
$j++;
}
if ($jn == 0) {
$tr_gd = 1;
}
unset($itm, $bot_itm, $jn);
if ($tr_gd == 0) {
if ($t[0] == '0') {
$r .= 'Не удалось, что-то или кто-то мешает ...';
} else {
$r .= $t[0];
}
$r .= ' Монстры начали атаковать вас!';
$i = count($a);
}
} elseif ($s[0] == 'ditm') {
//требует предмет для действия
$j = 0;
$t = explode(',', $s[1]);
$tr_gd = 1;
while ($j < count($t)) {
$itm = explode('=', $t[$j]);
$uitm = mysql_fetch_array(
mysql_query('SELECT `name` FROM `items_main` WHERE `id` = "' . $itm[0] . '" LIMIT 1')
);
mysql_query(
'UPDATE `items_users` SET `delete` = "' . time(
) . '" WHERE `item_id` = "' . $itm[0] . '" AND `uid` = "' . $u->info['id'] . '" AND (`delete` = 0 OR `delete` = 100) AND `inShop` = 0 AND `inTransfer` = 0 AND `inOdet` = 0 LIMIT ' . $itm[1]
);
$r .= 'Предмет &quot;<b>' . $uitm['name'] . '</b>&quot; (x' . $itm[1] . ') был утрачен...<br>';
$j++;
}
} elseif ($s[0] == 'tritm') {
//требует предмет для действия
$j = 0;
$t = explode(',', $s[1]);
$j = 0;
$tr_gd = 1;
while ($j < count($t)) {
$itm = explode('=', $t[$j]);
$uitm = mysql_fetch_array(
mysql_query(
'SELECT COUNT(`id`) FROM `items_users` WHERE `item_id` = "' . $itm[0] . '" AND `uid` = "' . $u->info['id'] . '" AND (`delete` = 0 OR `delete` = 100) AND `inShop` = 0 AND `inTransfer` = 0 AND `inOdet` = 0 LIMIT ' . $itm[1]
)
);
$uitm = $uitm[0];
if ($uitm < $itm[1]) {
$tr_gd = 0;
$uitm = mysql_fetch_assoc(
mysql_query(
'SELECT `name` FROM `items_main` WHERE `id` = "' . $itm[0] . '" LIMIT 1'
)
);
$r .= 'Требуется предмет &quot;<b>' . $uitm['name'] . '</b>&quot; (x' . $itm[1] . ')<br>';
}
$j++;
}
if (rand(0, 10000) > $itm[2] * 100) {
$tr_gd = 0;
$r .= 'Странно, но ничего не произошло...<br>';
}
if ($tr_gd == 1) {
//все отлично
} else {
$i = count($a);
}
} elseif ($s[0] == 'repl_ptp') {
require_once('dnaction/_dungeon_replace.php');
die();
//header('Location: ../../modules_data/location/_dungeon_replace.php');
} elseif ($s[0] == 'add_eff') {
//Кастуем эффект
$t = explode(',', $s[1]);
$j = 0;
while ($j < count($t)) {
$itm = explode('=', $t[$j]);
$ch = $u->testAction(
'`vars` = "add_eff_' . $this->info['id'] . '_' . $obj['id'] . '" AND `uid` = "' . $u->info['id'] . '" LIMIT ' . (1 + (int)$itm[2]) . '',
2
); //кол-во прошлых попыток
$ch = $ch[0];
$ch2 = $u->testAction(
' `vars` = "add_eff_' . $this->info['id'] . '_' . $obj['id'] . '" LIMIT ' . (1 + (int)$itm[4]) . '',
2
); //кол-во прошлых попыток (все юзеры)
$ch2 = $ch2[0];
if (($ch2 < $itm[4] || $itm[4] == 0) && $ch < $itm[2]) {
if ($itm[1] * 100 >= rand(0, 10000)) {
//удачно
$eff_d = mysql_fetch_assoc(
mysql_query(
'SELECT `id2`,`mname` FROM `eff_main` WHERE `id2` = "' . $itm[0] . '" LIMIT 1'
)
);
if (isset($eff_d['id2'])) {
//добавляем эффект
$us = $magic->addEffect($u->info['id'], $itm[0], 1);
if ($us[0] == 1) {
$r .= '<div>На Вас наложили заклятие &quot;' . $eff_d['mname'] . '&quot;.</div>';
} else {
$r .= '<div>Что-то пошло не так... Ощущается чье-то присутствие...</div>';
}
} else {
$r .= '<div>Что-то пошло не так... Слышен чей-то вой...</div>';
}
unset($eff_d, $us);
} else {
//не удачно
$r .= '<div>Не удалось...</div>';
}
$u->addAction(
time(), 'add_eff_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
} else {
//уже нельзя юзать
$r .= '<div>Что-то пошло не так...</div>';
}
unset($ch, $ch2);
$j++;
}
} elseif ($s[0] == 'mfast') {
//Добавляем баф //Ловушки и бафы
$j = 0;
$t = explode(',', $s[1]);
while ($j < count($t)) {
$itm = explode('=', $t[$j]);
$ch = $u->testAction(
'`vars` = "bafit_' . $this->info['id'] . '_' . $obj['id'] . '" LIMIT ' . (1 + (int)$itm[2]) . '',
2
); //кол-во прошлых попыток
$ch = $ch[0];
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) {
$r .= '<div>Вы попали в ловушку... Здоровье: <b>' . $itm[1] . ' HP</b></div>';
} elseif ($itm[1] > 0) {
$r .= '<div>Вы прикоснулись к магии... Здоровье: <b>+' . $itm[1] . ' HP</b></div>';
}
$u->info['hpNow'] += $itm[1];
if ($u->info['hpNow'] < 1) {
$r .= '<div>Вы перемещены в точку возрождения...</div>';
mysql_query(
'UPDATE `stats` SET `hpNow` = "' . $u->info['hpNow'] . '",`x` = "' . $u->info['res_x'] . '",`y` = "' . $u->info['res_y'] . '",`s` = "' . $u->info['res_s'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
} else {
mysql_query(
'UPDATE `stats` SET `hpNow` = "' . $u->info['hpNow'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
}
}
}
$u->addAction(
time(), 'bafit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
}
//записываем попытку
$j++;
}
} elseif ($s[0] == 'save_pos') {
if (isset($act_sl['port'])) {
$itm = explode('=', $act_sl['port']);
$obj['x'] = $itm[0];
$obj['y'] = $itm[1];
}
#$r .= 'Позиция сохранена. Теперь после смерти вы оживете здесь.';
mysql_query(
'UPDATE `stats` SET `res_x` = "' . $obj['x'] . '",`res_y` = "' . $obj['y'] . '",`res_s` = "' . $u->info['s'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
} 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]);
$u->info['res_x'] = $itm[0];
$u->info['res_y'] = $itm[1];
$upd = mysql_query(
'UPDATE `stats` SET `res_x` = "' . $u->info['x'] . '",`res_y` = "' . $u->info['y'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
if ($upd) {
$r .= 'Вы куда-то переместились... на этот раз удачно...<br>';
} else {
$r .= 'Что-то здесь не так ...';
}
} elseif ($s[0] == 'port') {
//телепортирует пользователя
$itm = explode('=', $s[1]);
$u->info['x'] = $itm[0];
$u->info['y'] = $itm[1];
$upd = mysql_query(
'UPDATE `stats` SET
`x` = "' . $u->info['x'] . '",`y` = "' . $u->info['y'] . '"
WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
if ($upd) {
$r .= 'Вы куда-то переместились... на этот раз удачно...<br>';
} else {
$r .= 'Что-то здесь не так ...';
}
} elseif ($s[0] == 'save_port') {
$itm = explode('=', $s[1]);
$u->info['res_x'] = $itm[0];
$u->info['res_y'] = $itm[1];
$upd = mysql_query(
'UPDATE `stats` SET `res_x` = "' . $u->info['res_x'] . '", `res_y` = "' . $u->info['res_y'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
} elseif ($s[0] == 'itm') {
//Добавляем предмет
$j = 0;
$t = explode(',', $s[1]);
while ($j < count($t)) {
$itm = explode('=', $t[$j]);
$ch = $u->testAction(
'`uid` = "' . $u->info['id'] . '" AND `vars` = "takeit_' . $this->info['id'] . '_' . $obj['id'] . '" LIMIT ' . (1 + (int)$itm[2]) . '',
2
); //кол-во прошлых попыток
$ch = $ch[0];
if ($ch >= $itm[2]) {
//закончились попытки
$r = 'ничего не произошло...<br>';
} else {
if ($itm[1] * 1000 >= rand(1, 100000)) {
//Случайный предмет (Башня смерти)
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 .= 'Вы обнаружили предмет &quot;<b>' . $it['name'] . '</b>&quot;.<br>';
$this->addItem(
['uid' => $u->info['id'], 'iid' => $it['id'], 'time' => time(), 'x' => $u->info['x'], 'y' => $u->info['y'], 'bid' => 0, 'del' => (int)$itm[4]]
);
}
} else {
//неудачная попытка
$r .= 'Вы ничего не нашли ...<br>';
}
$u->addAction(
time(), 'takeit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
}
//записываем попытку
$j++;
}
} elseif ($s[0] == 'itm1') {
//Добавляем предмет , только 1 предмет из всех и все юзеры могут тоже
$nj = 0;
$t = explode(',', $s[1]);
$j = rand(0, count($t));
if ($nj == 0) {
$itm = explode('=', $t[$j]);
$ch = $u->testAction(
'`uid` = "' . $u->info['id'] . '" AND `vars` = "takeit_' . $this->info['id'] . '_' . $obj['id'] . '" LIMIT ' . (1 + (int)$itm[2]) . '',
2
); //кол-во прошлых попыток
$ch = $ch[0];
if ($ch >= $itm[2]) {
//закончились попытки
$r .= 'Странно, но ничего не произошло... <br>';
} else {
if ($itm[1] * 1000 >= rand(1, 100000)) {
//Случайный предмет (Башня смерти)
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 .= 'Вы обнаружили предмет &quot;<b>' . $it['name'] . '</b>&quot;.<br>';
$u->addAction(
time(), 'takeit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
$this->addItem(
['uid' => $u->info['id'], 'iid' => $it['id'], 'time' => time(), 'x' => $u->info['x'], 'y' => $u->info['y'], 'bid' => 0, 'del' => (int)$itm[4]]
);
$nj++;
}
} else {
//неудачная попытка
$u->addAction(
time(), 'takeit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
$r .= 'Вы ничего не нашли ... <br>';
}
}
}
} elseif ($s[0] == 'itm2') {
//Добавляем предмет , только 1 предмет из всех и только 1 юзер может поднять
$nj = 0;
$t = explode(',', $s[1]);
$j = rand(0, count($t) - 1);
if ($nj == 0) {
$itm = explode('=', $t[$j]);
$ch = $u->testAction(
'`vars` = "takeit_' . $this->info['id'] . '_' . $obj['id'] . '" LIMIT ' . (1 + (int)$itm[2]) . '',
2
); //кол-во прошлых попыток
$ch = $ch[0];
if ($ch >= $itm[2]) {
//закончились попытки
$r .= 'Ничего не произошло... <br>';
} else {
if ($itm[1] * 1000 >= rand(1, 100000)) {
//Случайный предмет (Башня смерти)
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 .= 'Вы обнаружили предмет &quot;<b>' . $it['name'] . '</b>&quot;.<br>';
$u->addAction(
time(), 'takeit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
$this->addItem(
['uid' => $u->info['id'], 'iid' => $it['id'], 'time' => time(), 'x' => $u->info['x'], 'y' => $u->info['y'], 'bid' => 0, 'del' => (int)$itm[4]]
);
$nj++;
}
} else {
//неудачная попытка
$u->addAction(
time(), 'takeit_' . $this->info['id'] . '_' . $obj['id'], $u->info['city']
);
$r .= 'Вы ничего не нашли ... <br>';
}
}
}
} elseif ($s[0] == 'fileact') {
require('dnaction/' . $s[1] . '.php');
}
$i++;
}
$r = rtrim($r, '\<br\>');
if ($r == '') {
$r = 'В этот раз не удалось найти что-либо еще';
}
$this->error = $r;
}
} else {
$this->error = 'Предмет не найден ...';
}
}
public function botAtack($bot, $uid, $bs): void
{
### FIXME ВОЗМОЖНО тут потерялись [dungeon_bots.bot_group], ячейка отвечающая за группу разных ботов. Не вижу где это ипользуется. Тут только однотипные боты.
global $u;
$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']]);
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();
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;
}
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) {
Db::sql('update users left join stats on users.id = stats.id set battle = ?, team = 1 where users.id = ?', [$battleId, $uid['id']]);
}
}
} else {
//Добавляем ботов
$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;
}
$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>.',
]
);
}
Db::sql('update users left join stats on users.id = stats.id set battle = ?, team = 1 where users.id = ?', [$battleId, $uid['id']]);
}
}
}
public function testGo($id)
{
global $u, $c, $code;
$go = 0;
if ($id == 1) {
//вперед
$go = $this->sg[$this->gs][1];
} elseif ($id == 2) {
//назад
$go = $this->sg[$this->gs][3];
} elseif ($id == 3) {
//на право
$go = $this->sg[$this->gs][4];
} elseif ($id == 4) {
//на лево
$go = $this->sg[$this->gs][2];
}
$thp = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['x'] . '" AND `y` = "' . $u->info['y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'
)
);
$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;
}
$tbot = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_bots` WHERE `x` = "' . ($u->info['x'] + (int)$tgo[0]) . '" AND `y` = "' . ($u->info['y'] + (int)$tgo[1]) . '" AND `dn` = "' . $this->info['id'] . '" AND `for_dn` = "0" AND `delete` = "0" LIMIT 1'
)
);
if (isset($tbot['id2']) && $u->info['admin'] == 0) {
$go = 0;
}
$tmap = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['x'] . '" AND `y` = "' . $u->info['y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'
)
);
//наличие предмета
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) {
$num_rows = mysql_num_rows(
mysql_query(
'SELECT * FROM `items_users` WHERE `uid` = "' . $u->info['id'] . '" AND `delete` = "0" AND `inShop` = "0" AND `item_id` = "' . ((int)$ti2[0]) . '" LIMIT ' . ((int)$ti2[1]) . ''
)
);
if ($num_rows < (int)$ti2[1]) {
$tgo = $ti2[2];
if ($tgo != '0000' && $tgo[$ng[$go] - 1] == 1) {
$go = 0;
$trm = mysql_fetch_assoc(
mysql_query('SELECT * FROM `items_main` WHERE `id` = "' . ((int)$ti2[0]) . '" LIMIT 1')
);
$trnit .= '&quot;' . $trm['name'] . '&quot;, ';
}
}
}
$i++;
}
if ($trnit != '') {
$trnit = rtrim($trnit, ', ');
$this->error = 'У вас нет подходящего предмета. Требуется ' . $trnit;
}
}
$tmGo = $u->info['timeGo'] - time(); //сколько секунд осталось
if ($tmGo > 0) {
$go = 0;
$this->error = 'Не так быстро...';
}
if ($u->aves['now'] >= $u->aves['max']) {
$go = 0;
$this->error = 'Вы не можете перемещаться, рюкзак переполнен ...';
}
if ($go > 0) {
if ($go == 1) {
$u->info['y'] += 1;
} elseif ($go == 2) {
$u->info['x'] -= 1;
} elseif ($go == 3) {
$u->info['y'] -= 1;
} elseif ($go == 4) {
$u->info['x'] += 1;
}
if ($u->stats['speed_dungeon'] > 0) {
$tmap['timeGO'] = round($tmap['timeGO'] / 100 * (100 - $u->stats['speed_dungeon']));
if ($tmap['timeGO'] < 2) {
$tmap['timeGO'] = 1;
}
}
$u->info['timeGo'] = time() + $tmap['timeGO'];
$u->info['timeGoL'] = time();
$tmap0 = mysql_fetch_assoc(
mysql_query(
'SELECT `id`,`teleport` FROM `dungeon_map` WHERE `id_dng` = "' . $tmap['id_dng'] . '" AND `x` = "' . $u->info['x'] . '" AND `y` = "' . $u->info['y'] . '" LIMIT 1'
)
);
if ($tmap0['teleport'] > 0) {
$tmap1 = mysql_fetch_assoc(
mysql_query(
'SELECT `id`,`x`,`y` FROM `dungeon_map` WHERE `id` = "' . $tmap0['teleport'] . '" LIMIT 1'
)
);
if (isset($tmap1['id'])) {
$u->info['x'] = $tmap1['x'];
$u->info['y'] = $tmap1['y'];
$this->error = 'Вы переместились в другую комнату...';
}
}
mysql_query(
'UPDATE `stats` SET `x` = "' . $u->info['x'] . '",`y` = "' . $u->info['y'] . '",`timeGo` = "' . $u->info['timeGo'] . '",`timeGoL` = "' . $u->info['timeGoL'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
unset($id);
}
}
//Розыгрыш предмета
public function genMatix(): array
{
$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;
}
public function getMatrix($y, $x)
{
global $u;
$this->cord['x']++;
$this->cord[($u->info['y'] + $y) . '_' . ($u->info['x'] + $x)] = $this->cord['x'];
return $this->map[0][($u->info['y'] + $y) . '_' . ($u->info['x'] + $x)] ?? [];
}
private function lookDungeon()
{
$pd = array_fill(1, 28, 0);
global $pd;
/* Генерируем изображение карты */
/* LEVEL 1 */
if ($this->testSt(2, 4)) {
$pd[28] = 1;
}
if ($this->testSt(2, 2)) {
$pd[27] = 1;
}
if ($this->testSt(2, 1)) {
$pd[26] = 1;
}
if ($this->testSt(3, 1)) {
$pd[25] = 1;
}
if ($this->testSt(1, 1)) {
$pd[24] = 1;
}
/* LEVEL 2 */
if ($this->testSt(5, 4)) {
$pd[23] = 1;
}
if ($this->testSt(5, 2)) {
$pd[22] = 1;
}
if ($this->testSt(5, 1)) {
$pd[21] = 1;
}
if ($this->testSt(6, 1)) {
$pd[20] = 1;
}
if ($this->testSt(4, 1)) {
$pd[19] = 1;
}
/* LEVEL 3 */
if ($this->testSt(8, 4)) {
$pd[18] = 1;
}
if ($this->testSt(8, 2)) {
$pd[17] = 1;
}
if ($this->testSt(8, 1)) {
$pd[16] = 1;
}
if ($this->testSt(7, 1)) {
$pd[15] = 1;
}
if ($this->testSt(9, 1)) {
$pd[14] = 1;
}
/* LEVEL 4 */
if ($this->testSt(12, 4) || $this->testSt(13, 2)) {
$pd[13] = 1;
}
if ($this->testSt(12, 2) || $this->testSt(11, 4)) {
$pd[12] = 1;
}
if ($this->testSt(13, 1) || $this->testSt(17, 3)) {
$pd[11] = 1;
} //8
if ($this->testSt(11, 1) || $this->testSt(16, 3)) {
$pd[10] = 1;
} //7
if ($this->testSt(12, 1)) {
$pd[9] = 1;
}
if ($this->testSt(14, 1) || $this->testSt(18, 3)) {
$pd[6] = 1;
} //2
if ($this->testSt(10, 1) || $this->testSt(19, 3)) {
$pd[5] = 1;
} //1
if ($this->testSt(16, 4) || $this->testSt(15, 2)) {
$pd[4] = 1;
}
if ($this->testSt(15, 4) || $this->testSt(17, 2)) {
$pd[3] = 1;
}
$this->walls = $pd;
/* Генерируем предметы на карте */
/* Генерируем персонажей и ботов на карте */
}
/** Видим ли мы стену?
* @param int $id
* @param int $s в какую сторону смотрим
* @return bool
*/
private function testSt(int $id, int $s): bool
{
$r = 0;
//заменяем отображение стен в зависимости от угла обзора
$s = $this->sg[$this->gs][$s];
if (isset($this->map[1][$id]['id'])) {
$r = $this->map[1][$id]['st'][($s - 1)];
}
return $r > 0;
}
public function initPoint(int $x, int $y): void
{
$this->point = Db::getRow('select * from dungeon_map where id_dng = ? and x = ? and y = ? limit 1', [$this->info['id2'], $x, $y]);
}
public function pickitem($obj, int $itm, $for, $data = '', $dn_delete = false, $chat = 0): bool
{
global $u;
$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 = '';
if ($u->info['sex'] == 1) {
$asex = 'а';
}
if ($for > 0) {
$tou = $for;
$rtxt = '<b>' . $u->info['login'] . '</b> обнаружил' . $asex . ' предмет &quot;' . $itm['name'] . '&quot; в &quot;' . $obj['name'] . '&quot;';
} else {
$rtxt = '<b>' . $u->info['login'] . '</b> обнаружил' . $asex . ' предмет &quot;' . $itm['name'] . '&quot; в &quot;' . $obj['name'] . '&quot;, и вы решили разыграть его';
}
$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) . '",
"' . $u->info['dnow'] . '",
"' . $tou . '",
"' . $itm['id'] . '",
"' . time() . '",
"' . $u->info['x'] . '",
"' . $u->info['y'] . '")'
);
return true;
}
public function n_lead(string $who, int $lead): void
{
global $u;
$to = Db::getRow('select stats.id, dnow from users left join stats on users.id = stats.id where login = ?', [$who]);
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'
);
if ($u->info['sex'] == 0) {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> передал лидерство в группе персонажу <b>' . $who . '</b>'
);
} else {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> передала лидерство в группе персонажу <b>' . $who . '</b>'
);
}
exit("<script>top.frames['main'].location = 'main.php'</script>");
}
}
public function go_to_hell(string $who, int $lead): void
{
global $u;
$to = Db::getRow('select stats.id, dnow from users left join stats on users.id = stats.id where login = ?', [$who]);
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; // Магический портал
if ($u->info['room'] == 304) {
$rb = 209; // Вход в ледяную пещеру
} elseif ($u->info['room'] == 396) {
$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; // Вход в Пещеру Тысячи Проклятий
}
$sp = mysql_query('SELECT * FROM `dungeon_now` WHERE `time_finish` = "0" LIMIT 50');
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')
);
mysql_query('UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1');
mysql_query(
'UPDATE `users` SET `room` = "' . $rb . '", `city`="' . $city['city'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
//удаляем все предметы которые пропадают после выхода из пещеры
mysql_query(
'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . $u->info['id'] . '" AND `dn_delete` = "1" LIMIT 1000'
);
mysql_query(
'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . $u->info['id'] . '" AND (`item_id` = "1189" OR `item_id` = "4447" OR `item_id` = "1174") LIMIT 1000'
);
if ($u->info['sex'] == 0) {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> выгнал из похода персонажа <b>' . $who . '</b>'
);
} else {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> выгнала из похода персонажа <b>' . $who . '</b>'
);
}
exit("<script>top.frames['main'].location = 'main.php'</script>");
}
}
public function usersDng($laba = false)
{
global $u, $c;
$r = '';
$stt = [];
if ($laba == false) {
$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)) {
$stt = $u->getStats($pl['id'], 0);
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">
<tr><td valign="middle"> &nbsp; <font color="#990000">' . $u->microLogin($pl['id'], 1) . '</font> &nbsp; </td>
<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>';
}
$r .= '</div></td><td>';
if ($this->info['uid'] == $pl['id']) {
$r .= '<img src="//img.new-combats.tech/i/lead1.gif" title="Лидер группы" >';
}
if ($this->info['uid'] == $u->info['id'] && $pl['id'] == $u->info['id'] && $this->info['id2'] != 15) {
$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>';
}
unset($stt, $ph, $pm);
return $r;
}
public function testDie()
{
global $u, $c, $code;
$dies = mysql_fetch_assoc(
mysql_query(
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $u->info['dnow'] . '" AND `vars` = "die" LIMIT 1'
)
);
$dies = $dies[0];
if ($u->stats['hpNow'] < 1 || $dies > 2) {
if ($dies < 2) {
mysql_query(
'INSERT INTO `dungeon_actions` (`dn`,`uid`,`x`,`y`,`time`,`vars`,`vals`) VALUES (
"' . $u->info['dnow'] . '","' . $u->info['id'] . '","' . $u->info['x'] . '","' . $u->info['y'] . '","' . time() . '","die",""
)'
);
//21:50 Ярополк трагически погиб и находится в комнате "Этаж 2 - Водосток"
$dnow = mysql_fetch_assoc(
mysql_query('SELECT id2 FROM `dungeon_now` WHERE `id` = "' . $u->info['dnow'] . '" LIMIT 1')
);
$room = mysql_fetch_assoc(
mysql_query(
'SELECT name FROM `dungeon_map_info` WHERE `x` = "' . $u->info['res_x'] . '" AND `y` = "' . $u->info['res_y'] . '" AND `id_dng` = "' . $dnow['id2'] . '" LIMIT 1'
)
);
if ($u->info['sex'] == 0) {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> трагически погиб и находится в комнате &quot;' . $room['name'] . '&quot;'
);
} else {
$this->sys_chat(
'<b>' . $u->info['login'] . '</b> трагически погибла и находится в комнате &quot;' . $room['name'] . '&quot;'
);
}
mysql_query(
'UPDATE `stats` SET `hpNow` = "1",`x` = "' . $u->info['res_x'] . '",`y` = "' . $u->info['res_y'] . '",`s` = "' . $u->info['res_s'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1'
);
//header('location: main.php');
die('<script>top.frames[\'main\'].location = "main.php";</script>');
} else {
mysql_query(
'INSERT INTO `dungeon_actions` (`dn`,`uid`,`x`,`y`,`time`,`vars`,`vals`) VALUES (
"' . $u->info['dnow'] . '","' . $u->info['id'] . '","' . $u->info['x'] . '","' . $u->info['y'] . '","' . time() . '","die",""
)'
);
//21:50 Ярополк трагически погиб и находится в комнате "Этаж 2 - Водосток"
if ($u->info['sex'] == 0) {
$this->sys_chat('<b>' . $u->info['login'] . '</b> трагически погиб без права на воскрешение');
} else {
$this->sys_chat('<b>' . $u->info['login'] . '</b> трагически погибла без права на воскрешение');
}
$_GET['exitd'] = true;
}
}
}
public function itemsMap()
{
global $u, $c, $code;
$r = '';
$liveUsers = Db::getValue('select count(*) from stats where dnow = ?', [$this->info['id']]);
$sp = mysql_query(
'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` = "' . $u->info['id'] . '" ) AND `ish`.`x` = "' . $u->info['x'] . '" AND `ish`.`y` = "' . $u->info['y'] . '" LIMIT 100'
);
while ($pl = mysql_fetch_assoc($sp)) {
$action = 'main.php?take=' . $pl['id'] . '';
$tk = 0;
$luck_users = mysql_fetch_assoc(
mysql_query(
'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . mysql_real_escape_string(
$pl['id']
) . '" LIMIT 1'
)
);
$luck_users = $luck_users[0];
if ($pl['user'] == 0 && $liveUsers > 1 && ($pl['time'] + 300 > time() || $luck_users < 1)) {
$fxv = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_actions` WHERE `uid` = "' . $u->info['id'] . '" AND `dn` = "' . $this->info['id'] . '" AND `vars` = "luck_itm' . $pl['id'] . '" LIMIT 1'
)
);
//Розыгрыш
if (!isset($fxv['id']) && $this->info['bsid'] == 0) {
$action = "javascript: top.fartgame('{$pl['id']}', '{$pl['img']}', '{$pl['name']}')";
$tk = 1;
}
}
if ($tk == 0) {
$r .= '<a onclick="takeItem(' . $pl['id'] . ')"><img style="padding: 5px; cursor: pointer;" title="Взять &quot;' . $pl['name'] . '&quot;" src="//img.new-combats.tech/i/items/' . $pl['img'] . '" /></a>';
} elseif ($tk == 1) {
$r .= '<a href="' . $action . '"><img style="padding: 5px; cursor: pointer;" title="Взять &quot;' . $pl['name'] . '&quot;" src="//img.new-combats.tech/i/items/' . $pl['img'] . '" /></a>';
}
}
if ($r != '') {
$r = '<H4>В комнате разбросаны вещи:</H4>' . $r; //<br> <a onclick="takeItemAll">Подобрать все</a><br>
}
return $r;
}
public function genObjects()
{
global $u;
////i:{id,name,mapPoint,action,img,type},
//'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- справа
$r = '';
$whr = [1 => ' (((`u`.`x` <= ' . ($u->info['x'] + 2) . ' && `u`.`x` >= ' . ($u->info['x'] - 2) . ') && (`u`.`y` >= ' . ($u->info['y'] + 1) . ' && `u`.`y` <= ' . ($u->info['y'] + 4) . ')) OR (`u`.`y` = ' . $u->info['y'] . ' && `u`.`x` = ' . $u->info['x'] . ')) ', //прямо
3 => ' (((`u`.`x` <= ' . ($u->info['x'] + 2) . ' && `u`.`x` >= ' . ($u->info['x'] - 2) . ') && (`u`.`y` <= ' . ($u->info['y'] - 1) . ' && `u`.`y` >= ' . ($u->info['y'] - 4) . ')) OR (`u`.`y` = ' . $u->info['y'] . ' && `u`.`x` = ' . $u->info['x'] . ')) ', //вниз
2 => ' (((`u`.`x` <= ' . ($u->info['x'] - 1) . ' && `u`.`x` >= ' . ($u->info['x'] - 4) . ') && (`u`.`y` <= ' . ($u->info['y'] + 2) . ' && `u`.`y` >= ' . ($u->info['y'] - 2) . '))OR (`u`.`y` = ' . $u->info['y'] . ' && `u`.`x` = ' . $u->info['x'] . ')) ', //лево
4 => ' (((`u`.`x` >= ' . ($u->info['x'] + 1) . ' && `u`.`x` <= ' . ($u->info['x'] + 4) . ') && (`u`.`y` <= ' . ($u->info['y'] + 2) . ' && `u`.`y` >= ' . ($u->info['y'] - 2) . ')) OR (`u`.`y` = ' . $u->info['y'] . ' && `u`.`x` = ' . $u->info['x'] . ')) ', //право
];
$sp = mysql_query(
'SELECT `u`.* FROM `dungeon_obj` AS `u` WHERE `u`.`dn` = "' . $u->info['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'
);
$i = 0;
$pos = [];
while ($pl = mysql_fetch_assoc($sp)) {
if (!isset($this->cord[$pl['y'] . '_' . $pl['x']])) {
continue;
}
if (
$pl['fix_x_y'] != 0 &&
($pl['fix_x_y'] != 1 || $pl['x'] != $u->info['x']) &&
($pl['fix_x_y'] != 2 || $pl['y'] != $u->info['y']) &&
($pl['fix_x_y'] != 3 || $pl['x'] != $u->info['x'] || $pl['y'] != $u->info['y'])
) {
continue;
}
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++;
}
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'] . '}';
}
}
return 'count:' . $i . $r;
}
public function genUsers()
{
global $u;
////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 = '';
$whr = [
1 => ' ((x <= ' . ($u->info['x'] + 2) . ' && x >= ' . ($u->info['x'] - 2) . ') && (y >= ' . $u->info['y'] . ' && y <= ' . ($u->info['y'] + 4) . ')) ', //прямо
2 => ' ((x <= ' . $u->info['x'] . ' && x >= ' . ($u->info['x'] - 4) . ') && (y <= ' . ($u->info['y'] + 2) . ' && y >= ' . ($u->info['y'] - 2) . ')) ', //лево
3 => ' ((x <= ' . ($u->info['x'] + 2) . ' && x >= ' . ($u->info['x'] - 2) . ') && (y <= ' . $u->info['y'] . ' && y >= ' . ($u->info['y'] - 4) . ')) ', //вниз
4 => ' ((x >= ' . $u->info['x'] . ' && x <= ' . ($u->info['x'] + 4) . ') && (y <= ' . ($u->info['y'] + 2) . ' && y >= ' . ($u->info['y'] - 2) . ')) ', //право
];
$whrVals = [ // x <= ? && x >= ? && y <= ? && y >= ?
1 => [$u->info['x'] + 2, $u->info['x'] - 2, $u->info['y'] + 4, $u->info['y'],], // прямо x< x> y< y>
2 => [$u->info['x'], $u->info['x'] - 4, $u->info['y'] + 2, $u->info['y'] - 2,], // лево x< x> y< y>
3 => [$u->info['x'] + 2, $u->info['x'] - 2, $u->info['y'], $u->info['y'] - 4,], // низ x< x> y< y>
4 => [$u->info['x'] + 4, $u->info['x'], $u->info['y'] + 2, $u->info['y'] - 2,], // право x< x> y< y>
];
//
$tmsu = mysql_fetch_assoc(
mysql_query('SELECT * FROM `katok_now` WHERE `clone` = "' . $u->info['id'] . '" LIMIT 1')
);
//
$sp = mysql_query(
'SELECT `u`.*,`st`.* FROM `stats` AS `u` LEFT JOIN `users` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`dnow` = "' . $u->info['dnow'] . '" AND ' . $whr[$this->gs] . ' AND `u`.`id` != "' . $u->info['id'] . '" LIMIT 100'
);
$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) {
//Хоккей
$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']]] . '';
//
$tms = mysql_fetch_assoc(
mysql_query('SELECT * FROM `katok_now` WHERE `clone` = "' . $pl['id'] . '" LIMIT 1')
);
if ($tms['team'] == $tmsu['team']) {
$r .= ',9:1';
} else {
$r .= ',9:2';
}
$r .= '';
//
$r .= '}';
} else {
$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']]] . '}';
}
}
//отображаем ботов
//
//$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` = "'.$u->info['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');
// Выбираем Ботов в подземельи, которые Не в бою, Живые, и не дальше чем -\+30 по X и -\+35 по Y (дабы не гонять всех ботов, меньше выборка).
$sp = mysql_query(
'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` = "' . $u->info['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'
);
while ($pl = mysql_fetch_assoc($sp)) {
//перемещение бота, каждые 3-10 сек.
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;
}
}
$vlb = $this->testLike($pl['x'], $pl['y'], $pl['x'] + $tgx, $pl['y'] + $tgy);
//Кто-то рядом
$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'
)
);
if (isset($tuz['id']) && $this->testLike($pl['x'], $pl['y'], $tuz['x'], $tuz['y']) == 1) {
$tuz['x'] = $pl['x'];
$tuz['y'] = $pl['y'];
mysql_query(
'UPDATE `stats` SET `x` = "' . $tuz['x'] . '" , `y` = "' . $tuz['y'] . '" WHERE `id` = "' . $tuz['id'] . '" LIMIT 1'
);
$this->botAtack($pl, $tuz, 1);//Тут
$sps = mysql_query(
'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` = "' . $u->info['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'
);
while ($pll = mysql_fetch_assoc($sps)) {
$this->botAtack($pll, $tuz, 1);
}
} elseif ($vlb == 1) { // Передвижение ботов.
$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'
);
}
unset($tgx, $tgy, $vlb, $tuz);
}
}
$botsArr = Db::getRows(
'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', [
$u->info['dnow'], $whrVals[$this->gs][0], $whrVals[$this->gs][1], $whrVals[$this->gs][2], $whrVals[$this->gs][3],
]
);
foreach ($botsArr as $pl) {
if (!isset($this->cord[$pl['y'] . '_' . $pl['x']])) {
continue;
}
// }
//
// $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` = "' . $u->info['dnow'] . '" AND ' . $whr[$this->gs] . ' AND `u`.`delete` = "0" LIMIT 50'
// );
// 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']]]++;
$dlg = 0;
if ($pl['dialog'] > 0) {
$dlg = $pl['dialog'];
}
$noat = 1;
if ($pl['noatack'] == 1 && $this->info['bsid'] == 0) {
$noat = 0;
}
$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(
'.gif', '', $pl['obraz']
) . '\',5:\'bot\',6:' . $pos[$this->cord[$pl['y'] . '_' . $pl['x']]] . ',7:' . $dlg . ',8:' . $noat . '}';
}
return 'count:' . $i . $r;
}
public function testGone($id)
{
global $u, $c, $code;
$go = 0;
if ($id == 1) {
//вперед
$go = $this->sg[$this->gs][1];
} elseif ($id == 2) {
//назад
$go = $this->sg[$this->gs][3];
} elseif ($id == 3) {
//на право
$go = $this->sg[$this->gs][4];
} elseif ($id == 4) {
//на лево
$go = $this->sg[$this->gs][2];
}
$thp = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_map` WHERE `x` = "' . $u->info['x'] . '" AND `y` = "' . $u->info['y'] . '" AND `id_dng` = "' . $this->info['id2'] . '" LIMIT 1'
)
);
$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;
}
$tbot = mysql_fetch_assoc(
mysql_query(
'SELECT * FROM `dungeon_bots` WHERE `x` = "' . ($u->info['x'] + (int)$tgo[0]) . '" AND `y` = "' . ($u->info['y'] + (int)$tgo[1]) . '" AND `dn` = "' . $this->info['id'] . '" AND `for_dn` = "0" AND `delete` = "0" LIMIT 1'
)
);
if (isset($tbot['id2']) && $u->info['admin'] == 0) {
$go = 0;
}
return $go;
}
}