// 1-е число (3) = сколько теплоты можно создать за раунд (перезаход не обнуляет счетчик) // 2-е число (10) = сколько HP будет регенерироваться каждую секунду (отрицательное значение будет снимать HP у игроков и в итоге убьёт) // 3-е число (60) = через сколько секунд теплота будет удалена (0 = не удалять) warmth: 3,10,60
Установка
- Требуется VIP v3.2.6+ - Требуется модуль VIP [Estus] - Скачайте warmth.hueco_mundo и бросьте в addons\sourcemod\plugins\ws_vip - Распакуйте файлы warmth модуля - Не забудьте добавить перевод-фразу в addons\sourcemod\translations\vip_modules.phrases.txt
Код
"warmth" { "ru" "Теплота" "en" "Warmth" }
Игрок может создать теплоту (или несколько), которая будет регенерировать HP тем, кто стоит рядом с ней (идея из dark souls 3). Если игрок стоит не в одной теплоте, а в двух или больше, то эффект не суммируется, регенерация будет от одной. Команды: !warmth, /warmth, sm_warmth
Настройки:
Код
// plugins/ws_vip/warmth.hueco_mundo
// 1 = теплота лечит всех // 0 = только товарищей по команде warmth_regen_all "1"
// r g b цвет теплоты команды T и CT // Если "0 0 0", то цвет будет случайным каждую секунду. warmth_rgb_tt "0 0 0" warmth_rgb_ct "0 0 0"
// Расстояние от центра теплоты до игрока для активации регенерации здоровья. // Высота стандартной модели игрока (стоя) = 73. warmth_dist_regen "80"
// Теплота не может быть создана, если рядом есть другая (0 = откл). warmth_dist "150"
// Сколько теплоты игрок может создать одновременно. // Если 0, то создавать никто не сможет. // Если 1, то при создании второй теплоты первая удалится. // Если 2, то при создании третьей теплоты первая удалится. // и тд.. warmth_limit "1"
// Звук от теплоты warmth_sound "ws_vip/warmth.wav"
// Громкость звука от 0.1 до 1.0 warmth_sound_volume "1.0"
Код
// RegPluginLibrary("warmth");
enum WarmthEvent { Handle:Warmth_OnSpawn = 0, // public Action:CallBack(client, const Float:center[3], &HpPerSec, &LifeSec, rgb[3]); - теплота вот-вот будет создана (если LifeSec < 1, не будет удалена) (если в rgb все нули, то цвет рандомный каждую секунду) Handle:Warmth_OnSpawnPost, // public CallBack(WarmthID); - создана Handle:Warmth_OnRemovedPost, // public CallBack(WarmthID); - удалена (истекло время или владелец создал новую теплоту) Handle:Warmth_OnRegenStart, // public Action:CallBack(client, WarmthID); - игрок вот-вот начнёт восстанавливать здоровье (вызывается 1 раз после входа в теплоту) Handle:Warmth_OnRegenStartPost, // public CallBack(client, WarmthID); - начал восстанавливать здоровье (вызывается 1 раз после входа в теплоту) Handle:Warmth_OnRegenPost, // public CallBack(client, WarmthID); - вызывается каждую секунду Handle:Warmth_OnRegenEndPost // public CallBack(client, WarmthID); - восстановление здоровья прекращено (восстановил, мёртв, вышел, теплота удалена) };
native WARMTH_Count(client = 0); // кол-во активной теплоты (если client != 0, то будет искать лишь его теплоту) native WARMTH_IDList(&Handle:hAr); // список WarmthID активной теплоты (Handle закройте) native WARMTH_Owner(WarmthID); // индекс того, кто создал теплоту, или 0 native bool:WARMTH_SetColor(WarmthID, r, g, b); // чтобы каждую секунду был случайный цвет, укажите 0 0 0 native bool:WARMTH_Center(WarmthID, Float:center[3]); // координаты центра native bool:WARMTH_Remove(WarmthID); // удалить теплоту native bool:WARMTH_RegenOn(client); // true, если в текущий момент игрок восстанавливает здоровье
native WARMTH_HpPerSec(WarmthID); // HP в секунду восстанавливаемые теплотой (отрицательное значение снимает HP у игроков) (вернёт 0, если ошибка) native bool:WARMTH_SetHpPerSec(WarmthID, HpPerSec); // HpPerSec не должно быть 0
native bool:WARMTH_SecLeft(WarmthID, &SecLeft); // через сколько секунд теплота будет удалена (0 = не будет удалена) native bool:WARMTH_SetSecLeft(WarmthID, SecLeft); //
// Выдать/изменить теплоту любому не-бот игроку (лучше использовать после VIP_EVENT_AUTHORIZED). // Если CountPerRound < 1, то это отберёт доступ и HpPerSec/LifeSec неважны. // Данные права будут активны пока игрок не покинет сервер. // // CountPerRound - кол-во использований за раунд (перезаход на сервер не обнуляет счетчик) // HpPerSec - hp в сек регенерируемые теплотой // LifeSec - через сколько сек удалить теплоту (0 = не удалять) native bool:WARMTH_SetAccess(client, CountPerRound, HpPerSec, LifeSec); native WARMTH_GetAccess(client, &CountPerRound, &HpPerSec, &LifeSec);
// Изменить параметры счетчика (сколько теплоты игрок создал за раунд), что позволит ему создать ещё, или наоборот запретит. // Счетчик обнуляется только в round_start. native bool:WARMTH_SetCountPerRound(client, CountPerRound); native WARMTH_GetCountPerRound(client);
public SharedPlugin:__pl_warmth = { name = "warmth", file = "ws_vip/warmth.smx", #if defined REQUIRE_PLUGIN required = 1, #else required = 0, #endif };
Очень понравился модуль, второй день уже стоит, сервер работает без падений и ошибок, сам очень люблю всякие примочки такого рода на сервере, спасибо wS , всем советую!