[CS: Source] AutoLife 1.1

Вин Дизель

Участник
Сообщения
49
Реакции
1
[AutoLife]
Текущая версия: 1.1

Описание:
Плагин возрождает всех игроков спустя указанное время после начала раунда.

Cvars:
AL_SpawnTime "20" - Спустя сколько секунд после начала раунда возрождать игроков

Требования:
- Sourcemod

Поддерживаются игры:
- Counter-Strike: Source V34
- Counter-Strike: Source
- Остальные не проверял

Установка:
1. Положить файл autolife.smx в addons/sourcemod/plugins
2. Положить файл autolife.sp в addons/sourcemod/scripting
3. Положить файл autolife.phrases.txt в addons/sourcemod/translations

Лог разработки:
1.0
- Релиз плагина

1.1
- Плагин оптимизирован
- Убран инклюд colors.inc
- Цвет сообщений в чате изменен
- Теперь возраждает Т и КТ
- Добавлен квар AL_SpawnTime

Установочные файлы:
 

Вложения

  • autolife.smx
    4.9 КБ · Просмотры: 18
  • autolife.sp
    1.5 КБ · Просмотры: 31
  • autolife.phrases.txt
    432 байт · Просмотры: 23
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: AutoLife

прошу посоветовать что убрать/добавить
PHP:
HookEvent("round_start", OnRoundStart);
HookEvent("round_end", OnRoundEnd);
Добавить после запятой EventHookMode_PostNoCopy каждому.
C-подобный:
public [U]Action:[/U]OnRoundEnd
Приставку убрать с тех же событий.
C-подобный:
respawn = CreateTimer(Respawn_Timer, RespawnAll);
Лучше добавить после запятой:
PHP:
_, TIMER_FLAG_NO_MAPCHANGE
И отдельно с новой строки:
PHP:
public OnMapEnd() respawn = INVALID_HANDLE;
Так таймер не будет работать, когда принудительно меняют карту (например, через админку).
C-подобный:
public Action:RespawnAll(Handle:timer[U], any:client[/U])
Это здесь уже фантастика, убери.
 

Вин Дизель

Участник
Сообщения
49
Реакции
1
Re: AutoLife

PHP:
HookEvent("round_start", OnRoundStart);
HookEvent("round_end", OnRoundEnd);
Добавить после запятой EventHookMode_PostNoCopy каждому.
C-подобный:
public [U]Action:[/U]OnRoundEnd
Приставку убрать с тех же событий.
C-подобный:
respawn = CreateTimer(Respawn_Timer, RespawnAll);
Добавить после запятой:
PHP:
_, TIMER_FLAG_NO_MAPCHANGE
И отдельно с новой строки:
PHP:
public OnMapEnd() respawn = INVALID_HANDLE;
C-подобный:
public Action:RespawnAll(Handle:timer[U], any:client[/U])
Это здесь уже фантастика, убери.

Cпасибо большое. Не подскажешь еще как можно квар добавить через сколько секунд возрождать?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Re: AutoLife

как можно квар добавить через сколько секунд возрождать?
CreateConVar и HookConVarChange Handle, возвращённого первым.
Менять получится с нового раунда.
возрождает всех игроков
Неправда:
PHP:
GetClientTeam(i) == 3
Только КТ. А такой плагин уже был: DeathRun: Respawn Counter-Terrorists.
 

Вин Дизель

Участник
Сообщения
49
Реакции
1

fallen1994

Участник
Сообщения
2,357
Реакции
538
Поддерживаются игры:
- Counter-Strike: Source V34
- Counter-Strike: Source
- Остальные не проверял
CS_RespawnPlayer(i) с такой функцией в других играх и не будет работать, ток в cs:go
для кросплатформы надо sdk call пилить с использованием оффсетов
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,335
- Теперь возраждает Т и КТ
C-подобный:
        if (IsClientInGame(i) && !IsPlayerAlive(i) && GetClientTeam(i) [B]> 2[/B]) CS_RespawnPlayer(i);
cstrike.inc
C-подобный:
#define CS_TEAM_T             2    /**< Terrorists. */
#define CS_TEAM_CT            3    /**< Counter-Terrorists. */
2 > 2 = false, следовательно, воскрешает только CT. Нужно > 1 либо >= 2.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
CS_RespawnPlayer(i) с такой функцией в других играх и не будет работать, ток в cs:go
для кросплатформы надо sdk call пилить с использованием оффсетов

cs_respawn работает в css/csgo.

Добавлено через 4 минуты
Теперь возраждает Т и КТ
Зачем так делаешь?
if (IsClientInGame(i) && !IsPlayerAlive(i) && GetClientTeam(i) > 2) CS_RespawnPlayer(i);
Не проще так:

if (IsClientInGame(i) && !IsPlayerAlive(i)) CS_RespawnPlayer(i);
В этом случае, будет воскрешать и Т и КТ.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
И заодно спеков. Их будет воскрешать, из-за чего либо будут ошибки в консоли, либо баги в игре.

Так у него проверка стоит.
Если игрок в игре и если мертв. Я лично подобных багов не видел. Чтобы воскрешало наблюдателей и те кто еще не выбрали команду.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Hejter,
IsClientInGame - клиент в игре, типо еще означает что в игровой команде ?
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Hejter,
IsClientInGame - клиент в игре, типо еще означает что в игровой команде ?

Я такого не говорил.

Добавлено через 56 секунд
Мёртвые игроки, будь то КТ/Т могут наблюдать. Та же аналогия...

Ну могут они наблюдать и что? Наблюдателя ведь не воскресит или игрока не вошедшего в команду.
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Ни когда с таким не сталкивался
Играл на футбольном сервере CS:S с картой, типа ka_soccer. Было забавно видеть, как иногда некоторых игроков, не вошедших ни в одну игровую команду вдруг респаунило посередине поля, прямо у меча... И этот "нотеам" сразу "пинал" мяч в любые из ворот, чью команду тут же убивало, целиком ломая игровую атмосферу.
Видимо, автор тамошнего плагина рассуждал ровным счётом, как и ты.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Играл на футбольном сервере CS:S с картой, типа ka_soccer. Было забавно видеть, как иногда некоторых игроков, не вошедших ни в одну игровую команду вдруг респаунило посередине поля, прямо у меча... И этот "нотеам" сразу "пинал" мяч в любые из ворот, чью команду тут же убивало, целиком ломая игровую атмосферу.
Видимо, автор тамошнего плагина рассуждал ровным счётом, как и ты.

Если пилить плагин конкретно для других модов: футбол или зомби мод, то возможно проверка и нужна, а т.к я ни когда, не держал Soccer сервер, то с таким не сталкивался.
Оффтоп
Как вариант. Можно так реализовать.
if (IsClientInGame(i) && !IsPlayerAlive(i) && GetClientTeam(i) == CS_TEAM_T || GetClientTeam(i) == CS_TEAM_CT) CS_RespawnPlayer(i);
 
Сверху Снизу