'006699', 2 => '006699', 3 => '006699', 4 => '006699', 5 => '006699', 6 => '006699', 7 => '006699', ]; //не крит public array $mcolor = [ 1 => 'A00000', 2 => '008080', 3 => '0000FF', 4 => 'A52A2A', 5 => '006699', 6 => '006699', 7 => '006699', ]; //не крит public array $mname = [ 'огонь' => 1, 'воздух' => 2, 'вода' => 3, 'земля' => 4, 'свет' => 5, 'тьма' => 6, 'серая' => 7, ]; /** * act: 1 - когда персонаж получает повреждение * 2 - когда персонаж наносит удар * * type_of: 1 - уворот * 2 - крит * 3 - атака * 4 - защита * 5 - прочее * @var array|array[] */ private array $prm = [ 1 => ['name' => 'Прикрыться', 'act' => 1, 'type_of' => 5], 2 => ['name' => 'Вломить', 'act' => 2, 'type_of' => 3], 4 => ['name' => 'Сильный удар', 'act' => 2, 'type_of' => 3], 7 => ['name' => 'Активная защита', 'act' => 1, 'type_of' => 4], 290 => ['name' => 'Вытягивание души', 'act' => 1, 'type_of' => 4], //Канализация 294 => ['name' => 'Зловонная Вода', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 295 => ['name' => 'Проткнуть', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 296 => ['name' => 'Гнилая Кровь', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 297 => ['name' => 'Собраться', 'act' => 2, 'type_of' => 0, 'moment' => 3], 298 => ['name' => 'Приказ Слабости', 'act' => 2, 'type_of' => 3], 141 => ['name' => 'Призрачная защита', 'act' => 2, 'type_of' => 4], 147 => ['name' => 'Призрачный кинжал', 'act' => 2, 'type_of' => 4], 148 => ['name' => 'Призрачный топор', 'act' => 2, 'type_of' => 4], 149 => ['name' => 'Призрачный удар', 'act' => 2, 'type_of' => 4], 150 => ['name' => 'Призрачное лезвие', 'act' => 2, 'type_of' => 4], 142 => ['name' => 'Призрачный огонь', 'act' => 2, 'type_of' => 4], 144 => ['name' => 'Призрачный воздух', 'act' => 2, 'type_of' => 4], 146 => ['name' => 'Призрачная земля', 'act' => 2, 'type_of' => 4], 145 => ['name' => 'Призрачная вода', 'act' => 2, 'type_of' => 4], 8 => ['name' => 'Танец ветра', 'act' => 1, 'type_of' => 1], 9 => ['name' => 'Дикая удача', 'act' => 2, 'type_of' => 3], 10 => ['name' => 'Предвидение', 'act' => 1, 'type_of' => 1], 11 => ['name' => 'Удачный удар', 'act' => 2, 'type_of' => 3], 45 => ['name' => 'Полная защита', 'act' => 1, 'type_of' => 4], 47 => ['name' => 'Слепая удача', 'act' => 2, 'type_of' => 2], 48 => ['name' => 'Танец лезвий', 'act' => 1, 'type_of' => 1], 49 => ['name' => 'Второе дыхание', 'act' => 1, 'type_of' => 1], 138 => ['name' => 'Сокрушающий удар', 'act' => 2, 'type_of' => 3], 140 => ['name' => 'Абсолютная защита', 'act' => 1, 'type_of' => 4], 193 => ['name' => 'Усиленные удары', 'act' => 2, 'type_of' => 3], 204 => ['name' => 'Обречённость', 'act' => 2, 'type_of' => 0, 'moment' => 3], 211 => ['name' => 'Агрессивная защита', 'act' => 1, 'type_of' => 4], 213 => ['name' => 'Коварный Уход', 'act' => 1, 'type_of' => 4], 215 => ['name' => 'Скрытая ловкость', 'act' => 1, 'type_of' => 1], 216 => ['name' => 'Скрытая сила', 'act' => 2, 'type_of' => 2], 217 => ['name' => 'Разгадать тактику', 'act' => 2, 'type_of' => 0, 'moment' => 3], 219 => ['name' => 'Точный удар', 'act' => 2, 'type_of' => 3], 220 => ['name' => 'Ставка на опережение', 'act' => 2, 'type_of' => 0, 'moment' => 3], 222 => ['name' => 'Последний удар', 'act' => 2, 'type_of' => 3], 225 => ['name' => 'Магическая защита', 'act' => 1, 'type_of' => 4], 226 => ['name' => 'Возмездие', 'act' => 1, 'type_of' => 4], 231 => ['name' => 'Глухая защита', 'act' => 2, 'type_of' => 0, 'moment' => 3], 234 => ['name' => 'Осторожность', 'act' => 2, 'type_of' => 4], 235 => ['name' => 'Шокирующий удар', 'act' => 2, 'type_of' => 3], 342 => ['name' => 'Круговая Защита', 'act' => 0, 'type_of' => 0], 343 => ['name' => 'Натиск', 'act' => 0, 'type_of' => 0], 237 => ['name' => 'Разведка боем', 'act' => 2, 'type_of' => 3], 239 => ['name' => 'Поступь смерти', 'act' => 2, 'type_of' => 3], 240 => ['name' => 'Хлебнуть крови', 'act' => 2, 'type_of' => 5], 21 => ['name' => 'Оледенение [4]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 73 => ['name' => 'Оледенение [5]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 74 => ['name' => 'Оледенение [6]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 75 => ['name' => 'Оледенение [7]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 76 => ['name' => 'Оледенение [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 77 => ['name' => 'Оледенение [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 78 => ['name' => 'Оледенение [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 79 => ['name' => 'Оледенение [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 22 => ['name' => 'Отравление [6]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 80 => ['name' => 'Отравление [7]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 81 => ['name' => 'Отравление [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 82 => ['name' => 'Отравление [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 83 => ['name' => 'Отравление [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 84 => ['name' => 'Отравление [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 36 => ['name' => 'Регенерация [5]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 85 => ['name' => 'Регенерация [6]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 86 => ['name' => 'Регенерация [7]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 87 => ['name' => 'Регенерация [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 88 => ['name' => 'Регенерация [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 89 => ['name' => 'Регенерация [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 90 => ['name' => 'Регенерация [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 23 => ['name' => 'Ядовитое Облако [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 70 => ['name' => 'Ядовитое Облако [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 71 => ['name' => 'Ядовитое Облако [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 72 => ['name' => 'Ядовитое Облако [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 269 => ['name' => 'Иней [8]', 'act' => 2, 'type_of' => 9], 276 => ['name' => 'Иней [9]', 'act' => 2, 'type_of' => 9], 277 => ['name' => 'Иней [10]', 'act' => 2, 'type_of' => 9], 270 => ['name' => 'Духи Льда', 'act' => 2, 'type_of' => 5, 'type_sec' => 5], 280 => ['name' => 'Хватка Льда', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 281 => ['name' => 'Жертва Воде', 'act' => 2, 'type_of' => 5], 282 => ['name' => 'Ледяное Спасение', 'act' => 2, 'type_of' => 5], 24 => ['name' => 'Медитация', 'act' => 2, 'type_of' => 0, 'moment' => 3], 210 => ['name' => 'Магический Барьер [4]', 'act' => 2, 'type_of' => 8], 209 => ['name' => 'Магический Барьер [7]', 'act' => 2, 'type_of' => 8], 208 => ['name' => 'Магический Барьер [8]', 'act' => 2, 'type_of' => 8], 207 => ['name' => 'Магический Барьер [9]', 'act' => 2, 'type_of' => 8], 206 => ['name' => 'Магический Барьер [10]', 'act' => 2, 'type_of' => 8], 284 => ['name' => 'Магический Барьер [11]', 'act' => 2, 'type_of' => 8], 175 => ['name' => 'Магический Барьер [7]', 'act' => 2, 'type_of' => 8], 176 => ['name' => 'Магический Барьер [8]', 'act' => 2, 'type_of' => 8], 177 => ['name' => 'Магический Барьер [9]', 'act' => 2, 'type_of' => 8], 178 => ['name' => 'Магический Барьер [10]', 'act' => 2, 'type_of' => 8], 179 => ['name' => 'Магический Барьер [11]', 'act' => 2, 'type_of' => 8], 42 => ['name' => 'Метеорит [6]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 121 => ['name' => 'Метеорит [7]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 122 => ['name' => 'Метеорит [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 123 => ['name' => 'Метеорит [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 124 => ['name' => 'Метеорит [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 125 => ['name' => 'Метеорит [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 249 => ['name' => 'Каменный Щит', 'act' => 2, 'type_of' => 4], 248 => ['name' => 'Песчаный Щит', 'act' => 2, 'type_of' => 4], 251 => ['name' => 'Заземление: Плюс', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 252 => ['name' => 'Заземление: Минус', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 273 => ['name' => 'Туманный Образ [10]', 'act' => 1, 'type_of' => 4], 286 => ['name' => 'Туманный Образ [9]', 'act' => 1, 'type_of' => 4], 287 => ['name' => 'Туманный Образ [8]', 'act' => 1, 'type_of' => 4], 288 => ['name' => 'Туманный Образ [7]', 'act' => 1, 'type_of' => 4], 255 => ['name' => 'Воздушный Щит', 'act' => 2, 'type_of' => 8], 337 => ['name' => 'Выпить Душу', 'act' => 2, 'type_of' => 5], 33 => ['name' => 'Пожирающее Пламя [6]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 56 => ['name' => 'Пожирающее Пламя [7]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 57 => ['name' => 'Пожирающее Пламя [8]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 58 => ['name' => 'Пожирающее Пламя [9]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 59 => ['name' => 'Пожирающее Пламя [10]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 60 => ['name' => 'Пожирающее Пламя [11]', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 245 => ['name' => 'Огненный Щит', 'act' => 2, 'type_of' => 9], 327 => ['name' => 'Живая Вода', 'act' => 2, 'type_of' => 0, 'moment' => 3], 328 => ['name' => 'Сушеный Мухомор', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 329 => ['name' => 'Мешочек Пыли', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 330 => ['name' => 'Отвар когтей ПГ', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 331 => ['name' => 'Отвар Василиска', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 332 => ['name' => 'Точильный Камень', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 333 => ['name' => 'Волшебный Эликсир', 'act' => 2, 'type_of' => 0, 'moment' => 3], 334 => ['name' => 'Цепь Защитника', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 335 => [ 'name' => 'Эликсир Безумного Критовика', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3, ], 299 => ['name' => 'Ядовитые язвы', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 300 => ['name' => 'Элементарный заряд', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 301 => ['name' => 'Темное ранение', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 302 => ['name' => 'Подлечиться', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 303 => ['name' => 'Шкура поглощения', 'act' => 2, 'type_of' => 4], 304 => ['name' => 'Особенное проклятье!', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], 305 => ['name' => 'Кровожадность', 'act' => 2, 'type_of' => 0, 'moment' => 0, 'moment_end' => 3], ]; public bool $cached = false; //Кэширование данных private int $expCoef = 0; # % опыта в бою private int $aBexp = 0; //Добавочный опыт в боях public int $mainStatus = 1; //Отображаем главное окно (1 - можно бить, 2 - ожидаем ход противника, 3 - Проиграли. Ожидаем завершения поединка) public array $info = []; //Информация о поединке public array $users = []; //Информация о пользователях в этом бою public array $stats = []; //Информация о статах пользователей в этом бою public array $uids = []; //Список пользователей и их id в stats или users пример id пользователя = 555 , то $uids[555] выдаст его порядковый номер в массиве users \ stats public array $atacks = []; //Список ударов в этом бою (действующих) public array $ga = []; //Список uid кто нанес удар и по кому $ga[ {id кто ударил} ][ {id кого ударил} ] private array $ag = []; //Список uid кто нанес удар и по кому $ga[ {id кого ударили} ][ {id кто ударил} ] public int $hodID = 0; private int|array $stnZbVs = 0; private array $bots = []; // ID ботов private array $iBots = []; // i бота private array $stnZb = []; /** Выбранные зоны атаки и блока. * @var array */ private array $uAtc = [ 'id' => 0, 'a' => [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0], 'b' => 0, ]; //Если игрок нанес удар /** * Чем лупили * @var array|array[] */ private array $lgItm = [ 0 => [ 'грудью', 'ребром руки', 'лбом', 'кулаком', 'ногой', 'левой ногой', 'правой ногой', 'коленом', ], 1 => ['ножом', 'тыльной стороной лезвия ножа', 'рукоятью ножа', 'лезвием ножа'], 2 => ['сучковатой палкой', 'поленом', 'тяжелой дубиной', 'дубиной', 'рукоятью молота'], 3 => ['секирой', 'топором', 'лезвием секиры', 'алебардой', 'тяжелым держаком', 'длинной секирой'], 4 => [ 'ножнами', 'гардой', 'мечом', 'лезвием меча', 'рукоятью меча', 'тупым лезвием', 'острой стороной меча', 'огромным мечом', ], 5 => ['сучковатой палкой', 'посохом', 'тяжелой тростью', 'корявым посохом', 'основанием посоха'], 22 => ['костылем'], ]; /** * Куда лупили * @var array|array[] */ private array $lgZon = [ 1 => [ 'в нос', 'в глаз', 'в челюсть', 'по переносице', 'в кадык', 'по затылку', 'в правый глаз', 'в левый глаз', 'в скулу', ], 2 => ['в грудь', 'в корпус', 'в солнечное сплетение', 'в сердце', 'в область лопаток'], 3 => ['в бок', 'по желудку', 'по левой руке', 'по правой руке'], 4 => ['по <вырезано цензурой>', 'в пах', 'в промежность', 'по левой ягодице', 'по правой ягодице'], 5 => ['по ногам', 'в область правой пятки', 'в область левой пятки', 'по коленной чашечке', 'по икрам'], ]; /** * Ошибка (текст) * @var string */ public string $e; public array $is = []; public array $items = []; //Очистка кэша для ... private array $uclearc = []; private array $ucleari = []; private array $ainm = []; public array $rehodeff = []; private array $poglast = []; public array $um_priem = []; private int $importUser = 0; public array $pr_not_use = []; public array $del_val = []; //Добавляем нанесенный урон public function __construct() { ignore_user_abort(true); } //JS информация о игроке public function maginfoattack($u1, $u2, $type): string { /* 1 - огонь, 2 - воздух, 3 - вода, 4 - земля */ $v_l = str_replace(' ', ' ', $this->users[$this->uids[$u1]]['login']); $v_z = (int)$this->stats[$this->uids[$u2]]['zm' . $type]; //защита цели $v_p = (int)round( ( $this->stats[$this->uids[$u1]]['pzm' . $type] + $this->stats[$this->uids[$u1]]['pzm'] ) * 0.4 ); //подавление защиты от магии $v_m = (int)$this->stats[$this->uids[$u1]]['pm' . $type]; //мощность мага // return ' magelogin=' . $v_l . ' onMouseOver=top.hi(this,maginfo(' . $v_z . ',' . $v_p . ',' . $v_m . ',this),event,3,1,1,1,null); onMouseOut=top.hic(); onMouseDown=top.hic(); '; } public function hphe($uid, $hp, $false_t7 = false) { if (!isset($this->stats[$this->uids[$uid]])) { echo 'WARNING! ОШИБКА! ПОТЕРЯНА ПЕРЕМЕННАЯ ЗДОРОВЬЯ ПЕРСОНАЖА!'; } else { $hpnow = floor($this->stats[$this->uids[$uid]]['hpNow']); $hpall = $this->stats[$this->uids[$uid]]['hpAll']; if ($hp > 0) { //Хиляем if ($hpnow + $hp > $hpall) { $hpli = $hpnow + $hp - $hpall; $hp -= $hpli; } if (isset($this->stats[$this->uids[$uid]]['min_heal_proc']) && $this->stats[$this->uids[$uid]]['min_heal_proc'] < -99) { $hp = 0; } else { $hp = $hp / 100 * (100 + $this->stats[$this->uids[$uid]]['min_heal_proc']); } //Отнимаем тактику if (!$false_t7) { if ($this->users[$this->uids[$uid]]['tactic7'] <= 0) { $hp = 0; $this->users[$this->uids[$uid]]['tactic7'] = 0; $this->stats[$this->uids[$uid]]['tactic7'] = $this->users[$this->uids[$uid]]['tactic7']; } else { $gdhh = round($hp / $this->stats[$this->uids[$uid]]['hpAll'] * 10, 2); if ($gdhh == 0) { $gdhh = 0.01; } $gdhd = round($this->users[$this->uids[$uid]]['tactic7'] / $gdhh * 100); $this->users[$this->uids[$uid]]['tactic7'] = round( ($this->users[$this->uids[$uid]]['tactic7'] - $gdhh), 2 ); if ($this->users[$this->uids[$uid]]['tactic7'] < 0) { $this->users[$this->uids[$uid]]['tactic7'] = 0; } $this->stats[$this->uids[$uid]]['tactic7'] = $this->users[$this->uids[$uid]]['tactic7']; if ($gdhd < 100) { $hp = floor($hp / 100 * $gdhd); } } } } elseif ($hp < 0) { //Отнимаемф if ($hpnow + $hp < 0) { $hpli = $hpnow + $hp; $hp += -($hpli); } } if ($this->stats[$this->uids[$uid]]['hpNow'] < 1) { $hp = 0; } $this->stats[$this->uids[$uid]]['last_hp'] = -$hp; Db::sql( 'update stats set last_hp = ?, tactic7 = ? where id = ?', [ $this->users[$this->uids[$uid]]['last_hp'], $this->users[$this->uids[$uid]]['tactic7'], $uid, ] ); } return floor($hp); } // todo stopped here // //Мини лог /** * Какая-то хуедрыга для номерных файлов-приёмов * @param int $pid * @param int $uid * @param int $id * @return void */ public function deleffm(int $pid, int $uid, int $id): void { if ($id > 0) { Db::sql('delete from eff_users where id = ? and v1 = ? and v2 != 0', [$id, 'priem']); } else { Db::sql('delete from eff_users where uid = ? and v1 = ? and v2 = ?', [$uid, 'priem', $pid]); } } //Проверяем завершение боя public function clear_cache_start(): void { $uids = implode(',', $this->ucleari); Db::sql('delete from battle_cache where uid in (?)', [$uids]); } //завершение поединка /** * Проверка урон приемов над защитными. * Игрок 1 бьет по Игроку 2 при помощи приема на hp ед. здоровья. * @param $u2 * @param array $hp * @return array */ public function testYronPriemAttack($u2, array $hp): array { //Получаем приемы и смотрим когда какой действует foreach ($this->stats[$this->uids[$u2]]['effects'] as $effect) { if (!isset($effect) || $effect['id_eff'] != 22 || $effect['v1'] != 'priem' || $effect['v2'] != 140 && $effect['v2'] != 211 && $effect['v2'] != 45 ) { continue; } //Приемы от которых урон = 1 , то есть выдаем 0 $hp['y'] = -1; $hp['r'] = 1; $hp['k'] = 2; $hp['m_y'] = 1; $hp['m_k'] = 2; } return $hp; } public function takeYronNow(int $uid, int|float $hpDamageValue): void { global $u; (int)$hpDamageValue = floor($hpDamageValue); $this->users[$this->uids[$uid]]['battle_yron'] += $hpDamageValue; $this->stats[$this->uids[$uid]]['battle_yron'] += $hpDamageValue; if ($uid == $u->info['id']) { $u->info['battle_yron'] += $hpDamageValue; $u->stats['battle_yron'] += $hpDamageValue; } Db::sql('update stats set battle_yron = battle_yron + ? where id = ?', [$hpDamageValue, $uid]); } public function myInfo($id, $t): string { global $u; if (!isset($this->users[$this->uids[$id]]) && $u->info['id'] != $id) { return ''; } if ($u->info['id'] == $id || ($u->info['enemy'] == $id && $id > 0)) { //Всегда обновляем $this->users[$this->uids[$id]] = Db::getRow( 'select u.zag,u.id,u.login,u.login2,u.online,u.admin,u.city,u.cityreg,u.align,u.align_lvl,u.align_exp,u.clan, u.level,u.money,u.money3,u.money2,u.money4,u.battle,u.sex,u.obraz,u.win,u.win_t, u.lose,u.lose_t,u.nich,u.timeMain,u.invis,u.bot_id,u.animal,u.type_pers, u.notrhod,u.bot_room,u.inUser,u.inTurnir,u.inTurnirnew,u.stopexp,u.real, s.* from users as u left join stats as s on (u.id = s.id) where u.id = ?', [$id] ); $this->stats[$this->uids[$id]] = $u->getStats($this->users[$this->uids[$id]], 0, 0, false, false, true); } $ur = $this->users[$this->uids[$id]]; $st = $this->stats[$this->uids[$id]]; $itm = $this->stats[$this->uids[$id]]['items']; $eff = $this->stats[$this->uids[$id]]['effects']; $i = 0; $img = Config::img(); $armor1 = '
Броня головы: '; $armor2 = '
Броня корпуса: '; $armor3 = '
Броня пояса: '; $armor4 = '
Броня ног: '; if ($u->info['seff'] < 1) { $ef = << HTML; while ($i != -1) { $nseef = 0; if ( $this->users[$this->uids[$ur['id']]]['id'] != $u->info['id'] && $ur['id'] != 0 && $this->stats[$this->uids[$ur['id']]]['seeAllEff'] != 1 ) { $nseef = 1; if ($eff[$i]['v1'] == 'priem') { $eff[$i]['priem'] = Db::getRow('select * from priems where id = ?', [$eff[$i]['v2']]); } if (isset($eff[$i]['priem']['id']) && $eff[$i]['priem']['neg'] == 1) { $nseef = 0; } } if (isset($eff[$i]) && $eff[$i] != 'delete') { if ($nseef == 0) { $ei = '' . $eff[$i]['name'] . ''; if ($eff[$i]['x'] > 1) { $ei .= ' x' . $eff[$i]['x'] . ' '; } $ei .= match ($eff[$i]['type1']) { 1, 2, 3, 4, 5, 6 => ' (Эликсир)', 7, 8, 9, 10, 16 => ' (Заклятие)', 14 => ' (Прием)', 15 => ' (Изучение)', 17 => ' (Проклятие)', 18, 19 => ' (Травма)', 20 => ' (Пристрастие)', 22 => ' (Ожидание)', default => ' (Эффект)' }; $ei .= '
'; $time_still = ($eff[$i]['timeUse'] + ($eff[$i]['timeAce'] - $eff[$i]['timeUse']) + $eff[$i]['actionTime']); if ($eff[$i]['timeAce'] == 0) { $time_still += $eff[$i]['timeUse']; } $time_still -= time(); if ($eff[$i]['bp'] == 0 && $eff[$i]['timeUse'] != 77) { if ($eff[$i]['type1'] != 13) { $ei .= 'Осталось: ' . Conversion::secondsToTimeout($time_still); } } else { if ($eff[$i]['timeUse'] != 77 && $eff[$i]['hod'] < 1) { $ei .= 'Осталось: ' . Conversion::secondsToTimeout($time_still); } elseif ($eff[$i]['hod'] >= 0) { $ei .= 'Зарядов: ' . $eff[$i]['hod']; } } if ($eff[$i]['user_use'] != '') { $str = '
Автор: %s'; if ($this->users[$this->uids[$eff[$i]['user_use']]]['login2'] != '') { $ei .= sprintf($str, $this->users[$this->uids[$eff[$i]['user_use']]]['login2']); } elseif ($this->users[$this->uids[$eff[$i]['user_use']]]['login'] != '') { $ei .= sprintf($str, $this->users[$this->uids[$eff[$i]['user_use']]]['login']); } unset($str); } //Действие эффекта $tr = ''; $ti = $u->items['add']; $x = 0; $ed = Conversion::dataStringToArray($eff[$i]['data']); while ($x < count($ti)) { $n = $ti[$x]; if (isset($ed['add_' . $n], $u->is[$n]) && $n != 'pog') { $z = ''; if ($ed['add_' . $n] > 0) { $z = '+'; } $tr .= '
' . $u->is[$n] . ': ' . $z . $ed['add_' . $n]; } $x++; } if ($ed['add_mib1'] != 0) { if ($ed['add_mab1'] != 0) { $tr .= $armor1 . $ed['add_mib1'] . '-' . $ed['add_mab1']; } else { $m1l = $ed['add_mib1']; if ($m1l > 0) { $m1l = '+' . $m1l; } $tr .= $armor1 . $m1l; } } if ($ed['add_mib2'] != 0) { if ($ed['add_mab2'] != 0) { $tr .= $armor2 . $ed['add_mib2'] . '-' . $ed['add_mab2']; } else { $m1l = $ed['add_mib2']; if ($m1l > 0) { $m1l = '+' . $m1l; } $tr .= $armor2 . $m1l; } } if ($ed['add_mib3'] != 0) { if ($ed['add_mab3'] != 0) { $tr .= $armor3 . $ed['add_mib3'] . '-' . $ed['add_mab3']; } else { $m1l = $ed['add_mib3']; if ($m1l > 0) { $m1l = '+' . $m1l; } $tr .= $armor3 . $m1l; } } if ($ed['add_mib4'] != 0) { if ($ed['add_mab4'] != 0) { $tr .= $armor4 . $ed['add_mib4'] . '-' . $ed['add_mab4']; } else { $m1l = $ed['add_mib4']; if ($m1l > 0) { $m1l = '+' . $m1l; } $tr .= $armor4 . $m1l; } } $efix = 0; if (isset($ed['add_pog2']) && $ed['add_pog2'] > 0) { $efix = $ed['add_pog2']; } if (isset($ed['add_pog'])) { $tr .= '
Магический барьер способен поглотить еще ' . $ed['add_pog'] . ' ед. урона'; } if (isset($ed['add_pog2'])) { $tr .= '
Магический барьер способен поглотить еще ' . $ed['add_pog2'] . ' ед. урона (' . $ed['add_pog2p'] . '%)'; } if ($tr != '') { $ei .= $tr; } if ($eff[$i]['info'] != '') { $ei .= '
Информация:
' . $eff[$i]['info']; } $efcol = $eff[$i]['x']; $efimg = $eff[$i]['img']; $ef .= << HTML; unset($efix, $efcol, $efimg); } } elseif ($eff[$i] != 'delete') { $i = -2; } $i++; } } else { $ef = << HTML; } $ca = ''; if ($ur['clan'] > 0) { $clanName = ClanInfo::getNameById($ur['clan']); if (!empty($clanName)) { $ca = "$clanName"; } } if ($ur['align'] > 0) { $ca = "Склонность $ca"; } if ($ur['login2'] == '') { $ur['login2'] = $ur['login']; } if (floor($st['hpNow']) > $st['hpAll']) { $st['hpNow'] = $st['hpAll']; } if (floor($st['mpNow']) > $st['mpAll']) { $st['mpNow'] = $st['mpAll']; } $stsua = '' . $ur['login2'] . ''; $stsua .= '
Сила: ' . $st['s1']; $stsua .= '
Ловкость: ' . $st['s2']; $stsua .= '
Интуиция: ' . $st['s3']; $stsua .= '
Выносливость: ' . $st['s4']; if ($st['s5'] != 0) { $stsua .= '
Интелект: ' . $st['s5']; } if ($st['s6'] != 0) { $stsua .= '
Мудрость: ' . $st['s6']; } if ($st['s7'] != 0) { $stsua .= '
Духовность: ' . $st['s7']; } if ($u->isAdmin()) { $align = $ur['align']; } $tpImg = [ 1 => 4, 2 => 5, 14 => 6, 3 => 7, 5 => 8, 7 => 9, 17 => 10, 16 => 11, 13 => 12, 10 => 13, 9 => 14, 8 => 15, 11 => 17, //кольцо 2 12 => 18, //кольцо 3 ]; $info = 'info_reflesh(' . $t . ',' . $ur['id'] . ',"' . $ca . '' . $ur['login2'] . ' [' . $ur['level'] . '] ","' . $ur['obraz'] . '",' . floor( $st['hpNow'] ) . ',' . floor($st['hpAll']) . ',' . floor( $st['mpNow'] ) . ',' . floor( $st['mpAll'] ) . ',0,' . $ur['sex'] . ',"' . $ef . '","' . $stsua . '", "' . $align . '", "' . $ur['zag'] . '");shpb();'; $i = 0; if (is_array($itm)) { while ($i < count($itm)) { // if (isset($st['items_img'][$tpImg[$itm[$i]['inOdet']]])) { $itm[$i]['img'] = $st['items_img'][$tpImg[$itm[$i]['inOdet']]]; } //генерируем предметы $ttl = '' . $itm[$i]['name'] . ''; $td = Conversion::dataStringToArray($itm[$i]['data']); $lvar = ''; if ($td['add_hpAll'] > 0) { $td['add_hpAll'] = '+' . $td['add_hpAll']; $lvar .= '
Уровень жизни: ' . $td['add_hpAll']; } if ($td['sv_yron_max'] > 0 || $td['sv_yron_min'] > 0) { $lvar .= '
Урон: ' . (0 + $td['sv_yron_min']) . '-' . (0 + $td['sv_yron_max']); } if ($td['add_mab1'] > 0) { if ($td['add_mib1'] == $td['add_mab1']) { $m1l = '+'; $lvar .= $armor1 . $m1l . (0 + $td['add_mab1']); } else { $lvar .= $armor1 . (0 + $td['add_mib1']) . '-' . (0 + $td['add_mab1']); } } if ($td['add_mab2'] > 0) { if ($td['add_mib2'] == $td['add_mab2']) { $m1l = '+'; $lvar .= $armor2 . $m1l . (0 + $td['add_mab2']); } else { $lvar .= $armor2 . (0 + $td['add_mib2']) . '-' . (0 + $td['add_mab2']); } } if ($td['add_mab3'] > 0) { if ($td['add_mib3'] == $td['add_mab3']) { $m1l = '+'; $lvar .= $armor3 . $m1l . (0 + $td['add_mab3']); } else { $lvar .= $armor3 . (0 + $td['add_mib3']) . '-' . (0 + $td['add_mab3']); } } if ($td['add_mab4'] > 0) { if ($td['add_mib4'] == $td['add_mab4']) { $m1l = '+'; $lvar .= $armor4 . $m1l . (0 + $td['add_mab4']); } else { $lvar .= $armor4 . (0 + $td['add_mib4']) . '-' . (0 + $td['add_mab4']); } } if ($itm[$i]['iznosMAX'] > 0) { if ($itm[$i]['iznosMAXi'] == 999999999) { $lvar .= '
Долговечность: неразрушимо'; } else { $lvar .= '
Долговечность: ' . floor( $itm[$i]['iznosNOW'] ) . '/' . floor( $itm[$i]['iznosMAX'] ); } } $ttl .= $lvar; $ccv = ''; if ($itm[$i]['magic_inci'] != '' || $itm[$i]['magic_inc'] != '') { if ($itm[$i]['magic_inc'] == '') { $itm[$i]['magic_inc'] = $itm[$i]['magic_inci']; } $mgi = Db::getRow('select * from eff_main where id2 = ? and type1 = 12345', [$itm[$i]['magic_inc']]); if (isset($mgi['id2'])) { $ccv .= 'top.useMagicBattle(\'' . $mgi['mname'] . '\',' . $itm[$i]['id'] . ',\'' . $mgi['img'] . '\',1,2);'; } } $var1 = (int)$t; $var2 = (int)$itm[$i]['uid']; $var3 = (int)$itm[$i]['id']; $var4 = (int)$itm[$i]['inOdet']; $var5 = $itm[$i]['name']; $var6 = $ttl; $var7 = $itm[$i]['img']; $var8 = $ccv; $info .= "abitms($var1,$var2,$var3,$var4,'$var5','$var6','$var7','$var8');"; unset($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8); $i++; } } return $info; } //Проводим удар /** * Проверка на выживших. * Проклято и сломано. * @return bool */ public function testUsersLive(): bool { $r = false; $tl = 0; $i = 0; $j = 0; while ($i < count($this->uids)) { if ($this->stats[$i]['id'] > 0) { if (floor($this->stats[$i]['hpNow']) < 1) { $this->stats[$i]['hpNow'] = 0; } $hp[$this->users[$i]['team']] += floor($this->stats[$i]['hpNow']); if (!isset($tml[$this->users[$i]['team']]) && floor($this->stats[$i]['hpNow']) >= 1) { $tml[$this->users[$i]['team']] = 1; $tmv[$j] = $this->users[$i]['team']; $tl++; } } $i++; } if ($tl > 1) { $r = true; } return $r; } //Запускаем магические предметы, если в них что-то встроено public function testFinish(): void { global $u; [ 'id' => $check, 'team_win' => $tw, ] = Db::getRow('select id, team_win from battle where id = ?', [$this->info['id']]); if (empty($check)) { return; } if ($tw === -1) { $hp = []; $tml = []; $tmv = []; $tl = 0; $i = 0; $j = 0; while ($i < count($this->uids)) { if ($this->stats[$i]['id'] > 0) { if (floor($this->stats[$i]['hpNow']) < 1) { $this->stats[$i]['hpNow'] = 0; } $hp[$this->users[$i]['team']] += floor($this->stats[$i]['hpNow']); if (!isset($tml[$this->users[$i]['team']]) && floor($this->stats[$i]['hpNow']) >= 1) { $tml[$this->users[$i]['team']] = 1; $tmv[$j] = $this->users[$i]['team']; $tl++; } } $i++; } if ($tl <= 1) { //Доп.проверка $tmHpNow = []; $tmNow = []; foreach ( Db::getRow('select team, hpNow from users left join stats on users.id = stats.id where battle = ?', [$this->info['id']]) as $pl ) { if (!isset($tmHpNow[$pl['team']])) { $tmHpNow[$pl['team']] = 0; $tmNow[] = $pl['team']; } $hpTm = floor($pl['hpNow']); if ($hpTm < 0) { $hpTm = 0; } if ($hpTm > 0) { $tmHpNow[$pl['team']] += $pl['hpNow']; } } $gdj = 0; $i = 0; while ($i < count($tmNow)) { if (isset($tmNow[$i])) { $j = $tmNow[$i]; if ($tmHpNow[$j] > 0) { $gdj++; } } $i++; } if ($gdj > 1) { $tl = $gdj; echo 'Поединок может завершиться не корректно... (Сообщите Администрации об этом)'; } } if ($tl <= 1) { //завершаем поединок, кто-то один победил, либо ничья $i = 0; $tmwin = 0; while ($i < count($tmv)) { if ($tmv[$i] >= 1 && $tml[$tmv[$i]] > 0) { $tmwin = $tmv[$i]; } $i++; } $ir = 0; $bi = 0; if ($this->info['id'] > 0) { if ($this->info['izlom'] == 0) { //данные о игроках в бою $trl = mysql_query( 'SELECT `u`.`no_ip`,`u`.`id`,`u`.`notrhod`,`u`.`login`,`u`.`login2`,`u`.`sex`,`u`.`online`,`u`.`admin`,`u`.`align`,`u`.`align_lvl`,`u`.`align_exp`,`u`.`clan`,`u`.`level`,`u`.`battle`,`u`.`obraz`,`u`.`win`,`u`.`lose`,`u`.`nich`,`u`.`animal`,`st`.`stats`,`st`.`hpNow`,`st`.`mpNow`,`st`.`exp`,`st`.`dnow`,`st`.`team`,`st`.`battle_yron`,`st`.`battle_exp`,`st`.`enemy`,`st`.`battle_text`,`st`.`upLevel`,`st`.`timeGo`,`st`.`timeGoL`,`st`.`bot`,`st`.`lider`,`st`.`btl_cof`,`st`.`tactic1`,`st`.`tactic2`,`st`.`tactic3`,`st`.`tactic4`,`st`.`tactic5`,`st`.`tactic6`,`st`.`tactic7`,`st`.`x`,`st`.`y`,`st`.`battleEnd`,`st`.`priemslot`,`st`.`priems`,`st`.`priems_z`,`st`.`bet`,`st`.`clone`,`st`.`atack`,`st`.`bbexp`,`st`.`res_x`,`st`.`res_y`,`st`.`res_s`,`st`.`id`,`st`.`last_hp`,`st`.`last_pr`,`u`.`sex`,`u`.`money`,`u`.`money3`,`u`.`money2`,`u`.`bot_id` FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`battle` = "' . $this->info['id'] . '" ORDER BY `st`.`bot` DESC' ); $this->users = []; $this->stats = []; $this->uids = []; $this->bots = []; $this->iBots = []; while ($pl = mysql_fetch_array($trl)) { //записываем данные if ($pl['login2'] == '') { $pl['login2'] = $pl['login']; } $this->users[$ir] = $pl; $this->uids[$pl['id']] = $ir; if ($pl['bot'] > 0) { $this->bots[$bi] = $pl['id']; $this->iBots[$pl['id']] = $bi; $bi++; } //записываем статы $this->stats[$ir] = $u->getStats($pl['id'], 0, 0, false, false, true); $ir++; } } elseif (!isset($this->uids[$u->info['id']])) { //данные о игроках в бою $trl = mysql_query( 'SELECT `u`.`no_ip`,`u`.`id`,`u`.`notrhod`,`u`.`login`,`u`.`login2`,`u`.`sex`,`u`.`online`,`u`.`admin`,`u`.`align`,`u`.`align_lvl`,`u`.`align_exp`,`u`.`clan`,`u`.`level`,`u`.`battle`,`u`.`obraz`,`u`.`win`,`u`.`lose`,`u`.`nich`,`u`.`animal`,`st`.`stats`,`st`.`hpNow`,`st`.`mpNow`,`st`.`exp`,`st`.`dnow`,`st`.`team`,`st`.`battle_yron`,`st`.`battle_exp`,`st`.`enemy`,`st`.`battle_text`,`st`.`upLevel`,`st`.`timeGo`,`st`.`timeGoL`,`st`.`bot`,`st`.`lider`,`st`.`btl_cof`,`st`.`tactic1`,`st`.`tactic2`,`st`.`tactic3`,`st`.`tactic4`,`st`.`tactic5`,`st`.`tactic6`,`st`.`tactic7`,`st`.`x`,`st`.`y`,`st`.`battleEnd`,`st`.`priemslot`,`st`.`priems`,`st`.`priems_z`,`st`.`bet`,`st`.`clone`,`st`.`atack`,`st`.`bbexp`,`st`.`res_x`,`st`.`res_y`,`st`.`res_s`,`st`.`id`,`st`.`last_hp`,`st`.`last_pr`,`u`.`sex`,`u`.`money`,`u`.`bot_id`,`u`.`money3`,`u`.`money2` FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`id` = ' . $this->info['id'] ); $pl = mysql_fetch_array($trl); //записываем данные if ($pl['login2'] == '') { $pl['login2'] = $pl['login']; } $this->users[] = $pl; $this->uids[$pl['id']] = $ir; if ($pl['bot'] > 0) { $this->bots[] = $pl['id']; $this->iBots[$pl['id']] = $bi; } //записываем статы $this->stats[] = $u->getStats($pl['id'], 0, 0, false, false, true); } } if ($this->info['izlom'] > 0 && $tmwin == 1) { // выкидываем ботов из боя $i = 0; $botsIds = Db::getColumn('select users.id from users left join stats on users.id = stats.id where battle = ? and bot = 1 and team != ?', [$this->info['id'], $u->info['team']]); Db::sql('delete from users where id in (?)', [implode(',', $botsIds)]); Db::sql('delete from stats where id in (?)', [implode(',', $botsIds)]); Db::sql('delete from items_users where uid in (?)', [implode(',', $botsIds)]); Db::sql('delete from eff_users where uid in (?)', [implode(',', $botsIds)]); $j = 0; $obr = 0; $bots = []; //Это излом, добавляем еще ботов if ($this->getChanse(20)) { //Уникальные монстры if ($this->info['izlomLvl'] == 8) { $bots = [ 'Валентайский Охотник', 'Шипокрыл Хаоса', 'Шипокрыл', 'Лик Хаоса', 'Фанатик Хаоса', ]; } echo '
Приближается нечто...
'; $this->addIzlomBot($bots, $j, $obr, $this->users[$i]['id']); } else { //Обычные монстры if ($this->info['izlomLvl'] == 8) { $bots = [ 'Литейщик', 'Проклятие Глубин', 'Пустынник Маньяк', 'Пустынник Убийца', 'Рабочий Мглы', 'Смотритель Мглы', 'Сторож Мглы', ]; } $this->addIzlomBot($bots, $j, $obr); $this->addIzlomBot($bots, $j, $obr); if (rand(0, 100) < 70) { $this->addIzlomBot($bots, $j, $obr); } //Каждые 10 волн = +1 монстр $irb = floor($this->info['izlomRoundSee'] / 10); while ($irb > 0) { $this->addIzlomBot($bots, $j, $obr); $irb--; } } if ($j == 0) { //конец излома $this->finishBattle($tml, $tmv, null); mysql_query( 'INSERT INTO `izlom_rating` (`uid`,`time`,`voln`,`level`,`bots`,`rep`,`obr`,`btl`) VALUES ("' . $u->info['id'] . '","' . time( ) . '","' . $this->info['izlomRoundSee'] . '","' . $this->info['izlomLvl'] . '","0","0","' . ($this->info['izlomObr'] - $this->info['izlomObrNow']) . '","' . $this->info['id'] . '")' ); } else { $this->info['izlomRound'] = $iz['round']; mysql_query( 'UPDATE `battle` SET `izlomObrNow` = ' . $obr . ',`izlomObr` = `izlomObr` + ' . $obr . ',`timeout` = (`timeout`+5),`izlomRound` = "' . ($this->info['izlomRound'] + 1) . '",`izlomRoundSee` = `izlomRoundSee`+1 WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); $this->stats[$this->uids[$u->info['id']]]['hpNow'] += $this->stats[$this->uids[$u->info['id']]]['hpAll'] * 0.25; $this->stats[$this->uids[$u->info['id']]]['mpNow'] += $this->stats[$this->uids[$u->info['id']]]['mpAll'] * 0.25; $this->users[$this->uids[$u->info['id']]]['hpNow'] = $this->stats[$this->uids[$u->info['id']]]['hpAll']; $this->users[$this->uids[$u->info['id']]]['mpNow'] = $this->stats[$this->uids[$u->info['id']]]['mpAll']; //где это брать?? $vLog = 'at1=00000||at2=00000||zb1=' . $this->stats[$this->uids[$u1]]['zonb'] . '||zb2=' . $this->stats[$this->uids[$u2]]['zonb'] . '||bl1=' . $this->atacks[$id]['b' . $a] . '||bl2=' . $this->atacks[$id]['b' . $b] . '||time1=' . $this->atacks[$id]['time'] . '||time2=' . $this->atacks[$id]['time2'] . '||s2=' . $this->users[$this->uids[$u2]]['sex'] . '||s1=' . $this->users[$this->uids[$u1]]['sex'] . '||t2=' . $this->users[$this->uids[$u2]]['team'] . '||t1=' . $this->users[$this->uids[$u1]]['team'] . '||login1=' . $this->users[$this->uids[$u1]]['login2'] . '||login2=' . $this->users[$this->uids[$u2]]['login2']; $mas = [ 'battle' => $this->info['id'], 'id_hod' => ($this->hodID + 1), 'vars' => $vLog, 'type' => 1, ]; $textpart1 = $u->info['sex'] == 1 ? 'воспользовалась' : 'воспользовался'; $mas['text'] = '' . date('H:i') . ' ' . $u->info['login'] . ' ' . $textpart1 . ' приемом "Передышка".'; if ($u->stats['hpNow'] < $u->stats['hpAll']) { $hpSks = floor(($u->stats['hpAll'] * ((rand(15, 25)) / 100))); if ($hpSks > floor($u->stats['hpAll'] - $u->stats['hpNow'])) { $hpSks = floor($u->stats['hpAll'] - $u->stats['hpNow']); } $textpart2 = "+$hpSks"; } else { $hpSks = 0; $textpart2 = '--'; } $mas['text'] .= ' +' . $textpart2 . ''; $mas['text'] .= ' [' . floor($u->info['hpNow'] + $hpSks) . '/' . $u->stats['hpAll'] . ']'; $this->add_log($mas); Db::sql( 'update stats set hpNow = ?, mpNow = ? where id = ?', [ $u->info['hpNow'] + $u->stats['hpAll'] * ((rand(15, 25)) / 100), $u->info['mpNow'] + $u->stats['mpAll'] * 0.25, $u->info['id'], ] ); } } else { //завершаем бой $this->finishBattle($tml, $tmv, null); if ($this->info['izlom'] > 0) { Db::sql( 'insert into izlom_rating (uid, time, voln, level, obr, btl) values (?,unix_timestamp(),?,?,?,?)', [ $u->info['id'], $this->info['izlomRoundSee'], $this->info['izlomLvl'], $this->info['izlomObr'] - $this->info['izlomObrNow'], $this->info['id'], ] ); } } Effects::addById($u->info['id'], 31); $cmsg = new ChatMessage(); $cmsg->setRoom($u->info['room']); $cmsg->setTo($u->info['login']); $cmsg->setType(6); $cmsg->setText( 'Вы создали предмет "Образец" x' . (($this->info['izlomObr'] - $this->info['izlomObrNow']) * 7) ); (new Chat())->sendMsg($cmsg); $i01 = 1; while ($i01 <= (($this->info['izlomObr'] - $this->info['izlomObrNow'])) * 7) { ItemsModel::addItem(1226, $u->info['id'], '|sudba=' . $u->info['login']); $i01++; } Db::sql( "insert into actions (uid, time, city, room, vars, ip, vals, val) values (?,unix_timestamp(),'capitalcity',?,'izlom','','','')", [$u->info['id'], $u->info['room']] ); } } else { $this->finishBattle(null, null, 10); } } /** * @param array $botLogins * @param int $counter * @param int $obr * @param int $unique для совместимости с непонятным вызовом User->addAction * при вызове уникального монстра. * @return void */ private function addIzlomBot(array $botLogins, int &$counter, int &$obr, int $unique = 0): void { global $u; if (empty($botLogins) || mt_rand(0, count($botLogins) - 1) === 0) { return; } [ 'id' => $id, 'align' => $align, 'clan' => $clan, 'level' => $level, 'sex' => $gender, 'login' => $login, ] = Db::getRow( "select id, align, clan, level, sex, login from test_bot where login = ? and pishera != '' and active = 1 and level <= ? order by level desc limit 1", [$botLogins[array_rand($botLogins)], $u->info['level']] ); $bot = $u->addNewbot(id: $id, round: round($this->info['izlomRoundSee']) * mt_rand(1, 2)); if (empty($bot)) { return; } $imgBase = Config::img() . DIRECTORY_SEPARATOR . 'i'; $alignStr = empty($align) ? '' : ""; $clanStr = empty($clan) ? '' : "$clan"; $spacedLogin = str_replace(' ', '%20', $login); $loginLink = "Инф. о $login"; $btxt = "$alignStr$clanStr$login [$level]$loginLink"; $btxt .= $gender == 1 ? ' вмешалась в поединок.' : ' вмешался в поединок.'; $this->miniLogAdd( [ 'login' => $login, 'sex' => $gender, 'team' => 0, ], "{tm1} $btxt" ); Db::sql('update users left join stats on users.id = stats.id set battle = ?, team = 2 where users.id = ?', [$this->info['id'], $bot['id']]); if ($unique) { $u->addAction(time(), 'win_bot_' . $id, '', $unique); } $counter++; if (mt_rand(0, 10000) < 1500) { $obr++; } } //Поглощение урона private function getChanse(int $percent): bool { return rand(0, 100) <= $percent; } //Поглощение урона private function miniLogAdd(array $user, string $text): void { if (empty($text) || !isset($user['sex'], $user['team'], $user['login'])) { return; } Log::add( [ 'text' => $text, 'battle' => $this->info['id'], 'id_hod' => ($this->hodID + 1), 'vars' => 'at1=00000||at2=00000||zb1=0||zb2=0||bl1=0||bl2=0||time1=' . time() . '||time2=' . time() . '||s1=' . $user['sex'] . '||t1=' . $user['team'] . '||login1=' . $user['login'], 'type' => 1, ] ); } public function add_log(array $mass): void { if (empty($mass['text'])) { return; } Log::add($mass); if ($this->getChanse(12)) { Log::addComment($this); } } //Игрок1 наносит удар Игрок2 private function finishBattle($t, $v, $nl): void { global $u; $chat = new Chat(); mysql_query('LOCK TABLES users,stats,battle,battle_last,battle_end,chat WRITE'); $frtu = false; $test = mysql_fetch_array( mysql_query( 'SELECT `id`,`team_win`,`testfinish` FROM `battle` WHERE `id` = "' . $this->info['id'] . '" AND `team_win` != -1 LIMIT 1;' ) ); if ($test['testfinish'] == -1) { sleep(2); } else { $trtt = mysql_query( 'UPDATE `battle` SET `testfinish` = "-1" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); $relbf = $this->info['team_win']; if ($nl != 10) { $i = 0; $dnr = 0; if ($this->info['team_win'] == -1) { $this->info['team_win'] = 0; while ($i < count($v)) { if ($v[$i] >= 1 && $t[$v[$i]] > 0) { $this->info['team_win'] = $v[$i]; } $i++; } } } //данные о игроках в бою $t = mysql_query( 'SELECT `u`.`stopexp`,`u`.`twink`,`u`.`city`,`u`.`room`,`u`.`no_ip`,`u`.`pass`,`u`.`id`,`u`.`notrhod`,`u`.`login`,`u`.`login2`,`u`.`sex`,`u`.`online`,`u`.`admin`,`u`.`align`,`u`.`align_lvl`,`u`.`align_exp`,`u`.`clan`,`u`.`level`,`u`.`battle`,`u`.`obraz`,`u`.`win`,`u`.`lose`,`u`.`nich`,`u`.`animal`,`st`.`stats`,`st`.`hpNow`,`st`.`mpNow`,`st`.`exp`,`st`.`dnow`,`st`.`team`,`st`.`battle_yron`,`st`.`battle_exp`,`st`.`enemy`,`st`.`battle_text`,`st`.`upLevel`,`st`.`timeGo`,`st`.`timeGoL`,`st`.`bot`,`st`.`lider`,`st`.`btl_cof`,`st`.`tactic1`,`st`.`tactic2`,`st`.`tactic3`,`st`.`tactic4`,`st`.`tactic5`,`st`.`tactic6`,`st`.`tactic7`,`st`.`x`,`st`.`y`,`st`.`battleEnd`,`st`.`priemslot`,`st`.`priems`,`st`.`priems_z`,`st`.`bet`,`st`.`clone`,`st`.`atack`,`st`.`bbexp`,`st`.`res_x`,`st`.`res_y`,`st`.`res_s`,`st`.`id`,`st`.`last_hp`,`st`.`last_pr`,`u`.`sex`,`u`.`money`,`u`.`bot_id`,`u`.`money3`,`u`.`money2` FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`battle` = "' . $this->info['id'] . '"' ); $i = 0; $bi = 0; while ($pl = mysql_fetch_array($t)) { //записываем данные if ($pl['login2'] == '') { $pl['login2'] = $pl['login']; } $this->users[$i] = $pl; $this->uids[$pl['id']] = $i; if ($pl['bot'] > 0) { $this->bots[$bi] = $pl['id']; $this->iBots[$pl['id']] = $bi; $bi++; } //записываем статы $this->stats[$i] = $u->getStats($pl['id'], 0, 0, false, false, true); $i++; } unset($pl, $t); if ($this->info['time_over'] == 0) { $tststrt = mysql_fetch_array( mysql_query( 'SELECT * FROM `battle` WHERE `id` = "' . $this->info['id'] . '" AND `time_over` = "0" LIMIT 1' ) ); if (isset($tststrt['id'])) { if ($this->info['inTurnir'] == 0 || $this->info['type'] == 500) { mysql_query( 'UPDATE `battle` SET `time_over` = "' . time() . '",`team_win` = "' . $this->info['team_win'] . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); } mysql_query( 'UPDATE `battle_stat` SET `team_win` = "' . $this->info['team_win'] . '" WHERE `battle_id` = "' . $this->info['id'] . '"' ); //Заносим данные о завершении боя $i = 0; $vl = ''; $vtvl = ''; $relu = 0; while ($i < count($this->users)) { $vl .= '("' . $this->users[$i]['login'] . '","' . $this->users[$i]['city'] . '","' . $this->info['id'] . '","' . $this->users[$i]['id'] . '","' . time( ) . '","' . $this->users[$i]['team'] . '","' . $this->users[$i]['level'] . '","' . $this->users[$i]['align'] . '","' . $this->users[$i]['clan'] . '","' . $this->users[$i]['exp'] . '","' . $this->users[$i]['bot'] . '","' . $this->users[$i]['money'] . '","' . $this->users[$i]['money2'] . '","' . $this->users[$i]['money3'] . '"),'; if ($this->users[$i]['team'] == $this->info['team_win'] && $this->info['team_win'] > 0) { $vtvl .= '' . $this->users[$i]['login'] . ', '; } $i++; } $this->info['players_c'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `users` WHERE `login` NOT LIKE "%(зверь%" AND `battle` = "' . $this->info['id'] . '" LIMIT 1' ) ); $this->info['players_c'] = $this->info['players_c'][0]; mysql_query( 'UPDATE `battle` SET `players_c` = "' . $this->info['players_c'] . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); if ($vtvl != '') { $vtvl = rtrim($vtvl, ', '); $vtvl = str_replace('"', '\\\\\"', $vtvl); $this->hodID++; $vLog = 'time1=' . time(); $mass = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'text' => 'test', 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $vtvl = 'Бой закончен, победа за ' . $vtvl . '.'; } else { $this->info['players_cc'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`u`.`id`) FROM `users` AS `u` LEFT JOIN `stats` AS `s` ON `s`.`id` = `u`.`id` WHERE `s`.`hpNow` > 0 AND `u`.`battle` = "' . $this->info['id'] . '" AND `s`.`team` != "' . $u->info['team'] . '" LIMIT 1' ) ); $this->info['players_cc'] = $this->info['players_cc'][0]; $this->info['players_cc2'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`u`.`id`) FROM `users` AS `u` LEFT JOIN `stats` AS `s` ON `s`.`id` = `u`.`id` WHERE `s`.`hpNow` >= 1 AND `u`.`battle` = "' . $this->info['id'] . '" AND `s`.`team` != "' . $u->info['team'] . '" LIMIT 1' ) ); $this->info['players_cc2'] = $this->info['players_cc2'][0]; $inf_test = ', users: ' . $this->info['players_cc'] . ' and ' . $this->info['players_cc2']; $this->hodID++; $vLog = 'time1=' . time(); $mass = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'text' => 'test', 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $vtvl = 'Бой закончен, ничья.'; } $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); $this->saveLogs(); if ($this->info['type'] == 99) { $vLog = 'time1=' . time(); $mass = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'text' => 'test', 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $vtvl = 'И победители стали калечить проигравших...'; $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); $i = 0; $vtvl = ''; $tr_nm = [ 1 => 'легкую', 2 => 'среднюю', 3 => 'тяжелую', 4 => 'неизлечимую', ]; while ($i < count($this->users)) { if ($this->users[$i]['team'] != $this->info['team_win']) { $tr_pl = mysql_fetch_array( mysql_query( 'SELECT `id`,`v1` FROM `eff_users` WHERE `id_eff` = 4 AND `uid` = "' . $this->users[$i]['id'] . '" AND `delete` = "0" ORDER BY `v1` DESC LIMIT 1' ) ); if (!isset($tr_pl['id']) || $tr_pl['v1'] < 3) { if ($this->info['smert'] == 1) { $tr_tp = 4; } else { $tr_tp = rand(1, 3); } if (isset($tr_pl['id'])) { $tr_tp = rand(($tr_pl['v1'] + 1), 3); } if ($this->users[$i]['sex'] == 1) { $vtvl = '' . $this->users[$i]['login'] . ' получила повреждение: ' . $tr_nm[$tr_tp] . ' травму.
' . $vtvl; } else { $vtvl = '' . $this->users[$i]['login'] . ' получил повреждение: ' . $tr_nm[$tr_tp] . ' травму.
' . $vtvl; } $this->addTravm($this->users[$i]['id'], $tr_tp, rand(3, 5)); } } $i++; } $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); } if ($vl != '') { $vl = rtrim($vl, ','); mysql_query( 'INSERT INTO `battle_last` (`login`,`city`,`battle_id`,`uid`,`time`,`team`,`lvl`,`align`,`clan`,`exp`,`bot`,`money`,`money2`,`money3`) VALUES ' . $vl ); } mysql_query( 'INSERT INTO `battle_end` (`battle_id`,`city`,`time`,`team_win`) VALUES ("' . $this->info['id'] . '","' . $this->info['city'] . '","' . $this->info['time_start'] . '","' . $this->info['team_win'] . '")' ); } $vLog = 'time1=' . time(); $mass = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'text' => 'test', 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $i = 0; $vtvl = ''; $tr_nm = [ 1 => 'легкую', 2 => 'среднюю', 3 => 'тяжелую', 4 => 'неизлечимую', ]; while ($i < count($this->users)) { if ($this->users[$i]['team'] != $this->info['team_win'] && $this->info['team_win'] > 0) { $tr_pl = mysql_fetch_array( mysql_query( 'SELECT * FROM `eff_users` WHERE `v1` = "priem" AND `v2` = 292 AND `uid` = "' . $this->users[$i]['id'] . '" AND `delete` = "0" LIMIT 1' ) ); $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl2 . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); if (isset($tr_pl['id'])) { if (rand(0, 100) < $tr_pl['data']) { $tr_tp = rand(1, 3); if (isset($tr_pl['id'])) { $tr_tp = rand(($tr_pl['v1'] + 1), 3); } if ($this->users[$i]['sex'] == 1) { $vtvl = '' . $this->users[$i]['login'] . ' получила повреждение (Искалечить, автор: ' . $this->users[$this->uids[$tr_pl['user_use']]]['login'] . '): ' . $tr_nm[$tr_tp] . ' травму.
' . $vtvl; } else { $vtvl = '' . $this->users[$i]['login'] . ' получил повреждение (Искалечить, автор: ' . $this->users[$this->uids[$tr_pl['user_use']]]['login'] . '): ' . $tr_nm[$tr_tp] . ' травму.
' . $vtvl; } $this->addTravm($this->users[$i]['id'], $tr_tp, rand(3, 5)); } } } $i++; } if ($vtvl != '') { if ($this->info['type'] != 99) { $vtvl2 = 'И победители стали калечить проигравших...'; $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl2 . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); } $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $vtvl . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); } //Турнир БС if ($this->info['inTurnir'] > 0 && $this->info['dungeon'] != 15 && $u->info['room'] != 413) { $bs = mysql_fetch_array( mysql_query('SELECT * FROM `bs_turnirs` WHERE `id` = "' . $this->info['inTurnir'] . '" LIMIT 1') ); $i = 0; $j = 0; while ($i < count($this->users)) { if ($this->stats[$i]['hpNow'] < 1 && $this->users[$i]['clone'] == 0 && $this->stats[$i]['clone'] == 0) { //Добавляем в лог БС if ($this->users[$i]['sex'] == 0) { $text .= '{u1} повержен и выбывает из турнира'; } else { $text .= '{u1} повержена и выбывает из турнира'; } //Выкидываем предметы с персонажа $spik = mysql_query( 'SELECT `id`,`item_id` FROM `items_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `delete` ="0"' ); while ($plik = mysql_fetch_array($spik)) { mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->users[$i]['dnow'] . '","' . $plik['item_id'] . '","' . (time() - 600) . '","' . $this->users[$i]['x'] . '","' . $this->users[$i]['y'] . '" )' ); } unset($spik, $plik); // $usrreal = ''; $usr_real = mysql_fetch_array( mysql_query( 'SELECT `id`,`login`,`align`,`clan`,`battle`,`level` FROM `users` WHERE `login` = "' . $this->users[$i]['login'] . '" AND `inUser` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); if (!isset($usr_real['id'])) { $usr_real = $this->users[$i]; } if (isset($usr_real['id'])) { if ($usr_real['align'] > 0) { $usrreal .= ''; } if ($usr_real['clan'] > 0) { $usrreal .= ''; } $usrreal .= '' . $usr_real['login'] . '[' . $usr_real['level'] . ']'; } else { $mereal = 'Невидимка[??]'; } $text = str_replace('{u1}', $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() . '", "' . $bs['id'] . '", "' . $bs['count'] . '", "' . $bs['city'] . '", "' . round($bs['money'] * 0.85, 2) . '","' . $i . '" )' ); // //Удаление клона mysql_query('DELETE FROM `users` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `stats` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `actions` WHERE `uid` = "' . $this->users[$i]['id'] . '"'); mysql_query('DELETE FROM `items_users` WHERE `uid` = "' . $this->users[$i]['id'] . '"'); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '"'); mysql_query('DELETE FROM `users_delo` WHERE `uid` = "' . $this->users[$i]['id'] . '"'); //Обновление персонажа mysql_query( 'UPDATE `users` SET `inUser` = "0" WHERE `login` = "' . $this->users[$i]['login'] . '" OR `inUser` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); //Обновляем заявку mysql_query( 'UPDATE `bs_zv` SET `off` = "' . time() . '" WHERE `inBot` = "' . $this->users[$i]['id'] . '" AND `off` = "0" LIMIT 1' ); unset($text, $usrreal, $usr_real); if ($this->users[$i]['pass'] != 'bstowerbot') { $bs['users']--; $bs['users_finish']++; } else { $bs['arhiv']--; } $j++; } $i++; } if ($j > 0) { mysql_query( 'UPDATE `bs_turnirs` SET `arhiv` = "' . $bs['arhiv'] . '",`users` = "' . $bs['users'] . '",`users_finish` = "' . $bs['users_finish'] . '" WHERE `id` = "' . $bs['id'] . '" LIMIT 1' ); } unset($bs, $j); } //Награда за события if ($this->info['type'] == 500 && isset($tststrt['id'])) { //Предметы которые выпадают в центр $i = 0; while ($i < count($this->users)) { $cmsg = new ChatMessage(); $cmsg->setType(6); $cmsg->setIsAlert(true); if ($this->users[$i]['no_ip'] == 'trupojor') { $mon = mysql_fetch_array( mysql_query( 'SELECT * FROM `aaa_monsters` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); if (isset($mon['id'])) { if ($this->info['team_win'] == 0) { //Ничья mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$i]['hpAll'] . '",`mpNow` = "' . $this->stats[$i]['mpAll'] . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->users[$i]['login'] . ' [' . $this->users[$i]['level'] . ']users[$i]['id'] . ' >', $mon['nich_text'] ) ); $chat->sendMsg($cmsg); } elseif ($this->info['team_win'] != $this->users[$i]['team']) { //Выиграли $j = 0; $usrwin = ''; while ($j < count($this->users)) { if ($this->users[$j]['no_ip'] != 'trupojor' && $this->users[$j]['bot'] == 0) { if ($this->stats[$j]['hpNow'] > 0) { $usrwin .= ', '; if ($this->users[$j]['align'] > 0) { $usrwin .= 'users[$j]['align'] . '.gif >'; } if ($this->users[$j]['clan'] > 0) { $usrwin .= 'users[$j]['clan'] . '.gif >'; } $usrwin .= '' . $this->users[$j]['login'] . ' [' . $this->users[$j]['level'] . ']users[$j]['id'] . ' >'; } } $j++; } if ($usrwin != '') { $usrwin = ltrim($usrwin, ', '); } else { $usrwin = 'Команда героев'; } mysql_query( 'UPDATE `users` SET `room` = "303" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $truptimelast = time() + rand(1800, 3600); mysql_query( 'UPDATE `stats` SET `res_x` = "' . $truptimelast . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->users[$i]['login'] . ' [' . $this->users[$i]['level'] . ']users[$i]['id'] . ' >', str_replace('{u}', $usrwin, $mon['win_text']) ) ); $chat->sendMsg($cmsg); unset($usrwin); } else { //Проиграли if ($mon['win_back'] == 1) { mysql_query( 'UPDATE `users` SET `room` = "303" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); } mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$i]['hpAll'] . '",`mpNow` = "' . $this->stats[$i]['mpAll'] . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $cmsg->setText( str_replace( '{b}', '' . $this->users[$i]['login'] . ' [' . $this->users[$i]['level'] . ']users[$i]['id'] . ' >', $mon['lose_text'] ) ); $chat->sendMsg($cmsg); } } } $i++; } } } // выкидываем ботов из боя $i = 0; $botsi = 0; if (isset($tststrt['id'])) { while ($i < count($this->users)) { //Тут выкидываем юзеров из Призавого хаота if ($this->info['type'] == 33) { $plde = mysql_fetch_array( mysql_query('SELECT * FROM `users` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1') ); if (isset($plde['mail']) && $plde['mail'] == "haot@new-combats.com") { $pld = mysql_fetch_array( mysql_query( 'SELECT * FROM `users` WHERE `inUser` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); if (isset($pld['id'])) { if ($this->users[$i]['battle_yron'] >= 500) { mysql_query( 'UPDATE `users_achiv` SET `pg`= `pg`+1 WHERE `id` = "' . $pld['id'] . '" LIMIT 1' ); if ($this->users[$i]['team'] == $this->info['team_win'] && rand(1, 100) <= 5) { ItemsModel::addItem(10020, $pld['id'], ''); $pld['battle_text'] .= ' За Героическое Сражение вы получаете Жетон Успеха. '; } } else { $pld['battle_text'] .= ' Вы ничего не получили. Нужно набить больше 500 урона урона .'; } $cmsg = new ChatMessage(); $cmsg->setRoom($pld['room']); $cmsg->setTo($pld['login']); $cmsg->setText($pld['battle_text']); $cmsg->setType(6); $chat->sendMsg($cmsg); mysql_query( 'DELETE FROM `stats` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'DELETE FROM `items_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100' ); mysql_query( 'DELETE FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100' ); mysql_query( 'UPDATE `users` SET `inUser` = "0" WHERE `inUser` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'DELETE FROM `users` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); } } unset ($plde, $pld); } if ($this->users[$i]['bot'] == 1) { $botsi++; mysql_query('DELETE FROM `users` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `stats` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1'); mysql_query( 'DELETE FROM `items_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100' ); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100'); } elseif ($this->users[$i]['bot'] == 2) { $this->users[$i]['battle'] = 0; mysql_query( 'UPDATE `users` SET `battle` = "0" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `stats` SET `zv` = "0",`team` = "0",`exp` = `exp` + `battle_exp`,`battle_exp` = "0",`battle_yron` = "0",`enemy` = "0", `timeGo` = "' . time( ) . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100'); } elseif ($this->users[$i]['bot'] > 0) { $this->users[$i]['battle'] = 0; mysql_query( 'UPDATE `users` SET `battle` = "0" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `stats` SET `zv` = "0",`team` = "0",`exp` = `exp` + `battle_exp`,`battle_exp` = "0",`battle_yron` = "0",`enemy` = "0", `timeGo` = "' . time( ) . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query('DELETE FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" LIMIT 100'); } if ($this->users[$i]['clone'] > 0 && $this->users[$i]['bot'] > 0 && isset($this->users[$this->uids[$this->users[$i]['clone']]]['id']) && $this->users[$this->uids[$this->users[$i]['clone']]]['team'] != $this->users[$i]['team']) { //Добавляем что клон побежден if ($this->users[$this->uids[$this->users[$i]['clone']]]['team'] == $this->info['team_win']) { $u->addAction(time(), 'win_bot_clone', '', $this->users[$i]['clone']); } elseif ($this->info['team_win'] == 0) { $u->addAction(time(), 'nich_bot_clone', '', $this->users[$i]['clone']); } else { $u->addAction(time(), 'lose_bot_clone', '', $this->users[$i]['clone']); } } elseif ($this->users[$i]['bot'] > 0 && $this->users[$i]['bot_id'] > 0) { //Добавляем что бота победили $j = 0; while ($j < count($this->users)) { if ($this->users[$j]['bot'] == 0 && $this->users[$j]['team'] != $this->users[$i]['team']) { if ($this->users[$j]['team'] == $this->info['team_win']) { // if($this->users[$j]['team']==$this->info['team_win']){ $u->addAction( time(), 'win_bot_' . $this->users[$i]['bot_id'], '', $this->users[$j]['id'] ); // mysql_query( 'UPDATE `dialog_act` SET `now` = `now` + 1 WHERE `uid` = "' . $this->users[$j]['id'] . '" AND ( `btl_bot` LIKE "' . $this->users[$i]['bot_id'] . '!%" OR `btl_bot` LIKE "%!' . $this->users[$i]['bot_id'] . '!%" ) AND `val` != 1 LIMIT 1' ); // } elseif ($this->info['team_win'] == 0) { $u->addAction( time(), 'nich_bot_' . $this->users[$i]['bot_id'], '', $this->users[$j]['id'] ); } else { $u->addAction( time(), 'lose_bot_' . $this->users[$i]['bot_id'], '', $this->users[$j]['id'] ); } } $j++; } } $i++; } } $botss = []; //Из бота падают предметы if ($nl != 10 && $this->info['dungeon'] > 0) { if ($this->info['team_win'] == $u->info['team'] && $this->info['dungeon'] == 102) { $j1 = mysql_fetch_array( mysql_query( 'SELECT * FROM `laba_obj` WHERE `type` = 2 AND `lib` = "' . $this->info['dn_id'] . '" AND `x` = "' . $this->info['x'] . '" AND `y` = "' . $this->info['y'] . '" LIMIT 1' ) ); if (isset($j1['id'])) { mysql_query('DELETE FROM `laba_obj` WHERE `id` = "' . $j1['id'] . '" LIMIT 1'); //Выпадает шмотка mysql_query( 'INSERT INTO `laba_obj` (`use`,`lib`,`time`,`type`,`x`,`y`,`vars`) VALUES ( "0","' . $j1['lib'] . '","' . time() . '","6","' . $j1['x'] . '","' . $j1['y'] . '","' . (0 + $botsi) . '" )' ); } } elseif ($this->info['team_win'] == $u->info['team']) { //выйграли люди, выкидываем предметы из мобов $j1 = mysql_query( 'SELECT * FROM `dungeon_bots` WHERE `dn` = "' . $this->info['dn_id'] . '" AND `for_dn` = "0" AND `x` = "' . $this->info['x'] . '" AND `delete` = "0" AND `y`= "' . $this->info['y'] . '" LIMIT 100' ); while ($tbot = mysql_fetch_array($j1)) { $cmsg = new ChatMessage(); $cmsg->setDn($this->info['dn_id']); $cmsg->setRoom($this->users[0]['room']); $cmsg->setType(6); $cmsg->setTypeTime(1); $j2 = 0; while ($j2 < $tbot['colvo']) { if (isset($tbot['id2'])) { $tbot2 = mysql_fetch_array( mysql_query( 'SELECT * FROM `test_bot` WHERE `id` = "' . $tbot['id_bot'] . '" LIMIT 1' ) ); $itms = explode('|', $tbot2['p_items']); $tii = 0; $testdrop = 0; while ($tii < count($itms) && $testdrop == 0) { $itmz = explode('=', $itms[$tii]); if ($itmz[0] > 0) { if (isset($itmz[2]) && $itmz[2] != '') { // $itmz[2] == quest888 $questDrop = mysql_fetch_array( mysql_query( 'SELECT * FROM `actions` WHERE `vars` LIKE "%' . $itmz[2] . '%" AND `vals` = "go" AND `uid` = "' . $u->info['id'] . '" LIMIT 1' ) ); } if (!isset($questDrop['id']) && isset($itmz[2]) && $itmz[2] != '') { $itmz[1] = 0; } // Если предмет квестовый, а квеста у игрока нет, то предмет выпадет с вероятностью 0 unset($questDrop); //Добавляем этот предмет в зону Х и У if ($itmz[1] * 100000 >= rand(1, 10000000)) { $tou = 0; //какому юзеру предназначено /* выделяем случайного юзера из команды */ $itmnm = mysql_fetch_array( mysql_query( 'SELECT `name` FROM `items_main` WHERE `id` = "' . $itmz[0] . '" LIMIT 1' ) ); $itmnm = $itmnm['name']; $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . $itmnm . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); $ins = mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->info['dn_id'] . '", "' . $tou . '", "' . $itmz[0] . '", "' . time() . '", "' . $this->info['x'] . '", "' . $this->info['y'] . '")' ); if (!isset($questDrop['id'])) { $testdrop = 1; //ТУТ drop-drop //quest } } } $tii++; } } $j2++; } // //Квест 1-15 сентября, if ( date('m') == 9 && date('d') < 15 && !$this->getChanse(99) && ($this->info['dungeon'] == 12 || $this->info['dungeon'] == 101) ) { $tou = 0; //какому юзеру предназначено /* выделяем случайного юзера из команды */ $itmz = [ rand(4745, 4751), 100, ]; // $itmnm = mysql_fetch_array( mysql_query( 'SELECT `name` FROM `items_main` WHERE `id` = "' . $itmz[0] . '" LIMIT 1' ) ); $itmnm = $itmnm['name']; $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . $itmnm . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); $ins = mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->info['dn_id'] . '", "' . $tou . '", "' . $itmz[0] . '", "' . time() . '", "' . $this->info['x'] . '", "' . $this->info['y'] . '")' ); } // //Странички саныча, if (rand(1, 100) <= 99) { } elseif ($this->info['dungeon'] == 12 || $this->info['dungeon'] == 3 || $this->info['dungeon'] == 101 || $this->info['dungeon'] == 16 || $this->info['dungeon'] == 9 || $this->info['dungeon'] == 10 || $this->info['dungeon'] == 13 || $this->info['dungeon'] == 106) { $tou = 0; //какому юзеру предназначено // выделяем случайного юзера из команды $itmz = mt_rand(3143, 3192); // $itmnm = mysql_fetch_array( mysql_query('SELECT `name` FROM `items_main` WHERE `id` = "' . $itmz . '" LIMIT 1') ); $itmnm = $itmnm['name']; $cmsg->setText( 'У ' . $tbot2['login'] . ' был предмет "' . $itmnm . '" и кто угодно может поднять его' ); $chat->sendMsg($cmsg); $ins = mysql_query( 'INSERT INTO `dungeon_items` (`dn`,`user`,`item_id`,`time`,`x`,`y`) VALUES ( "' . $this->info['dn_id'] . '", "' . $tou . '", "' . $itmz . '", "' . time() . '", "' . $this->info['x'] . '", "' . $this->info['y'] . '")' ); } } mysql_query( 'UPDATE `dungeon_bots` SET `delete` = "' . time( ) . '" AND `inBattle` = "' . $this->info['id'] . '" WHERE `dn` = "' . $this->info['dn_id'] . '" AND `for_dn` = "0" AND `delete` = "0" ' ); } else { //выкидываем всех игроков в клетку RESTART $dnr = 1; if ($this->info['dungeon'] != 102) { mysql_query( 'UPDATE `dungeon_bots` SET `inBattle` = "0" WHERE `dn` = "' . $this->info['dn_id'] . '" AND `for_dn` = "0" AND `x` = "' . $this->info['x'] . '" AND `y`= "' . $this->info['y'] . '"' ); } } } $gm = []; $gms = []; $bm = []; $bms = []; //Квестовый раздел //Квестовый раздел //завершаем поединок $i = $this->uids[$u->info['id']]; if ($this->info['team_win'] >= 0) { $cmsg = new ChatMessage(); $cmsg->setRoom($this->users[$i]['room']); $cmsg->setType(6); if ($this->stats[$i]['pbe'] > 0) { //Бонус покупателя $this->expCoef += $this->stats[$i]['pbe']; } if ($this->info['razdel'] == 5 && (Config::get('m') >= 6 && Config::get('m') <= 8 || Config::get('w') == 0 || Config::get('w') == 6)) { $this->expCoef += 5; } $this->stats[$i]['exp'] += $this->expCoef; $this->stats[$i]['exp'] += $this->aBexp * Config::get('exp'); if ($this->stats[$i]['os4'] > 0) { $this->stats[$i]['exp'] += $this->stats[$i]['os4']; } $act01 = 0; $this->users[$i]['battle_exp'] = round( $this->users[$i]['battle_exp'] + ($this->users[$i]['battle_exp'] / 100 * (1 + $this->info['addExp'] + $this->stats[$i]['exp'])) ); if ($this->info['type'] == 564) { //Бой с копией $this->users[$i]['battle_exp'] = 0; } if ($this->info['dungeon'] == 104) { $this->users[$i]['battle_exp'] = ($u->info['level'] * 2) * (count($this->uids) - 1); } elseif ($this->info['dungeon'] > 0 && $this->users[$i]['dnow'] != 0 && $this->info['dungeon'] != 1 && $this->users[$i]['team'] == $this->info['team_win']) { $dun_limitForLevel = [ 4 => 750, 5 => 1500, 6 => 3500, 7 => 8000, 8 => 25000, 9 => 50000, 10 => 75000, 11 => 100000, 12 => 100000, 13 => 100000, 14 => 100000, ]; // Максимум для каждого уровня. if ($this->users[$i]['battle_exp'] > 0) { $dun_exp = []; // Текущий лимит опыта игрока в подземельях. $rep = mysql_fetch_array( mysql_query( 'SELECT `dungeonexp`,`id` FROM `rep` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); $rep = explode(',', $rep['dungeonexp']); foreach ($rep as $key => $val) { $val = explode('=', $val); // текущий лимит опыта в подземке if (isset($val[0]) && isset($val[1]) && $val[0] != '' && $val[1] != 0) { $dun_exp[(int)$val[0]] = (int)$val[1]; } } unset($rep); } if (!isset($dun_exp[$this->info['dungeon']])) { $dun_exp[$this->info['dungeon']] = 0; } if (!isset($dun_limitForLevel[(int)$this->users[$i]['level']])) { // Если лимит не задан, опыт не даем. $this->users[$i]['battle_exp'] = 0; } elseif ( isset($dun_exp[$this->info['dungeon']]) && $dun_exp[$this->info['dungeon']] >= $dun_limitForLevel[(int)$this->users[$i]['level']] ) { // Если лимит уже достигнут, опыт не даем. $this->users[$i]['battle_exp'] = 0; } elseif ( isset($dun_exp[$this->info['dungeon']]) && $dun_limitForLevel[(int)$this->users[$i]['level']] > $dun_exp[$this->info['dungeon']] ) { // Если текущая репутация не достигла лимита. if (($dun_exp[$this->info['dungeon']] + $this->users[$i]['battle_exp']) > $dun_limitForLevel[(int)$this->users[$i]['level']]) { // Если опыта набрано достаточно, для достижения лимита. $this->users[$i]['battle_exp'] = abs( $this->users[$i]['battle_exp'] - abs( $dun_limitForLevel[(int)$this->users[$i]['level']] - ($this->users[$i]['battle_exp'] + $dun_exp[$this->info['dungeon']]) ) ); $dun_exp[$this->info['dungeon']] += $this->users[$i]['battle_exp']; } elseif ($dun_limitForLevel[(int)$this->users[$i]['level']] > ($dun_exp[$this->info['dungeon']] + $this->users[$i]['battle_exp'])) { // Если опыта недостаточно, для достижения лимита. $dun_exp[$this->info['dungeon']] += $this->users[$i]['battle_exp']; } else { $this->users[$i]['battle_exp'] = 0; } } else { // В любой непонятной ситуцаии. $this->users[$i]['battle_exp'] = 0; } if ($this->users[$i]['battle_exp'] > 0 && isset($dun_exp[$this->info['dungeon']]) && $dun_exp[$this->info['dungeon']] > 0) { $dunexp = []; foreach ($dun_exp as $key => $val) { $dunexp[$key] = $key . '=' . $val; // текущий лимит опыта в подземке } $dun_exp = implode(",", $dunexp); mysql_query( 'UPDATE `rep` SET `dungeonexp` = "' . $dun_exp . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); unset($dunexp, $dun_exp); } unset($dun_limitForLevel); } $sinf = ''; if (Config::get('exp_mega')) { $this->users[$i]['battle_exp'] += floor( $this->users[$i]['battle_exp'] / 100 * Config::get('exp_mega_val')[$this->users[$i]['level']] ); } if ($this->info['team_win'] == 0 && $this->info['type'] != 564) { if ($this->users[$i]['level'] <= 1) { $this->users[$i]['battle_exp'] = floor($this->users[$i]['battle_exp'] * 0.50); } else { $this->users[$i]['battle_exp'] = ceil($this->users[$i]['battle_exp'] * 0.10); } $this->users[$i]['nich'] += 1; } elseif ($this->users[$i]['team'] == $this->info['team_win'] && $this->info['type'] != 564) { $gm[$i] = $this->info['money']; $gms[$i] = $this->info['money3']; $this->users[$i]['win'] += 1; $act01 = 1; } elseif ($this->info['type'] != 564) { if ($this->users[$i]['level'] <= 1) { $this->users[$i]['battle_exp'] = ceil($this->users[$i]['battle_exp'] * 0.33); } else { $this->users[$i]['battle_exp'] = ceil($this->users[$i]['battle_exp'] * 0.10); } $bm[$i] = $this->info['money']; $bms[$i] = $this->info['money3']; $this->users[$i]['lose'] += 1; $act01 = 2; } //Рассчитываем кол-во выигрышных сумм и кто сколько получил (для екр.) if ($this->info['money3'] > 0 && isset($gms[$i]) && $this->info['type'] != 564) { $mn = [ 'l' => 0, //сколько проигравших игроков 'w' => 0, //сколько выигрывших игроков 'm' => 0, //сумма выигрыша (общая) ]; if ($act01 == 1) { $mn['l'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `battle_users` WHERE `battle` = "' . $this->info['id'] . '" AND `team` != "' . $this->users[$i]['team'] . '" LIMIT 1' ) ); $mn['l'] = $mn['l'][0]; $mn['w'] = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `battle_users` WHERE `battle` = "' . $this->info['id'] . '" AND `team` = "' . $this->users[$i]['team'] . '" LIMIT 1' ) ); $mn['w'] = $mn['w'][0]; $mn['m'] = round(($mn['l'] * $this->info['money3']) / 100 * 87, 2); $gms[$i] = round(($mn['m'] / $mn['w']), 2); } } //заносим данные в БД //Поломка предметов if ($act01 == 1) { //победа if ($this->users[$i]['dnow'] == 0 && $this->users[$i]['hpNow'] < 1) { $lom = 0.05; } } elseif ($act01 == 2) { //поражение $lom = 0.55; } else { //ничья $lom = 0.05; } $nlom = [0 => rand(0, 18), 1 => rand(0, 18), 2 => rand(0, 18), 3 => rand(0, 18)]; if ($this->info['type'] == 564) { $lom = 0; } if ($this->stats[$i]['silver'] >= 4) { $lom = 0; } mysql_query( 'UPDATE `items_users` SET `iznosNOW` = `iznosNOW`+' . $lom . ' WHERE `inOdet` < "18" AND `inOdet` > "0" AND `uid` = "' . $this->users[$i]['id'] . '" AND `inOdet`!="0" AND `inOdet`!=' . $nlom[0] . ' AND `inOdet`!=' . $nlom[1] . ' AND `inOdet`!=' . $nlom[2] . ' AND `inOdet`!=' . $nlom[3] . ' LIMIT 18' ); $prc = ''; if ($this->users[$i]['align'] == 2) { $this->users[$i]['battle_exp'] = floor($this->users[$i]['battle_exp'] / 2); } if ($this->users[$i]['animal'] > 0) { $ulan = $u->testAction( '`uid` = "' . $this->users[$i]['id'] . '" AND `vars` = "animal_use' . $this->info['id'] . '" LIMIT 1', 1 ); if (isset($ulan['id']) && $this->users[$i]['team'] == $this->info['team_win'] && $this->users[$i]['level'] > $ulan['vals']) { $a004 = mysql_fetch_array( mysql_query( 'SELECT `max_exp`,`name` FROM `users_animal` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `id` = "' . $this->users[$i]['animal'] . '" AND `pet_in_cage` = "0" AND `delete` = "0" LIMIT 1' ) ); //33% от опыта переходит зверю, но не более максимума $aexp = (round($this->users[$i]['battle_exp'] / 100 * 33)); if ($aexp > $a004['max_exp']) { $aexp = $a004['max_exp']; } unset($ulan); // $cmsg->setTo($this->users[$i]['login']); $cmsg->setText("Ваш питомец «{$a004['name']}» получил опыт: $aexp"); $chat->sendMsg($cmsg); // $upd = mysql_query( 'UPDATE `users_animal` SET `exp` = `exp` + ' . $aexp . ' WHERE `id` = "' . $this->users[$i]['animal'] . '" AND `level` < ' . $this->users[$i]['level'] . ' LIMIT 1' ); if ($upd) { $this->users[$i]['battle_exp'] = round($this->users[$i]['battle_exp'] / 100 * 67); $this->info['addExp'] -= 33.333; } } } $prsusers = mysql_fetch_array( mysql_query( 'SELECT SUM(`price1`) FROM `battle_users` WHERE `battle` = "' . $this->info['id'] . '" LIMIT 1' ) ); $btlstatus = $this->typeBattle($prsusers[0]); if ($this->info['smert'] == 1) { $btlstatus = [150, 150, 'Жесточайшее Сражение', 'Жесточайшее Сражение']; } // if ($this->stats[$i]['clanpos'] > 0 && ($this->stats[$i]['clanpos'] == 1 || $this->stats[$i]['clanpos'] == 2 || $this->stats[$i]['clanpos'] == 3)) { $this->info['addExp'] += 0; } unset($r1); //Статусная битва if ($btlstatus[0] > 0) { if ($this->info['type'] == 99) { $this->info['addExp'] += $btlstatus[1]; } else { $this->info['addExp'] += $btlstatus[0]; } } if ($this->users[$i]['align'] == 2 || $this->users[$i]['haos'] > time()) { $this->stats[$i]['exp'] = -($this->info['addExp'] + 50); } if ($this->info['addExp'] + $this->stats[$i]['exp'] != 0) { $prc = ' (' . (100 + $this->info['addExp'] + $this->stats[$i]['exp']) . '%)'; } if ($this->info['money'] > 0) { if (isset($gm[$i])) { $prc .= ' Вы выйграли ' . $gm[$i] . ' кр. за этот бой.'; Delo::add( 4, 'System.battle', $this->users[$i]['id'], '"System.battle": Персонаж выйграл ' . $gm[$i] . ' кр. (В бою №' . $this->info['id'] . ').', ); $this->users[$i]['money'] += $gm[$i]; } elseif (isset($bm[$i])) { $prc .= ' Вы заплатили ' . $bm[$i] . ' кр. за этот бой.'; Delo::add( 4, 'System.battle', $this->users[$i]['id'], '"System.battle": Персонаж проиграл ' . $gm[$i] . ' кр. (В бою №' . $this->info['id'] . ').', ); $this->users[$i]['money'] -= $bm[$i]; } } if (Config::get('money_haot') && $this->users[$i]['exp'] <= 200000000) { if ($act01 == 1 && $this->info['razdel'] == 5 && $this->users[$i]['level'] >= 8) { //Сколько нужно опыта набить $trexp = [ 8 => 1200, 9 => 3000, 10 => 4500, 11 => 12000, 12 => 20000, 13 => 30000, 14 => 30000, 15 => 30000, 16 => 30000, 17 => 30000, 18 => 30000, 19 => 30000, 20 => 30000, 21 => 30000, ]; $trexp = $trexp[$this->users[$i]['level']]; //Какая цена фулла должна быть $trmn = [ 8 => 1000, 9 => 3000, 10 => 2500, 11 => 3000, 12 => 3000, 13 => 3000, 14 => 3000, 15 => 3000, 16 => 3000, 17 => 3000, 18 => 3000, 19 => 3000, 20 => 3000, 21 => 3000, ]; $trmn = $trmn[$this->users[$i]['level']]; //Сколько екр дается $admn = [ 8 => 0.05, //0.05 9 => 0.065, //0.065 10 => 0.075, //0.075 11 => 0.085, //0.085 12 => 0.1, //0.1 13 => 0.1, 14 => 0.1, 15 => 0.1, 16 => 0.1, 17 => 0.1, 18 => 0.1, 19 => 0.1, 20 => 0.1, 21 => 0.1, ]; $admn = $admn[$this->users[$i]['level']]; if (Config::get('m') >= 6 && Config::get('m') <= 8) { //Летний период if (Config::get('w') == 0 || Config::get('w') == 5 || Config::get('w') == 6) { //Выходные дни $admn = $admn * 2; } } elseif (Config::get('w') == 0 || Config::get('w') == 5 || Config::get('w') == 6) { //Выходные дни $admn = $admn * 2; } if ($this->users[$i]['battle_exp'] < $trexp) { $prc .= ', Награда 0 ЕКР за этот бой (Мало опыта набили).'; } elseif ($admn > 0) { if ($this->info['type'] != 33) { $prc .= ', Награда ' . $admn . ' ЕКР за этот бой.'; } Delo::add( 4, 'System.battle', $this->users[$i]['id'], '"System.battle": Персонаж получил ' . $admn . ' ЕКР (В бою №' . $this->info['id'] . ').', ); $this->users[$i]['money2'] += $admn; } } } if ($this->info['money3'] > 0) { if (isset($gms[$i])) { $prc .= ' Вы выйграли ' . $gms[$i] . ' $. за этот бой.'; Delo::add( 4, 'System.battle', $this->users[$i]['id'], '"System.battle": Персонаж выйграл ' . $gms[$i] . ' $. (В бою №' . $this->info['id'] . ').', ); $this->users[$i]['money3'] += $gms[$i]; mysql_query( 'UPDATE `users` SET `money3` = `money3` + "' . $gms[$i] . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); } elseif (isset($bms[$i])) { $prc .= ' Вы заплатили ' . $bms[$i] . ' $. за этот бой.'; Delo::add( 4, 'System.battle', $this->users[$i]['id'], '"System.battle": Персонаж проиграл ' . $gms[$i] . ' $. (В бою №' . $this->info['id'] . ').', ); $this->users[$i]['money3'] -= $bms[$i]; mysql_query( 'UPDATE `users` SET `money3` = `money3` - "' . $bms[$i] . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); } } $lime = [ 8 => 18000, 9 => 28000, 10 => 84000, 11 => 100, 12 => 100, 13 => 100, 14 => 100, 15 => 100, 16 => 100, 17 => 100, 18 => 100, 19 => 100, 20 => 100, 21 => 100, ]; if ($this->users[$i]['level'] < 8) { $lime = 5400; } else { $lime = $lime[$this->users[$i]['level']]; } if ($this->stats[$i]['silver'] >= 5) { $lime += round($lime); } if ($this->users[$i]['stopexp'] == 1) { $lime = 0; $this->users[$i]['battle_exp'] = 0; } if ($lime < $this->users[$i]['battle_exp'] && Config::get('limitedexp')) { $this->users[$i]['battle_exp'] = $lime; } unset($lime); if ($btlstatus[0] > 0) { if ($this->info['type'] == 99) { $prc .= ' (' . $btlstatus[3] . ')'; } else { $prc .= ' (' . $btlstatus[2] . ')'; } } if ($this->info['dungeon'] == 1 && $this->users[$i]['team'] == $this->info['team_win']) { //канализация лимит $rep = mysql_fetch_array( mysql_query( 'SELECT `dl1`,`id` FROM `rep` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); if ($rep['dl' . $this->info['dungeon']] > 0) { $this->users[$i]['battle_exp'] += 3 * count($this->users); if ($rep['dl' . $this->info['dungeon']] > $this->users[$i]['battle_exp']) { $rep['dl' . $this->info['dungeon']] -= $this->users[$i]['battle_exp']; } else { $this->users[$i]['battle_exp'] = $rep['dl' . $this->info['dungeon']]; $rep['dl' . $this->info['dungeon']] = 0; } mysql_query( 'UPDATE `rep` SET `dl' . $this->info['dungeon'] . '` = "' . $rep['dl' . $this->info['dungeon']] . '" WHERE `id` = "' . $rep['id'] . '" LIMIT 1' ); } else { $this->users[$i]['battle_exp'] = 0; } } if ($this->users[$i]['battle_exp'] < 1) { $this->users[$i]['battle_exp'] = 0; } if ($this->users[$i]['battle_exp'] < 1 && $this->users[$i]['twink'] == 0) { if ($this->info['money'] == 0 && $this->info['money3'] == 0 && $this->info['kingfight'] == 0 && (!isset($admnb) || $admnb == 0)) { $prc = ''; } } if ($this->user[$i]['host_reg'] == 'real_bot_user') { $this->users[$i]['battle_exp'] = round($this->users[$i]['battle_exp'] / 3); } if ($sinf != '') { $sinf = ' ( ' . $sinf . ' )'; } //--------------Лимит 8-9-------------- if ($this->users[$i]['level'] == 8 && $this->users[$i]['battle_exp'] >= 23000) { $this->users[$i]['battle_exp'] = 23000; } if ($this->users[$i]['level'] == 9 && $this->users[$i]['battle_exp'] >= 31000) { $this->users[$i]['battle_exp'] = 31000; } if ($this->users[$i]['level'] == 10 && $this->users[$i]['battle_exp'] >= 52000) { $this->users[$i]['battle_exp'] = 52000; } if ($this->users[$i]['level'] >= 11 && $this->users[$i]['battle_exp'] >= 75000) { $this->users[$i]['battle_exp'] = 75000; } //------------------------------------- if ($this->info['type'] != 33) { $this->users[$i]['battle_text'] = 'Бой закончен. Всего вами нанесено урона: ' . floor( $this->users[$i]['battle_yron'] ) . ' HP. Получено опыта: ' . (0 + $this->users[$i]['battle_exp']) . '' . $prc . '.' . $sinf; //stats } /*Выпадение зубов в конце боя */ if (Config::get('nolevel')) { $rex95 = substr($this->users[$i]['exp'], -1); if ($this->users[$i]['money4'] < 1000 && $this->users[$i]['exp'] == 12499) { $rex95 = 6; $rex95 = 5; } } else { $rex95 = 5; } //Снижение времени Право на подвиг Титул за победу в хаоте if ($this->info['dungeon'] == 0 && $this->info['razdel'] == 5 && $this->users[$i]['team'] == $this->info['team_win']) { //ТУТ2 StatsModel::addRepexpById($this->users[$i]['id'], 2); //Репутация за поб в хаоте +2 $check = mysql_fetch_array( mysql_query( 'SELECT * FROM `eff_users` WHERE `id_eff` = 478 AND `uid` = "' . $this->users[$i]['id'] . '" AND `delete` = 0 ORDER BY `overType` DESC LIMIT 1;' ) ); if (isset($check['id'])) { $urcheck = 10000; if ($this->users[$i]['level'] == 8) { $urcheck = 3000; } elseif ($this->users[$i]['level'] == 9) { $urcheck = 7000; } elseif ($this->users[$i]['level'] == 10) { $urcheck = 12000; } elseif ($this->users[$i]['level'] >= 11) { $urcheck = 18000; } if ($this->users[$i]['battle_yron'] >= $urcheck) { mysql_query( 'UPDATE `eff_users` SET `timeUse` = `timeUse` - 300 WHERE `id_eff`=478 AND `delete` = 0 AND `uid` =' . $this->users[$i]['id'] . ' LIMIT 1' ); $this->users[$i]['battle_text'] .= ' За победу в хаоте и нанесение урона в ' . $urcheck . ' и более вы получаете -5 мин. к праву на подвиг!'; } } mysql_query( 'UPDATE `users_achiv` SET `vx`= `vx`+1 WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); // } //Награда за клан вар if ($this->info['dungeon'] == 0 && $this->info['type'] == 250 && $this->users[$i]['team'] == $this->info['team_win']) { mysql_query( 'UPDATE `users_achiv` SET `kw`= `kw`+1 WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); if (date('w') == 0 || date('w') == 6 || date('w') == 4) { StatsModel::addRepexpById($this->users[$i]['id'], 25); //Клановые войны(победа) 25 } } //Награда за клан вар if ($this->info['dungeon'] == 0 && $this->info['type'] == 99 && $this->users[$i]['team'] == $this->info['team_win']) { if (date('w') == 0 || date('w') == 6 || date('w') == 5) { StatsModel::addRepexpById($this->users[$i]['id'], 10); //Кровавые войны(победа) 10 } } //Новая выдача на трупожора if ($this->info['dungeon'] == 0 && $this->info['type'] == 500 && $this->users[$i]['team'] == $this->info['team_win'] && $this->users[$i]['no_ip'] != 'trupojor' && $this->users[$i]['bot'] == 0) { if ($this->users[$i]['level'] > 9) { $mid = 903093; } else { $mid = 89489; } $mon = mysql_fetch_array( mysql_query('SELECT * FROM `aaa_monsters` WHERE `uid` = "' . $mid . '" LIMIT 1') ); if ($this->users[$i]['battle_yron'] >= 2000) { $ritem = rand(1, 100); if ($ritem <= 20) { $mon['win_itm'] = '4459@1'; } elseif ($ritem <= 40) { $mon['win_itm'] = '4460@1'; } elseif ($ritem <= 60) { $mon['win_itm'] = '4461@1'; } elseif ($ritem <= 80) { $mon['win_itm'] = '4462@1'; } else { $mon['win_itm'] = '4463@1'; } } elseif ($this->users[$i]['battle_yron'] >= 1500) { $ritem = rand(1, 100); if ($ritem <= 20) { $mon['win_itm'] = '4459@1'; } elseif ($ritem <= 40) { $mon['win_itm'] = '4460@1'; } elseif ($ritem <= 60) { $mon['win_itm'] = '4461@1'; } elseif ($ritem <= 80) { $mon['win_itm'] = '4462@1'; } else { $mon['win_itm'] = '4463@1'; } } elseif ($this->users[$i]['battle_yron'] >= 1000) { $ritem = rand(1, 100); if ($ritem <= 25) { $mon['win_itm'] = '4460@1'; } elseif ($ritem <= 50) { $mon['win_itm'] = '4461@1'; } elseif ($ritem <= 75) { $mon['win_itm'] = '4462@1'; } else { $mon['win_itm'] = '4463@1'; } } else { $mon['win_itm'] = '4392@1'; $timewait = 0; } if ($this->users[$i]['battle_yron'] > 0) { mysql_query( 'INSERT INTO `eff_users` (`no_Ace`,`id_eff`,`overType`,`uid`,`name`,`data`,`timeUse`) VALUES ("1","478","111","' . $this->users[$i]['id'] . '","Право на подвиг","pravonapodvig=1","' . time( ) . '")' ); } mysql_query( 'INSERT INTO `actions`(`uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val`) VALUES ("' . $this->users[$i]['id'] . '","' . (time( ) - $timewait) . '","capitalcity","' . $this->users[$i]['room'] . '","end_trup"," ","","")' ); mysql_query( 'INSERT INTO `eff_users` (`no_Ace`,`id_eff`,`overType`,`uid`,`name`,`data`,`timeUse`) VALUES ("1","479","112","' . $u->info['id'] . '","Защита от нападения","zashitatk=1","' . time( ) . '")' ); $ritem = rand(1, 1000); if ($ritem == 555) { $mon['win_itm'] = $mon['win_itm'] . ',5022@1'; } // $this->addGlobalItems( $mid, $this->users[$i]['id'], $mon['win_itm'], $mon['win_ico'], 1, $mon['win_money1'], $mon['win_money2'] ); } if ($this->info['razdel'] == 5 || $this->info['razdel'] == 4) { if (date('d.m') == '31.10' || (date('m') == 11 && date('d') < 7)) { //Хэллоуин 4504 $this->users[$i]['battle_text'] .= ' Вы получаете Тыква (x1).'; ItemsModel::addItem(4504, $this->users[$i]['id'], '|sudba=1'); } } //Добавляем воинственность if ($this->info['dungeon'] == 0 && $this->info['razdel'] == 5 && $this->users[$i]['exp'] >= 1500 /*($this->users[$i]['exp'] < 12499 || $this->users[$i]['exp'] > 12500)*/ ) { if ($this->users[$i]['battle_exp'] > 100 * $this->users[$i]['level']) { $rzbvo = $this->users[$i]['battle_exp'] * 6 / 1000; if ($this->users[$i]['level'] == 8) { if ($rzbvo >= 100) { $rzbvo = 100; } } if ($this->users[$i]['level'] == 9) { if ($rzbvo >= 150) { $rzbvo = 150; } } if ($this->users[$i]['level'] == 10) { if ($rzbvo >= 200) { $rzbvo = 200; } } if ($this->users[$i]['level'] == 11) { if ($rzbvo >= 250) { $rzbvo = 250; } } if ($this->users[$i]['level'] == 12) { if ($rzbvo >= 250) { $rzbvo = 250; } } if ($this->info['type'] != 33) { $this->users[$i]['battle_text'] .= ' Вы получили ' . $rzbvo . ' воинственности за этот бой.'; } mysql_query( 'UPDATE `rep` SET `rep3` = `rep3` + "' . $rzbvo . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'INSERT INTO `actions`(`uid`, `time`, `city`, `room`, `vars`, `ip`, `vals`, `val`) VALUES ("' . $this->users[$i]['id'] . '","' . time( ) . '","capitalcity","' . $this->users[$i]['room'] . '","end_xaot"," ","' . $zadID . '","")' ); } } if ($this->stats[$i]['hpNow'] >= 1) { $this->stats[$i]['test_heal'] = mysql_fetch_array( mysql_query( 'SELECT SUM(`yrn`) FROM `battle_stat` WHERE `uid2` = "' . $this->users[$i]['id'] . '" AND `battle` = "' . $this->info['id'] . '" LIMIT 1' ) ); $this->stats[$i]['test_heal'] = $this->stats[$i]['test_heal'][0]; $this->stats[$i]['test_start'] = mysql_fetch_array( mysql_query( 'SELECT `hpStart` FROM `battle_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `battle` = "' . $this->info['id'] . '" LIMIT 1' ) ); $this->stats[$i]['test_start'] = $this->stats[$i]['test_start']['hpStart']; // $this->stats[$i]['hpNow'] = ($this->stats[$i]['test_start'] - $this->stats[$i]['test_heal']); if ($this->stats[$i]['hpNow'] < 1) { $this->stats[$i]['hpNow'] = 1; } } else { $this->stats[$i]['hpNow'] = 0; } unset($this->stats[$i]['test_heal']); $this->users[$i]['last_b'] = $this->info['id']; //stats $this->users[$i]['last_a'] = $act01; $this->users[$i]['battle'] = -1; //users $this->users[$i]['battle_yron'] = 0; //stats $this->users[$i]['exp'] += $this->users[$i]['battle_exp']; //users //Добавляем клан опыт (Все кроме пещер) if ($this->users[$i]['clan'] > 0) { $cpr = 1; if ($this->info['typeBattle'] == 9) { $cpr = 25; } elseif ($this->info['typeBattle'] == 50) { $cpr = 65; } if ($this->stats[$i]['silver'] >= 5) { $cpr = floor($cpr / 100 * 150); } mysql_query( 'UPDATE `clan` SET `exp` = `exp` + "' . round( $this->users[$i]['battle_exp'] / 100 * $cpr ) . '" WHERE `id` = "' . $this->users[$i]['clan'] . '" LIMIT 1' ); } $this->users[$i]['battle_exp'] = 0; //stats if ($this->users[$i]['team'] == $this->info['team_win']) { mysql_query( 'UPDATE `rep` SET `n_capitalcity` = `n_capitalcity` + ' . $this->users[$i]['bn_capitalcity'] . ' ,`n_demonscity` = `n_demonscity` + ' . $this->users[$i]['bn_demonscity'] . ' ,`n_demonscity` = `n_demonscity` + ' . $this->users[$i]['bn_suncity'] . ' WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); } //репутация $this->users[$i]['bn_demonscity'] = 0; $this->users[$i]['bn_capitalcity'] = 0; $this->users[$i]['bn_suncity'] = 0; //завершение эффектов с финишем $spe = mysql_query( 'SELECT * FROM `eff_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `file_finish` != "" AND `v1` = "priem" LIMIT 30' ); while ($ple = mysql_fetch_array($spe)) { if (file_exists('../../_incl_data/class/priems/' . $ple['file_finish'] . '.php')) { require('../../_incl_data/class/priems/' . $ple['file_finish'] . '.php'); } } //обновляем данные mysql_query( 'DELETE FROM `eff_users` WHERE `v1` = "priem" AND `uid` = "' . $this->users[$i]['id'] . '" LIMIT 50' ); if ($dnr == 1) { if ($this->users[$i]['room'] == 370) { $dies = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `dn` = "' . $this->users[$i]['dnow'] . '" AND `vars` = "dielaba" LIMIT 1' ) ); $dies = $dies[0]; mysql_query( 'INSERT INTO `dungeon_actions` (`dn`,`uid`,`x`,`y`,`time`,`vars`,`vals`) VALUES ( "' . $this->users[$i]['dnow'] . '","' . $this->users[$i]['id'] . '","' . $this->users[$i]['x'] . '","' . $this->users[$i]['y'] . '","' . time() . '","dielaba","" )' ); } else { $dies = mysql_fetch_array( mysql_query( 'SELECT COUNT(`id`) FROM `dungeon_actions` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `dn` = "' . $this->users[$i]['dnow'] . '" AND `vars` = "die" LIMIT 1' ) ); $dies = $dies[0]; mysql_query( 'INSERT INTO `dungeon_actions` (`dn`,`uid`,`x`,`y`,`time`,`vars`,`vals`) VALUES ( "' . $this->users[$i]['dnow'] . '","' . $this->users[$i]['id'] . '","' . $this->users[$i]['x'] . '","' . $this->users[$i]['y'] . '","' . time() . '","die","" )' ); } if ($dies < 2 || $this->info['dungeon'] == 15) { // $tshbn = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `items_users` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `delete` = 0 AND `item_id` = "4910" LIMIT 1' ) ); if (isset($tshbn['id'])) { //выбрасываем шайбу mysql_query('DELETE FROM `items_users` WHERE `id` = "' . $tshbn['id'] . '" LIMIT 1'); // mysql_query( 'INSERT INTO `dungeon_obj` ( `name`,`dn`,`x`,`y`,`img`,`delete`,`action`,`for_dn`, `type`,`w`,`h`,`s`,`s2`,`os1`,`os2`,`os3`,`os4`,`type2`,`top`,`left`,`date` ) VALUES ( "Шайба","' . $this->info['dn_id'] . '","' . $this->users[$i]['x'] . '","' . $this->users[$i]['y'] . '","shaiba.png","0","fileact:15/shaiba","0", "0","120","220","0","0","5","8","12","0","0","0","0","{use:\'takeit\',rt1:69,rl1:-47,rt2:74,rl2:126,rt3:76,rl3:140,rt4:80,rl4:150}" )' ); // } //телепортируем в рестарт (координата 0х0) $this->users[$i]['x'] = $this->users[$i]['res_x']; $this->users[$i]['y'] = $this->users[$i]['res_y']; $this->users[$i]['s'] = $this->users[$i]['res_s']; $r_n = mysql_fetch_array( mysql_query( 'SELECT `name` FROM `room` WHERE `id` = "' . (int)$this->users[$i]['room'] . '" LIMIT 1' ) ); if ($this->users[$i]['room'] == 370) { if ($this->users[$i]['sex'] == 0) { $rtxt = '' . $this->users[$i]['login'] . ' трагически погиб и находится в начале лабиринта'; } else { $rtxt = '' . $this->users[$i]['login'] . ' трагически погибла и находится в начале лабиринта'; } } else { if ($this->users[$i]['sex'] == 0) { $rtxt = '' . $this->users[$i]['login'] . ' трагически погиб и находится в комнате "' . $r_n['name'] . '"'; } else { $rtxt = '' . $this->users[$i]['login'] . ' трагически погибла и находится в комнате "' . $r_n['name'] . '"'; } } } elseif ($this->info['dungeon'] == 102) { $nld = ''; $lab = mysql_fetch_array( mysql_query( 'SELECT `id`,`users` FROM `laba_now` WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ) ); if ($lab['users'] < 2) { //Удаляем подземелье mysql_query('DELETE FROM `laba_now` WHERE `id` = "' . $lab['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `laba_map` WHERE `id` = "' . $lab['id'] . '" LIMIT 1'); mysql_query('DELETE FROM `laba_obj` WHERE `lib` = "' . $lab['id'] . '"'); mysql_query('DELETE FROM `laba_act` WHERE `lib` = "' . $lab['id'] . '"'); mysql_query('DELETE FROM `laba_itm` WHERE `lib` = "' . $lab['id'] . '"'); } else { $lab['users']--; mysql_query( 'UPDATE `laba_now` SET `users` = "' . $lab['users'] . '" WHERE `id` = "' . $lab['id'] . '" LIMIT 1' ); } mysql_query( 'UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `users` SET `room` = "369" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); //удаляем все предметы которые пропадают после выхода из пещеры mysql_query( 'UPDATE `items_users` SET `delete` = "' . time( ) . '" WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `delete` < 1234567890 AND `inShop` = "0" AND (`dn_delete` = "1" OR `data` LIKE "%fromlaba=1%")' ); if ($this->users[$i]['login'] != '') { if ($this->users[$i]['sex'] == 0) { $rtxt = '' . $this->users[$i]['login'] . ' трагически погиб без права на воскрешение и покидает подземелье' . $nld; } else { $rtxt = '' . $this->users[$i]['login'] . ' трагически погибла без права на воскрешение и покидает подземелье' . $nld; } } } else { $tinf = mysql_fetch_array( mysql_query( 'SELECT `uid` FROM `dungeon_now` WHERE `id` = "' . $this->info['dn_id'] . '" LIMIT 1' ) ); $nld = ''; if ($tinf['uid'] == $this->users[$i]['id']) { $tinf = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `stats` WHERE `dnow` = "' . $this->info['dn_id'] . '" AND `hpNow` >= 1 LIMIT 1' ) ); if (isset($tinf['id'])) { $tinf = mysql_fetch_array( mysql_query( 'SELECT `id`,`login` FROM `users` WHERE `id` = "' . $tinf['id'] . '" LIMIT 1' ) ); $nld .= ', новым лидером становится "' . $tinf['login'] . '"'; mysql_query( 'UPDATE `dungeon_now` SET `uid` = "' . $tinf['id'] . '" WHERE `id` = "' . $this->info['dn_id'] . '" LIMIT 1' ); } } mysql_query( 'UPDATE `stats` SET `dnow` = "0" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query( 'UPDATE `users` SET `room` = "321" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); //удаляем все предметы которые пропадают после выхода из пещеры mysql_query( 'UPDATE `items_users` SET `delete` = "' . time() . '" WHERE `uid` = "' . $this->users[$i]['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 ($this->users[$i]['sex'] == 0) { $rtxt = '' . $this->users[$i]['login'] . ' трагически погиб без права на воскрешение и покидает подземелье' . $nld; } else { $rtxt = '' . $this->users[$i]['login'] . ' трагически погибла без права на воскрешение и покидает подземелье' . $nld; } } if (!empty($rtxt)) { $cmsg->setDn($this->info['dn_id']); $cmsg->setText($rtxt); $cmsg->setTypeTime(1); $chat->sendMsg($cmsg); } } mysql_query('UPDATE `users` SET `login2` = "" WHERE `battle` = "' . $this->info['id'] . '"'); mysql_query( 'UPDATE `users` SET `login2` = "", `money` = "' . $this->users[$i]['money'] . '", `money2` = "' . $this->users[$i]['money2'] . '",`win` = "' . $this->users[$i]['win'] . '",`lose` = "' . $this->users[$i]['lose'] . '",`nich` = "' . $this->users[$i]['nich'] . '",`battle` = "-1" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); if ($u->info['id'] == $this->users[$i]['id']) { $u->info['battle_text'] = $this->users[$i]['battle_text']; } mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$i]['hpNow'] . '",`mpNow` = "' . $this->stats[$i]['mpNow'] . '",`bn_capitalcity` = 0,`bn_demonscity` = 0,`smena` = 3,`tactic7` = "-100",`x`="' . $this->users[$i]['x'] . '",`y`="' . $this->users[$i]['y'] . '",`priems_z`="0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0",`last_pr`="0",`tactic1`="0",`tactic2`="0",`tactic3`="0",`tactic4`="0",`tactic5`="0",`tactic6`="0.00000000",`tactic7`="10",`exp` = "' . $this->users[$i]['exp'] . '",`battle_exp` = "' . $this->users[$i]['battle_exp'] . '",`battle_text` = "' . $this->users[$i]['battle_text'] . '",`battle_yron` = "0",`enemy` = "0",`last_b`="' . $this->info['id'] . '",`regHP` = "' . time( ) . '",`regMP` = "' . time() . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); if ($this->info['turnir'] == 0) { //пишем в чат $cmsg->setTo($this->users[$i]['login']); $cmsg->setText($this->users[$i]['battle_text']); $chat->sendMsg($cmsg); } else { mysql_query( 'UPDATE `turnirs` SET `winner` = "' . $this->info['team_win'] . '" WHERE `id` = "' . $this->info['turnir'] . '" LIMIT 1' ); } //завершаем сам бой mysql_query( 'UPDATE `battle` SET `time_over` = "' . time() . '",`team_win` = "' . $this->info['team_win'] . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); // Жрать хочет if ($this->users[$i]['animal'] > 0) { $a = mysql_fetch_array( mysql_query( 'SELECT * FROM `users_animal` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `id` = "' . $this->users[$i]['animal'] . '" AND `pet_in_cage` = "0" AND `delete` = "0" LIMIT 1' ) ); if (isset($a['id'])) { if ($a['eda'] < 1) { $cmsg = new ChatMessage(); $cmsg->setRoom($this->users[$i]['room']); $cmsg->setCity($this->users[$i]['city']); $cmsg->setTo($this->users[$i]['login']); $cmsg->setText('' . $a['name'] . ' нуждается в еде...'); $cmsg->setType(6); $chat->sendMsg($cmsg); } } } mysql_query( 'UPDATE `stats` SET `battle_text` = "",`last_b`="0" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); mysql_query('UPDATE `battle_users` SET `finish` = 1 WHERE `uid` = "' . $this->users[$i]['id'] . '"'); $this->saveLogs(); if ($u->info['battle'] != 0 && !isset($u->info['battle_lsto'])) { echo ''; } } } mysql_query('UPDATE `battle` SET `testfinish` = "0" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1'); mysql_query('UNLOCK TABLES'); } /** * Сохраняем лог в архив * @return void */ private function saveLogs() { Db::sql( 'insert into battle_logs_save select id, time, battle, id_hod, text, vars, zona1, zonb1, zona2, zonb2, type from battle_logs where battle = ? and id_hod <= ?', [$this->info['id'], $this->hodID] ); Db::sql('delete from battle_logs where battle = ?', [$this->info['id']]); Db::sql('delete from battle_stat where battle < ?', [$this->info['id'] - 100]); Db::sql('delete from battle_actions where btl = ?', [$this->info['id']]); } //Проверка ухода удара в игрока public function addTravm($uid, $type, $lvl) { $t = $type; if ($t == 1) { $name = 'Легкая травма'; $stat = rand(1, 3); // пока без духовности $timeEnd = rand(1, 3);// время травмы от 1.30 до 6 часов $data = 'add_s' . $stat . '=-' . $lvl; $img = 'eff_travma1.gif'; $v1 = 1; } elseif ($t == 2) { $name = 'Средняя травма'; $stat = rand(1, 3); // пока без духовности $timeEnd = rand(3, 5);// время травмы от 6 до 12 часов $data = 'add_s' . $stat . '=-' . ($lvl * 2); $v1 = 2; $img = 'eff_travma2.gif'; } elseif ($t == 3) { $name = 'Тяжелая травма'; $stat = rand(1, 3); // пока без духовности $timeEnd = rand(5, 7);// время травмы от 12 до 6 часов $data = 'add_s' . $stat . '=-' . ($lvl * 3); $v1 = 3; $img = 'eff_travma3.gif'; } elseif ($t == 4) { $name = 'Неизлечимая травма'; $stat = rand(1, 3); // пока без духовности $timeEnd = 24;// время травмы от 24 часа $data = 'add_s' . $stat . '=-' . ($lvl * 50); $v1 = 4; $img = 'eff_travma4.gif'; } $timeEnd *= 3600; mysql_query( 'INSERT INTO `eff_users` (`overType`,`timeUse`,`hod`,`name`,`data`,`uid`, `id_eff`, `img2`, `timeAce`, `v1`) VALUES ("0","' . time( ) . '","-1","' . $name . '","' . $data . '","' . $uid . '", "4", "' . $img . '","' . $timeEnd . '", "' . $v1 . '")' ); mysql_query( 'INSERT INTO `eff_users` (`overType`,`timeUse`,`hod`,`name`,`data`,`uid`, `id_eff`, `img2`, `timeAce`, `v1`) VALUES ("0","' . time( ) . '","-1","Иммунитет: Защита от травм","add_notravma=1","' . $uid . '", "263", "cure1.gif","21600", "")' ); } //Расчет уворота игроков private function typeBattle(int $x): array { $r = [0, 0, 'Обычный поединок', 'Кровавый Поединок']; if ($x >= 50000 && $x < 100000) { $r = [25, 50, 'Великая Битва', 'Кровавая Битва']; } elseif ($x < 500000) { $r = [50, 75, 'Величайшая Битва', 'Кровавая Резня']; } elseif ($x < 1000000) { $r = [75, 100, 'Историческая Битва', 'Кровавая Сеча']; } elseif ($x < 2500000) { $r = [100, 125, 'Эпохальная Битва', 'Кровавое Побоище']; } elseif ($x >= 5000000) { $r = [150, 150, 'Судный День', 'Судный День']; } return $r; } //Расчет крита игроков private function addGlobalItems($bid, $uid, $itm, $ico, $exp, $cr, $ecr) { global $u; $chat = new Chat(); $cmsg = new ChatMessage(); $cmsg->setType(6); $cmsg->setCity($this->users[$this->uids[$uid]]['city']); $cmsg->setRoom($this->users[$this->uids[$uid]]['room']); $cmsg->setTo($this->users[$this->uids[$uid]]['login']); $cmsg->setColor('#cb0000'); // //Выпадение дропа на ЦП if ($bid == 1008) { //Старый Новый Год $jit = 0; $iit = mysql_fetch_array( mysql_query('SELECT COUNT(*) FROM `users` WHERE `online` > ' . (time() - 120)) ); $iit = floor($iit[0] / 20); $iit = rand(1, $iit); while ($jit < $iit) { if (rand(0, 100) < 50) { $svtk = [ 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1461, 1462, 1463, 4037, 4038, 4039, 4040, 911, 1172, 1173, 2142, 2141, 2143, 2870, 2144, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, ]; $svtk = $svtk[rand(0, count($svtk) - 1)]; if ($svtk == 1000) { mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" ),( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" ),( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" ),( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" ),( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" ),( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "' . $svtk . '", "|nosale=1|srok=259200", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } $jit++; } unset($svtk); } elseif ($bid == 1007) { //Хэллоуин, Тыквоголовый CAPITAL CITY $jit = 0; $iit = mysql_fetch_array( mysql_query('SELECT COUNT(*) FROM `users` WHERE `online` > ' . (time() - 120)) ); $iit = floor($iit[0] / 20); $iit = rand(1, $iit); while ($jit < $iit) { if (rand(0, 100) < 50) { mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4504", "", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } $jit++; } } elseif ($bid == 1006) { //Трупожор CAPITAL CITY if (rand(0, 100) < 10) { mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4451", "srok=86400", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } } elseif ($bid == 1000) { //Трупожор CAPITAL CITY mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4460", "srok=2592000", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } elseif ($bid == 1001) { //Трупожор CAPITAL CITY mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4461", "srok=2592000", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } elseif ($bid == 1002) { //Трупожор CAPITAL CITY mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4462", "srok=2592000", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } elseif ($bid == 1003) { //Трупожор CAPITAL CITY mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4463", "srok=2592000", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } elseif ($bid == 1004) { //Трупожор CAPITAL CITY mysql_query( 'INSERT INTO `items_local` ( `room` , `time`,`item_id`,`data`,`tr_login`,`colvo` ) VALUES ( "' . $this->users[$this->uids[$uid]]['room'] . '", "' . time() . '", "4459", "srok=2592000", "' . $this->users[$this->uids[$uid]]['login'] . '", "1" )' ); } if ($exp >= 0) { //added if, was division by zero. 27.08.22, ins. $this->users[$this->uids[$uid]]['battle_exp'] += round( $this->stats[$this->uids[$bid]]['hpAll'] > 0 ? $exp * $this->users[$this->uids[$uid]]['battle_yron'] / $this->stats[$this->uids[$bid]]['hpAll'] : $exp * $this->users[$this->uids[$uid]]['battle_yron'] ); mysql_query( 'UPDATE `stats` SET `battle_exp` = "' . mysql_real_escape_string( $this->users[$this->uids[$uid]]['battle_exp'] ) . '" WHERE `id` = "' . mysql_real_escape_string($uid) . '" LIMIT 1' ); } // if ($cr != '' && $cr > 0 && $this->stats[$this->uids[$uid]]['hpNow'] > 0) { mysql_query( 'UPDATE `users` SET `money` = (`money` + ' . mysql_real_escape_string( $cr ) . ') WHERE `id` = "' . mysql_real_escape_string($uid) . '" LIMIT 1' ); $cmsg->setText("Вы получили кредиты: $cr кр."); $chat->sendMsg($cmsg); } // if ($ecr != '' && $ecr > 0 && $this->stats[$this->uids[$uid]]['hpNow'] > 0) { $this->users[$this->uids[$uid]]['money2'] += $ecr; $resulttp = mysql_query( 'UPDATE `users` SET `money2` = (`money2` + ' . mysql_real_escape_string( $ecr ) . ') WHERE `id` = "' . $this->users[$this->uids[$uid]]['id'] . '" LIMIT 1' ); if (!$resulttp) { $cmsg->setText("Трупожор был пуст!"); $chat->sendMsg($cmsg); Delo::add( 4, 'System.battle', $this->users[$this->uids[$uid]]['id'], '"System.battle": (В бою трупожор), ПУСТ!!! ', ); } else { $cmsg->setText("Вы получили еврокредиты: $ecr екр."); $chat->sendMsg($cmsg); Delo::add( 4, 'System.battle', $this->users[$this->uids[$uid]]['id'], '"System.battle": Персонаж получил ' . $ecr . ' ЕКР (В бою трупожор), сейчас: ' . $this->users[$this->uids[$uid]]['money2'] . ' ЕКР', ); } } if ($ico != '') { /* 0(тип, 1 - значок, 2 - подвиг)@ 1(время в минутах)@ 2(название картинки)@ 3(название)@ 4(требует остаться в живых 0 или 1, либо игрок умер -1)@ 5(требует набить с ботам урона в % Например 0.001)@ 6(действия например: add_s1=5|add_hpAll=50)@ 7(Требует другой значок, название картинки)@ 8(плюсует значок 0 или 1)@ 9(удаляем прошлый значок 0 or 1) */ $i = 0; $txt = ''; $ico = explode('#', $ico); while ($i < count($ico)) { $ico_e = explode('@', $ico[$i]); if (isset($ico_e[3])) { $add = 1; if ($ico_e[4] == 1 && floor($this->stats[$this->uids[$uid]]['hpNow']) < 1) { $add = 0; } if ($add == 1) { $ins = false; if ($ico_e[8] == 0) { $ins = true; if ($ico_e[9] == 1) { mysql_query( 'DELETE FROM `users_ico` WHERE `uid` = "' . mysql_real_escape_string( $uid ) . '" AND `img` = "' . mysql_real_escape_string($ico_e[2]) . '"' ); } } else { $old_ico = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `users_ico` WHERE `uid` = "' . mysql_real_escape_string( $uid ) . '" AND (`endTime` > "' . time() . '" OR `endTime` = 0) AND `img` = "' . mysql_real_escape_string( $ico_e[2] ) . '" LIMIT 1' ) ); if (!isset($old_ico['id'])) { $ins = true; } else { if ($old_ico['id'] > 0) { $txt .= ', "' . $ico_e[3] . ' (Обновление)"'; mysql_query( 'UPDATE `users_ico` SET `x` = `x` + 1,`endTime` = "' . mysql_real_escape_string( time() + $ico_e[1] * 60 ) . '" WHERE `id` = "' . $old_ico['id'] . '" LIMIT 1' ); } else { $ins = true; } } unset($old_ico); } if ($ins) { if ($ico_e[9] == 1) { mysql_query( 'DELETE FROM `users_ico` WHERE `uid` = "' . mysql_real_escape_string( $uid ) . '" AND `img` = "' . mysql_real_escape_string($ico_e[2]) . '"' ); } mysql_query( 'INSERT INTO `users_ico` (`uid`,`time`,`text`,`img`,`endTime`,`type`,`bonus`) VALUES ( "' . mysql_real_escape_string($uid) . '", "' . time() . '", "' . mysql_real_escape_string($ico_e[3]) . '", "' . mysql_real_escape_string($ico_e[2]) . '", "' . mysql_real_escape_string(time() + $ico_e[1] * 60) . '", "' . mysql_real_escape_string($ico_e[0]) . '", "' . mysql_real_escape_string($ico_e[6]) . '" )' ); $txt .= ', "' . $ico_e[3] . '"'; } } } $i++; } if ($txt != '') { $txt = ltrim($txt, ', '); $cmsg->setText("Вы совершили подвиг: $txt"); $chat->sendMsg($cmsg); } } if ($itm != '') { $i = 0; $txt = ''; $itm = explode(',', $itm); while ($i < count($itm)) { $itm_e = explode('@', $itm[$i]); if ($itm_e[0] > 0) { $j = 0; while ($j < $itm_e[1]) { ItemsModel::addItem($itm_e[0], $uid, '|' . $itm_e[2]); $j++; } if (!isset($this->ainm[$itm_e[0]])) { $this->ainm[$itm_e[0]] = mysql_fetch_array( mysql_query( 'SELECT `id`,`name` FROM `items_main` WHERE `id` = "' . mysql_real_escape_string( $itm_e[0] ) . '" LIMIT 1' ) ); } if (isset($this->ainm[$itm_e[0]]['id'])) { //Добавляем текст о добавлении предмета $txt .= ', ' . $this->ainm[$itm_e[0]]['name'] . ''; if ($itm_e[1] > 1) { $txt .= ' (x' . $itm_e[1] . ')'; } } } $i++; } if ($txt != '') { $txt = ltrim($txt, ', '); $cmsg->setText("Вы получили предметы: $txt"); $chat->sendMsg($cmsg); } } // } //Расчет блока щитом игроков public function priemAddLogFast($u1, $u2, $prm, $text, $hodID, $tm) { $vLog = 'prm=' . $prm . '||time1=' . $tm . '||time2=' . $tm . '||s1=' . $this->users[$this->uids[$u1]]['sex'] . '||s2=' . $this->users[$this->uids[$u2]]['sex'] . '||t2=' . $this->users[$this->uids[$u2]]['team'] . '||t1=' . $this->users[$this->uids[$u1]]['team'] . '||login1=' . $this->users[$this->uids[$u1]]['login2'] . '||login2=' . $this->users[$this->uids[$u2]]['login2']; $mas = [ 'text' => $text, 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => ($this->hodID + $hodID), 'vars' => $vLog, 'type' => 1, ]; $this->add_log($mas); } //Расчет контрудара игроков /** Осторожно! Подключаются файлы!!! * Трогать очень осторожно. Этот шайтан как-то проверяет приёмы на враге * и рассчитывает урон учитывая и эти приёмы тоже. * @param $uid1 * @param $uid2 * @param $priem * @param $yron * @param $profil * @param $stabil * @param $test * @param $inlog * @return float|int|mixed */ public function testYronPriem($uid1, $uid2, $priem, $yron, $profil, $stabil, $test = false, $inlog = 0) { /* profil = { -1 - урон оружием -2 - урон магией 0 - неизвестно 1-4 - профильный оружия 5-12 - профильный магия } stabil - урон не подвержен мощностям и т.д */ //Проверка $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; //Проверяем приемы защиты игрока $u1 на урон игрока $u2 //Получаем приемы и смотрим когда какой действует if (!isset($this->stats[$this->uids[$u2]]['u_priem'])) { $eff = $this->stats[$this->uids[$u2]]['effects']; $j = 0; while ($j <= count($eff)) { if (isset($eff[$j]) && $eff[$j]['id_eff'] == 22 && $eff[$j]['v1'] == 'priem' && $eff[$j]['v2'] > 0) { $this->stats[$this->uids[$u2]]['u_priem'][] = [ $j, $eff[$j]['v2'], $this->prm[$eff[$j]['v2']]['act'], $eff[$j]['id'], $this->prm[$eff[$j]['v2']]['type_of'], $this->prm[$eff[$j]['v2']]['moment'], ]; } $j++; } unset($eff); } //Приемы защиты $j = 0; while ($j <= count($this->stats[$this->uids[$u2]]['u_priem'])) { if ($this->stats[$this->uids[$u2]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u2]]['u_priem'][$j][4] == 4) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php' )) { $pr_momental_this = $u2; require('priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php'); $yron = $fx_moment($u2, $u1, $j, $yron, $profil); unset($fx_moment); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_momental_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_moment)) { $yron = $fx_moment($u1, $u2, $j, $yron, $profil, $inlog); } unset($fx_moment); } } $j++; } //Прочие приемы (влияет на урон от моментальных приемов) $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][7] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_momental_this_seven = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_moment_seven)) { $yron = $fx_moment_seven($u1, $u2, $j, $yron, $profil, $inlog); } unset($fx_moment_seven); } } if ($this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 180) { // Переохлаждение (снижает урон на 10%). Пан или пропал. $x = Db::getValue('select x from eff_users where v2 = 180 and uid = ?', [$u1]); $yron = 0.1 * $x; } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u2]]['u_priem'])) { if ($this->stats[$this->uids[$u2]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u2]]['u_priem'][$j][4] == 8) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php' )) { $pr_momental_this = $u2; require('priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php'); if (isset($fx_moment)) { $yron = $fx_moment($u2, $u1, $j, $yron, $profil, $inlog); } unset($fx_moment); } } if ($this->stats[$this->uids[$u2]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u2]]['u_priem'][$j][4] == 9) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php' )) { $pr_momental_this = $u2; require('priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php'); if (isset($fx_moment)) { $yron = $fx_moment($u2, $u1, $j, $yron, $profil, $inlog); } unset($fx_moment); } } $j++; } if ($this->stats[$this->uids[$u2]]['zaproc'] > 0) { $yron = round($yron - $yron * $this->stats[$this->uids[$uid2]]['zaproc'] / 100); if ($yron < 1) { $yron = 1; } } return $yron; } //Добавляем статистику public function priemYronSave($u1, $u2, $yron, $type) { //$type 0 - урон , 1 - хил $this->testUserInfoBattle($u1); $this->testUserInfoBattle($u2); if (isset($this->uids[$u1])) { if ($this->stats[$this->uids[$u2]]['hpAll'] <= 1000) { $adt6 = round(0.1 * (floor($yron) / $this->stats[$this->uids[$u2]]['hpAll'] * 100), 10); } else { $adt6 = round(0.1 * (floor($yron) / 1000 * 100), 10); } if ($yron > $this->stats[$this->uids[$u2]]['hpNow']) { $yron = $this->stats[$this->uids[$u2]]['hpNow']; } if ($yron > 0) { $this->users[$this->uids[$u1]]['battle_yron'] += $yron; $this->users[$this->uids[$u1]]['battle_exp'] += round( $this->testExp($yron, $this->stats[$this->uids[$u2]]) ); if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic6'] += $adt6; $this->stats[$this->uids[$u1]]['tactic6'] += $adt6; } else { $this->users[$this->uids[$u1]]['tactic6'] += $adt6 / 3; $this->stats[$this->uids[$u1]]['tactic6'] += $adt6 / 3; } } else { $adt6 = 0; } // $this->users[$this->uids[$u2]]['last_hp'] = -$yron; // mysql_query( 'UPDATE `stats` SET `tactic6` = `tactic6` + "' . $adt6 . '", `battle_yron` = `battle_yron` + "' . $yron . '", `battle_exp` = `battle_exp` + "' . round( $this->testExp($yron, $this->stats[$this->uids[$u2]]) ) . '" WHERE `id` = "' . $u1 . '" LIMIT 1' ); // mysql_query( 'UPDATE `stats` SET `last_hp` = "' . $this->users[$this->uids[$u2]]['last_hp'] . '" WHERE `id` = "' . $u2 . '" LIMIT 1' ); } $this->addNewStat( [ 1 => [ 'battle' => $this->info['id'], 'uid1' => $this->users[$this->uids[$u1]]['id'], 'uid2' => $this->users[$this->uids[$u2]]['id'], 'time' => time(), 'type' => 0, 'a' => '10000', 'b' => 0, 'type_a' => 1, 'type_b' => 0, 'ma' => 1, 'mb' => 1, 'yrn' => $yron, 'yrn_krit' => 0, 'tm1' => $this->users[$this->uids[$u1]]['team'], 'tm2' => $this->users[$this->uids[$u2]]['team'], ], ] ); } public function testUserInfoBattle($uid) { global $u; if (!isset($this->uids[$uid])) { //Заносим данные об игроке снова (видимо он погиб и его стерло с инфо) if (!isset($this->uids[$uid])) { $this->uids[$uid] = count($this->users); } $this->users[$this->uids[$uid]] = mysql_fetch_array( mysql_query( 'SELECT `u`.`id`,`u`.`login`,`u`.`login2`,`u`.`online`,`u`.`admin`,`u`.`city`,`u`.`cityreg`,`u`.`align`,`u`.`align_lvl`,`u`.`align_exp`,`u`.`clan`, `u`.`level`,`u`.`money`,`u`.`money3`,`u`.`money2`,`u`.`money4`,`u`.`battle`,`u`.`sex`,`u`.`obraz`,`u`.`win`,`u`.`win_t`, `u`.`lose`,`u`.`lose_t`,`u`.`nich`,`u`.`timeMain`,`u`.`invis`,`u`.`bot_id`,`u`.`animal`,`u`.`type_pers`, `u`.`notrhod`,`u`.`bot_room`,`u`.`inUser`,`u`.`inTurnir`,`u`.`inTurnirnew`,`u`.`stopexp`,`u`.`real`, `st`.* FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`id` = "' . $uid . '" LIMIT 1' ) ); $this->stats[$this->uids[$uid]] = $u->getStats($this->users[$this->uids[$uid]], 0, 0, false, false, true); } } //Добавляем статистику ударов /** * Расчет опыта * @param $y * @param $s2 * @return int */ private function testExp($y, $s2): int { if ($s2['levels'] == 'undefined' || $this->users[$this->uids[$s2['id']]]['pass'] == 'saintlucia') { return 0; } $y = max(0, (int)$y); $expmultiplier = 1; if ($this->users[$this->uids[$s2['id']]]['level'] >= 8) { $expmultiplier = $this->users[$this->uids[$s2['id']]]['level'] - 5; } if ($s2['hpNow'] < 0) { $y = 0; } if ($s2['hpNow'] < $y) { $y = max(0, $s2['hpNow']); } $addExp = $y * $expmultiplier; if ($s2['hpAll'] - $y <= 0) { $addExp = 100; } if ($this->info['razdel'] != 5 && Config::get('exp_limit_many')) { $texp = Db::getValue( 'select count(*) from battle_users as a where uid = ? and battle in (select battle from battle_users where uid = ? and team != a.team and time_enter > unix_timestamp() - 86400)' ); // if ($texp > 5) { $addExp = 0; } elseif ($texp > 4) { $addExp = $addExp * 0.50; } elseif ($texp > 3) { $addExp = $addExp * 0.75; } elseif ($texp > 2) { $addExp = $addExp * 1.00; } elseif ($texp > 1) { $addExp = $addExp * 1.00; } else { $addExp = $addExp * 1.00; } } return (int)round($addExp); } //Добавляем размены в лог public function addNewStat($stat) { if (isset($stat[1])) { mysql_query( 'INSERT INTO `battle_stat` ( `battle`,`uid1`,`uid2`,`time`,`type`,`a`,`b`,`ma`,`mb`,`type_a`,`type_b`,`yrn`,`yrn_krit`,`tm1`,`tm2` ) VALUES ( "' . $this->info['id'] . '", "' . $stat[1]['uid1'] . '", "' . $stat[1]['uid2'] . '", "' . $stat[1]['time'] . '", "' . $stat[1]['type'] . '", "' . $stat[1]['a'] . '", "' . $stat[1]['b'] . '", "' . $stat[1]['ma'] . '", "' . $stat[1]['mb'] . '", "' . $stat[1]['type_a'] . '", "' . $stat[1]['type_b'] . '", "' . $stat[1]['yrn'] . '", "' . $stat[1]['yrn_krit'] . '", "' . $stat[1]['tm1'] . '", "' . $stat[1]['tm2'] . '" )' ); } if (isset($stat[2])) { mysql_query( 'INSERT INTO `battle_stat` ( `battle`,`uid1`,`uid2`,`time`,`type`,`a`,`b`,`ma`,`mb`,`type_a`,`type_b`,`yrn`,`yrn_krit`,`tm1`,`tm2` ) VALUES ( "' . $this->info['id'] . '", "' . $stat[2]['uid1'] . '", "' . $stat[2]['uid2'] . '", "' . $stat[2]['time'] . '", "' . $stat[2]['type'] . '", "' . $stat[2]['a'] . '", "' . $stat[2]['b'] . '", "' . $stat[1]['ma'] . '", "' . $stat[2]['mb'] . '", "' . $stat[2]['type_a'] . '", "' . $stat[2]['type_b'] . '", "' . $stat[2]['yrn'] . '", "' . $stat[2]['yrn_krit'] . '", "' . $stat[2]['tm1'] . '", "' . $stat[2]['tm2'] . '" )' ); } } //Добавляем в лог действия приема public function lookLog(): string { global $u; $hodID = mysql_fetch_array( mysql_query( 'SELECT `id`,`id_hod` FROM `battle_logs` WHERE `battle` = "' . $this->info['id'] . '" ORDER BY `time` ASC LIMIT 1' ) ); if ($hodID['id_hod'] <= 1) { $u->info['alog'] = 0; } $js = ''; $pll = 0; if ($_POST['idlog'] < 1) { $_POST['idlog'] = 0; } $talog = mysql_fetch_array( mysql_query('SELECT `alog` FROM `stats` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1') ); $sp = mysql_query( 'SELECT `id`,`type`,`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zona2`,`zonb1`,`zonb2` FROM `battle_logs` WHERE `battle` = "' . $this->info['id'] . '" AND `id_hod` >= ' . $talog['alog'] . ' ORDER BY `id` DESC' ); if (isset($sp) && $this->info['team_win'] != -1) { $sp = mysql_query( 'SELECT `id`,`type`,`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zona2`,`zonb1`,`zonb2` FROM `battle_logs_save` WHERE `battle` = "' . $this->info['id'] . '" AND `id_hod` >= ' . $talog['alog'] . ' ORDER BY `id` DESC' ); } $jin = 0; $forYou2 = 0; if (is_array($sp)) { while ($pl = mysql_fetch_array($sp)) { if ($jin == 0) { $u->info['alog'] = $pl['id_hod']; } $jin++; $rt = $pl['text']; $pl['vars'] = str_replace('^^^^', 'rvnO', $pl['vars']); $rt = str_replace( '{tm1}', '' . date('H:i', $pl['time']) . '', $rt ); $rt = str_replace( '{tm2}', '' . date('H:i', $pl['time']) . '', $rt ); $rt = str_replace( '{tm3}', '' . date('d.m.Y H:i', $pl['time']) . '', $rt ); $rt = str_replace( '{tm4}', '' . date('d.m.Y H:i', $pl['time']) . '', $rt ); $pl['text'] = $rt; unset($rt); if ($pll < $pl['id']) { $pll = $pl['id']; } $js = 'add_log(' . $pl['id'] . ',' . $forYou2 . ',"' . $pl['text'] . '",' . $pl['id_hod'] . ',0,0,"' . str_replace( '"', '"', $pl['vars'] ) . '");' . $js; } } mysql_query( 'UPDATE `stats` SET `alog`="' . $u->info['alog'] . '" WHERE `id` ="' . $u->info['id'] . '" LIMIT 1' ); $js .= 'id_log=' . $pll . ';'; return $js; } //Считаем контру public function lookmLog(): string { global $u; $js = ''; $pll = 0; if ($this->info['type'] != 9) { $hodID = mysql_fetch_array( mysql_query( 'SELECT `id`,`id_hod` FROM `battle_logs` WHERE `battle` = "' . $this->info['id'] . '" ORDER BY `time` ASC LIMIT 1' ) ); if ($hodID['id_hod'] <= 1) { $u->info['mlog'] = 0; } if (isset($hodID['id']) && $this->info['team_win'] != -1) { $hodID = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `battle_logs_save` WHERE `battle` = "' . $this->info['id'] . '" ORDER BY `time` ASC LIMIT 1' ) ); } $tmlog = mysql_fetch_array( mysql_query('SELECT `mlog` FROM `stats` WHERE `id` = "' . $u->info['id'] . '" LIMIT 1') ); $spm = mysql_query( 'SELECT `id`,`type`,`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zona2`,`zonb1`,`zonb2` FROM `battle_logs` WHERE `battle` = "' . $this->info['id'] . '" AND `id_hod` >= ' . $tmlog['mlog'] . ' AND `vars` LIKE "%' . $u->info['login'] . '%" ORDER BY `id` DESC' ); if (isset($spm) && $this->info['team_win'] != -1) { $spm = mysql_query( 'SELECT `id`,`type`,`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zona2`,`zonb1`,`zonb2` FROM `battle_logs_save` WHERE `battle` = "' . $this->info['id'] . '" AND `id_hod` >= ' . $tmlog['mlog'] . ' AND `vars` LIKE "%' . $u->info['login'] . '%" ORDER BY `id` DESC' ); } $jin = 0; $forYou2 = 0; if (is_array($spm)) { while ($plm = mysql_fetch_array($spm)) { if ($jin == 0) { $u->info['mlog'] = $plm['id_hod']; } $jin++; $rt = $plm['text']; $plm['vars'] = str_replace('^^^^', 'rvnO', $plm['vars']); $rt = str_replace( '{tm1}', '' . date('H:i', $plm['time']) . '', $rt ); $rt = str_replace( '{tm2}', '' . date('H:i', $plm['time']) . '', $rt ); $rt = str_replace( '{tm3}', '' . date('d.m.Y H:i', $plm['time']) . '', $rt ); $rt = str_replace( '{tm4}', '' . date('d.m.Y H:i', $plm['time']) . '', $rt ); $plm['text'] = $rt; unset($rt); if ($pll < $plm['id']) { $pll = $plm['id']; } $js = 'add_mlog(' . $plm['id'] . ',' . $forYou2 . ',"' . $plm['text'] . '",' . $plm['id_hod'] . ',0,0,"' . str_replace( '"', '"', $plm['vars'] ) . '");' . $js; } } $js .= 'id_mlog=' . $pll . ';'; mysql_query( 'UPDATE `stats` SET `mlog`="' . $u->info['mlog'] . '" WHERE `id` ="' . $u->info['id'] . '" LIMIT 1' ); } return $js; } //Расчитываем статы для конкретной зоны атаки public function weaponAt22($item, $st): array { $min = 0; $max = 0; if (isset($item['id'])) { $itm = Helper\Conversion::dataStringToArray($item['data']); //начинаем расчет урона $min = $itm['sv_yron_min'] + $itm['yron_min'] + $st['minAtack']; $max = $itm['sv_yron_max'] + $itm['yron_max'] + $st['maxAtack']; } return [$min, $max]; } //Считаем урон public function autoSmena() { global $u; $ms = []; $ms_ansf = []; $i = 0; $j = 0; $z = 0; while ($i < count($this->users)) { if (isset($this->users[$i]) && $this->users[$i]['id'] != $u->info['id'] && $this->users[$i]['team'] != $u->info['team'] && $this->stats[$i]['hpNow'] > 0 && -($u->info['enemy']) != $this->users[$i]['id']) { if (!isset($this->ga[$u->info['id']][$this->users[$i]['id']])) { $ms[$j] = $this->users[$i]['id']; $j++; } if (isset($this->ga[$this->users[$i]['id']][$u->info['id']])) { $ms_ansf[$z] = $this->users[$i]['id']; $z++; } } $i++; } $msh = []; if ($j == 0 && $z == 0) { $enemydie = 0; if (isset($this->stats[$this->uids[$u->info['enemy']]])) { $u->info['enemy'] = 0; $enemydie = 1; } if ((!isset($this->uids[(-($u->info['enemy']))]) || $this->stats[$this->uids[(-($u->info['enemy']))]]['hpNow'] < 1) && ($u->info['enemy'] < 0 || $enemydie == 1)) { $i = 0; $j = 0; while ($i < count($this->users)) { if (isset($this->users[$i]) && $this->users[$i]['id'] != $u->info['id'] && $this->users[$i]['team'] != $u->info['team'] && $this->stats[$i]['hpNow'] >= 1 && -($u->info['enemy']) != $this->users[$i]['id']) { $ms[$j] = $this->users[$i]['id']; $msh[$ms[$j]] = true; $j++; } $i++; } } } $ms = $ms[rand(0, $j - 1)]; $ms_ansf = $ms_ansf[rand(0, $z - 1)]; if ($z > 0) { $this->smena($ms_ansf, true); } elseif ($j > 0) { if (isset($msh[$ms])) { $this->smena($ms, true, true); } else { $this->smena($ms, true); } } else { if ($u->info['enemy'] < 0) { $smnr5 = $this->smena(-($u->info['enemy']), true); unset($smnr5); } } } //Добавляем новую статистику игрока public function smena($uid, $auto = false, $lastdie = false) { global $u; if ((!$auto && $u->info['smena'] > 0) || $auto) { if ($this->stats[$this->uids[$u->info['id']]]['hpNow'] >= 1) { if (isset($this->uids[$uid]) && $uid != $u->info['id'] && $this->users[$this->uids[$uid]]['team'] != $this->users[$this->uids[$u->info['id']]]['team']) { if (!isset($this->ga[$u->info['id']][$uid]) || $lastdie) { if (ceil($this->stats[$this->uids[$uid]]['hpNow']) >= 1) { //меняем противника if (!$auto) { $u->info['smena']--; } mysql_query( 'UPDATE `stats` SET `enemy` = "' . $uid . '",`smena` = "' . $u->info['smena'] . '" WHERE `id` = "' . $u->info['id'] . '" LIMIT 1' ); $u->info['enemy'] = $uid; $this->users[$this->uids[$uid]]['smena'] = $u->info['smena']; $this->users[$this->uids[$u->info['id']]]['enemy'] = $uid; return 1; } else { return 'Нельзя сменить, противник уже мертв'; } } else { return 'Нельзя сменить на выбранную цель!'; } } else { return 'Нельзя сменить на выбранную цель []'; } } else { return 'Для вас поединок закончен, ожидайте пока завершат другие...'; } } else { return 'У вас закончились смены противника'; } } //Проверяем приемы public function testActions() { global $u; //проверяем удары $m = mysql_query('SELECT * FROM `battle_act` WHERE `battle` = "' . $this->info['id'] . '" ORDER BY `id`'); $i = 0; while ($pl = mysql_fetch_array($m)) { $pluids = mysql_fetch_array( mysql_query( 'SELECT `hpNow` FROM `stats` WHERE (`id` = "' . $pl['uid1'] . '" AND `hpNow` <= 0) OR (`id` = "' . $pl['uid2'] . '" AND `hpNow` <= 0) LIMIT 1' ) ); $pltest = mysql_fetch_array( mysql_query('SELECT * FROM `battle_act` WHERE `id` = "' . $pl['id'] . '" LIMIT 1') ); if (isset($pltest['id'])) { if (isset($pluids['hpNow'])) { mysql_query('DELETE FROM `battle_act` WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); } elseif ($pl['time'] + $this->info['timeout'] > time()) { //удар не пропущен по тайму, просто заносим данные $this->atacks[$pl['id']] = $pl; $this->ga[$pl['uid1']][$pl['uid2']] = $pl['id']; $this->ag[$pl['uid2']][$pl['uid1']] = $pl['id']; //ударили бота и он не ответил if (isset($this->iBots[$pl['uid2']]) && $this->users[$this->uids[$pl['uid2']]]['timeGo'] < time()) { $this->botAtack($pl['uid1'], $pl, 2); } } else { //пропуск по тайму $pl['time'] = time(); if ($pl['a1'] == 0 && $pl['a2'] == 0) { //игрок 1 пропустил по тайму $pl['out1'] = time(); $pl['tout1'] = 1; //игрок 2 пропустил по тайму $pl['out2'] = time(); $pl['tout2'] = 1; } elseif ($pl['a1'] == 0) { //игрок 1 пропустил по тайму $pl['out1'] = time(); $pl['tout1'] = 1; } elseif ($pl['a2'] == 0) { //игрок 2 пропустил по тайму $pl['out2'] = time(); $pl['tout2'] = 1; } //наносим удар по пропуску $this->atacks[$pl['id']] = $pl; $this->startAtack($pl['id']); mysql_query('DELETE FROM `battle_act` WHERE `id` = "' . $pl['id'] . '"'); } } } //тест удара if ($this->uAtc['id'] > 0) { if ($pl['out1'] == 0 && $pl['out2'] == 0) { //Может разменяться только тот кто бил if ($pl['uid1'] == $u->info['id'] || $pl['uid2'] == $u->info['id']) { $this->addNewAtack(); } } else { $this->addNewAtack(); } } //тест, бот делает удары while ($i < count($this->bots)) { $bot = $this->bots[$i]; if (isset($bot) && $this->stats[$this->uids[$bot]]['hpNow'] >= 1 && $this->stats[$this->uids[$bot]]['pass'] != 'saintlucia') { //Тут проверка на бота saintlucia $j = 0; while ($j < count($this->users)) { if ($this->info['razdel'] == 0) { $tnbot = time() + rand(1, 1); } else { $tnbot = time() + rand(1, 2); } if ($this->users[$j]['timeGo'] < time() && $this->users[$this->uids[$bot]]['timeGo'] < time()) { if ($this->users[$j]['hpNow'] >= 1 && $this->users[$this->uids[$bot]]['hpNow'] >= 1 && $this->users[$this->uids[$bot]]['team'] != $this->users[$j]['team']) { if (isset($this->users[$j]) && $this->stats[$j]['hpNow'] >= 1 && $this->stats[$this->uids[$bot]]['hpNow'] >= 1 && !isset($this->ga[$bot][$this->users[$j]['id']]) && !isset($this->ag[$bot][$this->users[$j]['id']]) && $this->users[$j]['id'] != $bot && $this->users[$j]['team'] != $this->users[$this->uids[$bot]]['team']) { if ($this->users[$j]['timeGo'] < time() && $this->users[$this->uids[$bot]]['timeGo'] < time()) { $this->botAtack($this->users[$j]['id'], $bot, 1); mysql_query( 'UPDATE `stats` SET `timeGo` = "' . $tnbot . '" WHERE `id` = "' . $this->users[$this->uids[$bot]]['id'] . '" LIMIT 1' ); } } elseif (isset($this->users[$i]) && $this->users[$i]['bot'] > 0 && $this->stats[$i]['hpNow'] >= 1 && $this->stats[$this->uids[$bot]]['hpNow'] >= 1 && $this->users[$i]['id'] != $bot && $this->users[$i]['team'] != $this->users[$this->uids[$bot]]['team']) { if ($this->users[$j]['timeGo'] < time() && $this->users[$this->uids[$bot]]['timeGo'] < time() && $this->botAct($bot)) { if (!isset($this->ga[$bot][$this->users[$i]['id']]) && $this->users[$this->uids[$bot]]['timeGo'] < time() && !isset($this->ag[$bot][$this->users[$i]['id']])) { $this->botAtack($this->users[$i]['id'], $bot, 1); mysql_query( 'UPDATE `stats` SET `timeGo` = "' . $tnbot . '" WHERE `id` = "' . $this->users[$this->uids[$bot]]['id'] . '" LIMIT 1' ); } elseif (!isset($this->ag[$bot][$this->users[$i]['id']]) && isset($this->ga[$bot][$this->users[$i]['id']]) && $this->users[$this->uids[$bot]]['timeGo'] < time()) { $this->botAtack($bot, $this->users[$i]['id'], 1); mysql_query( 'UPDATE `stats` SET `timeGo` = "' . $tnbot . '" WHERE `id` = "' . $this->users[$this->uids[$bot]]['id'] . '" LIMIT 1' ); } } } else { //Удары между ботами if ($this->users[$j]['timeGo'] < time() && $this->users[$this->uids[$bot]]['timeGo'] < time( ) && $this->users[$j]['hpNow'] >= 1 && $this->users[$this->uids[$bot]]['hpNow'] >= 1) { $this->atacks[$this->ga[$bot][$this->users[$j]['id']]]['a1'] = rand( 1, 5 ) . '' . rand( 1, 5 ) . rand(1, 5) . rand(1, 5) . rand(1, 5); $this->atacks[$this->ga[$bot][$this->users[$j]['id']]]['b1'] = rand(1, 5); $this->atacks[$this->ga[$bot][$this->users[$j]['id']]]['a2'] = rand( 1, 5 ) . '' . rand( 1, 5 ) . rand(1, 5) . rand(1, 5) . rand(1, 5); $this->atacks[$this->ga[$bot][$this->users[$j]['id']]]['b2'] = rand(1, 5); $this->atacks[$this->ag[$bot][$this->users[$j]['id']]]['a1'] = rand( 1, 5 ) . '' . rand( 1, 5 ) . rand(1, 5) . rand(1, 5) . rand(1, 5); $this->atacks[$this->ag[$bot][$this->users[$j]['id']]]['b1'] = rand(1, 5); $this->atacks[$this->ag[$bot][$this->users[$j]['id']]]['a2'] = rand( 1, 5 ) . '' . rand( 1, 5 ) . rand(1, 5) . rand(1, 5) . rand(1, 5); $this->atacks[$this->ag[$bot][$this->users[$j]['id']]]['b2'] = rand(1, 5); if (isset($this->ga[$bot][$this->users[$j]['id']]) && $this->users[$j]['bot'] > 0) { if ($this->users[$j]['timeGo'] < time() && $this->users[$this->uids[$bot]]['timeGo'] < time()) { $tnbot = time() + rand(3, 7); if ($this->info['type'] == 329) { // тестовый бой $tnbot = time() - 1; } $this->startAtack($this->ga[$bot][$this->users[$j]['id']]); $this->users[$this->uids[$bot]]['timeGo'] = $tnbot; mysql_query( 'UPDATE `stats` SET `timeGo` = "' . $tnbot . '" WHERE `id` = "' . $this->users[$this->uids[$bot]]['id'] . '" LIMIT 1' ); } } elseif (isset($this->ag[$bot][$this->users[$j]['id']]) && $this->users[$j]['bot'] > 0) { if ($this->users[$this->uids[$bot]]['timeGo'] < time() && $this->users[$j]['timeGo'] < time()) { $this->startAtack($this->ag[$bot][$this->users[$j]['id']]); $tnbot = time() + rand(3, 7); if ($this->info['type'] == 329) { // тестовый бой $tnbot = time() - 1; } $this->users[$this->uids[$bot]]['timeGo'] = $tnbot; mysql_query( 'UPDATE `stats` SET `timeGo` = "' . $tnbot . '" WHERE `id` = "' . $this->users[$this->uids[$bot]]['id'] . '" LIMIT 1' ); } } } } } else { } } $j++; } } $i++; } } //Приемы которые используются моментально private function botAtack($uid, $pl, $tp) { $test_atack = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `battle_act` WHERE `battle` = "' . $this->info['id'] . '" AND (( `uid1` = "' . $pl . '" AND `uid2` = "' . $uid . '" ) OR ( `uid2` = "' . $pl . '" AND `uid1` = "' . $uid . '" )) LIMIT 1' ) ); if ($tp == 1 && !isset($test_atack['id'])) { $test_uid = mysql_fetch_array( mysql_query('SELECT * FROM `stats` WHERE `id` = "' . $uid . '" AND `hpNow` >= 1 LIMIT 1') ); $test_pl = mysql_fetch_array( mysql_query('SELECT * FROM `stats` WHERE `id` = "' . $pl . '" AND `hpNow` >= 1 LIMIT 1') ); if (isset($test_uid['id']) && isset($test_pl['id']) && $test_uid['id'] != $test_pl['id']) { $a = rand(1, 5) . '' . rand(1, 5) . rand(1, 5) . rand(1, 5) . rand(1, 5); $b = rand(1, 5); mysql_query( 'INSERT INTO `battle_act` (`battle`,`time`,`uid1`,`uid2`,`a1`,`b1`) VALUES ("' . $this->info['id'] . '","' . time() . '","' . $pl . '","' . $uid . '","' . $a . '","' . $b . '")' ); } } elseif ($tp == 2) { //бот отвечает на удар $test_uid = mysql_fetch_array( mysql_query('SELECT * FROM `stats` WHERE `id` = "' . $uid . '" AND `hpNow` >= 1 LIMIT 1') ); $test_pl = mysql_fetch_array( mysql_query('SELECT * FROM `stats` WHERE `id` = "' . $pl['uid2'] . '" AND `hpNow` >= 1 LIMIT 1') ); if (isset($test_uid['id']) && isset($test_pl['id']) && $test_uid['id'] != $test_pl['id']) { $na = []; $a222 = rand(1, 5) . '_' . rand(1, 5) . '_' . rand(1, 5) . '_' . rand(1, 5) . '_' . rand(1, 5); $a = explode('_', $a222); $i = 1; while ($i <= 5) { if (isset($a[$i - 1])) { $a[$i - 1] = intval(round($a[$i - 1])); if ($a[$i - 1] >= 1 && $a[$i - 1] <= 5) { $na['a'][$i] = $a[$i - 1]; } else { $na['a'][$i] = 0; } } $i++; } $na['b'] = rand(1, 5); //Проводим удар $this->atacks[$pl['id']]['a2'] = $a222; $this->atacks[$pl['id']]['b2'] = $na['b']; $this->startAtack($pl['id']); } } } //Приемы которые используются моментально (в конце хода) public function startAtack($id) { global $u, $priem; if (!isset($this->atacks[$id]) || $this->atacks[$id]['lock'] != 0) { return; } //Прием разгадать тактику $i = 1; $j = 2; while ($i <= 2) { $untac = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `eff_users` WHERE `v1` = "priem" AND `v2` = 217 AND `uid` = "' . $this->atacks[$id]['uid' . $i] . '" AND `delete` = 0 LIMIT 1' ) ); $agrs = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `eff_users` WHERE `v1` = "priem" AND `v2` = 211 AND `uid` = "' . $this->atacks[$id]['uid' . $j] . '" AND `delete` = 0 LIMIT 1' ) ); if (isset($untac['id']) && !isset($agrs['id'])) { $pvr['sp'] = mysql_query( 'SELECT `a`.* FROM `eff_users` AS `a` WHERE `a`.`uid` = "' . $this->atacks[$id]['uid' . $j] . '" AND `a`.`delete` = 0 AND `a`.`v1` = "priem" and v2 not in (29, 30, 31, 32, 36, 49, 85, 86, 87, 88, 89, 90, 139, 174, 175, 176, 177, 178, 179, 187, 188, 191, 201, 206, 207, 208, 209, 210, 211, 217, 220, 222, 226, 227, 228, 229, 233, 236, 238, 245, 248, 249, 256, 258, 261, 262, 263, 269, 270, 276, 277, 284, 285, 324, 332, 333, 334, 335) AND `name` NOT LIKE "%Иммунитет%" LIMIT 30' ); while ($pvr['pl'] = mysql_fetch_array($pvr['sp'])) { $pvr['pl']['priem'] = mysql_fetch_array( mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $pvr['pl']['v2'] . '" LIMIT 1') ); if (isset($pvr['pl']['priem']['id']) && $pvr['pl']['priem']['neg'] == 0) { $this->delPriem($pvr['pl'], $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 100); } } } $j--; $i++; } //Восстановление манны 1% за ход if ($this->atacks[$id]['out1'] == 0) { if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['s6'] / 4 < $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['level']) { $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['mpNow'] += floor( $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['level'] + $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['hod_minmana'] ); } else { $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['mpNow'] += floor( $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['s6'] / 4 + $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['hod_minmana'] ); } $this->users[$this->uids[$this->atacks[$id]['uid1']]]['mpNow'] = $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['mpNow']; } // if ($this->atacks[$id]['out2'] == 0) { if ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['s6'] / 4 < $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['level']) { $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['mpNow'] += floor( $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['level'] + $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['hod_minmana'] ); } else { $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['mpNow'] += floor( $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['s6'] / 4 + $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['hod_minmana'] ); } $this->users[$this->uids[$this->atacks[$id]['uid2']]]['mpNow'] = $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['mpNow']; } //Антистаты if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['antm3'] != 0) { $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['m3'] -= round( $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['antm3'] ); } if ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['antm3'] != 0) { $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['m3'] -= round( $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['antm3'] ); } //Расчет количества блоков и противников $this->testZonb($this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']); //Запускаем магию предметов $this->magicItems($this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $id); $this->magicItems($this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $id); // Получаем приемы игроков $this->priemsRazmen($id, $at); $this->priemsRazmenMoment($id, $at); $this->priemsRazmen($id, $at); $at = $this->newRazmen($id); // Тестируем какие еще могут быть варианты при ударе // Уворот, парирование, крит, пробить блок, блок щитом // Блок щитом (если есть щит, конечно) $at = $this->mf2Razmen($at); //крит $at = $this->mf3Razmen($id, $at, $v); //парирование $at = $this->mf4Razmen($id, $at, $v); //блок щитом $at = $this->mf1Razmen($id, $at, $v); //уворот $at = $this->mf5Razmen($id, $at, $v); //контрудар $at = $this->yronRazmen($id, $at); //расчет урона // Проверяем приемы // Получаем приемы игроков $at = $this->priemsTestRazmen($id, $at); // Собираем размен (пересчитываем и расчитываем урон и т.д) $at = $this->priemsRestartRazmen($id, $at); //Повторная проверка приемов (если требуется) //Минусуем поглощенный урон if (count($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['set_pog']) > 0) { $this->testPogB($this->atacks[$id]['uid1'], 1, $id, 1); } if (count($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['set_pog']) > 0) { $this->testPogB($this->atacks[$id]['uid2'], 1, $id, 1); } // Обновляем НР и добавляем тактики $at = $this->updateHealth($id, $at); // Заносим в логи + записываем статистику боя $this->addlogRazmen($id, $at); //Запускаем магию предметов $this->magicItems($this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $id); $this->magicItems($this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $id); //Возращаем зоны блока $this->restZonb($this->atacks[$id]['uid1'], $this->atacks[$id]['uid2']); //обновляем задержки приемов $zd1 = explode('|', $this->users[$this->uids[$this->atacks[$id]['uid1']]]['priems_z']); $zd2 = explode('|', $this->users[$this->uids[$this->atacks[$id]['uid2']]]['priems_z']); $prmos = []; $i5 = 0; while ($i5 < 51) { if (isset($zd1[$i5]) && $zd1[$i5] > 0) { //Если приемы не требуют ход $zd1[$i5] -= 1; } else { $zd1[$i5] = 0; } if (isset($zd2[$i5]) && $zd2[$i5] > 0) { //Если приемы не требуют ход $zd2[$i5] -= 1; } else { $zd2[$i5] = 0; } $i5++; } unset($prmos); if ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy'] == $this->users[$this->uids[$this->atacks[$id]['uid2']]]['id']) { $this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy'] = -$this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy']; } if ($this->users[$this->uids[$this->atacks[$id]['uid2']]]['enemy'] == $this->users[$this->uids[$this->atacks[$id]['uid1']]]['id']) { $this->users[$this->uids[$this->atacks[$id]['uid2']]]['enemy'] = -$this->users[$this->uids[$this->atacks[$id]['uid2']]]['enemy']; } $this->users[$this->uids[$this->atacks[$id]['uid1']]]['priems_z'] = implode('|', $zd1); $this->users[$this->uids[$this->atacks[$id]['uid2']]]['priems_z'] = implode('|', $zd2); if ($this->atacks[$id]['uid1'] == $u->info['id']) { $u->info['priems_z'] = implode('|', $zd1); } elseif ($this->atacks[$id]['uid2'] == $u->info['id']) { $u->info['priems_z'] = implode('|', $zd2); } //Проверяем тактики $i = 1; while ($i <= 6) { if ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] > 25) { $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] = 25; } elseif ($this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] <= 0) { $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic' . $i] = 0; } if ($this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] > 25) { $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] = 25; } elseif ($this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] <= 0) { $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic' . $i] = 0; } $i++; } //Обновляем задержки предметов mysql_query( 'UPDATE `items_users` SET `btl_zd` = `btl_zd` - 1 WHERE (`uid` = "' . $this->atacks[$id]['uid1'] . '" OR `uid` = "' . $this->atacks[$id]['uid2'] . '") AND `btl_zd` > 0 AND `inOdet` > 0 LIMIT 100' ); mysql_query( 'UPDATE `users` SET `notrhod` = "-1" WHERE `id` = "' . $this->atacks[$id]['uid1'] . '" OR `id` = "' . $this->atacks[$id]['uid2'] . '" LIMIT 2' ); //Обновляем задержки пирожков mysql_query( 'UPDATE `pirogi` SET `hod` = `hod` - 1 WHERE `btl` = "' . $this->info['id'] . '" AND (`uid` = "' . $this->atacks[$id]['uid1'] . '" OR `uid` = "' . $this->atacks[$id]['uid2'] . '")' ); mysql_query( 'UPDATE `tactic` SET `hod` = `hod` - 1 WHERE `btl` = "' . $this->info['id'] . '" AND (`uid` = "' . $this->atacks[$id]['uid1'] . '" OR `uid` = "' . $this->atacks[$id]['uid2'] . '")' ); //Тактики mysql_query('DELETE FROM `pirogi` WHERE `btl` = "' . $this->info['id'] . '" AND `hod` < 1'); mysql_query('DELETE FROM `tactic` WHERE `btl` = "' . $this->info['id'] . '" AND `hod` < 1'); //Обновляем задержки пирожков mysql_query( 'UPDATE `spells` SET `hod` = `hod` - 1 WHERE `btl` = "' . $this->info['id'] . '" AND (`uid` = "' . $this->atacks[$id]['uid1'] . '" OR `uid` = "' . $this->atacks[$id]['uid2'] . '")' ); mysql_query('DELETE FROM `spells` WHERE `btl` = "' . $this->info['id'] . '" AND `hod` < 1'); //Обновляем данные в battle_users mysql_query( 'UPDATE `battle_users` SET `hp` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['hpNow'] . '" WHERE `battle` = "' . $this->info['id'] . '" AND `uid` = "' . $this->atacks[$id]['uid1'] . '" LIMIT 1' ); mysql_query( 'UPDATE `battle_users` SET `hp` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['hpNow'] . '" WHERE `battle` = "' . $this->info['id'] . '" AND `uid` = "' . $this->atacks[$id]['uid2'] . '" LIMIT 1' ); //Восстановление манны 25% от мудрости за ход if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $this->save_stats( $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ) ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $this->save_stats( $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ) ); } mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['hpNow'] . '", `mpNow` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['mpNow'] . '", `tactic1` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic1'] . '", `tactic2` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic2'] . '", `tactic3` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic3'] . '", `tactic4` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic4'] . '", `tactic5` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic5'] . '", `tactic6` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic6'] . '", `tactic7` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['tactic7'] . '", `enemy` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy'] . '", `battle_yron` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['battle_yron'] . '", `last_hp` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['last_hp'] . '", `battle_exp` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['battle_exp'] . '", `priems_z` = "' . $this->users[$this->uids[$this->atacks[$id]['uid1']]]['priems_z'] . '" WHERE `id` = "' . $this->atacks[$id]['uid1'] . '" LIMIT 1' ); mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['hpNow'] . '", `mpNow` = "' . $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['mpNow'] . '", `tactic1` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic1'] . '", `tactic2` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic2'] . '", `tactic3` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic3'] . '", `tactic4` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic4'] . '", `tactic5` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic5'] . '", `tactic6` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic6'] . '", `tactic7` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['tactic7'] . '", `enemy` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['enemy'] . '", `battle_yron` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['battle_yron'] . '", `last_hp` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['last_hp'] . '", `battle_exp` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['battle_exp'] . '", `priems_z` = "' . $this->users[$this->uids[$this->atacks[$id]['uid2']]]['priems_z'] . '" WHERE `id` = "' . $this->atacks[$id]['uid2'] . '" LIMIT 1' ); $this->priemsRazmenMomentEnd($id, $at); //Минусуем заряд приема \ эффекта $j = 1; while ($j <= 2) { $eff = $this->stats[$this->uids[$this->atacks[$id]['uid' . $j]]]['effects']; $i = 0; while ($i < count($eff)) { if (isset($eff[$i])) { if ($eff[$i]['timeUse'] == 77 && $eff[$i]['hod'] > -1) { $eff[$i]['hod']--; $eff[$i]['priem'] = mysql_fetch_array( mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') ); if (round($eff[$i]['priem']['minmana'] * $eff[$i]['x']) != 0) { //Отнимаем ману у того кто кастовал $priem->minMana( $eff[$i]['user_use'], round($eff[$i]['priem']['minmana'] * $eff[$i]['x']) ); if ($this->stats[$this->uids[$eff[$i]['user_use']]]['mpNow'] <= 0) { $eff[$i]['hod'] = 0; } } if (strripos($eff[$i]['data'], 'minprocmanahod')) { $pvr = [ 'x1' => 0, 'x2' => 0, 'i' => 0, 'uid' => $eff[$i]['uid'], 'color' => '', 'color2' => '', 'effx' => '', 'x' => $eff[$i]['name'], ]; $pvr['d'] = explode('|', $eff[$i]['data']); while ($pvr['i'] < count($pvr['d'])) { if (isset($pvr['d'][$pvr['i']])) { $pvr['d1'] = explode('=', $pvr['d'][$pvr['i']]); if ($pvr['d1'][0] == 'minprocmanahod') { $pvr['d1'] = explode('x', $pvr['d1'][1]); $pvr['x1'] = $pvr['d1'][0]; $pvr['x2'] = $pvr['d1'][1]; } } $pvr['i']++; } $pvr['mp'] = round( $this->stats[$this->uids[$pvr['uid']]]['mpAll'] / 100 * rand( $pvr['x1'], $pvr['x2'] ) ); $pvr['mpSee'] = 0; $pvr['mpNow'] = floor($this->stats[$this->uids[$pvr['uid']]]['mpNow']); $pvr['mpAll'] = $this->stats[$this->uids[$pvr['uid']]]['mpAll']; $pvr['mpTr'] = $pvr['mpAll'] - $pvr['mpNow']; if ($pvr['mpTr'] > 0) { //Требуется хилл if ($pvr['mpTr'] < $pvr['mp']) { $pvr['mp'] = $pvr['mpTr']; } $pvr['mpSee'] = '+' . $pvr['mp']; $pvr['mpNow'] += $pvr['mp']; } if ($pvr['mpNow'] > $pvr['mpAll']) { $pvr['mpNow'] = $pvr['mpAll']; } elseif ($pvr['mpNow'] < 0) { $pvr['mpNow'] = 0; } if ($pvr['mpSee'] == 0) { $pvr['mpSee'] = '--'; } $btl->stats[$btl->uids[$pvr['uid']]]['mpNow'] = $pvr['mpNow']; $btl->users[$btl->uids[$pvr['uid']]]['mpNow'] = $pvr['mpNow']; mysql_query( 'UPDATE `stats` SET `mpNow` = "' . $btl->stats[$btl->uids[$pvr['uid']]]['mpNow'] . '" WHERE `id` = "' . $pvr['uid'] . '" LIMIT 1' ); $pvr['text'] = $this->addlt(1, 21, $this->users[$this->uids[$pvr['uid']]]['sex'], null); $pvr['text2'] = '{tm1} ' . $pvr['text'] . ' на ' . $pvr['mpSee'] . ' [' . $pvr['mpNow'] . '/' . $pvr['mpAll'] . '] (Мана)'; $this->priemAddLog( $id, 1, 2, $pvr['uid'], 0, '' . $pvr['x'] . '', $pvr['text2'], ($this->hodID + 0) ); unset($pvr); } if (isset($this->rehodeff[$eff[$i]['id']])) { $eff[$i]['hod'] = $this->rehodeff[$eff[$i]['id']]; } if ($eff[$i]['hod'] > 0) { $this->stats[$this->uids[$this->atacks[$id]['uid' . $j]]]['effects']['hod'] = $eff[$i]['hod']; mysql_query( 'UPDATE `eff_users` SET `hod` = "' . $eff[$i]['hod'] . '" WHERE `id` = "' . $eff[$i]['id'] . '" LIMIT 1' ); } else { //удаляем прием if ($eff[$i]['v2'] > 0) { if ($j == 1) { $jn = 2; } else { $jn = 1; } $this->delPriem( $eff[$i], $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 3, $this->atacks[$id]['uid' . $jn] ); } } } elseif ($eff[$i]['timeUse'] == 77 && $eff[$i]['hod'] == -2) { $eff[$i]['priem'] = mysql_fetch_array( mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') ); $priem->hodUsePriem($eff[$i], $eff[$i]['priem']); } else { $eff[$i]['priem'] = mysql_fetch_array( mysql_query('SELECT * FROM `priems` WHERE `id` = "' . $eff[$i]['v2'] . '" LIMIT 1') ); if (isset($eff[$i]['priem']['minmana']) && round( $eff[$i]['priem']['minmana'] * $eff[$i]['x'] ) != 0) { //Отнимаем ману у того кто кастовал $priem->minMana( $eff[$i]['user_use'], round($eff[$i]['priem']['minmana'] * $eff[$i]['x']) ); if ($this->stats[$this->uids[$eff[$i]['user_use']]]['mpNow'] <= 0) { $eff[$i]['hod'] = 0; if (isset($this->rehodeff[$eff[$i]['id']])) { $eff[$i]['hod'] = $this->rehodeff[$eff[$i]['id']]; } if ($eff[$i]['v2'] > 0) { if ($j == 1) { $jn = 2; } else { $jn = 1; } $this->delPriem( $eff[$i], $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 3, $this->atacks[$id]['uid' . $jn] ); } } } elseif ($eff[$i]['timeUse'] > 100 && $eff[$i]['hod'] > -1 && Config::get('effz') > 0) { $eff[$i]['hod']--; if (isset($this->rehodeff[$eff[$i]['id']])) { $eff[$i]['hod'] = $this->rehodeff[$eff[$i]['id']]; } if ($eff[$i]['hod'] > 0) { $this->stats[$this->uids[$this->atacks[$id]['uid' . $j]]]['effects']['hod'] = $eff[$i]['hod']; mysql_query( 'UPDATE `eff_users` SET `hod` = "' . $eff[$i]['hod'] . '" WHERE `id` = "' . $eff[$i]['id'] . '" LIMIT 1' ); } else { //удаляем прием if ($eff[$i]['v2'] > 0) { if ($j == 1) { $jn = 2; } else { $jn = 1; } $this->delPriem( $eff[$i], $this->users[$this->uids[$this->atacks[$id]['uid' . $j]]], 3, $this->atacks[$id]['uid' . $jn] ); } } } } } $i++; } $j++; } //Проверяем if (Config::get('propsk_die') > 0 && $this->info['razdel'] == 0 && $this->info['dn_id'] == 0 && $this->info['izlom'] == 0) { $cn1 = mysql_fetch_array( mysql_query( 'SELECT COUNT(*) FROM `battle_out` WHERE `battle` = "' . $this->info['id'] . '" AND `uid1` = "' . $this->atacks[$id]['uid1'] . '" LIMIT 1' ) ); $cn2 = mysql_fetch_array( mysql_query( 'SELECT COUNT(*) FROM `battle_out` WHERE `battle` = "' . $this->info['id'] . '" AND `uid1` = "' . $this->atacks[$id]['uid2'] . '" LIMIT 1' ) ); if ($cn1[0] > 3) { $pvr['text2'] = '{tm1} Персонаж {u1} был убит из-за большого количества пропусков хода.'; $this->priemAddLog( $id, 1, 2, $this->atacks[$id]['uid1'], 0, '', $pvr['text2'], ($this->hodID + 0) ); unset($pvr); mysql_query( 'UPDATE `stats` SET `hpNow` = 0 WHERE `id` = "' . $this->atacks[$id]['uid1'] . '" LIMIT 1' ); } if ($cn2[0] > Config::get('propsk_die')) { $pvr['text2'] = '{tm1} Персонаж {u1} был убит из-за большого количества пропусков хода.'; $this->priemAddLog( $id, 1, 2, $this->atacks[$id]['uid2'], 0, '', $pvr['text2'], ($this->hodID + 0) ); unset($pvr); mysql_query( 'UPDATE `stats` SET `hpNow` = 0 WHERE `id` = "' . $this->atacks[$id]['uid2'] . '" LIMIT 1' ); } } // //Обновляем текущего противника if ($u->info['id'] == $this->atacks[$id]['uid1']) { $u->info['enemy'] = $this->users[$this->uids[$this->atacks[$id]['uid1']]]['enemy']; } if ($u->info['id'] == $this->atacks[$id]['uid2']) { $u->info['enemy'] = $this->users[$this->uids[$this->atacks[$id]['uid2']]]['enemy']; } //Удаляем размен из базы //ТУТ возможен лаг удаления mysql_query( 'DELETE FROM `battle_act` WHERE ( `uid1` = "' . $this->atacks[$id]['uid1'] . '" AND `uid2` = "' . $this->atacks[$id]['uid2'] . '" ) OR ( `uid2` = "' . $this->atacks[$id]['uid1'] . '" AND `uid1` = "' . $this->atacks[$id]['uid2'] . '" )' ); unset($old_s1, $old_s2); unset($this->ga[$this->atacks[$id]['uid1']][$this->atacks[$id]['uid2']], $this->ga[$this->atacks[$id]['uid2']][$this->atacks[$id]['uid1']]); unset($this->ag[$this->atacks[$id]['uid1']][$this->atacks[$id]['uid2']], $this->ag[$this->atacks[$id]['uid2']][$this->atacks[$id]['uid1']]); unset($this->atacks[$id]); mysql_query('DELETE FROM `battle_act` WHERE `id` = "' . $id . '" LIMIT 1'); } //Используем приемы /** Осторожно! Подключаются файлы!!! * @param $pl * @param $u1 * @param $t * @param $u2 * @param $rznm * @param $k2nm * @param $yrn * @param $yrnt * @return void */ public function delPriem( $pl, $u1, $t = 1, $u2 = false, $rznm = 'Очиститься Кровью', $k2nm = null, $yrn = null, $yrnt = null ) { global $u, $priem; if (!isset($pl['priem']['id']) || isset($this->del_val['eff'][$pl['priem']['id']])) { return; } if ($pl['x'] > 1) { $pl['name'] = $pl['name'] . ' x' . $pl['x']; } if ($pl['timeUse'] == 77) { //завершаем прием mysql_query('DELETE FROM `eff_users` WHERE `id` = "' . $pl['id'] . '" LIMIT 1'); } $vLog = 'time1=' . time() . '||s1=' . $u1['sex'] . '||t1=' . $u1['team'] . '||login1=' . $u1['login']; if (isset($u2['id'])) { $vLog .= '||s2=' . $u2['sex'] . '||t2=' . $u2['team'] . '||login2=' . $u2['login']; } $mas1 = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'text' => '', 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; if ($t == 4) { $mas1['id_hod']++; $t = 2; } if ($t == 1) { $mas1['id_hod']++; if ($pl['priem']['file'] != '0') { if (file_exists('../../_incl_data/class/priems/' . $pl['priem']['file'] . '.php')) { require('priems/' . $pl['priem']['file'] . '.php'); } } elseif ($pl['priem']['file3'] != '0') { if (file_exists('../../_incl_data/class/priems/' . $pl['priem']['file3'] . '.php')) { require('priems/' . $pl['priem']['file3'] . '.php'); } } else { $mas1['text'] = '{tm1} {u1} {1x16x0} прием "' . $pl['name'] . '".'; $this->del_val['eff'][$pl['priem']['id']] = true; } } elseif ($t == 2) { $mas1['text'] = '{tm1} У персонажа {u1} закончилось действие магии "' . $pl['name'] . '".'; } elseif ($t == 99) { $mas1['text'] = '{u1} Снял эфект "' . $pl['name'] . '" с помощью ' . $rznm . ' .'; } else { if ($t == 100) { $mas1['id_hod']++; } $mas1['text'] = '{tm1} Закончилось действие эффекта "' . $pl['name'] . '" для {u1}.'; } if ($pl['priem']['id'] != 24) { $this->add_log($mas1); } $this->stats[$this->uids[$pl['uid']]] = $u->getStats($pl['uid'], 0, 0, false, false, true); } //Повторная проверка приемов private function testZonb($uid, $uid2) { $zba = []; if ($this->stnZb[$uid] == 0) { $zba[1] = $this->stats[$this->uids[$uid]]['zonb']; $this->stnZb[$uid] = $zba[1]; } else { $zba[1] = $this->stnZb[$uid]; } if ($this->stnZb[$uid2] == 0) { $zba[2] = $this->stats[$this->uids[$uid2]]['zonb']; $this->stnZb[$uid] = $zba[2]; } else { $zba[2] = $this->stnZb[$uid2]; } if ($zba[1] > 3) { $zba[1] = 3; } if ($zba[2] > 3) { $zba[2] = 3; } //Блоки игрока 1 if ( ( $this->stats[$this->uids[$uid2]]['weapon1'] == 1 || $this->stats[$this->uids[$uid2]]['weapon2'] == 1 ) && $this->stats[$this->uids[$uid]]['weapon1'] != 1 && $this->stats[$this->uids[$uid]]['weapon2'] != 1 ) { $zba[1] -= 1; } //Блоки игрока 2 if ( ( $this->stats[$this->uids[$uid]]['weapon1'] == 1 || $this->stats[$this->uids[$uid]]['weapon2'] == 1 ) && $this->stats[$this->uids[$uid2]]['weapon1'] != 1 && $this->stats[$this->uids[$uid2]]['weapon2'] != 1 ) { $zba[2] -= 1; } if ($zba[1] < 1) { $zba[1] = 1; } if ($zba[2] < 1) { $zba[2] = 1; } $this->stats[$this->uids[$uid]]['zonb'] = $zba[1]; $this->stats[$this->uids[$uid2]]['zonb'] = $zba[2]; if ( $this->stats[$this->uids[$uid]]['min_zonb'] > 0 && $this->stats[$this->uids[$uid]]['zonb'] < $this->stats[$this->uids[$uid]]['min_zonb'] ) { $this->stats[$this->uids[$uid]]['zonb'] = $this->stats[$this->uids[$uid]]['min_zonb']; } if ( $this->stats[$this->uids[$uid2]]['min_zonb'] > 0 && $this->stats[$this->uids[$uid2]]['zonb'] < $this->stats[$this->uids[$uid2]]['min_zonb'] ) { $this->stats[$this->uids[$uid2]]['zonb'] = $this->stats[$this->uids[$uid2]]['min_zonb']; } } //Проверка действия приема /** Осторожно! Подключаются файлы!!! * @param $uid1 * @param $uid2 * @param $end * @return void */ private function magicItems($uid1, $uid2, $end) { if (!isset($this->stats[$this->uids[$uid1]])) { return; } $i = 0; while ($i < count($this->stats[$this->uids[$uid1]]['items'])) { $itm = $this->stats[$this->uids[$uid1]]['items'][$i]; if (isset($itm['id'])) { $e = Conversion::dataStringToArray($itm['data']); if (isset($e['bm_a1'])) { if ($end > 0) { if (file_exists('../../_incl_data/class/priems/' . $e['bm_a1'] . '.end.php')) { require('../../_incl_data/class/priems/' . $e['bm_a1'] . '.end.php'); } } else { if (file_exists('../../_incl_data/class/priems/' . $e['bm_a1'] . '.php')) { require('../../_incl_data/class/priems/' . $e['bm_a1'] . '.php'); } } } } $i++; } unset($itm); } //Проверка урона приемов public function priemsRazmen($id, $at) { if ($at == 'fast') { $uid1 = $id[0]; $uid2 = $id[1]; } else { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; } $i = 1; while ($i <= 2) { $u1 = $i == 1 ? $uid1 : $uid2; //Получаем приемы и смотрим когда какой действует $eff = $this->stats[$this->uids[$u1]]['effects']; $this->stats[$this->uids[$u1]]['u_priem'] = []; $j = 0; while ($j <= count($eff)) { if (isset($eff[$j]) && $eff[$j]['id_eff'] == 22 && $eff[$j]['v1'] == 'priem' && $eff[$j]['v2'] > 0) { $this->stats[$this->uids[$u1]]['u_priem'][] = [ $j, $eff[$j]['v2'], $this->prm[$eff[$j]['v2']]['act'], $eff[$j]['id'], $this->prm[$eff[$j]['v2']]['type_of'], $this->prm[$eff[$j]['v2']]['moment'], $this->prm[$eff[$j]['v2']]['moment_end'], $this->prm[$eff[$j]['v2']]['type_sec'], ]; } $j++; } $i++; } } /** Осторожно! Подключаются файлы!!! * @param $id * @param $at * @return mixed */ private function priemsRazmenMoment($id, $at) { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if (!isset($at['p']['p_cast'])) { $at['p'] = $at; $at['p']['p_cast'] = true; } //Приемы ухода от удара if (!isset($this->stats[$this->uids[$u2]]['nopryh']) || $this->stats[$this->uids[$u2]]['nopryh'] == 0) { $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][5] == 1) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); $this->stats[$this->uids[$u2]]['nopryh']--; } } $j++; } } //Приемы крита $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][5] == 2) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы атаки $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][5] == 3) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_priem)) { $at = $fx_priem($id, $at, $u1, $j); } unset($fx_priem); } } $j++; } //Приемы защиты $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][5] == 4) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][5] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } $i++; } return $at; } //Наносим удар между игроками private function newRazmen($id, $at = null) { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->atacks[$id]['out1'] == 0) { $at[1] = $this->usersTestAtack($id, $uid1, $uid2); } else { $at[1] = [0]; } if ($this->atacks[$id]['out2'] == 0) { $at[2] = $this->usersTestAtack($id, $uid2, $uid1); } else { $at[2] = [0]; } return $at; } private function usersTestAtack($id, $uid1, $uid2): array { $r = []; $block = [ 0, 0, 0, 0, 0, 0, ]; //Проверка блоков $i = 1; if ($uid1 == $this->atacks[$id]['uid1']) { $a = 2; $j = $this->atacks[$id]['b2']; $atack = [ 0, $this->atacks[$id]['a1'][0], $this->atacks[$id]['a1'][1], $this->atacks[$id]['a1'][2], $this->atacks[$id]['a1'][3], $this->atacks[$id]['a1'][4], ]; } elseif ($uid2 == $this->atacks[$id]['uid1']) { $a = 1; $j = $this->atacks[$id]['b1']; $atack = [ 0, $this->atacks[$id]['a2'][0], $this->atacks[$id]['a2'][1], $this->atacks[$id]['a2'][2], $this->atacks[$id]['a2'][3], $this->atacks[$id]['a2'][4], ]; } if ($this->atacks[$id]['out' . $a] == 0) { while ($i <= $this->stats[$this->uids[$uid2]]['zonb']) { $block[$j] = 1; $j++; if ($j > 5 || $j < 1) { $j = 1; } $i++; } } //Проверка ударов $i = 1; while ($i <= $this->stats[$this->uids[$uid1]]['zona']) { if (!isset($atack[$i]) || $atack[$i] == 0) { $atack[$i] = rand(1, 5); } if ($atack[$i] > 0) { if ($block[$atack[$i]] == 1) { //удар был заблокирован // КУДА БИЛ , ТИП УДАРА $r['atack'][] = [$atack[$i], 3, 0]; } else { //Удар прошел // КУДА БИЛ , ТИП УДАРА $r['atack'][] = [$atack[$i], 1, 0]; } } $i++; } return $r; } /** Критический размен * @param $at * @param $pat * @param $rjd * @return array|false|mixed */ private function mf2Razmen($at, $pat = false, $rjd = 0) { if ($pat) { $pat = $at; $at = $pat['p']; } else { unset($pat); } $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $u1 = $uid2; $u2 = $uid1; } //Расчет крита Атакующего (u1) по Цели (u2) $j = 0; $wp01 = 0; $k01 = 0; if ($rjd > 0) { $j = $rjd - 1; } if (is_array($at[$a]['atack'])) { while ($j < count($at[$a]['atack']) && $j <= 8) { // КУДА БИЛ , ТИП УДАРА if ($k01 == 0 && isset($this->stats[$this->uids[$u1]]['wp3id'])) { //Левая рука $wp01 = 3; $k01 = 1; } else { //Правая рука if (isset($this->stats[$this->uids[$u1]]['wp14id']) && $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp14id']]['type'] != 13) { $wp01 = 14; } else { $wp01 = 3; } $k01 = 0; } $witm_type01 = 0; $witm01 = $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp' . $wp01 . 'id']]; $witm_data01 = Conversion::dataStringToArray($witm01['data']); if ($this->mfs( 1, [ 'u1' => $u1, 'u2' => $u2, 'mf' => $this->stats[$this->uids[$u1]]['m1'] + $witm_data01['sv_m1'], 'amf' => $this->stats[$this->uids[$u1]]['m14'], 'smf' => $this->stats[$this->uids[$u2]]['m2'], 'aamf1' => (int)$this->stats[$this->uids[$u2]]['enemy_am1'], ] ) == 1) { //кританул, гад :) if ($at[$a]['atack'][$j][1] == 3) { //в блок $at[$a]['atack'][$j][1] = 4; //Тут тест } elseif ($at[$a]['atack'][$j][1] != 2 && $at[$a]['atack'][$j][1] != 6 && $at[$a]['atack'][$j][1] != 7 && $at[$a]['atack'][$j][1] != 8) { //обычный крит $at[$a]['atack'][$j][1] = 5; } else { $at[$a]['atack'][$j][1] = 1; } } $j++; } } $i++; } unset($witm01, $witm_type01, $k01, $wp01); if (isset($pat) && $pat) { $pat['p'] = $at; $at = $pat; } return $at; } private function yhod_user($uid1, $uid2, $type) { // 1 - кто бьет . 2 - в кого бьют . тип //Удал летит прямо в противника if ($this->importUser == 0) { $r = $uid1; $rand_user = false; if ($type == 2) { //Случайный персонаж из своей команды (в том числе игрок) $i = 0; while ($i < count($this->users)) { if ($this->users[$i]['team'] == $this->users[$this->uids[$uid2]]['team']) { $rand_user[] = $this->users[$i]['id']; } $i++; } } elseif ($type == 4) { //Случайный персонаж, любой $i = 0; while ($i < count($this->users)) { $rand_user[] = $this->users[$i]['id']; $i++; } } elseif ($type == 5) { //Случайный персонаж, любой (кроме игрока) $i = 0; while ($i < count($this->users)) { if ($this->users[$i]['team'] == $this->users[$this->uids[$uid2]]['team'] && $uid2 != $this->users[$i]['id']) { $rand_user[] = $this->users[$i]['id']; } $i++; } } elseif ($type == 6) { //Случайный персонаж из команды противника $i = 0; while ($i < count($this->users)) { if ($this->users[$i]['team'] != $this->users[$this->uids[$uid2]]['team']) { $rand_user[] = $this->users[$i]['id']; } $i++; } } elseif ($type > 100) { //Удар идет в конкретного игрока if (!isset($this->users[$this->uids[$type]]) || $this->users[$this->uids[$type]]['id'] != $type) { $r = $uid2; } else { $r = $type; } } if ($rand_user && count($rand_user) > 0) { $r = $rand_user[rand(0, (count($rand_user) - 1))]; } $this->importUser = $r; } else { $r = $this->importUser; } return $r; } private function mfs(int $type, array|int $mf): int { $rval = 0; switch ($type) { case 1: //Крит if ($mf['amf'] < 0) { $mf['amf'] = 0; } if ($mf['mf'] < 0) { $mf['mf'] = 0; } if ($mf['mf'] > $mf['smf']) { $rval = 100 - floor(((($mf['smf']) / ($mf['mf'] + 1)) * 100)); } if ($rval < 1) { $rval = 0; } if ($rval > 75) { $rval = 75; } if ($mf['amf'] >= 1) { if ($mf['amf'] > 100) { $mf['amf'] = 100; } if (($mf['amf'] * 100) >= mt_rand(1, 10000)) { $rval = 100; } } break; case 2: if ($mf['mf'] < 0) { $mf['mf'] = 0; } if ($mf['amf'] < 0) { $mf['amf'] = 0; } if ($mf['smf'] < 0) { $mf['smf'] = 0; } if ($mf['asmf'] < 0) { $mf['asmf'] = 0; } if ($mf['mf'] > $mf['smf']) { $rval = 100 - floor(((($mf['smf']) / ($mf['mf'] + 1)) * 100)); //2.5 } if ($rval < 1) { $rval = 0; } if ($rval > 75) { $rval = 75; } if ($mf['asmf'] >= 0) { if ($mf['asmf'] > 100) { $mf['asmf'] = 100; } if ($mf['asmf'] >= rand(1, 100)) { $rval = 0; } } if ($mf['amf'] >= 0) { if ($mf['amf'] > 100) { $mf['amf'] = 100; } if ($mf['amf'] >= rand(1, 100)) { $rval = 100; } } break; case 3: if ($mf[1] < 1) { $mf[1] = 1; } if ($mf[2] < 1) { $mf[2] = 1; } $rval = $mf[1] - $mf[2] / 2; if ($rval > 75) { $rval = 75; } if ($rval < 1) { $rval = 1; } break; case 4: $mf = round($mf * 0.6); if ($mf < 1) { $mf = 0; } if ($mf > 100) { $mf = 100; } $rval = min($mf, 100); //пробой брони break; case 5: if ($mf < 1) { $mf = 0; } $rval = min($mf, 85); //блок щитом break; case 6: //Контрудар if ($mf['a'] > 0) { if ($mf['b'] > 0) { $rval = round($mf['a'] - ($mf['b'] / 2)); } else { $rval = $mf['a']; } } if ($rval < 1) { $rval = 0; } if ($rval > 75) { $rval = 75; } break; } return $this->getChanse($rval) ? 1 : 0; } //Сохранение данные /** Парирование размен * @param $id * @param $at * @param $v * @param $pat * @param $rjd * @return array|false|mixed */ private function mf3Razmen($id, $at, $v, $pat = false, $rjd = 0) { if ($pat) { $pat = $at; $at = $pat['p']; } else { unset($pat); } $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } //Расчет парирования Цели (u2) от Атакующего (u1) $j = 0; if ($rjd > 0) { $j = $rjd - 1; } if (is_array($at[$a]['atack'])) { while ($j < count($at[$a]['atack']) && $j < 8) { // КУДА БИЛ , ТИП УДАРА if ((!isset($this->stats[$this->uids[$u2]]['no_pr1']) || $this->stats[$this->uids[$u2]]['no_pr1'] == 0) && $at[$a]['atack'][$j][2] == $v) { if ($this->mfs( 3, [ 'u1' => $u1, 'u2' => $u2, '1' => $this->stats[$this->uids[$u2]]['m7'], '2' => $this->stats[$this->uids[$u1]]['m7'], ] ) == 1 && $this->atacks[$id]['out' . $b] == 0) { //Парировал, гад :) $this->stats[$this->uids[$u1]]['nopryh'] = floor( 0 + (int)$this->stats[$this->uids[$u1]]['nopryh'] ); if ((!isset($this->stats[$this->uids[$u1]]['nopryh']) || $this->stats[$this->uids[$u1]]['nopryh'] == 0) && $this->stats[$this->uids[$u1]]['nopryh_act'] < 1) { $at[$a]['atack'][$j][1] = 6; $this->stats[$this->uids[$u1]]['nopryh']--; $this->stats[$this->uids[$u1]]['nopryh_act']++; } } } $j++; } } $i++; } if (isset($pat) && $pat) { $pat['p'] = $at; $at = $pat; } return $at; } //Отображение НР private function mf4Razmen($id, $at, $v, $pat = false) { if ($pat) { $pat = $at; $at = $pat['p']; } else { unset($pat); } $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if ($this->stats[$this->uids[$u2]]['sheld1'] > 0) { //Расчет блока щитом Цели (u2) от Атакующего (u1) $j = 0; while ($j < count($at[$a]['atack']) && $j < 8) { // КУДА БИЛ , ТИП УДАРА if ($at[$a]['atack'][$j][2] == $v) { if ($this->mfs( 5, ($this->stats[$this->uids[$u2]]['m8'] / 2 + $this->stats[$this->uids[$u2]]['m18']) ) == 1 && $this->atacks[$id]['out' . $b] == 0) { //блокировал щитом, гад :) $at[$a]['atack'][$j][1] = 7; } } $j++; } } $i++; } if (isset($pat) && $pat) { $pat['p'] = $at; $at = $pat; } return $at; } //Выводим лог боя private function mf1Razmen($id, $at, $v, $pat = false, $rjd = 0) { if ($pat) { $pat = $at; $at = $pat['p']; } else { unset($pat); } $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } //Расчет уворота Цели (u2) от Атакующего (u1) $j = 0; $wp01 = 3; $k01 = 0; if ($rjd > 0) { $j = $rjd - 1; } if (is_array($at[$a]['atack'])) { while ($j < count($at[$a]['atack']) && $j < 8) { // КУДА БИЛ , ТИП УДАРА if ($k01 == 0 && isset($this->stats[$this->uids[$u1]]['wp3id'])) { //Левая рука $wp01 = 3; $k01 = 1; } else { //Правая рука if (isset($this->stats[$this->uids[$u1]]['wp14id']) && $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp14id']]['type'] != 13) { $wp01 = 14; } else { $wp01 = 3; } $k01 = 0; } $witm_type01 = 0; $witm01 = $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp' . $wp01 . 'id']]; $witm_data01 = Conversion::dataStringToArray($witm01['data']); if ($at[$a]['atack'][$j][2] == $v) { $tyv = $this->mfs( 2, [ 'u1' => $u1, 'u2' => $u2, 'mf' => $this->stats[$this->uids[$u2]]['m4'], 'amf' => (int)$this->stats[$this->uids[$u2]]['m15'], 'smf' => ($this->stats[$this->uids[$u1]]['m5'] + $witm_data01['sv_m5']), 'asmf' => $this->stats[$this->uids[$u1]]['m21'], ] ); if ($tyv == 1 && $this->atacks[$id]['out' . $b] == 0) { //увернулся, гад :) $this->stats[$this->uids[$u1]]['nopryh'] = floor( (int)$this->stats[$this->uids[$u1]]['nopryh'] ); if (!isset($this->stats[$this->uids[$u1]]['nopryh']) || $this->stats[$this->uids[$u1]]['nopryh'] <= 0) { $at[$a]['atack'][$j][1] = 2; } else { $this->stats[$this->uids[$u1]]['nopryh']--; $this->stats[$this->uids[$u1]]['nopryh_act']++; } } } $j++; } } $i++; } unset($witm01, $witm_type01, $wp01, $k01); if (isset($pat) && $pat) { $pat['p'] = $at; $at = $pat; } return $at; } //Новый лог Мой Лог private function mf5Razmen($id, $at, $v) { $rjd = 0; $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } //Расчет контрудара Цели (u2) по Атакующему (u1) $j = 0; if ($rjd > 0) { $j = $rjd - 1; } while ($j < count($at[$a]['atack']) && $j < 8) { // КУДА БИЛ , ТИП УДАРА if ($at[$a]['atack'][$j][2] == $v) { if ($at[$a]['atack'][$j][1] == 2) { if ($this->mfs( 6, [ 'u1' => $u1, 'u2' => $u2, 'a' => $this->stats[$this->uids[$u2]]['m6'], 'b' => $this->stats[$this->uids[$u1]]['m6'], ] ) == 1) { //контрудар, гад :) $at[$a]['atack'][$j][1] = 8; $rnd_a = rand(1, 5); $rjd = count($at[$b]['atack']); if (!$this->testRazmenblock1($id, $u2, $u1, $rnd_a)) { $at[$b]['atack'][] = [$rnd_a, 1, 0, 1]; // 3 , 0 , 1 } else { $at[$b]['atack'][] = [$rnd_a, 3, 0, 1]; // 3 , 0 , 1 } $at = $this->contrRestart($id, $at, 1, $rjd); } } } $j++; } $i++; } return $at; } //====================== //Добавляем в лог public function testRazmenblock1($id, $uid1, $uid2, $atack): bool { $r = false; $block = []; $j = 0; //Проверка блоков $i = 1; if ($uid1 == $this->atacks[$id]['uid1']) { $j = $this->atacks[$id]['b2']; } elseif ($uid2 == $this->atacks[$id]['uid1']) { $j = $this->atacks[$id]['b1']; } if ($this->atacks[$id]['out2'] == 0) { while ($i <= $this->stats[$this->uids[$uid2]]['zonb']) { $block[$j] = 1; $j++; if ($j > 5 || $j < 1) { $j = 1; } $i++; } } //Проверка ударов if ($atack > 0) { $r = $block[$atack] == 1; } return $r; } ///Комментатор private function contrRestart($id, $at, $v, $rjd = 0) { //уворот $at = $this->mf1Razmen($id, $at, $v, true, $rjd); //парирование $at = $this->mf3Razmen($id, $at, $v, true, $rjd); //блок щитом (если есть щит, конечно) $at = $this->mf4Razmen($id, $at, $v, true); //крит $at = $this->mf2Razmen($at, true, $rjd); return $this->yronRazmen($id, $at, true, $rjd); } //Расчет типа удара от оружия private function yronRazmen($id, $at, $pat = false, $rjd = 0) { if ($pat) { $pat = $at; $at = $pat['p']; } else { unset($pat); } if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $yhod = [1 => 1, 2 => 0]; } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $yhod = [1 => 0, 2 => 1]; } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $u1 = $uid2; $u2 = $uid1; } $j = 0; $k = 0; if ($rjd > 0) { $j = $rjd - 1; } if (is_array($at[$a]['atack'])) { while ($j < count($at[$a]['atack']) && $j < 8) { if ($k == 0 && isset($this->stats[$this->uids[$u1]]['wp3id'])) { //Левая рука $wp = 3; $k = 1; } else { //Правая рука if (isset($this->stats[$this->uids[$u1]]['wp14id']) && $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp14id']]['type'] != 13) { $wp = 14; } else { $wp = 3; } $k = 0; } $witm = $this->stats[$this->uids[$u1]]['items'][$this->stats[$this->uids[$u1]]['wp' . $wp . 'id']]; $at[$a]['atack'][$j]['wt'] = $witm['type']; $at[$a]['atack'][$j]['yhod'] = $yhod[$a]; if (!isset($at[$a]['atack'][$j]['yron']) && ( $at[$a]['atack'][$j][1] == 1 || $at[$a]['atack'][$j][1] == 4 || $at[$a]['atack'][$j][1] == 5) ) { $at[$a]['atack'][$j]['yron'] = $this->yronGetrazmen($u1, $u2, $wp); if ($at[$a]['atack'][$j][1] == 4) { $at[$a]['atack'][$j]['yron']['y_old'] = $at[$a]['atack'][$j]['yron']['y']; $at[$a]['atack'][$j]['yron']['y'] = round($at[$a]['atack'][$j]['yron']['k'] / 2); } elseif ($at[$a]['atack'][$j][1] == 5) { $at[$a]['atack'][$j]['yron']['y_old'] = $at[$a]['atack'][$j]['yron']['y']; $at[$a]['atack'][$j]['yron']['y'] = $at[$a]['atack'][$j]['yron']['k']; } $at[$a]['atack'][$j]['yron']['2h'] = $witm['2h']; $at[$a]['atack'][$j]['yron']['w'] = $wp; if ($at[$a]['atack'][$j]['yron']['y'] < 1) { $at[$a]['atack'][$j]['yron']['r'] = '--'; } else { $at[$a]['atack'][$j]['yron']['r'] = '-' . $at[$a]['atack'][$j]['yron']['y']; } } else { $at[$a]['atack'][$j]['block'] = $this->yronGetrazmen($u1, $u2, $wp); if ($at[$a]['atack'][$j][1] == 4) { $at[$a]['atack'][$j]['block']['y_old'] = $at[$a]['atack'][$j]['block']['y']; $at[$a]['atack'][$j]['block']['y'] = round($at[$a]['atack'][$j]['block']['k'] / 2); } elseif ($at[$a]['atack'][$j][1] == 5) { $at[$a]['atack'][$j]['block']['y_old'] = $at[$a]['atack'][$j]['block']['y']; $at[$a]['atack'][$j]['block']['y'] = $at[$a]['atack'][$j]['block']['k']; } $at[$a]['atack'][$j]['block']['2h'] = $witm['2h']; $at[$a]['atack'][$j]['block']['w'] = $wp; if ($at[$a]['atack'][$j]['block']['y'] < 1) { $at[$a]['atack'][$j]['block']['r'] = '--'; } else { $at[$a]['atack'][$j]['block']['r'] = '-' . $at[$a]['atack'][$j]['block']['y']; } } $j++; } } $i++; } if (isset($pat) && $pat) { $pat['p'] = $at; $at = $pat; } return $at; } //Расчет урона от оружия public function yronGetrazmen($uid1, $uid2, $wp): array { $r = ['r' => '--',]; /** * Определяем тип урона * Колющий * Рубящий * Режущий * Дробящий */ $witm = 0; $witm_type = 0; if ($wp > 0) { $witm = $this->stats[$this->uids[$uid1]]['items'][$this->stats[$this->uids[$uid1]]['wp' . $wp . 'id']]; $witm_data = Conversion::dataStringToArray($witm['data']); $witm_type = $this->weaponTx($witm); } if ($witm_type == 0 || $witm_type == 12) { $witm_type2 = ''; } else { $witm_type2 = $witm_type; } $r['t'] = $witm_type2; //Увеличиваем параметры от текущего оружия которым бьем $iii = 1; while ($iii <= 7) { if (isset($witm_data['sv_a' . $iii]) && $witm_data['sv_a' . $iii] != 0) { $this->stats[$this->uids[$uid1]]['a' . $iii] += $witm_data['sv_a' . $iii]; } if (isset($witm_data['sv_mg' . $iii]) && $witm_data['sv_mg' . $iii] != 0) { $this->stats[$this->uids[$uid1]]['mg' . $iii] += $witm_data['sv_mg' . $iii]; } $iii++; } $iii = 1; while ($iii <= 4) { if (isset($witm_data['sv_aall']) && $witm_data['sv_aall'] != 0) { $this->stats[$this->uids[$uid1]]['a' . $iii] += $witm_data['sv_aall']; } $iii++; } $iii = 1; while ($iii <= 4) { if (isset($witm_data['sv_mall']) && $witm_data['sv_mall'] != 0) { $this->stats[$this->uids[$uid1]]['mg' . $iii] += $witm_data['sv_mall']; } $iii++; } $iii = 1; while ($iii <= 7) { if (isset($witm_data['sv_m2all']) && $witm_data['sv_m2all'] != 0) { $this->stats[$this->uids[$uid1]]['mg' . $iii] += $witm_data['sv_m2all']; } $iii++; } if (isset($witm_data['sv_m3']) && $witm_data['sv_m3'] != 0) { $this->stats[$this->uids[$uid1]]['m3'] += $witm_data['sv_m3']; } $iii = 1; while ($iii <= 7) { if (isset($witm_data['sv_pa' . $iii]) && $witm_data['sv_pa' . $iii] != 0) { $this->stats[$this->uids[$uid1]]['pa' . $iii] += $witm_data['sv_pa' . $iii] + $witm_data['sv_m10']; } if (isset($witm_data['sv_pm' . $iii]) && $witm_data['sv_pm' . $iii] != 0) { $this->stats[$this->uids[$uid1]]['pm' . $iii] += $witm_data['sv_pm' . $iii] + $witm_data['sv_m11a']; if ($iii < 5) { $this->stats[$this->uids[$uid1]]['pm' . $iii] += $witm_data['sv_m11']; } } $iii++; } //мощность + подавление мощности противником $wAp = 0; if ($witm_type == 12) { //удар кулаком $wAp += $this->stats[$this->uids[$uid1]]['m10']; if ($this->users[$this->uids[$uid1]]['align'] == 7) { $wAp += 15; } } elseif ($witm_type < 5) { $wAp += $this->stats[$this->uids[$uid1]]['pa' . $witm_type]; $wAp -= $this->stats[$this->uids[$uid2]]['antpa' . $witm_type]; } else { $wAp += $this->stats[$this->uids[$uid1]]['m10'] + $this->stats[$this->uids[$uid1]]['pm' . ($witm_type - 4)] + $this->stats[$this->uids[$uid1]]['m11a'] + $witm_data['sv_pm' . ($witm_type - 4)]; $wAp -= $this->stats[$this->uids[$uid2]]['antpm' . ($witm_type - 4)]; } //Пробой брони $proboi = 0; $witm_data['m9'] = $this->stats[$this->uids[$uid1]]['m9']; if (rand(1, 100) < floor($witm_data['m9'] / 2)) { $proboi = floor($witm_data['m9'] / 2); $r['pb'] = 1; } $y = $this->yrn( $this->stats[$this->uids[$uid1]], $this->stats[$this->uids[$uid2]], $this->users[$this->uids[$uid1]], $this->users[$this->uids[$uid2]], $witm_type, $wAp, //мощность урона $proboi, //пробой брони ($witm_data['sv_yron_min'] + $this->stats[$this->uids[$uid1]]['yron_min']), ($witm_data['sv_yron_max'] + $this->stats[$this->uids[$uid1]]['yron_max']), $witm['type'], ); $r['y'] = round(rand($y['min'] + $proboi, $y['max'] + round($proboi / 2))); $r['k'] = round(rand($y['Kmin'] + round($proboi / 4), $y['Kmax'] + round($proboi / 8))); $r['m_y'] = $y['max']; $r['m_k'] = $y['Kmax']; $r['bRND'] = $y['bRND']; $r['w_type'] = $witm_type; //тип от оружия if ($witm['type'] == 18) { $tp = 1; } elseif ($witm['type'] == 19) { $tp = 2; } elseif ($witm['type'] == 20) { $tp = 3; } elseif ($witm['type'] == 21) { $tp = 4; } else { $tp = 0; } if ($tp != $witm_type && $wp > 0) // ТУТ { (int)$r['y'] = round((int)$r['y'] / 3); $r['r'] = round($r['r'] / 3); $r['k'] = round($r['k'] / 3); $r['m_k'] = round($r['m_k'] / 3); $r['m_y'] = round($r['m_y'] / 3); } if (isset($this->stats[$this->uids[$uid2]]['zaproc'])) { $r['y'] = round($r['y'] - $r['y'] * $this->stats[$this->uids[$uid2]]['zaproc'] / 100); (int)$r['r'] = round((int)$r['r'] - (int)$r['r'] * (int)$this->stats[$this->uids[$uid2]]['zaproc'] / 100); $r['k'] = round($r['k'] - $r['k'] * $this->stats[$this->uids[$uid2]]['zaproc'] / 100); $r['m_k'] = round($r['m_k'] - $r['m_k'] * $this->stats[$this->uids[$uid2]]['zaproc'] / 100); $r['m_y'] = round($r['m_y'] - $r['m_y'] * $this->stats[$this->uids[$uid2]]['zaproc'] / 100); if ($r['k'] < 1) { $r['k'] = 2; } } if ($r['y'] < 1) { $r['y'] = 1; } if ($r['r'] >= 0) { $r['r'] = -1; } if ($r['k'] < 1) { $r['k'] = 1; } if ($r['m_k'] < 1) { $r['m_k'] = 1; } if ($r['m_y'] < 1) { $r['m_y'] = 1; } return $r; } //Расчет урона от оружия public function weaponTx($item) { $itm = Conversion::dataStringToArray($item['data']); $t[0]['z'] = 0; $t[0]['t'] = 0; //колящий урон $t[1]['z'] = round(0 + $itm['tya1']); $t[1]['t'] = 1; //рубящий урон $t[2]['z'] = round(0 + $itm['tya2']); $t[2]['t'] = 2; //дробящий урон $t[3]['z'] = round(0 + $itm['tya3']); $t[3]['t'] = 3; //режущий урон $t[4]['z'] = round(0 + $itm['tya4']); $t[4]['t'] = 4; //урон огня $t[5]['z'] = round(0 + $itm['tym1']); $t[5]['t'] = 5; //урон воздуха $t[6]['z'] = round(0 + $itm['tym2']); $t[6]['t'] = 6; //урон воды $t[7]['z'] = round(0 + $itm['tym3']); $t[7]['t'] = 7; //урон земли $t[8]['z'] = round(0 + $itm['tym4']); $t[8]['t'] = 8; //урон света $t[9]['z'] = round(0 + $itm['tym5']); $t[9]['t'] = 9; //урон тьмы $t[10]['z'] = round(0 + $itm['tym6']); $t[10]['t'] = 10; //урон серой магией $t[11]['z'] = round(0 + $itm['tym7']); $t[11]['t'] = 11; $tpt = $t[0]['z']; $tpmin = $t[0]; $tpmax = $t[0]; $i = 1; $ii = 0; while ($i <= 11) { if ($t[$i]['z'] > $tpt) { $tpt = $t[$i]['z']; $tpmax = $t[$i]; $ii = $i; } $i++; } $t[$ii]['z'] = 0; $tpt = $t[0]['z']; $i = 1; while ($i <= 11) { if ($t[$i]['z'] > $tpt) { $tpt = $t[$i]['z']; $tpmin = $t[$i]; } $i++; } $setclass = rand(1, 100); if ($setclass > $tpmax['z']) { $tp = $tpmin['t']; } else { $tp = $tpmax['t']; } return $tp; } //Расчет защиты public function yrn( array $st1, array $st2, array $u1, array $u2, int $type, int $power_yron = 0, float $proboi = 0, int $weapom_min = 0, int $weapom_max = 0, int $wp_type = 0, ): array { $level = $st1['lvl']; $power_krit = round($st1['m3']); if (!isset($type) || $type == '') { $type = 12; } //Параметры для возврвата $r = ['type' => $type]; $p = [ 'B' => [0 => 0, 1 => 0, 'rnd' => false], 'M' => $power_yron, //мощность урона 'K' => $power_krit, //мощность крита 'T' => 1, //Кф. оружия ]; //Расчет типа урона if ($wp_type == 18) { $r['type'] = 1; } elseif ($wp_type == 19) { $r['type'] = 2; } elseif ($wp_type == 20) { $r['type'] = 3; } elseif ($wp_type == 21) { $r['type'] = 4; } /** * (S) - влияние наших статов на профильный урон * 1 Колющий: S = Сила * 0,3 + Ловкость * 0,7 * 2 Рубящий: S = Сила * 0,5 + Ловкость * 0,25 + Интуиция * 0,25 * 3 Дробящий: S = Сила * 1 * 4 Режущий: S = Сила * 0,3 + Интуиция * 0,7 * else кулак/магия */ if ($r['type'] == 1) { $p['S'] = $st1['s1'] * 0.25 + $st1['s2'] * 0.75; $p['U'] = $st1['a1'] * 1.00; //кинжалы } elseif ($r['type'] == 2) { $p['S'] = $st1['s1'] * 1.20; $p['U'] = $st1['a2'] * 1.00; //топоры } elseif ($r['type'] == 3) { $p['S'] = $st1['s1'] * 0.5 + $st1['s4'] * 1.00; $p['U'] = $st1['a3'] * 1.00; //дубины } elseif ($r['type'] == 4) { $p['S'] = $st1['s3'] * 1.00; $p['U'] = $st1['a4'] * 1.00; //мечи } else { $p['S'] = 0; $p['U'] = 0; } $r['bron']['rnd'] = rand($r['bron'][0], $r['bron'][1]); //Остальные расчеты (коэфицент) $p['B'][0] = 2 + $level + $st1['s1'] - round($st1['s1'] / 5); $p['B'][1] = $p['B'][0] + 3; $p['B']['rnd'] = rand($p['B'][0], $p['B'][1]); //Обычный урон if ($r['type'] == 12) { $r['min'] = ($p['B'][0] + $weapom_min) * $p['T'] * (1 + $p['M'] / 100); $r['max'] = ($p['B'][1] + $weapom_max) * $p['T'] * (1 + $p['M'] / 100); } else { $r['min'] = (($p['B'][0] + $p['S'] * 2 + $weapom_min * 2 + $p['U'] * 2) * $p['T']) * (1 + $p['M'] / 100); $r['max'] = (($p['B'][1] + $p['S'] * 2 + $weapom_max * 2 + $p['U'] * 2) * $p['T']) * (1 + $p['M'] / 100); } $r['bRND'] = $p['B']['rnd']; $r['Kmin'] = ceil((2 + ($p['K'] / 100)) * $r['min']); $r['Kmax'] = ceil((2 + ($p['K'] / 100)) * $r['max']); //Расчет брони //для обычного if ($r['type'] < 5 || $r['type'] == 12) { $r['min_abron'] = round($r['min'] * 0.05); $r['max_abron'] = round($r['max'] * 0.05); if ($proboi != 0) { $r['bron']['rndold'] = $r['bron']['rnd']; $r['bron']['rnd'] = 0; } $r['Kmin'] -= $r['bron']['rnd'] * 2; //было умножить на 2 $r['Kmax'] -= $r['bron']['rnd'] * 2; //было умножить на 2 $r['min'] -= $r['bron']['rnd']; //не было деления ни на чо. $r['max'] -= $r['bron']['rnd']; //не было деления ни на чо. } //Расчет защиты (не более 80%) if ($r['type'] < 5 || $r['type'] == 12) { $r['min'] = round($r['min'] / 100 * (100 - $this->zago($st2['za']))); $r['max'] = round($r['max'] / 100 * (100 - $this->zago($st2['za']))); $r['Kmin'] = round($r['Kmin'] / 100 * (100 - $this->zago($st2['za']))); $r['Kmax'] = round($r['Kmax'] / 100 * (100 - $this->zago($st2['za']))); } else { $r['min'] = round($r['min'] / 100 * (100 - $this->zmgo($st2['zm']))); $r['max'] = round($r['max'] / 100 * (100 - $this->zmgo($st2['zm']))); $r['Kmin'] = round($r['Kmin'] / 100 * (100 - $this->zmgo($st2['zm']))); $r['Kmax'] = round($r['Kmax'] / 100 * (100 - $this->zmgo($st2['zm']))); } $r['min'] = round($r['min']); $r['max'] = round($r['max']); $r['Kmin'] = round($r['Kmin']); $r['Kmax'] = round($r['Kmax']); $min_yrn = 0; //% if ($u1['clone'] > 0) { $min_yrn = 75; } $r['min'] -= floor($r['min'] / 100 * $min_yrn); $r['max'] -= floor($r['max'] / 100 * $min_yrn); $r['Kmin'] -= floor($r['Kmin'] / 100 * ($min_yrn)); $r['Kmax'] -= floor($r['Kmax'] / 100 * ($min_yrn)); $r['min_'] -= floor($r['min_'] / 100 * $min_yrn); $r['max_'] -= floor($r['max_'] / 100 * $min_yrn); $r['Kmin_'] -= floor($r['Kmin_'] / 100 * ($min_yrn)); $r['Kmax_'] -= floor($r['Kmax_'] / 100 * ($min_yrn)); $defd = mysql_fetch_array( mysql_query( 'SELECT SUM(`vals`) FROM `battle_actions` WHERE `btl` = "' . $this->info['id'] . '" AND `vars` = "use_defteam' . $u2['team'] . '" LIMIT 1' ) ); if ($defd[0] > 100) { $defd[0] = 100; } $defd = 0 + $defd[0]; $powd = mysql_fetch_array( mysql_query( 'SELECT SUM(`vals`) FROM `battle_actions` WHERE `btl` = "' . $this->info['id'] . '" AND `vars` = "use_powteam' . $u1['team'] . '" LIMIT 1' ) ); if ($powd[0] > 100) { $powd[0] = 100; } $powd = 0 + $powd[0]; $defd = $defd - $powd; $r['min'] -= floor($defd); $r['max'] -= floor($defd); $r['Kmin'] -= floor($defd * 2); $r['Kmax'] -= floor($defd * 2); $r['min_'] -= floor($defd); $r['max_'] -= floor($defd); $r['Kmin_'] -= floor($defd * 2); $r['Kmax_'] -= floor($defd * 2); $r['min'] += $st1['maxAtack']; $r['max'] += $st1['maxAtack']; $r['Kmin'] += $st1['maxAtack'] * 2; $r['Kmin'] += $st1['maxAtack'] * 2; if ($r['min'] < 1) { $r['min'] = 1; } if ($r['max'] < 1) { $r['max'] = 1; } if ($r['Kmin'] < 2) { $r['Kmin'] = 2; } if ($r['Kmax'] < 2) { $r['Kmax'] = 2; } if ($r['Kmin_'] < 2) { $r['Kmin_'] = 2; } if ($r['Kmin_'] < 2) { $r['Kmax_'] = 2; } $r['m_k'] = $r['Kmax']; return $r; } //Расчет защиты (магия) private function zago($v): float { if ($v > 1700) { $v = 1700; } return round((1 - (pow(0.5, ($v / 399.51)))) * 100, 2); } public function zmgo($v) { return (1 - (pow(0.5, ($v / 250)))) * 100; } /** Осторожно! Подключаются файлы!!! * @param $id * @param $at * @return array|mixed */ private function priemsTestRazmen($id, $at) { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if (!isset($at['p']['p_cast'])) { $at['p'] = $at; $at['p']['p_cast'] = true; } //ставка $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 220 || $this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 237 || $this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 286 || $this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 287 || $this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 288 || $this->stats[$this->uids[$u1]]['u_priem'][$j][1] == 213) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы ухода от удара if (!isset($this->stats[$this->uids[$u2]]['nopryh']) || $this->stats[$this->uids[$u2]]['nopryh'] == 0) { $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 1) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); $this->stats[$this->uids[$u2]]['nopryh']--; } } $j++; } } //Приемы крита $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 2) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы атаки $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 3) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_priem)) { $at = $fx_priem($id, $at, $u1, $j); } unset($fx_priem); } } $j++; } //Приемы защиты $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 4) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_priem)) { $at = $fx_priem($id, $at, $u1, $j); } unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_priem)) { $at = $fx_priem($id, $at, $u1, $j); } unset($fx_priem); } } $j++; } $i++; } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if (!isset($at['p']['p_cast'])) { $at['p'] = $at; $at['p']['p_cast'] = true; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 8) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 9) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } $i++; } return $at; } /** Осторожно! Подключаются файлы!!! * @param $id * @param $at * @return mixed */ private function priemsRestartRazmen($id, $at) { if (isset($at['p'])) { //Проверка $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; /* Если возникнут проблемы с приемами, придется переписать алгоритм, сейчас он выглядит так: Цикл 1. Проверяем пользователя Цикл 2 внутри Цикла 1. Проверяем приемы поторые пользователь использовал Придется сделать: Цикл 1. Проверяем пользователя Цикл 2 внутри Цикла 1. Проверяем приемы уворота Цикл 3. Проверяем пользователя Цикл 4 внутри Цикла 3. Проверяем приемы крита и т.д. */ $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if (!isset($at['p']['p_cast'])) { $at['p'] = $at; $at['p']['p_cast'] = true; } //Приемы ухода от удара if (!isset($this->stats[$this->uids[$u2]]['nopryh']) || $this->stats[$this->uids[$u2]]['nopryh'] == 0) { $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 1) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); $this->stats[$this->uids[$u2]]['nopryh']--; } } $j++; } } //Приемы крита $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 2) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы защиты $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 4) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы атаки $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 3) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][4] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u1; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u2]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u2]]['u_priem'][$j][4] == 8) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u2; require('priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u2, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u2]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u2]]['u_priem'][$j][4] == 9) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php' )) { $pr_tested_this = $u2; require('priem/' . $this->stats[$this->uids[$u2]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u2, $j); unset($fx_priem); } } $j++; } $i++; } $at = $at['p']; unset($at['p']); } return $at; } public function testPogB($uid, $yr, $pliid, $test = 0) { $yr2 = $yr; $checktuman = mysql_fetch_array( mysql_query( 'SELECT * FROM `eff_users` WHERE `uid` = "' . $uid . '" AND (`v2` = 273 OR `v2` = 286 OR `v2` = 287 OR `v2` = 288) AND `delete` =0 LIMIT 1' ) ); //проверка на туманный образ if ($yr > 0 && !isset($checktuman['id'])) { global $priem; $i = 0; while ($i < count($this->stats[$this->uids[$uid]]['set_pog2'])) { $j = $this->stats[$this->uids[$uid]]['set_pog2'][$i]; if ($this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['id'] == $pliid || $test == 1) { $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'] = str_replace( 'add_pog2=' . $j['y'], 'add_pog2=$', $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'] ); $dt3 = Conversion::dataStringToArray($this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data']); $dt30 = floor($j['y'] / $yr2 * 100); if ($dt30 < $dt3['add_pog2p']) { $dt3['add_pog2p'] = $dt30; } unset($dt30); if (isset($dt3['add_pog2mp'])) { if ((round( round($yr2 / 100 * (100 - $dt3['add_pog2p'])) * $dt3['add_pog2mp'] )) > $this->stats[$this->uids[$uid]]['mpNow']) { //не хватило маны, считаем сколько хватит % от поглощенного урона $j['yhj'] = $this->stats[$this->uids[$uid]]['mpNow'] / (round( round($yr2 / 100 * (100 - $dt3['add_pog2p'])) * $dt3['add_pog2mp'] )) * 100; $j['yhj'] = floor($j['yhj']); //Сколько % мы можем поглотить $dt3['add_pog2p'] = floor($dt3['add_pog2p'] / 100 * $j['yhj']); } if ($test == 1) { $priem->minMana($uid, round(round($yr2 / 100 * $dt3['add_pog2p']) * $dt3['add_pog2mp'])); } } if (!isset($this->poglast[$uid])) { $this->poglast[$uid] = 0; } $this->poglast[$uid] += $yr2; if ($test == 1) { // осталось для поглощения $j['y'] -= round($this->poglast[$uid] / 100 * $dt3['add_pog2p']); $priem->minMana( $uid, round(round($this->poglast[$uid] / 100 * $dt3['add_pog2p']) * $dt3['add_pog2mp']) ); } if (isset($dt3['add_pog2p'])) { $yr2 = round($yr2 / 100 * (100 - $dt3['add_pog2p'])); } if ($j['y'] < 0 || ($this->stats[$this->uids[$uid]]['mpNow'] <= 0 && $dt3['add_pog2mp'] > 0)) { $dt2 = Conversion::dataStringToArray($this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data']); if (isset($dt2['endPog']) && $dt2['endPog'] == 1) { //удаляем прием //Добавляем в лог $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['priem'] = mysql_fetch_array( mysql_query( 'SELECT * FROM `priems` WHERE `id` = "' . $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['v2'] . '" LIMIT 1' ) ); $this->delPriem( $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1], $this->users[$this->uids[$uid]], 4, $uid ); $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1] = 'delete'; } unset($dt2); $j['y'] = 0; } $this->stats[$this->uids[$uid]]['set_pog'][$i]['y'] = $j['y']; if (isset($this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'])) { $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'] = str_replace( 'add_pog2=$', 'add_pog2=' . $j['y'], $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'] ); $upd = mysql_query( 'UPDATE `eff_users` SET `data` = "' . $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['data'] . '" WHERE `id` = "' . $this->stats[$this->uids[$uid]]['effects'][$j['id'] - 1]['id'] . '" LIMIT 1' ); } if ($j['y'] - $this->poglast[$uid] + $yr2 < 0) { $yr -= $yr + ($j['y'] - $this->poglast[$uid] + $yr2); $yr2 = $yr; $i = count($this->stats[$this->uids[$uid]]['set_pog2']) + 1; } } $i++; } } unset($checktuman); return $yr2; } private function updateHealth($id, $at): array { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; if ($this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] > 0) { $uid1 = $this->yhod_user( $this->atacks[$id]['uid2'], $this->atacks[$id]['uid1'], $this->stats[$this->uids[$this->atacks[$id]['uid1']]]['yhod'] ); } elseif ($this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] > 0) { $uid2 = $this->yhod_user( $this->atacks[$id]['uid1'], $this->atacks[$id]['uid2'], $this->stats[$this->uids[$this->atacks[$id]['uid2']]]['yhod'] ); } $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } //Рассчет дополнительных тактик if ($this->atacks[$id]['out' . $b] > 0) { //Игрок ${'u'.$a} получает тактики, возможно if (rand(0, 100) < min(floor($this->stats[$this->uids[$u1]]['m6'] / 5), 20)) { //выдаем тактику контрудара if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic3']++; } } if (rand(0, 100) < min(floor($this->stats[$this->uids[$u1]]['m8'] / 4), 20)) { //выдаем тактику щита if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic4']++; } } } //Расчет удара Цели (u2) по Атакующему (u1) $j = 0; while ($j < count($at[$a]['atack']) && $j < 8) { //Добавляем тактики if ($at[$a]['atack'][$j][1] == 1) { //u1 ударил обычным ударом u2 if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic1']++; } //Двуручка if ($at[$a]['atack'][$j]['yron']['2h'] == 1 && $this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic1'] += 2; } } elseif ($at[$a]['atack'][$j][1] != 2) { if ($at[$a]['atack'][$j][1] == 3) { //u2 заблокировал удар u1 if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u2]]['tactic4']++; } } elseif ($at[$a]['atack'][$j][1] == 4) { //u1 пробил блок u2 критом if (!isset($at[$a]['atack'][$j]['notactic2'])) { if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic2']++; } } $this->users[$this->uids[$u2]]['tactic4']++; //тактика за пробив блок } elseif ($at[$a]['atack'][$j][1] == 5) { //u1 ударил критическим ударом u2 if (!isset($at[$a]['atack'][$j]['notactic2'])) { if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic2'] += 2; } //Двуручка if ($at[$a]['atack'][$j]['yron']['2h'] == 1 && $this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u1]]['tactic2'] += 1; } } } elseif ($at[$a]['atack'][$j][1] == 6) { //u2 парировал удар u1 if (!isset($at[$a]['atack'][$j]['notactic5']) && $this->stats[$this->uids[$u1]]['this_animal'] == 0) { $this->users[$this->uids[$u2]]['tactic5']++; } } elseif ($at[$a]['atack'][$j][1] == 7) { //u2 блокировал щитом удар u1 //ТУТ ЩИТ if ($this->stats[$this->uids[$u2]]['this_animal'] == 0) { $this->users[$this->uids[$u2]]['tactic4']++; } } elseif ($at[$a]['atack'][$j][1] == 8) { //u2 увернулся от удара u1 и нанес по нему контрудар if ($this->stats[$this->uids[$u1]]['this_animal'] == 0) { $this->users[$this->uids[$u2]]['tactic3']++; } } } // КУДА БИЛ , ТИП УДАРА if (isset($at[$a]['atack'][$j]['yron']) && ( $at[$a]['atack'][$j][1] == 1 || $at[$a]['atack'][$j][1] == 4 || $at[$a]['atack'][$j][1] == 5)) { // if ($this->stats[$this->uids[$u2]]['hpNow'] <= $at[$a]['atack'][$j]['yron']['y']) { $at[$a]['atack'][$j]['yron']['y'] = $this->stats[$this->uids[$u2]]['hpNow']; } if ($this->stats[$this->uids[$u2]]['hpNow'] <= $at[$a]['atack'][$j]['yron']['k']) { $at[$a]['atack'][$j]['yron']['k'] = $this->stats[$this->uids[$u2]]['hpNow']; } if ($at[$a]['atack'][$j]['yron']['y'] < 0) { $at[$a]['atack'][$j]['yron']['y'] = 1; $at[$a]['atack'][$j]['yron']['r'] = -1; $at[$a]['atack'][$j]['yron']['k'] = 1; } if ($this->stats[$this->uids[$u2]]['hpNow'] < 1) { $at[$a]['atack'][$j]['yron']['y'] = 0; $at[$a]['atack'][$j]['yron']['r'] = -1; $at[$a]['atack'][$j]['yron']['k'] = 0; } //Добавляем нанесенный урон и опыт $this->takeExp($u1, $at[$a]['atack'][$j]['yron']['y'], $u1, $u2); //Отнимаем НР $this->stats[$this->uids[$u2]]['hpNow'] -= $at[$a]['atack'][$j]['yron']['y']; $this->users[$this->uids[$u2]]['last_hp'] = -$at[$a]['atack'][$j]['yron']['y']; $at[$a]['atack'][$j]['yron']['hp'] = $this->stats[$this->uids[$u2]]['hpNow']; if ($at[$a]['atack'][$j]['yron']['hp'] < 1) { $at[$a]['atack'][$j]['yron']['hp'] = 0; } $at[$a]['atack'][$j]['yron']['hpAll'] = $this->stats[$this->uids[$u2]]['hpAll']; if ($at[$a]['atack'][$j]['yron']['hp'] > $at[$a]['atack'][$j]['yron']['hpAll']) { $at[$a]['atack'][$j]['yron']['hp'] = $at[$a]['atack'][$j]['yron']['hpAll']; } //Травмирование if (rand(0, 100) <= 50) { if ($at[$a]['atack'][$j][1] == 4 || $at[$a]['atack'][$j][1] == 5) { if (!isset($at[$a]['atack'][$j]['yron']['travma']) && rand( 0, 1000 ) < 500 && $this->users[$this->uids[$u2]]['level'] > 1 && $this->stats[$this->uids[$u1]] > 1) { $trvm_chns = floor(rand(0, 200) / 10); if ($trvm_chns > 3 || $trvm_chns < 1) { $trvm_chns = 0; } $at[$a]['atack'][$j]['yron']['travma'] = [$trvm_chns, 'Обыкновенная травма']; unset($trvm_chns); } } } } $j++; } $i++; } return $at; } //Расчет МФ /** * Добавляем опыт \ нанесенный урон. * Кривовсрато, на переделку. * @param $id * @param $y * @param $id1 * @param $id2 * @param $mgregen * @param $nobattle_uron * @return void */ public function takeExp($id, $y, $id1, $id2, $mgregen = false, $nobattle_uron = false) { global $u; if (isset($this->users[$this->uids[$id]])) { $s2 = $this->stats[$this->uids[$id2]]; if ($id1 != $id2) { $e = $this->testExp($y, $s2); } else { $e = 0; } if ((int)$this->users[$this->uids[$id1]]['bot_id'] == 0 && $this->users[$this->uids[$id1]]['dnow'] != 0 && $this->info['dungeon'] != 1) { $dun_limitForLevel = [ // Максимум для каждого уровня. 4 => 750, 5 => 1500, 6 => 3500, 7 => 8000, 8 => 25000, 9 => 50000, 10 => 75000, 11 => 125000, 12 => 250000, 13 => 500000, 14 => 750000, ]; $dun_expFactor = [ // Максимум для каждого уровня. 4 => 5, 5 => 5, 6 => 5, 7 => 5, 8 => 5, 9 => 3, 10 => 1, 11 => 1, 12 => 1, 13 => 1, 14 => 1, ]; if (isset($dun_expFactor[(int)$this->users[$this->uids[$id1]]['level']])) { $e = $e * $dun_expFactor[(int)$this->users[$this->uids[$id1]]['level']]; } if ($this->info['dungeon'] > 1 && $this->users[$this->uids[$id1]]['battle'] > 0) { // пещерный лимит $dun_exp = []; // Текущий лимит опыта игрока в подземельях. $rep = Db::getValue( 'select dungeonexp from rep where id = ?', [$this->users[$this->uids[$id1]]['id']] ); $rep = explode(',', $rep); foreach ($rep as $key => $val) { $val = explode('=', $val); if (isset($val[0]) && isset($val[1]) && $val[0] != '' && $val[1] != 0) { $dun_exp[(int)$val[0]] = (int)$val[1]; } // текущий лимит опыта в подземке } unset($rep); if (!isset($dun_exp[$this->info['dungeon']])) { $dun_exp[$this->info['dungeon']] = 0; } if (!isset($dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']])) { // Если лимит не задан, опыт не даем. $e = 0; } elseif ( isset($dun_exp[$this->info['dungeon']]) && $dun_exp[$this->info['dungeon']] >= $dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']] ) { // Если лимит уже достигнут, опыт не даем. $e = 0; } elseif ( isset($dun_exp[$this->info['dungeon']]) && $dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']] > $dun_exp[$this->info['dungeon']] ) { // Если текущая репутация не достигла лимита. if (($dun_exp[$this->info['dungeon']] + $e) > $dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']]) { // Если опыта набрано достаточно, для достижения лимита. $e = abs( $e - abs( $dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']] - ($e + $dun_exp[$this->info['dungeon']]) ) ); $dun_exp[$this->info['dungeon']] += $e; } elseif ($dun_limitForLevel[(int)$this->users[$this->uids[$id1]]['level']] > ($dun_exp[$this->info['dungeon']] + $e)) { // Если опыта недостаточно, для достижения лимита. $dun_exp[$this->info['dungeon']] += $e; } else { $e = 0; } } else { // В любой непонятной ситуцаии. $e = 0; } } // Опыт в пещерах. if ($this->info['dungeon'] == 102) { $e = floor($e * 0.002); } } $this->users[$this->uids[$id1]]['battle_exp'] += floor($e); if (!$mgregen && !$nobattle_uron) { $this->users[$this->uids[$id1]]['battle_yron'] += floor($y); if ($this->stats[$this->uids[$id1]]['notactic'] != 1) { if ($s2['hpAll'] <= 1000) { if ($this->stats[$this->uids[$id2]]['this_animal'] == 0) { $this->users[$this->uids[$id1]]['tactic6'] += round( 0.1 * (floor($y) / $s2['hpAll'] * 100), 10 ); } else { $this->users[$this->uids[$id1]]['tactic6'] += round( 0.1 * (floor($y) / $s2['hpAll'] * 100), 10 ) / 3; } } else { if ($this->stats[$this->uids[$id2]]['this_animal'] == 0) { $this->users[$this->uids[$id1]]['tactic6'] += round(0.1 * (floor($y) / 1000 * 100), 10); } else { $this->users[$this->uids[$id1]]['tactic6'] += round(0.1 * (floor($y) / 1000 * 100), 10) / 3; } } } } Db::sql( 'update stats set last_hp = ?, tactic6 = ?, battle_yron = ?, battle_exp = ? where id = ?', [ $this->users[$this->uids[$id1]]['last_hp'], $this->users[$this->uids[$id1]]['tactic6'], $this->users[$this->uids[$id1]]['battle_yron'], $this->users[$this->uids[$id1]]['battle_exp'], (int)$id1, ] ); $this->stats[$this->uids[$id1]]['battle_exp'] = $this->users[$this->uids[$id1]]['battle_exp']; $this->clearCache($id1); $this->stats[$this->uids[$id1]]['tactic6'] = $this->users[$this->uids[$id1]]['tactic6']; if ($id1 == $u->info['id']) { $u->info['tactic6'] = $this->users[$this->uids[$id1]]['tactic6']; $u->stats['tactic6'] = $this->users[$this->uids[$id1]]['tactic6']; $u->info['battle_exp'] = $this->users[$this->uids[$id1]]['battle_exp']; $u->info['battle_yron'] = $this->users[$this->uids[$id1]]['battle_yron']; $u->info['notactic'] = $this->users[$this->uids[$id1]]['notactic']; $u->stats['notactic'] = $this->users[$this->uids[$id1]]['notactic']; } } } private function clearCache($uid): void { if ($uid > 0 && !isset($this->uclearc[$uid])) { $this->uclearc[$uid] = true; $this->ucleari[] = $uid; } } private function addlogRazmen($id, $at): bool { $this->hodID++; $dies = [ 1 => 0, 2 => 0, ]; //массив для статистики $stat = [ 1 => [ 'uid1' => 0, 'uid2' => 0, 'time' => time(), 'type' => 0, 'a' => '00000', 'b' => '0', 'type_a' => '', 'type_b' => '0', 'yrn' => 0, 'yrn_krit' => 0, 'ma' => 0, 'mb' => 0, 'tm1' => 0, 'tm2' => 0, ], 2 => [ 'uid1' => 0, 'uid2' => 0, 'time' => time(), 'type' => 0, 'a' => '00000', 'b' => '0', 'type_a' => '', 'type_b' => '0', 'yrn' => 0, 'yrn_krit' => 0, 'ma' => 0, 'mb' => 0, 'tm1' => 0, 'tm2' => 0, ], ]; $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if ($this->stats[$this->uids[$u1]]['yhod'] <= 0 && $this->stats[$this->uids[$u2]]['yhod'] > 0) { $u2 = $this->yhod_user($u1, $u2, $this->stats[$this->uids[$u2]]['yhod']); } $s1 = $this->users[$this->uids[$u1]]['sex']; $s2 = $this->users[$this->uids[$u2]]['sex']; $stat[$a]['uid1'] = $u1; $stat[$a]['uid2'] = $u2; $stat[$a]['ma'] = $this->stats[$this->uids[$u1]]['zona']; $stat[$a]['mb'] = $this->stats[$this->uids[$u1]]['zonb']; $stat[$a]['tm1'] = $this->users[$this->uids[$u1]]['team']; $stat[$a]['tm2'] = $this->users[$this->uids[$u2]]['team']; $stat[$a]['a'] = $this->atacks[$id]['a' . $a]; $stat[$a]['b'] = $this->atacks[$id]['b' . $a]; $vLog = 'at1=00000||at2=00000||zb1=' . $this->stats[$this->uids[$u1]]['zonb'] . '||zb2=' . $this->stats[$this->uids[$u2]]['zonb'] . '||bl1=' . $this->atacks[$id]['b' . $a] . '||bl2=' . $this->atacks[$id]['b' . $b] . '||time1=' . $this->atacks[$id]['time'] . '||time2=' . $this->atacks[$id]['time2'] . '||s' . $a . '=' . $s1 . '||s' . $b . '=' . $s2 . '||t2=' . $this->users[$this->uids[$u2]]['team'] . '||t1=' . $this->users[$this->uids[$u1]]['team'] . '||login1=' . $this->users[$this->uids[$u1]]['login2'] . '||login2=' . $this->users[$this->uids[$u2]]['login2']; $mas = [ 'text' => '', 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'vars' => $vLog, 'type' => 1, ]; if (!isset($at[$a]['atack'])) { //ТУТ тест пропуска if ($this->atacks[$id]['tpo' . $a] == 2) { $mas['text'] .= '{u1} потратил свой ход на магию.'; } else { if ($this->info['razdel'] == 0 && $this->info['dn_id'] == 0 && $this->info['izlom'] == 0) { mysql_query( 'INSERT INTO `battle_out` (`battle`,`uid1`,`uid2`,`time`,`out`) VALUES ( "' . $this->info['id'] . '","' . $u1 . '","' . $u2 . '","' . time() . '","1" )' ); } if (isset($u1)) { $mas['text'] .= '{u1} пропустил свой ход.'; //Проверка сброс туманок mysql_query( 'UPDATE `eff_users` SET `delete` = "' . time( ) . '" WHERE `uid` = "' . $u1 . '" AND `delete` = 0 AND `v1` = "priem" AND (`v2`=288 OR `v2`=287 OR `v2`=286 OR `v2`=273) LIMIT 1' ); } } $mas['text'] = '{tm1} ' . $mas['text']; $this->add_log($mas); } else { $j = 0; while ($j < count($at[$a]['atack']) && $j < 8) { $mas['text'] = ''; $wt = [ 21 => 4, 22 => 5, 20 => 2, 28 => 2, 19 => 3, 18 => 1, 26 => 22, ]; $par = [ 'zona' => '{zn2_' . $at[$a]['atack'][$j][0] . '} ', 'kyda' => $this->lgZon[$at[$a]['atack'][$j][0]][rand( 0, (count($this->lgZon[$at[$a]['atack'][$j][0]]) - 1) )], 'chem' => $this->lgItm[$wt[$at[$a]['atack'][$j]['wt']]][rand( 0, (count($this->lgItm[$wt[$at[$a]['atack'][$j]['wt']]]) - 1) )], ]; $this->atacks[$id]['uid_' . $u1 . '_t' . $at[$a]['atack'][$j][1]]++; $this->asr($u1, $u2, $at[$a]['atack'][$j][1]); if ($at[$a]['atack'][$j][1] == 1) { //u1 ударил обычным ударом u2 $mas['text'] .= $par['zona'] . '{u2} ' . $this->addlt($b, 1, $s2) . $this->addlt($b, 2, $s2) . $this->addlt($a, 3, $s1) . ' {u1} ' . $this->addlt($a, 4, $s1) . $this->addlt($a, 5, $s1) . $this->addlt($a, 6, $s1) . ' ' . $this->addlt(1, 7, $s1, $at[$a]['atack'][$j]['yron']['t']) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 2) { //u2 увернулся от u1 $mas['text'] .= $par['zona'] . '{u1} ' . $this->addlt($a, 8, $s1) . $this->addlt($a, 9, $s1) . ' {u2} ' . $this->addlt($b, 11, $s2) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 3) { //u2 заблокировал удар u1 $mas['text'] .= $par['zona'] . '{u1} ' . $this->addlt($a, 8, $s1) . $this->addlt($a, 9, $s1) . ' {u2} ' . $this->addlt($b, 10, $s2) . ' ' . $this->addlt(1, 7, 0, $s1) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 4) { //u1 пробил блок u2 критом if (isset($at[$a]['atack'][$j]['yron']['t'])) { $mas['text'] .= $par['zona'] . '{u2} ' . $this->addlt($b, 1, $s2) . $this->addlt($b, 2, $s2) . $this->addlt($a, 3, $s1) . ' {u1} ' . $this->addlt($a, 4, $s1) . $this->addlt($a, 5, $s1) . ', пробив блок, ' . $this->addlt($a, 6, $s1) . ' ' . $this->addlt(1, 7, $s1, $at[$a]['atack'][$j]['yron']['t']) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } } elseif ($at[$a]['atack'][$j][1] == 5) { //u1 ударил критическим ударом u2 $mas['text'] .= $par['zona'] . '{u2} ' . $this->addlt($b, 1, $s2) . $this->addlt($b, 2, $s2) . $this->addlt($a, 3, $s1) . ' {u1} ' . $this->addlt($a, 4, $s1) . $this->addlt($a, 5, $s1) . $this->addlt($a, 6, $s1) . ' ' . $this->addlt(1, 7, $s1, $at[$a]['atack'][$j]['yron']['t']) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 6) { //u2 парировал удар u1 $mas['text'] .= $par['zona'] . '{u1} ' . $this->addlt($a, 8, $s1) . $this->addlt($a, 9, $s1) . ' {u2} неожиданно парировал ' . $this->addlt(1, 7, 0, $s1) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 7) { //u2 блокировал щитом удар u1 $mas['text'] .= $par['zona'] . '{u1} ' . $this->addlt($a, 8, $s1) . $this->addlt($a, 9, $s1) . ' {u2}, воспользовавшись своим щитом, ' . $this->addlt($b, 10, $s2) . ' ' . $this->addlt(1, 7, 0, $s1) . ' ' . $par['chem'] . ' ' . $par['kyda'] . '. '; } elseif ($at[$a]['atack'][$j][1] == 8) { //u2 увернулся от удара u1 и нанес по нему контрудар $mas['text'] .= $par['zona'] . '{u1} ' . $this->addlt($a, 8, $s1) . $this->addlt($a, 9, $s1) . ' {u2} ' . $this->addlt($b, 11, $s2) . ' ' . $par['chem'] . ' ' . $par['kyda'] . ' и нанес контрудар. '; } $stat[$a]['type_a'] .= '' . $at[$a]['atack'][$j][1]; if ((!isset($this->stats[$this->uids[$u2]]['notravma']) || $this->stats[$this->uids[$u2]]['notravma'] == 0) && isset($at[$a]['atack'][$j]['yron']['travma']) && $at[$a]['atack'][$j]['yron']['travma'][0] > 0 && floor( $at[$a]['atack'][$j]['yron']['hp'] ) <= 0) { $tr_pl = mysql_fetch_array( mysql_query( 'SELECT `id`,`v1` FROM `eff_users` WHERE `id_eff` = 4 AND `uid` = "' . $u2 . '" AND `delete` = "0" ORDER BY `v1` DESC LIMIT 1' ) ); if (!isset($tr_pl['id']) || $tr_pl['v1'] < 3) { //263 if (isset($tr_pl['id'])) { $at[$a]['atack'][$j]['yron']['travma'][0] = rand(($tr_pl['v1'] + 1), 3); } $tr_pl2 = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `eff_users` WHERE `uid` = "' . $u2 . '" AND `delete` = "0" AND `name` LIKE "%Защита от травм%" LIMIT 1' ) ); if (!isset($tr_pl2['id']) && $at[$a]['atack'][$j]['yron']['travma'][0] <= 3) { $mas['text'] = rtrim($mas['text'], '. '); $mas['text'] .= ', нанеся противнику '; if ($at[$a]['atack'][$j]['yron']['travma'][0] == 1) { $mas['text'] .= 'Легкую'; $this->addTravm($u2, 1, rand(3, 5)); } elseif ($at[$a]['atack'][$j]['yron']['travma'][0] == 2) { $mas['text'] .= 'Среднюю'; $this->addTravm($u2, 2, rand(3, 5)); } elseif ($at[$a]['atack'][$j]['yron']['travma'][0] == 3) { $mas['text'] .= 'Тяжелую'; $this->addTravm($u2, 3, rand(3, 5)); } $mas['text'] .= ' травму. '; } } unset($tr_pl); } if ($at[$a]['atack'][$j]['yron']['pb'] == 1 && isset($at[$a]['atack'][$j]['yron']['hp'])) { $mas['text'] = rtrim($mas['text'], '. '); $mas['text'] .= ' пробив броню. '; } if ($at[$a]['atack'][$j][3] == 1) { $mas['text'] .= '(контрудар) '; } if (isset($at[$a]['atack'][$j]['yron'])) { if ($at[$a]['atack'][$j]['yron']['w'] == 3) { $mas['textWP'] = '(правая рука)'; } elseif ($at[$a]['atack'][$j]['yron']['w'] == 14) { $mas['textWP'] = '(левая рука)'; } else { $mas['textWP'] = '(непонятно чем)'; } if ($at[$a]['atack'][$j][1] == 4 || $at[$a]['atack'][$j][1] == 5 || $at[$a]['atack'][$j][1] == 1) { if ($at[$a]['atack'][$j]['yron']['y'] < 1) { $at[$a]['atack'][$j]['yron']['r'] = '--'; } } if ($at[$a]['atack'][$j][1] == 4 || $at[$a]['atack'][$j][1] == 5) { $stat[$a]['yrn_krit'] += -$at[$a]['atack'][$j]['yron']['r']; $mas['text'] .= ' ' . $at[$a]['atack'][$j]['yron']['r'] . ''; } else { $mas['text'] .= ' ' . $at[$a]['atack'][$j]['yron']['r'] . ''; } $stat[$a]['yrn'] += -$at[$a]['atack'][$j]['yron']['r']; } if (isset($at[$a]['atack'][$j]['yron']['hp'])) { if ($this->users[$this->uids[$u2]]['align'] == 9) { $at[$a]['atack'][$j]['yron']['hp'] = $at[$a]['atack'][$j]['yron']['hp'] / ($at[$a]['atack'][$j]['yron']['hpAll'] / 100); $at[$a]['atack'][$j]['yron']['hpAll'] = '100%'; } $mas['text'] .= ' [' . floor($at[$a]['atack'][$j]['yron']['hp']) . '/' . floor( $at[$a]['atack'][$j]['yron']['hpAll'] ) . ']'; } if ($mas['text'] != '') { $mas['text'] = '{tm1} ' . $mas['text']; } if (is_array($at[$a]['atack'][$j]['yron']['plog'])) { $il = 0; while ($il <= count($at[$a]['atack'][$j]['yron']['plog'])) { if (isset($at[$a]['atack'][$j]['yron']['plog'][$il])) { eval($at[$a]['atack'][$j]['yron']['plog'][$il]); } $il++; } } $this->add_log($mas); $j++; } } $i++; } //Добавляем статистику + записываем в баттл_юзерс НР игроков $this->addNewStat($stat); //Вывод в лог смерти персонажа if (floor($this->stats[$this->uids[$u1]]['hpNow']) < 1) { $dies[1] = 1; } if (floor($this->stats[$this->uids[$u2]]['hpNow']) < 1) { $dies[2] = 1; } if ($dies[1] > 0 || $dies[2] > 0) { $rtngwin = [1, 2, 3, 5, 10, 20, 40, 80, 160]; $rtnglos = [0, 0, 0, -1, -2, -5, -10, -20, -40]; if ($this->info['typeBattle'] == 99) { if ($btlstatus[0] == 0) { //Кровавые бои обычные $rtngwin = [2, 4, 6, 10, 20, 40, 80, 160, 320]; if ($this->info['razdel'] == 5) { //не хаот $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } else { //хаот $rtnglos = [0, 0, 0, 0, 0, 0, 0, 0, 0]; } } elseif ($btlstatus[0] == 25) { //Кровавая битва $rtngwin = [3, 6, 9, 15, 30, 60, 120, 240, 480]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 50) { //Кровавая резня $rtngwin = [4, 8, 16, 32, 64, 128, 256, 512, 1024]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 75) { //Кровавая сеча $rtngwin = [5, 10, 20, 40, 80, 160, 320, 640, 1280]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 100) { //Кровавое побоище $rtngwin = [6, 12, 24, 48, 98, 196, 392, 784, 1568]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 150) { //Судный день $rtngwin = [7, 14, 28, 56, 112, 224, 448, 896, 1792]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } } else { if ($btlstatus[0] == 0) { //Обычный поединок $rtngwin = [1, 2, 3, 5, 10, 20, 40, 80, 160]; if ($this->info['razdel'] == 5) { //не хаот $rtnglos = [0, 0, 0, -1, -2, -5, -10, -20, -40]; } else { //хаот $rtnglos = [0, 0, 0, 0, 0, 0, 0, 0, 0]; } } elseif ($btlstatus[0] == 25) { //великая битва $rtngwin = [2, 4, 6, 10, 20, 40, 80, 160, 320]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 50) { //величайшая битва $rtngwin = [3, 6, 9, 15, 30, 60, 120, 240, 480]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 75) { //историческая битва сеча $rtngwin = [4, 8, 16, 32, 64, 128, 256, 512, 1024]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 100) { //эпохальная битва $rtngwin = [5, 10, 20, 40, 80, 160, 320, 640, 1280]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } elseif ($btlstatus[0] == 150) { //судный день $rtngwin = [7, 14, 28, 56, 112, 224, 448, 896, 1792]; $rtnglos = [0, 0, 0, -2, -4, -10, -20, -40, -80]; } } if ($this->info['dn_id'] > 0 || $this->info['izlom'] != 0 || $this->info['turnir'] != 0) { //Пещерные бои не считаются и Изломы тоже, ну и Турниры $rtngwin = [0, 0, 0, 0, 0, 0, 0, 0, 0]; $rtnglos = [0, 0, 0, 0, 0, 0, 0, 0, 0]; } elseif ($this->info['clan1'] > 0 && $this->info['clan2'] > 0) { //Клановая война $rtngwin = [3, 6, 9, 15, 30, 60, 120, 240, 480]; $rtnglos = [-1, -2, -4, -8, -16, -32, -64, -128, -256]; } if ($dies[1] == 1) { if ($this->info['dn_id'] <= 0 && $this->users[$this->uids[$u1]]['level'] >= 4) { $rtng1 += $rtnglos[$this->users[$this->uids[$u1]]['level'] - 4]; $rtng2 += $rtngwin[$this->users[$this->uids[$u1]]['level'] - 4]; } //Персонаж 1 погиб от рук персонаж 2 $this->spaCheck($this->users[$this->uids[$u1]]['id']); } if ($dies[2] == 1) { if ($this->info['dn_id'] <= 0 && $this->users[$this->uids[$u1]]['level'] >= 4) { $rtng1 += $rtnglos[$this->users[$this->uids[$u1]]['level'] - 4]; $rtng2 += $rtngwin[$this->users[$this->uids[$u1]]['level'] - 4]; } //Персонаж 2 погиб от рук персонаж 1 $this->spaCheck($this->stats[$this->uids[$u2]]['id']); } //Записываем рейтинг // if ($this->info['type'] != 564 && $this->stats[$this->uids[$u1]]['inTurnir'] == 0 && $this->stats[$this->uids[$u2]]['inTurnir'] == 0 && $this->info['dn_id'] == 0 && $this->info['izlom'] == 0) { // if ($this->users[$this->uids[$u2]]['bot'] == 0) { mysql_query( 'INSERT INTO `users_reting` (`uid`,`time`,`val`,`align`,`clan`) VALUES ( "' . $u1 . '","' . time() . '","' . $rtng1 . '","' . $this->users[$this->uids[$u1]]['align'] . '","' . $this->users[$this->uids[$u1]]['clan'] . '")' ); } unset($rtng); if ($this->users[$this->uids[$u1]]['bot'] == 0) { mysql_query( 'INSERT INTO `users_reting` (`uid`,`time`,`val`,`align`,`clan`) VALUES ( "' . $u2 . '","' . time() . '","' . $rtng2 . '","' . $this->users[$this->uids[$u2]]['align'] . '","' . $this->users[$this->uids[$u2]]['clan'] . '")' ); } } unset($rtng1, $rtng2); } return true; } //Смена противника private function asr($u1, $u2, $type): void { mysql_query( 'INSERT INTO battle_static ( `uid1`,`uid2`,`hod`,`type`,`time`,`bid` ) VALUES ( "' . $u1 . '","' . $u2 . '","' . $this->hodID . '","' . $type . '","' . time() . '","' . $this->info['id'] . '" )' ); } //авто-смена противника //ТУТ баг выбора public function addlt($a, $id, $s, $rnd = null): string { global $log_text; if ($rnd === null) { $rnd = rand(0, (count($log_text[$s][$id]) - 1)); } return '{' . $a . 'x' . $id . 'x' . $rnd . '}'; } //Действия бота (атака) public function spaCheck($u1) { if ($this->stats[$this->uids[$u1]]['hpNow'] < 1) { mysql_query('DELETE FROM `battle_act` WHERE `uid1` = "' . $u1 . '" OR `uid2` = "' . $u1 . '"'); if ($this->stats[$this->uids[$u1]]['spasenie'] > 0 && $this->users[$this->uids[$u1]]['tactic7'] >= 25) { //Свиток спасения if ($this->stats[$this->uids[$u1]]['s7'] > 49 && $this->stats[$this->uids[$u1]]['s7'] < 75) { //Даем призрачку mysql_query( "INSERT INTO `eff_users` (`id_eff`, `uid`, `name`, `data`, `overType`, `timeUse`, `timeAce`, `user_use`, `delete`, `v1`, `v2`, `img2`, `x`, `hod`, `bj`, `sleeptime`, `no_Ace`, `file_finish`, `tr_life_user`, `deactiveTime`, `deactiveLast`, `mark`, `bs`) VALUES (22, '" . $u1 . "', 'Призрачная защита', 'add_zmproc=75|add_zaproc=75', 0, 77, 0, '" . $u1 . "', 0, 'priem', 141, 'spirit_block25.gif', 1, 1, '0', 0, 0, '', 0, 0, 0, 0, 0);" ); $this->stats[$this->uids[$u1]]['hpNow'] = floor($this->stats[$this->uids[$u1]]['hpAll'] * 0.5); $this->stats[$this->uids[$u1]]['mpNow'] = floor($this->stats[$this->uids[$u1]]['mpAll'] * 0.5); } elseif ($this->stats[$this->uids[$u1]]['s7'] > 74 && $this->stats[$this->uids[$u1]]['s7'] < 100) { //Абсолютная защита mysql_query( "INSERT INTO `eff_users` (`id_eff`, `uid`, `name`, `data`, `overType`, `timeUse`, `timeAce`, `user_use`, `delete`, `v1`, `v2`, `img2`, `x`, `hod`, `bj`, `sleeptime`, `no_Ace`, `file_finish`, `tr_life_user`, `deactiveTime`, `deactiveLast`, `mark`, `bs`) VALUES (22, '" . $u1 . "', 'Абсолютная защита', 'add_zmproc=100|add_zaproc=100', 0, 77, 0, '" . $u1 . "', 0, 'priem', 358, 'block_absolute.gif', 1, 1, '0', 0, 0, '', 0, 0, 0, 0, 0);" ); $this->stats[$this->uids[$u1]]['hpNow'] = floor($this->stats[$this->uids[$u1]]['hpAll'] * 0.75); $this->stats[$this->uids[$u1]]['mpNow'] = floor($this->stats[$this->uids[$u1]]['mpAll'] * 0.75); } elseif ($this->stats[$this->uids[$u1]]['s7'] > 99) { //Абсолютная защита x2 mysql_query( "INSERT INTO `eff_users` (`id_eff`, `uid`, `name`, `data`, `overType`, `timeUse`, `timeAce`, `user_use`, `delete`, `v1`, `v2`, `img2`, `x`, `hod`, `bj`, `sleeptime`, `no_Ace`, `file_finish`, `tr_life_user`, `deactiveTime`, `deactiveLast`, `mark`, `bs`) VALUES (22, '" . $u1 . "', 'Защита Мироздателя', 'add_zmproc=100|add_zaproc=100', 0, 77, 0, '" . $u1 . "', 0, 'priem', 358, 'wis_white_shield.gif', 1, 2, '0', 0, 0, '', 0, 0, 0, 0, 0);" ); $this->stats[$this->uids[$u1]]['hpNow'] = floor($this->stats[$this->uids[$u1]]['hpAll']); $this->stats[$this->uids[$u1]]['mpNow'] = floor($this->stats[$this->uids[$u1]]['mpAll']); } if ($this->stats[$this->uids[$u1]]['hpNow'] < 1) { $this->stats[$this->uids[$u1]]['hpNow'] = 1; } if ($this->stats[$this->uids[$u1]]['mpNow'] < 1) { $this->stats[$this->uids[$u1]]['mpNow'] = 1; } if ($this->stats[$this->uids[$u1]]['hpNow'] > $this->stats[$this->uids[$u1]]['hpAll']) { $this->stats[$this->uids[$u1]]['hpNow'] = floor($this->stats[$this->uids[$u1]]['hpAll']); } if ($this->stats[$this->uids[$u1]]['mpNow'] > $this->stats[$this->uids[$u1]]['mpAll']) { $this->stats[$this->uids[$u1]]['mpNow'] = floor($this->stats[$this->uids[$u1]]['mpAll']); } mysql_query( 'DELETE FROM `eff_users` WHERE `uid` = "' . $u1 . '" AND `id_eff` = 22 AND `v1` = "priem" AND `v2` = 324' ); mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$this->uids[$u1]]['hpNow'] . '",`mpNow` = "' . $this->stats[$this->uids[$u1]]['mpNow'] . '", `tactic7` = `tactic7` - 25 WHERE `id` = "' . $u1 . '" LIMIT 1' ); $mas['text'] = '{tm1} ' . $this->stats[$this->uids[$u1]]['login'] . ' убит...' . $this->stats[$this->uids[$u1]]['login'] . ' был спасен. '; $this->priemAddLog( $id, 1, 2, $u->info['id'], $u1, ' ', $mas['text'], ($this->hodID + 0) ); } else { if (isset($this->stats[$this->uids[$u1]]['login'])) { mysql_query('UPDATE `stats` SET `hpNow` = "0",`mpNow` = "0" WHERE `id` = "' . $u1 . '" LIMIT 1'); $this->stats[$this->uids[$u1]]['hpNow'] = 0; $this->users[$this->uids[$u1]]['hpNow'] = 0; $mas['text'] = '{tm1} ' . $this->stats[$this->uids[$u1]]['login'] . ' погиб.'; $this->priemAddLog( $id, 1, 2, $u->info['id'], $u1, ' ', $mas['text'], ($this->hodID + 1) //Удаляем размен из базы //ТУТ возможен лаг удаления ); mysql_query( 'DELETE FROM `battle_act` WHERE `uid1` = "' . $this->stats[$this->uids[$u1]]['id'] . '" OR `uid2` = "' . $this->stats[$this->uids[$u1]]['id'] . '" OR `uid2` = "-' . $this->stats[$this->uids[$u1]]['id'] . '"' ); mysql_query( 'DELETE FROM `eff_users` WHERE `uid` = "' . $this->stats[$this->uids[$u1]]['id'] . '" AND `v1` = "priem" AND `delete` =0' ); } } } } //Проверяем удары, приемы, свитки, зверей public function priemAddLog($id, $a, $b, $u1, $u2, $prm, $text, $hodID, $tm1 = 0, $tm2 = 0) { $time = time(); if ($tm1 == 0) { $tm1 = isset($this->atacks[$id]) ? $this->atacks[$id]['time'] : $time; } if ($tm2 == 0) { $tm2 = isset($this->atacks[$id]) ? $this->atacks[$id]['time2'] : $time; } $prm = str_replace('=', '^^^^', $prm); $vLog = 'prm=' . $prm . '||at1=00000||at2=00000||zb1=' . $this->stats[$this->uids[$u1]]['zonb'] . '||zb2=' . $this->stats[$this->uids[$u2]]['zonb'] . '||bl1=' . $this->atacks[$id]['b' . $a] . '||bl2=' . $this->atacks[$id]['b' . $b] . '||time1=' . $tm1 . '||time2=' . $tm2 . '||s' . $a . '=' . $this->users[$this->uids[$u1]]['sex'] . '||s' . $b . '=' . $this->users[$this->uids[$u2]]['sex'] . '||t2=' . $this->users[$this->uids[$u2]]['team'] . '||t1=' . $this->users[$this->uids[$u1]]['team'] . '||login1=' . $this->users[$this->uids[$u1]]['login2'] . '||login2=' . $this->users[$this->uids[$u2]]['login2']; $mas = [ 'text' => $text, 'time' => $time, 'battle' => $this->info['id'], 'id_hod' => $hodID, 'vars' => $vLog, 'type' => 1, ]; $this->add_log($mas); } //Действия бота private function restZonb($uid1, $uid2) { if ($this->stnZbVs[$uid1] > 0) { $this->stats[$this->uids[$uid1]]['zonb'] = $this->stnZbVs[$uid1]; } if ($this->stnZbVs[$uid2] > 0) { $this->stats[$this->uids[$uid1]]['zonb'] = $this->stnZbVs[$uid2]; } } //получаем данные о поединке private function save_stats($uid) { mysql_query( 'UPDATE `stats` SET `hpNow` = "' . $this->stats[$this->uids[$uid]]['hpNow'] . '", `mpNow` = "' . $this->stats[$this->uids[$uid]]['mpNow'] . '", `tactic1` = "' . $this->users[$this->uids[$uid]]['tactic1'] . '", `tactic2` = "' . $this->users[$this->uids[$uid]]['tactic2'] . '", `tactic3` = "' . $this->users[$this->uids[$uid]]['tactic3'] . '", `tactic4` = "' . $this->users[$this->uids[$uid]]['tactic4'] . '", `tactic5` = "' . $this->users[$this->uids[$uid]]['tactic5'] . '", `tactic6` = "' . $this->users[$this->uids[$uid]]['tactic6'] . '", `tactic7` = "' . $this->users[$this->uids[$uid]]['tactic7'] . '", `enemy` = "' . $this->users[$this->uids[$uid]]['enemy'] . '", `battle_yron` = "' . $this->users[$this->uids[$uid]]['battle_yron'] . '", `last_hp` = "' . $this->users[$this->uids[$uid]]['last_hp'] . '", `battle_exp` = "' . $this->users[$this->uids[$uid]]['battle_exp'] . '", `priems_z` = "' . $this->users[$this->uids[$uid]]['priems_z'] . '" WHERE `id` = "' . $uid . '" LIMIT 1' ); } //наносим удар противнику /** Осторожно! Подключаются файлы!!! * @param $id * @param $at * @return mixed */ private function priemsRazmenMomentEnd($id, $at) { $uid1 = $this->atacks[$id]['uid1']; $uid2 = $this->atacks[$id]['uid2']; $i = 1; while ($i <= 2) { if ($i == 1) { $a = 1; $b = 2; $u1 = $uid1; $u2 = $uid2; } else { $a = 2; $b = 1; $u1 = $uid2; $u2 = $uid1; } if (!isset($at['p']['p_cast'])) { $at['p'] = $at; $at['p']['p_cast'] = true; } //Приемы ухода от удара if (!isset($this->stats[$this->uids[$u2]]['nopryh']) || $this->stats[$this->uids[$u2]]['nopryh'] == 0) { $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][6] == 1) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); $this->stats[$this->uids[$u2]]['nopryh']--; } } $j++; } } //Приемы крита $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][6] == 2) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Приемы атаки $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][6] == 3) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); if (isset($fx_priem)) { $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } } $j++; } //Приемы защиты $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][6] == 4) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } //Прочие приемы $j = 0; while ($j <= count($this->stats[$this->uids[$u1]]['u_priem'])) { if ($this->stats[$this->uids[$u1]]['u_priem'][$j][2] > 0 && $this->stats[$this->uids[$u1]]['u_priem'][$j][6] == 5) { if (file_exists( '../../_incl_data/class/priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php' )) { $pr_used_this = $u1; $pr_moment = true; require('priem/' . $this->stats[$this->uids[$u1]]['u_priem'][$j][1] . '.php'); $at = $fx_priem($id, $at, $u1, $j); unset($fx_priem); } } $j++; } $i++; } return $at; } //выделяем пользователей private function addNewAtack() { global $u; if (isset($this->ga[$u->info['id']][$u->info['enemy']])) { return; } if ($this->stats[$this->uids[$u->info['id']]]['hpNow'] <= 0) { $this->e = 'Для вас поединок закончен, ожидайте пока завершат другие...'; return; } $us = $this->stats[$this->uids[$u->info['id']]]; $i = 1; $no = 0; while ($i <= $us['zona']) { if ($this->uAtc['a'][$i] == 0) { $no = 1; } $i++; } if ($this->uAtc['b'] == 0) { $no = 1; } if ($no != 0) { $this->e = 'Выберите зоны удара и блока'; } else { //наносим удар if ($u->info['enemy'] > 0) { if (!isset($this->ga[$u->info['enemy']][$u->info['id']])) { if ($this->stats[$this->uids[$u->info['id']]]['hpNow'] >= 1 && $this->stats[$this->uids[$u->info['enemy']]]['hpNow'] >= 1) { //наносим новый удар $a = $this->uAtc['a'][1] . $this->uAtc['a'][2] . $this->uAtc['a'][3] . $this->uAtc['a'][4] . $this->uAtc['a'][5]; $b = $this->uAtc['b']; mysql_query( 'DELETE FROM `battle_act` WHERE `battle` = "' . $this->info['id'] . '" AND ((`uid2` = "' . $u->info['id'] . '" AND `uid1` = "' . $u->info['enemy'] . '") OR (`uid1` = "' . $u->info['id'] . '" AND `uid2` = "' . $u->info['enemy'] . '")) LIMIT 2' ); $d = mysql_query( 'INSERT INTO `battle_act` (`battle`,`time`,`uid1`,`uid2`,`a1`,`b1`) VALUES ("' . $this->info['id'] . '","' . time( ) . '","' . $u->info['id'] . '","' . $u->info['enemy'] . '","' . $a . '","' . $b . '")' ); if (!$d) { $this->e = 'Не удалось нанести удар по противнику...'; } else { $this->ga[$u->info['id']][$u->info['enemy']] = mysql_insert_id(); } } } else { //отвечаем на удар противника if ( $this->stats[$this->uids[$u->info['id']]]['hpNow'] >= 1 && $this->stats[$this->uids[$u->info['enemy']]]['hpNow'] >= 1 && isset($this->atacks[$this->ga[$u->info['enemy']][$u->info['id']]]['id']) ) { $this->atacks[$this->ga[$u->info['enemy']][$u->info['id']]]['a2'] = $this->uAtc['a'][1] . '' . $this->uAtc['a'][2] . $this->uAtc['a'][3] . $this->uAtc['a'][4] . $this->uAtc['a'][5]; $this->atacks[$this->ga[$u->info['enemy']][$u->info['id']]]['b2'] = $this->uAtc['b']; $this->startAtack($this->atacks[$this->ga[$u->info['enemy']][$u->info['id']]]['id']); } } } } } //Возращаем зоны блока по умолчанию private function botAct($uid): bool { $r = false; if ($this->users[$this->uids[$uid]]['bot'] > 0) { if ($this->users[$this->uids[$uid]]['online'] < time() - 3) { $r = true; $this->users[$this->uids[$uid]]['online'] = time(); User::setOnline((int)$uid); } elseif (rand(0, 2) == 1) { $r = true; } } return $r; } //проверка блока (Визуальная) public function battleInfo($id) { $b = Db::getRow('select * from battle where id = ?', [$id]); if (!isset($b['id'])) { return false; } $this->hodID = Db::getValue('select id_hod from battle_logs where battle = ? order by id desc limit 1', [$b['id']]); $this->hodID = $this->hodID['id_hod'] ?? 0; return $b; } //проверка блока public function addAtack() { global $js; if (isset($_POST['atack'], $_POST['block'])) { $na = ['a' => [1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0]]; $a = explode('_', $_POST['atack']); $i = 1; $na['id'] = time(); while ($i <= 5) { if (isset($a[$i - 1])) { $a[$i - 1] = intval(round($a[$i - 1])); if ($a[$i - 1] >= 1 && $a[$i - 1] <= 5) { $na['a'][$i] = $a[$i - 1]; } else { $na['a'][$i] = 0; } } $i++; } $na['b'] = intval(round($_POST['block'])); if ($na['b'] < 1 || $na['b'] > 5) { $na['b'] = 0; } $this->uAtc = $na; $js .= 'testClearZone();'; } else { $this->e = 'Выберите зоны удара и блока'; } } //генерируем команды public function teamsTake() { global $u; $rs = ''; $ts = []; $tsi = 0; if ($this->info['id'] > 0) { //данные о игроках в бою $nxtlg = []; $t = mysql_query( 'SELECT `u`.`room`,`u`.`no_ip`,`u`.`twink`,`u`.`stopexp`,`u`.`id`,`u`.`notrhod`,`u`.`login`,`u`.`login2`,`u`.`sex`,`u`.`online`,`u`.`admin`,`u`.`align`,`u`.`align_lvl`,`u`.`align_exp`,`u`.`clan`,`u`.`level`,`u`.`battle`,`u`.`obraz`,`u`.`win`,`u`.`lose`,`u`.`nich`,`u`.`animal`,`st`.`stats`,`st`.`hpNow`,`st`.`mpNow`,`st`.`exp`,`st`.`dnow`,`st`.`team`,`st`.`battle_yron`,`st`.`battle_exp`,`st`.`enemy`,`st`.`battle_text`,`st`.`upLevel`,`st`.`timeGo`,`st`.`timeGoL`,`st`.`bot`,`st`.`lider`,`st`.`btl_cof`,`st`.`tactic1`,`st`.`tactic2`,`st`.`tactic3`,`st`.`tactic4`,`st`.`tactic5`,`st`.`tactic6`,`st`.`tactic7`,`st`.`x`,`st`.`y`,`st`.`battleEnd`,`st`.`priemslot`,`st`.`priems`,`st`.`priems_z`,`st`.`bet`,`st`.`clone`,`st`.`atack`,`st`.`bbexp`,`st`.`res_x`,`st`.`res_y`,`st`.`res_s`,`st`.`id`,`st`.`last_hp`,`st`.`last_pr`,`u`.`sex`,`u`.`money`,`u`.`bot_id`,`u`.`money3`,`u`.`money2` FROM `users` AS `u` LEFT JOIN `stats` AS `st` ON (`u`.`id` = `st`.`id`) WHERE `u`.`battle` = "' . $this->info['id'] . '"' ); $i = 0; $bi = 0; $up = ''; if ($this->info['start2'] == 0) { $tststrt = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `battle` WHERE `id` = "' . $this->info['id'] . '" AND `start2` = "0" LIMIT 1' ) ); if (isset($tststrt['id'])) { mysql_query( 'UPDATE `battle` SET `start2` = "' . time() . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); } else { $this->info['start2'] = time(); } } while ($pl = mysql_fetch_array($t)) { //записываем данные if ($pl['login2'] == '') { $pl['login2'] = $pl['login']; } $this->users[$i] = $pl; $this->uids[$pl['id']] = $i; if ($this->info['start2'] == 0) { mysql_query( 'UPDATE `users` SET `notrhod` = "-1" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $this->users[$i]['notrhod'] = -1; } if ($pl['bot'] > 0) { $this->bots[$bi] = $pl['id']; $this->iBots[$pl['id']] = $bi; $bi++; } //записываем статы $this->stats[$i] = $u->getStats($pl['id'], 0, 0, false, $this->cached, true); //Заносим старт if ($this->info['start2'] == 0) { if (!isset($ts[$this->users[$i]['team']])) { $tsi++; $ts[$this->users[$i]['team']] = $tsi; } if ($this->users[$i]['level'] <= 7) { $this->users[$i]['tactic7'] = floor(10 / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow']); } elseif ($this->users[$i]['level'] == 8) { $this->users[$i]['tactic7'] = floor(20 / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow']); } elseif ($this->users[$i]['level'] == 9) { $this->users[$i]['tactic7'] = floor(30 / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow']); } elseif ($this->users[$i]['level'] >= 10) { $this->users[$i]['tactic7'] = floor( (40 + $this->stats[$i]['s7']) / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow'] ); } if ($this->stats[$i]['s7'] > 49) { mysql_query( 'UPDATE `eff_users` SET `delete`="' . time() . '" WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `overType` = 101 AND `delete` = 0' ); mysql_query( " INSERT INTO `eff_users` ( `id_eff`, `uid`, `name`, `data`, `overType`, `timeUse`, `timeAce`, `user_use`, `delete`, `v1`, `v2`, `img2`, `x`, `hod`, `bj`, `sleeptime`, `no_Ace`, `file_finish`, `tr_life_user`, `deactiveTime`, `deactiveLast`, `mark`, `bs`) VALUES ( 22, '" . $this->stats[$i]['id'] . "', 'Спасение', 'add_spasenie=1', 101, 77, 0, '" . $this->stats[$i]['id'] . "', 0, 'priem', 324, 'preservation.gif', 1, -1, 'спасение', 0, 0, '', 0, 0, 0, 1, 0); " ); } // Бафф Зверя animal_bonus if ($this->users[$i]['animal'] > 0) { $a = mysql_fetch_array( mysql_query( 'SELECT * FROM `users_animal` WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `id` = "' . $this->users[$i]['animal'] . '" AND `pet_in_cage` = "0" AND `delete` = "0" LIMIT 1' ) ); if (isset($a['id'])) { if ($a['eda'] >= 1) { $anl = mysql_fetch_array( mysql_query( 'SELECT `bonus` FROM `levels_animal` WHERE `type` = "' . $a['type'] . '" AND `level` = "' . $a['level'] . '" LIMIT 1' ) ); $anl = $anl['bonus']; $tpa = [ 1 => 'cat', 2 => 'owl', 3 => 'wisp', 4 => 'demon', 5 => 'dog', 6 => 'pig', 7 => 'dragon', ]; $tpa3 = [ 1 => 'Кошачья Ловкость', 2 => 'Интуиция Совы', 3 => 'Сила Стихий', 4 => 'Демоническая Сила', 5 => 'Друг', 6 => 'Полная Броня', 7 => 'Инферно', ]; mysql_query( 'UPDATE `eff_users` SET `delete`="' . time() . '" WHERE `uid` = "' . $this->users[$i]['id'] . '" AND `overType` = 100 AND `delete` = 0' ); mysql_query( 'INSERT INTO `eff_users` (`hod`,`v2`,`img2`,`id_eff`,`uid`,`name`,`data`,`overType`,`timeUse`,`v1`,`user_use`) VALUES ("-1","201","summon_pet_' . $tpa[$a['type']] . '.gif",22,"' . $this->users[$i]['id'] . '","' . $tpa3[$a['type']] . ' [' . $a['level'] . ']","' . $anl . '","100","77","priem","' . $this->users[$i]['id'] . '")' ); //добавление духа от дракона if ($a['type'] == 7) { if ($a['level'] == 10) { $this->users[$i]['tactic7'] = floor( (50 + $this->stats[$i]['s7']) / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow'] ); } elseif ($a['level'] == 11) { $this->users[$i]['tactic7'] = floor( (65 + $this->stats[$i]['s7']) / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow'] ); } elseif ($a['level'] == 12) { $this->users[$i]['tactic7'] = floor( (90 + $this->stats[$i]['s7']) / $this->stats[$i]['hpAll'] * $this->stats[$i]['hpNow'] ); } } // $anl = Conversion::dataStringToArray($anl); $vLog = 'time1=' . time() . '||s1=' . $this->users[$i]['sex'] . '||t1=' . $this->users[$i]['team'] . '||login1=' . $this->users[$i]['login']; $vLog .= '||s2=1||t2=' . $this->users[$i]['team'] . '||login2=' . $a['name'] . ' (Зверь ' . $this->users[$i]['login'] . ')'; $mas1 = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => 1, 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $ba = ''; $i6 = 0; while ($i6 < count($u->items['add'])) { if (isset($anl['add_' . $u->items['add'][$i6]])) { if ($anl['add_' . $u->items['add'][$i6]] > 0) { if ($u->items['add'][$i6] == 'mib1') { $ba .= 'Броня головы: +' . $anl['add_' . $u->items['add'][$i6]] . ', '; } elseif ($u->items['add'][$i6] == 'mib2') { $ba .= 'Броня корпуса: +' . $anl['add_' . $u->items['add'][$i6]] . ', '; } elseif ($u->items['add'][$i6] == 'mib3') { $ba .= 'Броня пояса: +' . $anl['add_' . $u->items['add'][$i6]] . ', '; } elseif ($u->items['add'][$i6] == 'mib4') { $ba .= 'Броня ног: +' . $anl['add_' . $u->items['add'][$i6]] . ', '; } else { $ba .= $u->is[$u->items['add'][$i6]] . ': +' . $anl['add_' . $u->items['add'][$i6]] . ', '; } } } $i6++; } $ba = trim($ba, ', '); if ($ba == '') { $ba = 'Эффект отсутсвует'; } $mas1['text'] = '{tm1} {u2} очнулся от медитации, и призвал заклятье "' . $tpa3[$a['type']] . ' [' . $a['level'] . ']" на {u1}. (' . $ba . ')'; $nxtlg[] = $mas1; mysql_query( 'UPDATE `users_animal` SET `eda` = `eda` - 1 WHERE `id` = "' . $a['id'] . '" LIMIT 1' ); Log::addComment($this); } } } mysql_query( 'UPDATE `stats` SET `last_hp` = "0",`tactic1`="0",`tactic2`="0",`tactic3`="0",`tactic4`="0",`tactic5`="0",`tactic6`="0",`tactic7` = "' . ($this->users[$i]['tactic7']) . '" WHERE `id` = "' . $this->users[$i]['id'] . '" LIMIT 1' ); $rs[$this->users[$i]['team']] = $rs[$this->users[$i]['team']] . User::getLogin($this->users[$i]['id']) . ', '; } $up .= '`uid` = "' . $pl['id'] . '" OR'; //battle-user (статистика, начальная) $mybu = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `battle_users` WHERE `battle` = "' . $this->info['id'] . '" AND `uid` = "' . mysql_real_escape_string( $pl['id'] ) . '" LIMIT 1' ) ); if (!isset($mybu['id'])) { //Пустое значение статистики для данного персонажа за текущий бой $this->addstatuser($pl['id']); } $i++; } //Заносим в лог начало поединка if ($this->info['start1'] == 0) { $tststrt = mysql_fetch_array( mysql_query( 'SELECT `id` FROM `battle` WHERE `id` = "' . $this->info['id'] . '" AND `start1` = "0" LIMIT 1' ) ); if (isset($tststrt['id'])) { $upd = mysql_query( 'UPDATE `battle` SET `start1` = "' . time() . '" WHERE `id` = "' . $this->info['id'] . '" LIMIT 1' ); if ($upd) { $i = 0; $r = ''; while ($i <= $tsi) { if (isset($rs[$i]) && $rs[$i] != '') { $r .= rtrim($rs[$i], ', ') . ' и '; } $i++; } $r = rtrim($r, ' и '); $r = str_replace('"', '\\\\\"', $r); $this->hodID++; $vLog = 'time1=' . time() . '||'; $mass = [ 'time' => time(), 'battle' => $this->info['id'], 'id_hod' => $this->hodID, 'vars' => $vLog, 'zona1' => '', 'zonb1' => '', 'zona2' => '', 'zonb2' => '', 'type' => '1', ]; $r = 'Часы показывали ' . date( 'd.m.Y H:i', $this->info['time_start'] ) . ', когда ' . $r . ' бросили вызов друг другу.'; $ins = mysql_query( 'INSERT INTO `battle_logs` (`time`,`battle`,`id_hod`,`text`,`vars`,`zona1`,`zonb1`,`zona2`,`zonb2`,`type`) VALUES ("' . $mass['time'] . '","' . $mass['battle'] . '","' . $mass['id_hod'] . '","' . $r . '","' . $mass['vars'] . '","' . $mass['zona1'] . '","' . $mass['zonb1'] . '","' . $mass['zona2'] . '","' . $mass['zonb2'] . '","' . $mass['type'] . '")' ); $this->info['start1'] = time(); } } // if (count($nxtlg) > 0) { $i = 0; while ($i < count($nxtlg)) { $this->add_log($nxtlg[$i]); $i++; } } // } } } private function addstatuser($uid): void { if ($uid <= 0) { return; } $id = $this->uids[$uid]; if (empty($this->stats[$id]['hp'])) { $this->stats[$id]['hp'] = $this->stats[$id]['hpNow']; } Db::sql( 'insert into battle_users (battle,uid,time_enter,login,level,align,clan,hpAll,hp,hpStart,team) values (?,?,unix_timestamp(),?,?,?,?,?,?,?,?)', [ $this->info['id'], $uid, $this->users[$id]['login'], $this->users[$id]['align'], $this->users[$id]['clan'], $this->stats[$id]['hpAll'], $this->stats[$id]['hp'], $this->stats[$id]['hpNow'], $this->users[$id]['team'], ] ); } public function testZonbVis() { global $u; if ($this->stnZbVs == 0) { $zb = $this->stats[$this->uids[$u->info['id']]]['zonb']; $this->stnZbVs = $zb; } else { $zb = $this->stnZb; } $eu = $this->users[$this->uids[$u->info['id']]]['enemy']; if ($zb > 3) { $zb = 3; } if ( $eu != 0 && ( $this->stats[$this->uids[$eu]]['weapon1'] == 1 || $this->stats[$this->uids[$eu]]['weapon2'] == 1 ) && $this->stats[$this->uids[$u->info['id']]]['weapon1'] != 1 && $this->stats[$this->uids[$u->info['id']]]['weapon2'] != 1 ) { $zb -= 1; } if ($zb < 1) { $zb = 1; } return $zb; } ///----Спасение функция public function genTeams($you): string { $ret = ''; $teams = []; //выделяем пользователей $i = 0; $j = 1; $tms = []; $teams[$this->users[$this->uids[$you]]['team']] = ''; $tms[0] = $this->users[$this->uids[$you]]['team']; while ($i < count($this->uids)) { if ($this->stats[$i]['hpNow'] > 0) { if (!isset($teams[$this->users[$i]['team']])) { $tms[$j] = $this->users[$i]['team']; $j++; } if ($this->stats[$i]['hpNow'] < 0) { $this->stats[$i]['hpNow'] = 0; } if ($this->stats[$i]['hpAll'] < $this->stats[$i]['hpNow']) { $this->stats[$i]['hpNow'] = $this->stats[$i]['hpAll']; } $a1ms = ''; if (isset($this->ga[$this->users[$i]['id']][$you]) && $this->ga[$this->users[$i]['id']][$you]) { $a1mc = ''; $ac = mysql_fetch_array( mysql_query( 'SELECT * FROM `battle_act` WHERE `id` = "' . $this->ga[$this->users[$i]['id']][$you] . '" LIMIT 1' ) ); if (isset($ac) && $ac['time'] + $this->info['timeout'] - 15 < time()) { $a1mc = 'color:red;'; } $a1ms = 'style=\"text-decoration: underline; ' . $a1mc . '\"'; } elseif (isset($this->ag[$this->users[$i]['id']][$you]) && $this->ag[$this->users[$i]['id']][$you]) { $a1mc = ''; $ac = mysql_fetch_array( mysql_query( 'SELECT * FROM `battle_act` WHERE `id` = "' . $this->ag[$this->users[$i]['id']][$you] . '" LIMIT 1' ) ); if (isset($ac) && $ac['time'] + $this->info['timeout'] - 15 < time()) { $a1mc = 'color:green;'; } $a1ms = 'style=\"text-decoration: overline; ' . $a1mc . '\"'; } if ($this->users[$i]['login2'] == '') { $this->users[$i]['login2'] = $this->users[$i]['login']; } if ($this->users[$i]['align'] == 9) { $this->stats[$i]['hpNow'] = $this->stats[$i]['hpNow'] / ($this->stats[$i]['hpAll'] / 100); $this->stats[$i]['hpAll'] = '100%'; } $ldr = ''; if ($this->users[$i]['lider'] == $this->info['id']) { $ldr = 'users[$i]['team'] . '.gif \>'; } $teams[$this->users[$i]['team']] .= ', ' . $ldr . 'users[$i]['team'] . '\" onClick=\"top.chat.addto(\'' . $this->users[$i]['login2'] . '\',\'to\'); return false;\" oncontextmenu=\"top.infoMenu(\'' . $this->users[$i]['login2'] . '\',event,\'main\'); return false;\">' . $this->users[$i]['login2'] . ' [' . floor( $this->stats[$i]['hpNow'] ) . '/' . $this->stats[$i]['hpAll'] . ']'; } $i++; } //генерируем команды $i = 0; while ($i < count($tms)) { $teams[$tms[$i]] = ltrim($teams[$tms[$i]], ', '); if ($teams[$tms[$i]] != '') { $teams[$tms[$i]] = ' ' . $teams[$tms[$i]]; $ret .= $teams[$tms[$i]]; if (count($tms) > $i + 1) { $ret .= '   против   '; } } $i++; } return 'genteam("' . $ret . '");'; } }