game/modules_data/_locations.php

571 lines
25 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 Model\ActionModel;
use User\Effects;
if (!defined('GAME')) {
die();
}
/** @var Magic $magic */
$re = '';
$rowonmaxc = '';
if (isset($u->error2)) {
$re = '<b style="color: red;">' . $u->error . '</b>';
}
if (isset($_GET['nightatack'])) {
if (
$u->room['name'] == 'Центральная площадь' ||
$u->room['name'] == 'Страшилкина улица' ||
$u->room['name'] == 'Парковая улица' ||
$u->room['name'] == 'Большая парковая улица'
) {
if ($u->room['noatack'] == 0) {
$ua = User::getInfo($_GET['login']);
$wasInThisBattle = !empty(Db::getValue('select id from battle_last where uid = ? and battle_id = ? limit 1', [$u->info['id'], $ua['battle']]));
if (isset($ua['id']) && $ua['online'] > time() - 520) {
$usta = $u->getStats($ua['id'], 0);
$minHp = $usta['hpAll'] / 100 * 33;
if ($ua['battle'] > 0 && empty(Db::getValue('select count(id) from battle where id = ? and team_win = -1', [$ua['battle']]))) {
$ua['battle'] = 0;
}
if ($ua['level'] < 8) {
$re = 'Новички находятся под защитой Мироздателя...';
} elseif ($ua['id'] == $u->info['id']) {
$re = 'На себя нападать нельзя...';
} elseif ($u->info['level'] > $ua['level'] + 1) {
$re = 'Вы слишком сильны';
} elseif ($ua['align'] === 9) {
$re = 'Нельзя нападать на городского монста с помощью кнопки напасть!';
} elseif ($wasInThisBattle) {
$re = 'Нельзя вмешаться, вы уже были в этом поединке.';
} elseif ($ua['admin'] == 1 && $u->info['admin'] == 0) {
$re = 'На кого прыгаешь, щенок?';
} elseif ($ua['room'] == $u->info['room'] && ($minHp <= $usta['hpNow'] || $ua['battle'] > 0)) {
$goodt = $magic->atackUser(
$u->info['id'], $ua['id'], $ua['team'], $ua['battle'], $ua['bbexp'], $ua['type_pers']
);
if ($u->error == '') {
if ($cruw == 2) {
$rtxt = '[img[items/pal_button9.gif]] &quot;' . $u->info['login'] . '&quot; совершил' . $sx . ' кровавое нападение на персонажа &quot;' . $ua['login'] . '&quot;.';
} else {
$rtxt = '[img[items/pal_button8.gif]] &quot;' . $u->info['login'] . '&quot; совершил' . $sx . ' нападение на персонажа &quot;' . $ua['login'] . '&quot;.';
}
if ($goodt > 0) {
$cmsg = new ChatMessage();
$cmsg->setCity($u->info['city']);
$cmsg->setRoom($u->info['room']);
$cmsg->setType(6);
$cmsg->setTypeTime(1);
$cmsg->setText($rtxt);
(new Chat())->sendMsg($cmsg);
}
unset($goodt);
header('location: main.php');
die();
}
} else {
if ($ua['room'] != $u->info['room']) {
$u->error = 'Персонаж находится в другой комнате';
} else {
$u->error = 'Персонаж имеет слишком малый уровень жизней.';
}
}
} else {
//На персонажа нельзя напасть
$u->error = 'Персонаж не в игре, либо на нем нет метки';
}
} else {
$re = 'Нападать возможно только на улице...';
}
} else {
$re = 'Нападения возможны только ночью...';
}
}
function thisInfRm($id, $tp = null, $json = false)
{
$rm = Db::getRow('select * from room where code = ? and city = ?', [$id, 'capitalcity']);
$inf = 'Здание было разрушено';
$rown = 0;
if (isset($rm['id'])) {
$rown = Db::getValue('select count(*) from users where online > unix_timestamp() - 120 and city = ? and room = ?', ['capitalcity', $rm['id']]);
if ($tp == null) {
$inf = '<b>' . $rm['name'] . '</b><br>Сейчас в комнате ' . $rown . ' чел.';
} else {
$inf = $rm['name'] . "\nСейчас в комнате " . $rown . ' чел.';
}
if ($json) {
return [$rm['code'], $rm['name'], $rown];
}
}
if ($json) {
return ['false', $inf, $rown];
}
if ($tp == null) {
echo 'onMouseOver="top.hi(this,\'<div align=right>' . $inf . '</div>\',event,0,1,1,1,\'max-height:240px\');" onMouseOut="top.hic();" onMouseDown="top.hic();" onClick="goLocal(\'main.php?loc=' . $rm['code'] . '\',\'' . $rm['name'] . '\');"';
} else {
echo $inf;
}
return [];
}
if (isset($_GET['loc'])) {
// $training_manager = \DarksLight2\Training\TrainingManager::getInstance();
$go = Db::getRow('select * from room where code = ?', [$_GET['loc']]);
// if (in_array(
// $go['file'], $training_manager->getRegistered()[$training_manager->getCurrentStepName()]->allowedToMove()
// ) || $u->info['admin'] > 0) {
$tr_pl = Db::getValue('select v1 from eff_users where id_eff = 4 and uid = ? order by v1 desc limit 1', [$u->info['id']]);
//Проверяем костыли
$hasKostyl = Db::getValue('select count(id) from items_users where inOdet in (3,14) and item_id in (630, 631) and uid = ?', [$u->info['id']]) > 0;
$zadej = 0;
if ($tr_pl) {
if ($hasKostyl) {
if ($tr_pl == 2) {
$zadej = 20;
} elseif ($tr_pl == 3 || $tr_pl == 4) {
$zadej = 30;
}
} else {
$zadej = -1;
$re = 'Вы травмированы. Не возможно с такими увечиями передвигаться без костылей.';
}
}
if ($u->room['extdlg'] > 0) {
header('location: main.php?talk=' . $u->room['extdlg']);
} elseif ($zadej == -1) {
if (!isset($re) || $re == '') {
$re = 'У вас травма, нельзя перемещаться...';
}
//Травма...
} elseif ($u->info['inTurnir'] > 0) {
$re = 'Вы не можете перемещаться, Вы приняли заявку на турнир ...';
} elseif (
!$hasKostyl &&
(
empty($zadej) &&
$u->aves['now'] >= $u->aves['max'] &&
$u->room['name'] != 'Общежитие' &&
$u->room['name'] != 'Общ. Этаж 1' &&
$u->room['name'] != 'Общ. Этаж 2' &&
$u->room['name'] != 'Общ. Этаж 3'
)) {
$re = 'Вы не можете перемещаться, рюкзак переполнен ...';
} elseif (isset($go['id'])) {
$rmgo = [];
$rg = explode(',', $u->room['roomGo']);
$mlvl = explode('-', $go['level']);
$i = 0;
while ($i < count($rg)) {
if ($rg[$i] >= 0) {
$rmgo[$rg[$i]] = 1;
}
$i++;
}
$sleep = (bool)ActionModel::testCount(["uid = $u->info['id']", 'vars = sleep']);
if ($sleep && $go['name'] != 'Общ. Этаж 1' && $go['name'] != 'Общ. Этаж 2' && $go['name'] != 'Общ. Этаж 3') {
$re = '<b style="color: red;">Вы можете перемещаться только когда бодрствуете.</b>';
echo '&nbsp;' . $re;
} elseif ($u->info['timeGo'] >= time()) {
$re = 'Вы не можете перемещаться еще ' . ($u->info['timeGo'] - time()) . ' сек.';
} elseif ($rmgo[$go['id']] == 1) {
$alg = explode('-', $go['align']);
$ku = (bool)Db::getValue('select 1 from katok_zv where uid = ?', [$u->info['id']]);
if ($ku) {
$re = 'Вы подали заявку на турнир и не можете перемещаться...';
} elseif (($alg[0] > $u->info['align'] || $alg[1] < $u->info['align']) && $go['align'] != 0) {
$re = 'Ты не ту склонность выбрал.. Дружок :)';
} elseif ($u->info['zv'] > 0) {
$testZv = Db::getValue('select count(id) from zayvki where id = ? and cancel = 0 and start = 0 and time > unix_timestamp() - 60*60*2') > 0;
if ($testZv) {
$re = 'Подали заявку и убегаем?.. Не хорошо!';
} else {
$re = 'Ваша заявка была удалена... Теперь вы можете перейти в другую локацию!';
Db::sql('update stats set zv = 0 where id = ?', [$u->info['id']]);
}
} elseif (($go['clan'] > 0 && $u->info['clan'] != $go['clan']) || ($go['clan'] == -1 && $u->info['clan'] == 0)) {
$re = 'Вы не можете попасть в эту комнату';
} elseif ($go['sex'] > 0 && $go['sex'] - 1 != $u->info['sex'] && $u->info['invis'] != 1 && $u->info['invis'] < time()) {
$re = 'Вы не можете попасть в эту комнату';
} elseif ($mlvl[0] > $u->info['level']) {
$re = 'Вы не можете попасть в эту комнату, уровень маловат ;)';
} elseif ($mlvl[1] < $u->info['level']) {
$re = 'Вы не можете попасть в эту комнату, уровень высоковат ;)';
} elseif ($go['close'] == 0) {
//замедление перемешения при травмах
$plus_timeGo = $zadej; // добавочное время при травме
if ($plus_timeGo < 0) {
$plus_timeGo = 0;
}
if (
empty($zadej) &&
$u->aves['now'] >= $u->aves['max'] &&
$u->room['name'] != 'Общежитие' &&
$u->room['name'] != 'Общ. Этаж 1' &&
$u->room['name'] != 'Общ. Этаж 2' &&
$u->room['name'] != 'Общ. Этаж 3'
) {
$plus_timeGo += 2 * 60;
if (!$hasKostyl) {
$plus_timeGo += 1.5 * 60;
}
}
//end freez time go
if ($u->stats['silver'] >= 1) {//время перемещения -20%
$go['timeGO'] = floor($go['timeGO'] / 100 * 80);
$plus_timeGo = floor($plus_timeGo / 100 * 80);
}
$u->info['timeGo'] = time() + $go['timeGO'] + $plus_timeGo;
$u->info['timeGoL'] = time();
Db::sql('update stats set timeGo = ?, timeGoL = ? where id = ?', [$u->info['timeGo'], $u->info['timeGoL'], $u->info['id']]);
Db::sql('update users set room = ?, online = unix_timestamp() where id = ?', [$go['id'], $u->info['id']]);
if ($u->room['file'] == 'bsenter' && $go['file'] != 'bsenter') {
//Удаляем все ставки в БС
Db::sql(
'update bs_turnirs
set users = users - (select count(bsid) from bs_zv where inBot = 0 and finish = 0 and uid = ?)
where id = (select bsid from bs_zv where inBot = 0 and finish = 0 and uid = ? limit 1)', [$u->info['id'], $u->info['id']]
);
Db::sql('update bs_zv set finish = unix_timestamp() where uid = ? and inBot = 0 and finish = 0', [$u->info['id']]);
}
$smt = ActionModel::getOne(["uid = {$u->info['id']}", "time >= unix_timestamp() - 600", 'vars = create_snowball_cp'], 'id');
if (isset($smt['id'])) {
ActionModel::deleteById($smt['id']);
}
Effects::removeByEffectId($u->info['id'], 24);
$u->info['room'] = $go['id'];
$u->room = $go;
if (!isset($_GET['mAjax'])) {
echo '<script>top.chat.reflesh();</script>';
}
} elseif ($go['destroy'] == 1) {
$re = 'Здание было разрушено, в данный момент оно реставрируется';
} else {
$re = 'Временно закрыто';
}
} else {
$re = 'Проход не существует';
}
} else {
$re = 'Проход не существует';
}
// } else {
// $re = 'Вам запрещено передвигаться до окончания обучения!!!';
// }
}
if ($u->info['room'] == 209) {
$zv = new FightRequest();
}
if ($re != '') {
$re = $re . '&nbsp;';
}
if (isset($_GET['mAjax'])) {
$tmGo = $u->info['timeGo'] - time() + 1; //сколько секунд осталось
$tmGol = $u->info['timeGo'] - $u->info['timeGoL'] + 1; //сколько секунд идти всего
if ($tmGo < 0) {
$tmGo = 0;
}
if ($tmGol < 1) {
$tmGol = 1;
}
$playersOnline = Db::getValue(
"select count(id) from users where
online > unix_timestamp() - 520 and
inUser = 0 and
no_ip != 'trupojor' and
pass != 'saintlucia' and
login not like '%(%' and
banned = 0 and
bot_id = 0"
);
$allPlayers = Db::getValue(
"select count(id) from users where
inUser = 0 and
no_ip != 'trupojor' and
pass != 'saintlucia' and
login not like '%(%' and
banned = 0 and
bot_id = 0"
);
$rowonmax = "Сейчас в клубе: <b>$playersOnline</b> чел.";
$rowonmaxc = "Всего в Игре: $allPlayers чел.";
if ($u->room['file'] != '') {
exit(LocationResponse::init($tmGo, $tmGol, $u->room['file'], $u->room['name']));
}
}
if (isset($_GET['ajaxHostel'])) { // Для общежития, проверка на лимит положенных предметов в сундук.
include_once 'modules_data/location/room_hostel.php';
}
?>
<svg height="0" xmlns="https://www.w3.org/2000/svg">
<filter id="drop-shadow">
<feGaussianBlur in="SourceAlpha" stdDeviation="2"/>
<feOffset dx="0" dy="0" result="offsetblur"/>
<feFlood flood-color="rgba(255,255,255,1)"/>
<feComposite in2="offsetblur" operator="in"/>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</svg>
<style>
.MoveLine {
background: url(//img.new-combats.tech/i/move/wait2.gif) 0 0 repeat-y;
height: 6px;
}
.aFilter:hover {
-webkit-filter: drop-shadow(0px 0px 4px rgba(255, 255, 255, 1));
filter: url(#drop-shadow);
}
</style>
<script type="text/javascript" src="/js/jquery.js"></script>
<script>
var speedLoc = 0;
var sLoc1 = 0;
var sLoc2 = 0;
var tgo = 0;
var tgol = 0;
var rgo_url = 0;
var rgo_nm = '';
function locGoLine() {
var line = document.getElementById('MoveLine');
if (line !== undefined) {
prc = 100 - Math.floor(tgo / tgol * 100);
sLoc1 = 64 / 100 * prc;
if (sLoc1 < 0) {
sLoc1 = 0;
}
if (sLoc1 > 64) {
sLoc1 = 64;
}
line.style.width = sLoc1 + 'px';
if (tgo > 0) {
tgo -= 1;
setTimeout('locGoLine()', 100);
} else {
if (rgo_url !== 0) {
location = rgo_url;
}
}
//if( nm != undefined ) {
if ($('#moveto') != null && $('#moveto') != undefined) {
if (rgo_nm != '') {
if ($('#moveto').html() == '') {
$('#moveto').css({'display': '', 'height': 'auto'});
$('#moveto').html('<div onclick="gotoLocationCancel();" style="cursor:pointer;padding:5px;">Вы перейдете в: <b>' + rgo_nm + '</b> (<a onclick="gotoLocationCancel();" href="javascript:void(0)">отмена</a>)</div>');
}
} else {
$('#moveto').css({'display': 'none', 'height': '1px'});
$('#moveto').html('');
}
}
//}
}
}
function goLocal(id, nm) {
rgo_url = id;
rgo_nm = nm;
if ($('#moveto') != null && $('#moveto') != undefined && nm != undefined) {
if (rgo_nm != '') {
$('#moveto').css({'display': '', 'height': 'auto'});
$('#moveto').html('<div onclick="gotoLocationCancel(); return false;" style="cursor:pointer;padding:5px;">Вы перейдете в: <b>' + nm + '</b> (<a onclick="gotoLocationCancel();" href="javascript:void(0)">отмена</a>)</div>');
if (sLoc1 == 64) {
location = rgo_url;
}
} else {
$('#moveto').css({'display': 'none', 'height': '1px'});
$('#moveto').html('');
}
}
}
function gotoLocationCancel() {
rgo_url = 0;
rgo_nm = '';
$('#moveto').css({'display': 'none', 'height': '1px'});
$('#moveto').html('');
}
</script>
<?php
if (date('m') == 11 || date('m') == 12 || date('m') == 1 || date('m') == 2) {
$rsnow = [9, 11, 213, 234, 236, 252, 267, 286, 323,];
if (in_array($u->room['id'], $rsnow)) {
?>
<script>
var no = 50; // snow number
var speed = 17; // smaller number moves the snow faster
var sp_rel = 1.4; //speed relevation
var snowflake1 = "/i/itimeges/snow1.gif";
var snowflake2 = "/i/itimeges/snow2.gif";
const snowflake3 = '❄️';
var i, doc_width, doc_height;
dx = [];
xp = [];
yp = [];
am = [];
stx = [];
sty = [];
Array.prototype.exists = function (el) {
for (var i = 0; i < this.length; i++)
if (this[i] == el)
return true;
return false;
}
var rooms = ['1.100', '1.107', '1.111', '1.120'];
function SetVariable(c) {
dx[c] = 0; // set coordinate variables
am[c] = Math.random() * 15; // set amplitude variables
xp[c] = Math.random() * (doc_width - 35) + 0 + am[c]; // set position variables
yp[c] = 0;
stx[c] = 0.02 + Math.random() / 10; // set step variables
sty[c] = 0.7 + Math.random(); // set step variables
}
function DrawWeather(room) {
doc_width = document.getElementById('ione').width;
doc_height = document.getElementById('ione').height;
doc_width = 580;
doc_height = 312;
let div = '';
for (i = 0; i < no; ++i) {
SetVariable(i);
div += "<div id=\"dot" + i + "\" style=\"POSITION: absolute; Z-INDEX: 30" + i + "; VISIBILITY: visible; TOP: " + 0 + "px; LEFT: " + 0 + "px;\"><img id=\"im" + i + "\" src=\"" + (sty[i] < sp_rel ? snowflake2 : snowflake1) + "\" alt=\"Снежинка\"></div>";
}
document.getElementById('snow').innerHTML = div;
return 1;
}
function WeatherBegin() { // IE main animation function
for (i = 0; i < no; ++i) { // iterate for every dot
yp[i] += sty[i] < sp_rel ? sty[i] / 2 : sty[i];
if (yp[i] > doc_height - 40) {
SetVariable(i);
const im = document.getElementById('im' + i);
im.src = (sty[i] < sp_rel) ? snowflake2 : snowflake1;
}
dx[i] += stx[i];
document.getElementById('dot' + i).style.top = yp[i] + 'px';
document.getElementById('dot' + i).style.left = xp[i] + am[i] * Math.sin(dx[i]) + 'px';
}
setTimeout('WeatherBegin()', speed);
}
</script>
<?php
}
}
if (!isset($u->room['id'])) {
echo 'Location is lost.';
} else {
$tmGo = $u->info['timeGo'] - time() + 1; //сколько секунд осталось
$tmGol = $u->info['timeGo'] - $u->info['timeGoL'] + 1; //сколько секунд идти всего
if ($tmGo < 0) {
$tmGo = 0;
}
if ($tmGol < 1) {
$tmGol = 1;
}
//онлайн в этой комнате
$goLis = '<table height="15" border="0" cellspacing="0" cellpadding="0">
<tr>
<td id="locobobr" rowspan="3" valign="bottom"><a href="main.php?rnd=' . $code . '"><img style="display:block;" src="//img.new-combats.tech/i/move/rel_1.gif" width="15" height="16" title="Обновить" border="0" /></a></td>
<td colspan="3"><img style="display:block;" src="//img.new-combats.tech/i/move/navigatin_462s.gif" width="80" height="4" /></td>
</tr>
<tr>
<td><img style="display:block;" src="//img.new-combats.tech/i/move/navigatin_481.gif" width="9" height="8" /></td>
<td width="64" bgcolor="black"><img src="//img.new-combats.tech/1x1.gif" style="display:block;" id="MoveLine" height="8" class="MoveLine" style="width:33px;" /></td>
<td><img style="display:block;" src="//img.new-combats.tech/i/move/navigatin_50.gif" width="7" height="8" /></td>
</tr>
<tr>
<td colspan="3"><img style="display:block;" src="//img.new-combats.tech/i/move/navigatin_tt1_532.gif" width="80" height="4" /></td>
</tr>
</table>
<div id="test"></div><script>var tgo = ' . ($tmGo * 10) . '; var tgol = ' . ($tmGol * 10) . ';locGoLine();</script>';
$goline = '<div style="position:absolute; top:0; z-index:101; right:12px; width:80px;">' . $goLis . '</div>';
$playersOnline = Db::getValue(
"select count(id) from users where
online > unix_timestamp() - 520 and
inUser = 0 and
no_ip != 'trupojor' and
pass != 'saintlucia' and
login not like '%(%' and
banned = 0 and
bot_id = 0"
);
$allPlayers = Db::getValue(
"select count(id) from users where
inUser = 0 and
no_ip != 'trupojor' and
pass != 'saintlucia' and
login not like '%(%' and
banned = 0 and
bot_id = 0"
);
$rowonmax = '<br><span style="font-size:14px;">Сейчас в клубе<b> ' . $playersOnline . '</b> реальных чел.</span>';
if ($allPlayers > $playersOnline) {
$rowonmax .= '<br><small>(Общий онлайн: ' . $allPlayers . ' чел.)</small>';
}
if ($u->room['file'] != '') {
include_once('modules_data/location/' . $u->room['file'] . '.php');
if ((date('m') == 11 || date('m') == 12 || date('m') == 1 || date('m') == 2) && in_array($u->room['id'], $rsnow)) {
echo '<script>DrawWeather(31);WeatherBegin();</script>';
}
}
}