Spawn Protection

Saliba

Участник
Сообщения
63
Реакции
5
  • Автор ресурса
  • #1
Saliba добавил(а) новый ресурс:

Spawn Protection - Защита от получаемого урона в начале раунда в течении установленного времени

Плагин для защиты от получаемого урона в начале раунда
На счет поддержки игр, CS, остальные не проверял. L4D также должен работать, но утверждать не буду.

Узнать больше об этом ресурсе...
 

Rimmer

Помогаю новичкам / Переводчик / Тестер / Заказчик
Сообщения
1,368
Реакции
753
Saliba добавил(а) новый ресурс:

Spawn Protection - Защита от получаемого урона в начале раунда в течении установленного времени



Узнать больше об этом ресурсе...
В оффтоп зачем засовывать???
Для этого есть спойлер как минимум, а вообще его и делать не нужно.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Так себе код.
Ещё и на старом синтаксисе зачем-то.
Таймер отключения защиты реализован неправильно: нужно передавать userid, а не clientid, т.к. может зайти другой человек с тем же clientid, когда таймер ещё не сработал.
Кроме того, вроде такого типа протекторы давно есть.

Можно у меня в Revival глянуть как сделано, кстати.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Переписал на новый синтаксис, исправил ошибки допущенные автором, в работе не проверял, я думаю найдётся тот кто это сделает.
 

Вложения

  • SpawnProtection.sp
    4.3 КБ · Просмотры: 37
  • SpawnProtection.smx
    11 КБ · Просмотры: 22

babka68

Участник
Сообщения
2,124
Реакции
956
Не проверял👁️👁️
Цвета для css ob, в 34 и cs go не будут отображаться, не стал загоняться)
Новый синтаксис и так пару переделок:
#include <morecolors>

#pragma tabsize 0
#pragma semicolon 1
#pragma newdecls required

// Offset
int g_iRenderOffset;

// ConVar
float g_fProtectionTime;
char g_szProtectionColor[PLATFORM_MAX_PATH];
bool g_bIsProtectionEnabled, g_bIsProtectionNotifyEnabled;

public Plugin myinfo =  {
    name = "Spawn Protection",
    author = "Fair Party (rew. by xyligan)",
    version = "2 (fix)"
}

public void OnPluginStart() {
    if ((g_iRenderOffset = FindSendPropInfo("CBasePlayer", "m_clrRender")) == -1) {
        SetFailState("CBasePlayer::m_clrRender");
    }
  
    ConVar cvar;
    cvar = CreateConVar("sp_on", "1", "Включить/Выключить плагин [0 - Выключить | 1 - Включить]", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Protection_Enabled);
    g_bIsProtectionEnabled = cvar.BoolValue;
  
    cvar = CreateConVar("sp_time", "5", "Время в сек. на протяжении которого игрок будет защищен от убийства", _, true, 0.0, true, 100.0);
    cvar.AddChangeHook(CVarChanged_Protection_Time);
    g_fProtectionTime = cvar.FloatValue;
  
    cvar = CreateConVar("sp_notify", "1", "Включить/Выключить оповещения [0 - Выключить | 1 - Включить]", _, true, 0.0, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Protection_Notify_Enabled);
    g_bIsProtectionNotifyEnabled = cvar.BoolValue;
  
    cvar = CreateConVar("sp_color", "0 255 0 120", "Цвет игрока во время наличия защиты");
    cvar.AddChangeHook(CVarChanged_Protection_Color);
    cvar.GetString(g_szProtectionColor, sizeof(g_szProtectionColor));
  
    AutoExecConfig(true, "spawn_protection");
    HookEvent("player_spawn", Event_PlayerSpawn);
}

public void CVarChanged_Protection_Enabled(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bIsProtectionEnabled = cvar.BoolValue;
}

public void CVarChanged_Protection_Time(ConVar CVar, const char[] oldValue, const char[] newValue) {
    g_fProtectionTime = CVar.FloatValue;
}

public void CVarChanged_Protection_Notify_Enabled(ConVar cvar, const char[] oldValue, const char[] newValue) {
    g_bIsProtectionEnabled = cvar.BoolValue;
}

public void CVarChanged_Protection_Color(ConVar cvar, const char[] oldValue, const char[] newValue) {
    cvar.GetString(g_szProtectionColor, sizeof(g_szProtectionColor));
}

