<?php

use Core\Config;
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 = $u->testAction(
            '`vars` = "sleep" AND `uid` = "' . $u->info['id'] . '" LIMIT 1',
            1
        );
        if (isset($sleep['id']) && $sleep['vars'] == '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 = $u->testAction(
                    '`uid` = "' . $u->info['id'] . '" AND `time`>=' . (time() - 600) . ' AND `vars` = "create_snowball_cp" LIMIT 1',
                    1
                );
                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>';
        }
    }
}