226 lines
6.6 KiB
PHP
226 lines
6.6 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 addInjury($uid, $type, $lvl): void
|
|
{
|
|
$stat = rand(1, 3); // пока без духовности
|
|
$img = "eff_travma$type.gif";
|
|
if ($type == 1) {
|
|
$name = 'Легкая травма';
|
|
$timeEnd = rand(1, 3);// время травмы от 1.30 до 6 часов
|
|
$data = 'add_s' . $stat . '=-' . $lvl;
|
|
} elseif ($type == 2) {
|
|
$name = 'Средняя травма';
|
|
$timeEnd = rand(3, 5);// время травмы от 6 до 12 часов
|
|
$data = 'add_s' . $stat . '=-' . ($lvl * 2);
|
|
} elseif ($type == 3) {
|
|
$name = 'Тяжелая травма';
|
|
$timeEnd = rand(5, 7);// время травмы от 12 до 6 часов
|
|
$data = 'add_s' . $stat . '=-' . ($lvl * 3);
|
|
} else {
|
|
$name = 'Неизлечимая травма';
|
|
$timeEnd = 24;// время травмы от 24 часа
|
|
$data = 'add_s' . $stat . '=-' . ($lvl * 50);
|
|
}
|
|
$timeEnd *= 3600;
|
|
|
|
Db::sql(
|
|
"insert into eff_users (id_eff, uid, name, timeUse, data, img2, v1, timeace) values (4,?,?,unix_timestamp(),?,?,?,?)",
|
|
[$uid, $name, $data, $img, $type, $timeEnd]
|
|
);
|
|
|
|
self::addById($uid, 263);
|
|
}
|
|
|
|
public static function removeByEffectId(int $userId, int $effectId): void
|
|
{
|
|
Db::sql('delete from eff_users where id_eff = ? and uid = ?', [$effectId, $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 removePriems(int $userid): void
|
|
{
|
|
Db::sql("delete from eff_users where v1 = 'priem' and uid = ?", [$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 $uid
|
|
* @return void
|
|
*/
|
|
public static function addSpasenie($uid): void
|
|
{
|
|
self::removeByOverType($uid, 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)", [$uid, $uid]);
|
|
|
|
}
|
|
|
|
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]);
|
|
}
|
|
}
|