public Action Event_PlayerSpawn(Event event, const char[] name, bool dontbroadcast) {
    if (g_bIsProtectionEnabled) {
        int client = GetClientOfUserId(event.GetInt("userid"));
        if (!IsPlayerAlive(client))return Plugin_Continue;
      
        char colors[4][4];
        ExplodeString(g_szProtectionColor, " ", colors, sizeof colors, sizeof colors[]);
      
        SetEntProp(client, Prop_Data, "m_takedamage", 0, 1);
        SetRendering(client, RENDERFX_DISTORT, StringToInt(colors[0]), StringToInt(colors[1]), StringToInt(colors[2]), RENDER_TRANSADD, StringToInt(colors[3]));
      
        CreateTimer(g_fProtectionTime, Timer_RemoveProtection, GetClientUserId(client));
      
        if (g_bIsProtectionNotifyEnabled) {
            CPrintToChat(client, "{green}[{fullred}Защита игроков{green}] {fullred}Вы {white}будете {fullred}защищены {white}в течение {fullred}%f {white}сек.", RoundToNearest(g_fProtectionTime));
        }
    }
    return Plugin_Continue;
}

public Action Timer_RemoveProtection(Handle hTimer, int iUserID) {
    int client = GetClientOfUserId(iUserID);
  
    if (client && IsClientInGame(client)) {
        SetEntProp(client, Prop_Data, "m_takedamage", 2, 1);
        SetRendering(client);
      
        if (g_bIsProtectionNotifyEnabled) {
            CPrintToChat(client, "{green}[{fullred}Защита игроков{green}] {fullred}Защита {white}теперь {fullred}отключена{white}...");
        }
    }
}

stock void SetRendering(int client, RenderFx hFx = RENDERFX_NONE, int iR = 255, int iG = 255, int iB = 255, RenderMode hRender = RENDER_NORMAL, int iAmount = 255) {
    SetEntProp(client, Prop_Send, "m_nRenderFX", hFx, 1);
    SetEntProp(client, Prop_Send, "m_nRenderMode", hRender, 1);
    SetEntData(client, g_iRenderOffset, iR, 1, true);
    SetEntData(client, g_iRenderOffset + 1, iG, 1, true);
    SetEntData(client, g_iRenderOffset + 2, iB, 1, true);
    SetEntData(client, g_iRenderOffset + 3, iAmount, 1, true);
}
 
Последнее редактирование:

hirowatch

Живет ХЛмод`ом
Сообщения
2,722
Реакции
1,634
Я думаю, что команде форума стоит перенести сообщения #4 и #6 в старое обсуждение плагина, а это удалить.
 

Туник

Участник
Сообщения
1,281
Реакции
263
Зачем плагин если есть квар, в ксго к примеру:
/Управление временем иммунитета игрока во время возрождения (0 = Может быть любым числом, 0 = Выключено)
mp_respawn_immunitytime 0
 

HAIRAKE

Участник
Сообщения
36
Реакции
4
[Защита игроков] Защита теперь отключена...
[Защита игроков] Защита теперь отключена...
2 раза пишет можете изменить чтобы 1 раз писало?
 

CUPSULA

Участник
Сообщения
3
Реакции
0
Помогите пожалуйста с этим. Плагин сам по себе работает, всё гуд.
 

Вложения

  • Screenshot_32.png
    Screenshot_32.png
    1.9 КБ · Просмотры: 33

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@CUPSULA, нужно менять инклюд цвета: в ксго нет поддержки более 15 цветов.
Можно вообще вместо инклюда с цветами заюзать просто коды цветов, если не используются файлы переводов и текст просто прописан в самом коде плагина.
Ну и юззать вместо CPrintToChat() просто PrintToChat()
 

Вложения

  • csgo_colors_.png
    csgo_colors_.png
    3.3 КБ · Просмотры: 37

CUPSULA

Участник
Сообщения
3
Реакции
0
@CUPSULA, нужно менять инклюд цвета: в ксго нет поддержки более 15 цветов.
Можно вообще вместо инклюда с цветами заюзать просто коды цветов, если не используются файлы переводов и текст просто прописан в самом коде плагина.
Ну и юззать вместо CPrintToChat() просто PrintToChat()
А Вы можете прикрепить уже исправленный плагин? Я просто не совсем понимаю о чём Вы, в том смысле что я не умею). Если это не наглость уже.
 
Сверху Снизу