game/_incl_data/class/User/Effects.php
2023-11-02 15:59:07 +02:00

190 lines
5.2 KiB
PHP

<?php
namespace User;
use Core\Db;
use Model\Effect;
class Effects
{
public static function addCustom(array $values): void
{
$sql = '
insert into eff_users
(
id_eff,
uid,
name,
data,
overType,
timeUse,
timeAce,
user_use,
v1,
v2,
img2,
x,
hod,
bj,
sleeptime,
no_Ace,
file_finish,
tr_life_user,
deactiveTime,
deactiveLast,
mark,
bs
) values (
:id_eff,
:uid,
:name,
:data,
:overType,
:timeUse,
:timeAce,
:user_use,
:v1,
:v2,
:img2,
:x,
:hod,
:bj,
:sleeptime,
:no_Ace,
:file_finish,
:tr_life_user,
:deactiveTime,
:deactiveLast,
:mark,
:bs
)';
$args = [
'id_eff' => null,
'uid' => null,
'name' => null,
'data' => '',
'overType' => 0,
'timeUse' => null,
'timeAce' => 0,
'user_use' => '',
'v1' => '0',
'v2' => 0,
'img2' => '',
'x' => 1,
'hod' => -1,
'bj' => '0',
'sleeptime' => 0,
'no_Ace' => 0,
'file_finish' => '',
'tr_life_user' => 0,
'deactiveTime' => 0,
'deactiveLast' => 0,
'mark' => 0,
'bs' => 0,
];
$args = array_replace($args, $values);
if (!isset($args['id_eff'], $args['uid'], $args['name'], $args['timeUse'])) {
return;
}
Db::sql($sql, $args);
}
/** Дать игроку эффект.
* @param int $uid id игрока
* @param int $id id эффекта
* @param bool $ignoreLimits
* @return bool
*/
public static function addById(int $uid, int $id, bool $ignoreLimits = false): bool
{
$eff = Effect::getAllbyId($id);
if (!$eff['id2']) {
return false;
}
if (!$ignoreLimits) {
if ($eff['onlyOne'] > 0) {
self::removeByEffectId($uid, $eff['id2']);
}
if ($eff['oneType'] > 0) {
self::removeByOverType($uid, $eff['overType']);
}
}
Db::sql(
'insert into eff_users (overType, id_eff, uid, name, timeUse, data, no_Ace) values (?,?,?,?,unix_timestamp(),?,?)',
[$eff['oneType'], $eff['id2'], $uid, $eff['mname'], $eff['mdata'], $eff['noAce']]
);
return true;
}
public static function removeByEffectId(int $userId, int $overType): void
{
Db::sql('delete from eff_users where id_eff = ? and uid = ?', [$overType, $userId]);
}
public static function removeByOverType(int $userId, int $overType): void
{
Db::sql('delete from eff_users where overType = ? and uid = ?', [$overType, $userId]);
}
public static function hasInjury(int $uid): bool
{
return Db::getValue('select count(*) from eff_users where id_eff in (4,5,6) and `delete` = 0 and uid = ?', [$uid]) > 0;
}
public static function hasAddiction(int $addictionId, int $uid): bool // пристрастие
{
return Db::getValue('select count(*) from eff_users where (id_eff between 301 and 304 or id_eff between 321 and 332) and id = ? and uid = ?', [$addictionId, $uid]) > 0;
}
public static function removeById(int $userId, int $id): void
{
Db::sql('delete from eff_users where id = ? and uid = ?', [$id, $userId]);
}
public static function removeByIds(int $userId, ...$ids): void
{
Db::sql('delete from eff_users where id in (?) and uid = ?', [implode(',', $ids), $userId]);
}
public static function hasAttackTimeLimit(int $attackerId): bool
{
return Db::getValue('select count(*) from eff_users where id_eff = 478 and `delete` = 0 and uid = ?', [$attackerId]) > 0;
}
public static function isImmuneToAttack(int $targetId): bool
{
return Db::getValue('select count(*) from eff_users where id_eff in (479, 480, 481) and `delete` = 0 and uid = ?', [$targetId]) > 0;
}
public static function giveAttackImmunity(int $userId): void
{
Db::sql("insert into eff_users (no_Ace, id_eff, overType, uid, name, data, timeUse) values (1,479,112,?,'Защита от нападения','zashitatk=1',unix_timestamp())", [$userId]);
}
/**
* Духовность. Спасение.
* Из свитка нападения.
* @param $id
* @return void
*/
public static function addSpasenie($id): void
{
Db::sql('delete from eff_users where uid = ? and overType = 101');
Db::sql("insert into eff_users (id_eff, uid, name, data, overType, timeUse, user_use, v1, v2, img2, bj, mark)
values (22,?,'Спасение','add_spasenie=1',101,77,?,'priem',324,'preservation.gif','спасение',1)", [$id, $id]);
}
public static function getActive(int $userId): array
{
return Db::getRows('select * from eff_users where uid = ?', [$userId]);
}
public static function getAllInjuries(int $uid): array
{
return Db::getRows('select * from eff_users where uid = ? and id_eff in (4,5,6) order by id_eff', [$uid]);
}
}