battles/classes/Battles/UserEffect.php

162 lines
6.3 KiB
PHP
Raw Normal View History

<?php
# Date: 16.02.2022 (23:01)
namespace Battles;
use Battles\Database\Db;
class UserEffect
{
public static array $effectName = [
2 => 'Заклинание молчания',
3 => 'Заклятие форумного молчания',
4 => 'Заклятие хаоса',
5 => 'Заклятие обезличивания',
8 => 'Сон',
10 => 'паралич',
2021-05-12 20:34:54 +00:00
11 => 'Легкая травма',
12 => 'Средняя травма',
13 => 'Тяжёлая травма',
14 => 'Неизлечимая травма',
20 => 'Проверка Паладинов',
21 => 'Сила нейтралитета',
22 => 'Защита от кулачного нападения',
51 => 'Опьянение',
201 => 'Защита от оружия',
202 => 'Сокрушение',
203 => 'Туманный образ [1]',
204 => 'Туманный образ [2]',
205 => 'Туманный образ [3]',
206 => 'Гравитация [1]',
207 => 'Гравитация [2]',
208 => 'Гравитация [3]',
209 => 'Стена Огня [1]',
210 => 'Стена Огня [2]',
211 => 'Стена Огня [3]',
212 => 'Чистота Воды [1]',
213 => 'Чистота Воды [2]',
214 => 'Чистота Воды [3]',
215 => 'Защита эфира [1]',
216 => 'Защита эфира [2]',
217 => 'Защита эфира [3]',
218 => 'Песчаный щит [1]',
219 => 'Песчаный щит [2]',
220 => 'Песчаный щит [3]',
221 => 'Огненный Щит [1]',
222 => 'Огненный Щит [2]',
223 => 'Огненный Щит [3]',
224 => 'Стена Воды [1]',
225 => 'Стена Воды [2]',
226 => 'Стена Воды [3]',
227 => 'Защита от нападений',
405 => 'Микстура жизненных сил',
1022 => 'невидимость',
9994 => 'Антидот/Путы (Эликсир?)',
];
public static array $effectImage = [
1 => 'travma.gif',
2 => 'magic/sleep.gif',
3 => 'magic/sleepf.gif',
4 => 'magic/haos.gif',
5 => 'magic/obezl.gif',
6 => 'expx15.gif',
7 => 'euphoria.png',
8 => 'sleep_obj.gif',
10 => 'magic/chains.gif',
11 => 'travma.gif',
12 => 'travma.gif',
13 => 'travma.gif',
14 => 'travma.gif',
20 => 'check.gif',
21 => 'magic/al_neut_power.gif',
22 => 'magic/fist_def.gif',
201 => 'magic/defence.gif',
202 => 'magic/devastate.gif',
203 => 'magic/spell_luck.gif',
215 => 'magic/wis_air_def1.gif',
216 => 'magic/wis_air_def2.gif',
217 => 'magic/wis_air_def3.gif',
218 => 'magic/wis_earth_def1.gif',
219 => 'magic/wis_earth_def2.gif',
220 => 'magic/wis_earth_def3.gif',
221 => 'magic/wis_fire_def1.gif',
222 => 'magic/wis_fire_def2.gif',
223 => 'magic/wis_fire_def3.gif',
224 => 'magic/wis_water_def1.gif',
225 => 'magic/wis_water_def2.gif',
226 => 'magic/wis_water_def3.gif',
227 => 'magic/attack_defence.gif',
1022 => 'sh/hidden.gif',
];
/**
* @param int $userId
* @param int $type
* @param string $name
* @param int $time
* @param string|null $json_modifiers_list (str, dex, int, end, intel, wis).
*/
public static function add(int $userId, int $type, string $name, int $time, string $json_modifiers_list = null)
{
$mods = json_decode($json_modifiers_list);
Db::getInstance()->execute('INSERT INTO users_effects (owner_id, type, name, remaining_time, mod_strength, mod_dexterity, mod_intuition, mod_endurance, mod_intelligence, mod_wisdom) VALUES (?,?,?,?,?,?,?,?,?,?)', [$userId, $type, $name, $time, $mods->str ?? null, $mods->dex ?? null, $mods->int ?? null, $mods->end ?? null, $mods->intel ?? null, $mods->wis ?? null]);
}
public static function updateTime(int $userId, int $type, int $time)
{
if (self::hasEffect($userId, $type)) {
Db::getInstance()->execute('update users_effects set remaining_time = remaining_time + ? where owner_id = ? and type = ?', [$time, $userId, $type]);
}
}
public static function remove(int $userId, int $type): bool
{
if (self::hasEffect($userId, $type)) {
Db::getInstance()->execute('DELETE FROM users_effects WHERE owner_id = ? AND type = ?', [$userId, $type]);
return true;
}
return false;
}
public static function massRemove(int $userId, array $type): bool
{
if (Db::getInstance()->fetchColumn('SELECT count(*) FROM users_effects WHERE owner_id = ? AND type in (?)', [$userId, $type])) {
Db::getInstance()->execute('DELETE FROM users_effects WHERE owner_id = ? AND type in (?)', [$userId, $type]);
return true;
}
return false;
}
public static function hasEffect(int $userId, int $type): bool
{
return Db::getInstance()->fetchColumn('select count(*) from users_effects where owner_id = ? and type = ?', [$userId, $type]) > 0;
}
public static function getRemainingEffectTime(int $userId, int $type): int
{
return Db::getInstance()->fetchColumn('select remaining_time from users_effects where owner_id = ? and type = ?', [$userId, $type]);
}
public static function isInvisible(int $userId): bool
{
return self::hasEffect($userId, 1022);
}
public static function hasHiddenProfile(int $userId): string
{
$time = self::getRemainingEffectTime($userId, 5);
if (empty($time)) {
return '';
}
if ($time === -1) {
return 'навсегда';
}
return 'до' . date('d.m.Y', strtotime($time));
}
public static function isOverEncumbered(int $userid, int $addWeight = 0): bool
{
$query = 'select strength * 5 + ' . $addWeight . ' as max from inventory left join users u on owner_id = id where owner_id = ? having sum(weight) > max';
return Db::getInstance()->fetchColumn($query, $userid) > 0;
}
}