Написание плагинов

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@BossKotoriiNeSmok, Попробуй так.
PHP:
#include <sourcemod>

#pragma newdecls required
#pragma semicolon 1

bool g_bMedic[MAXPLAYERS+1];
int m_iHealth = -1;

public void OnPluginStart()
{
    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);
  
    m_iHealth    = FindSendPropInfo("CCSPlayer", "m_iHealth");
  
    HookEvent("round_start", Event_Start);
}

public Action Cmd_Medic(int iClient, int args)
{
    if(g_bMedic[iClient])
    {
        int iHp = GetEntData(iClient, m_iHealth) + 50;
        SetEntData(iClient, m_iHealth, iHp);
        PrintToChat(iClient, "Ваше здоровье восполнено на 50 единиц!");
        g_bMedic[iClient] = false;
    }
}

public Action Event_Start(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i=0; i<=MaxClients; i++){
        if(IsClientConnected(i) && IsClientInGame(i))
            g_bMedic[i] = true;
    }
}
 
Последнее редактирование:

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
@BossKotoriiNeSmok, Попробуй так.
PHP:
#include <sourcemod>

#pragma newdecls required
#pragma semicolon 1

bool g_bMedic[MAXPLAYERS+1];
int m_iHealth = -1, m_iMaxHealth = -1;

public void OnPluginStart()
{
    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);
  
    m_iHealth    = FindSendPropInfo("CCSPlayer", "m_iHealth");
    m_iMaxHealth = FindSendPropInfo("CCSPlayer", "m_iMaxHealth");
  
    HookEvent("round_start", Event_Start);
}

public Action Cmd_Medic(int iClient, int args)
{
    if(g_bMedic[iClient])
    {
        int iMaxHP = GetEntData(iClient, m_iMaxHealth);
        //int iHp = GetEntData(iClientm, m_iHealth);
        SetEntData(iClient, m_iHealth, iMaxHP);
        PrintToChat(iClient, "Ваше здоровье восполнено!");
        g_bMedic[iClient] = false;
    }
}

public Action Event_Start(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i=0; i<=MaxClients; i++){
        if(IsClientConnected(i) && IsClientInGame(i))
            g_bMedic[i] = true;
    }
}
Он 50хп восполняет или фулл?
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@BossKotoriiNeSmok, теперь 50 единиц хп, не внимательно посмотрел, прошу прощения. Я пост обновил.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@BossKotoriiNeSmok, как-то так:
PHP:
#pragma semicolon 1

new bool:bUsed[MAXPLAYERS+1];

public OnPluginStart()
{
    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);
}

public OnClientConnected(client)
{
    bUsed[client] = false;
}

public Event_NewRound(Handle:event, const String:name[], bool:dontBroadcast)
{
    for(new i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action:Cmd_Medic(client, args)
{
    if(client && !bUsed[client] && IsPlayerAlive(client))
    {
        new health = GetClientHealth(client) + 50;
        SetEntityHealth(client, health > 99 ? 100 : health);
        bUsed[client] = true;
    }

    return Plugin_Handled;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Rabb1t, для чего ты делаешь проверку на наличие игрока на сервере при сбросе значения переменной g_bMedic?
Это же не имеет никакого смысла в любом случае (только лишняя проверка).
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@Grey83, были баги и в логах Error`ы без использования проверки в CSGO. Теперь всегда делаю в подобных случаях.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Он 50хп восполняет или фулл?
В принципе у Rabb1t лучше сделано.

Вот только какой смысл добавлять 50 ХП и делать здоровье игрока выше максимального значения?
--- Добавлено позже ---
@Rabb1t, ты же ничего не делаешь с самими игроками в этот момент, поэтому и нет необходимости проверять их наличие на сервере
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@Grey83, Ну можно вот так сделать тогда:
PHP:
#include <sourcemod>

#pragma newdecls required
#pragma semicolon 1

bool g_bMedic[MAXPLAYERS+1];
int m_iHealth = -1, m_iMaxHealth = -1;

public void OnPluginStart()
{
    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);
   
    m_iHealth    = FindSendPropInfo("CCSPlayer", "m_iHealth");
    m_iMaxHealth = FindSendPropInfo("CCSPlayer", "m_iMaxHealth");
   
    HookEvent("round_start", Event_Start);
}

public Action Cmd_Medic(int iClient, int args)
{
    if(g_bMedic[iClient])
    {
        int iHp = GetEntData(iClient, m_iHealth) + 50;
        int iMaxHp = GetEntData(iClient, m_iMaxHealth);
        if(iMaxHp > iHp) {
            SetEntData(iClient, m_iHealth, iHp);
            PrintToChat(iClient, "Ваше здоровье восполнено на 50 единиц!");
            g_bMedic[iClient] = false;
        }
    }
}

public Action Event_Start(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i=0; i<=MaxClients; i++){
        if(IsClientConnected(i) && IsClientInGame(i))
            g_bMedic[i] = true;
    }
}
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
PHP:
#include <sourcemod>

#pragma newdecls required
#pragma semicolon 1

bool g_bMedic[MAXPLAYERS+1];
int m_iHealth = -1, m_iMaxHealth = -1;

public void OnPluginStart()
{
    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);
 
    m_iHealth    = FindSendPropInfo("CCSPlayer", "m_iHealth");
    m_iMaxHealth = FindSendPropInfo("CCSPlayer", "m_iMaxHealth");
 
    HookEvent("round_start", Event_Start);
}

public Action Cmd_Medic(int iClient, int args)
{
    if(g_bMedic[iClient] && IsPlayerAlive(iClient))
    {
        int iHp = GetEntData(iClient, m_iHealth) + 50;
        int iMaxHp = GetEntData(iClient, m_iMaxHealth);
        if(iMaxHp >= iHp)
        {
            SetEntData(iClient, m_iHealth, iHp);
            PrintToChat(iClient, "Ваше здоровье восполнено на 50 единиц!");
            g_bMedic[iClient] = false;
        }
    }
}

public Action Event_Start(Event hEvent, const char[] sName, bool bDbc)
{
    for(int i=0; i<=MaxClients; i++)
   {
            g_bMedic[i] = true;
    }
}
Есть недостаток: если кто то будет ранен, использует медик, затем выйдет и его слот успеет занять другой человек и среспавнится, он не сможет использовать медик
Если изначальное здоровье > максимальное - 50 то медик не сработает, например 70 хп есть из 100, наверно так и задумано
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@BossKotoriiNeSmok, в общем вот тебе плагин и сам настраивай кварами как тебе нужно
PHP:
#pragma semicolon 1
#pragma newdecls required

static const char    NAME[]        = "Medic",
                    VERSION[]    = "1.0.0";

bool bMax,
    bUsed[MAXPLAYERS+1];
int iHP,
    m_iMaxHealth;

public Plugin myinfo =
{
    name        = NAME,
    author        = "Grey83",
    description    = "Лечение единожды за раунд игрока, написавшего команду",
    version        = VERSION,
    url            = "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
    if((m_iMaxHealth = FindSendPropInfo("CCSPlayer", "m_iMaxHealth")) == -1)
        SetFailState("Can't find 'm_iMaxHealth' offset");

    CreateConVar("sm_medic_version", VERSION, NAME, FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);

    ConVar CVar;
    (CVar = CreateConVar("sm_medic_addhp", "50", "На какое значение увеличивать здоровье (0 - отключить плагин)", _, true)).AddChangeHook(CVarChanged_AddHP);
    iHP = CVar.IntValue;

    (CVar = CreateConVar("sm_medic_maxhp", "1", "Увеличивать здоровье: 1 - до максимального значения, 0 - выше максимального значения", _, true, _, true, 1.0)).AddChangeHook(CVarChanged_MaxHP);
    bMax = CVar.BoolValue;

    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);

    AutoExecConfig(true, "medic");
}

public void CVarChanged_MaxHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    bMax = CVar.BoolValue;
}

public void CVarChanged_AddHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    iHP = CVar.IntValue;
}

public void OnClientConnected(int client)
{
    bUsed[client] = false;
}

public void Event_NewRound(Event event, char[] name, bool dontBroadcast)
{
    for(int i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Medic(int client, int args)
{
    if(!client || !iHP)
        return Plugin_Handled;

    if(!IsPlayerAlive(client))
    {
        PrintToChat(client, "Только живые могут использовать эту команду!");
        return Plugin_Handled;
    }

    if(bUsed[client])
    {
        PrintToChat(client, "Вы можете использовать эту команду только 1 раз за раунд!");
        return Plugin_Handled;
    }

    int HP = GetClientHealth(client) + iHP, maxHP = GetEntData(client, m_iMaxHealth);
    if(bMax)
    {
        if((HP - iHP) >= maxHP)
        {
            PrintToChat(client, "У Вас слишком много здоровья для лечения!");
            return Plugin_Handled;
        }
        if(HP > maxHP) HP = maxHP;
    }
    PrintToChat(client, "Ваше здоровье увеличено на %iХП!", HP);
    SetEntityHealth(client, HP);
    bUsed[client] = true;

    return Plugin_Handled;
}
--- Добавлено позже ---
@Rabb1t, ну ты и быстрый :ab:
 

Вложения

  • sm_medic.smx
    6.2 КБ · Просмотры: 7
  • sm_medic.sp
    2.7 КБ · Просмотры: 10
Последнее редактирование:

stotik

Участник
Сообщения
116
Реакции
34
Кто может декомпильнуть плагин?
И если есть возможность, то скинуть файл .sp сюда
Нужно немного переделать
 

Вложения

  • randmin_100.smx
    4.7 КБ · Просмотры: 9

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
@BossKotoriiNeSmok, в общем вот тебе плагин и сам настраивай кварами как тебе нужно
PHP:
#pragma semicolon 1
#pragma newdecls required

static const char    NAME[]        = "Medic",
                    VERSION[]    = "1.0.0";

bool bMax,
    bUsed[MAXPLAYERS+1];
int iHP,
    m_iMaxHealth;

public Plugin myinfo =
{
    name        = NAME,
    author        = "Grey83",
    description    = "Лечение единожды за раунд игрока, написавшего команду",
    version        = VERSION,
    url            = "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
    if((m_iMaxHealth = FindSendPropInfo("CCSPlayer", "m_iMaxHealth")) == -1)
        SetFailState("Can't find 'm_iMaxHealth' offset");

    CreateConVar("sm_medic_version", VERSION, NAME, FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);

    ConVar CVar;
    (CVar = CreateConVar("sm_medic_addhp", "50", "На какое значение увеличивать здоровье (0 - отключить плагин)", _, true)).AddChangeHook(CVarChanged_AddHP);
    iHP = CVar.IntValue;

    (CVar = CreateConVar("sm_medic_maxhp", "1", "Увеличивать здоровье: 1 - до максимального значения, 0 - выше максимального значения", _, true, _, true, 1.0)).AddChangeHook(CVarChanged_MaxHP);
    bMax = CVar.BoolValue;

    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);

    AutoExecConfig(true, "medic");
}

public void CVarChanged_MaxHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    bMax = CVar.BoolValue;
}

public void CVarChanged_AddHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    iHP = CVar.IntValue;
}

public void OnClientConnected(int client)
{
    bUsed[client] = false;
}

public void Event_NewRound(Event event, char[] name, bool dontBroadcast)
{
    for(int i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Medic(int client, int args)
{
    if(!client || !iHP)
        return Plugin_Handled;

    if(!IsPlayerAlive(client))
    {
        PrintToChat(client, "Только живые могут использовать эту команду!");
        return Plugin_Handled;
    }

    if(bUsed[client])
    {
        PrintToChat(client, "Вы можете использовать эту команду только 1 раз за раунд!");
        return Plugin_Handled;
    }

    int HP = GetClientHealth(client) + iHP, maxHP = GetEntData(client, m_iMaxHealth);
    if(bMax)
    {
        if((HP - iHP) >= maxHP)
        {
            PrintToChat(client, "У Вас слишком много здоровья для лечения!");
            return Plugin_Handled;
        }
        if(HP > maxHP) HP = maxHP;
    }
    PrintToChat(client, "Ваше здоровье увеличено на %iХП!", HP);
    SetEntityHealth(client, HP);
    bUsed[client] = true;

    return Plugin_Handled;
}
--- Добавлено позже ---
@Rabb1t, ну ты и быстрый :ab:
C-подобный:
L 07/18/2018 - 23:19:01: SourceMod error session started
L 07/18/2018 - 23:19:01: Info (map "de_mirage") (file "errors_20180718.log")
L 07/18/2018 - 23:19:01: [SM] Exception reported: Can't find 'm_iMaxHealth' offset
L 07/18/2018 - 23:19:01: [SM] Blaming: sm_medic.smx
L 07/18/2018 - 23:19:01: [SM] Call stack trace:
L 07/18/2018 - 23:19:01: [SM]   [0] SetFailState
L 07/18/2018 - 23:19:01: [SM]   [1] Line 24, E:\addons\sourcemod\scripting\sm_medic.sp::OnPluginStart
L 07/18/2018 - 23:19:01: [SM] Unable to load plugin "sm_medic.smx": Error detected in plugin startup (see error logs)
 

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
@BossKotoriiNeSmok,
PHP:
bool    bUsed[MAXPLAYERS+1];
int iHP,
    g_iMaxHealth;


public Plugin myinfo =
{
    name        = "Medic",
    author        = "Grey83",
    description    = "Лечение единожды за раунд игрока, написавшего команду",
    version        = "1.0",
    url            = "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
    ConVar CVar;
    (CVar = CreateConVar("sm_medic_addhp", "50", "На какое значение увеличивать здоровье (0 - отключить плагин)", _, true)).AddChangeHook(CVarChanged_AddHP);
    iHP = CVar.IntValue;

    (CVar = CreateConVar("sm_medic_maxhp", "100", "Максимальное значение HP", _, true, 1.0)).AddChangeHook(CVarChanged_MaxHP);
    g_iMaxHealth = CVar.IntValue;

    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);

    AutoExecConfig(true, "medic");
}

public void CVarChanged_MaxHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    g_iMaxHealth = CVar.IntValue;
}

public void CVarChanged_AddHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    iHP = CVar.IntValue;
}

public void Event_NewRound(Event event, char[] name, bool dontBroadcast)
{
    for(int i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Medic(int client, int args)
{
    if(!client || !iHP || !IsPlayerAlive(client))
        return Plugin_Handled;

    if(bUsed[client])
    {
        PrintToChat(client, "Вы можете использовать эту команду только 1 раз за раунд!");
        return Plugin_Handled;
    }

    int HP;
    if((HP = GetClientHealth(client) + iHP) > g_iMaxHealth)
        HP = g_iMaxHealth;
 
    PrintToChat(client, "Ваше здоровье восполнено");
    SetEntityHealth(client, HP);
    bUsed[client] = true;

    return Plugin_Handled;
}
 
Последнее редактирование:

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
@BossKotoriiNeSmok,
PHP:
bool    bUsed[MAXPLAYERS+1];
int iHP,
    g_iMaxHealth;


public Plugin myinfo =
{
    name        = "Medic",
    author        = "Grey83",
    description    = "Лечение единожды за раунд игрока, написавшего команду",
    version        = "1.0",
    url            = "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
    ConVar CVar;
    (CVar = CreateConVar("sm_medic_addhp", "50", "На какое значение увеличивать здоровье (0 - отключить плагин)", _, true)).AddChangeHook(CVarChanged_AddHP);
    iHP = CVar.IntValue;

    (CVar = CreateConVar("sm_medic_maxhp", "100", "Максимальное значение HP", _, true, 1.0)).AddChangeHook(CVarChanged_MaxHP);
    g_iMaxHealth = CVar.IntValue;

    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);

    AutoExecConfig(true, "medic");
}

public void CVarChanged_MaxHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    g_iMaxHealth = CVar.IntValue;
}

public void CVarChanged_AddHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    iHP = CVar.IntValue;
}

public void Event_NewRound(Event event, char[] name, bool dontBroadcast)
{
    for(int i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Medic(int client, int args)
{
    if(!client || !iHP || !IsPlayerAlive(client))
        return Plugin_Handled;

    if(bUsed[client])
    {
        PrintToChat(client, "Вы можете использовать эту команду только 1 раз за раунд!");
        return Plugin_Handled;
    }

    int HP;
    if((HP = GetClientHealth(client) + iHP) > g_iMaxHealth)
        HP = g_iMaxHealth;
 
    PrintToChat(client, "Ваше здоровье восполнено");
    SetEntityHealth(client, HP);
    bUsed[client] = true;

    return Plugin_Handled;
}
Работает,но нет проверки, я могу пополнить хп,даже если у меня фулл хп.
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@BossKotoriiNeSmok, Оффтоп
PHP:
bool    bUsed[MAXPLAYERS+1];
int iHP,
    g_iMaxHealth;


public Plugin myinfo =
{
    name        = "Medic",
    author        = "Grey83",
    description    = "Лечение единожды за раунд игрока, написавшего команду",
    version        = "1.0",
    url            = "https://steamcommunity.com/groups/grey83ds"
};

public void OnPluginStart()
{
    ConVar CVar;
    (CVar = CreateConVar("sm_medic_addhp", "50", "На какое значение увеличивать здоровье (0 - отключить плагин)", _, true)).AddChangeHook(CVarChanged_AddHP);
    iHP = CVar.IntValue;

    (CVar = CreateConVar("sm_medic_maxhp", "100", "Максимальное значение HP", _, true, 1.0)).AddChangeHook(CVarChanged_MaxHP);
    g_iMaxHealth = CVar.IntValue;

    HookEvent("round_start", Event_NewRound);

    RegConsoleCmd("sm_medic", Cmd_Medic);
    RegConsoleCmd("sm_med", Cmd_Medic);

    AutoExecConfig(true, "medic");
}

public void CVarChanged_MaxHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    g_iMaxHealth = CVar.IntValue;
}

public void CVarChanged_AddHP(ConVar CVar, const char[] oldVal, const char[] newVal)
{
    iHP = CVar.IntValue;
}

public void Event_NewRound(Event event, char[] name, bool dontBroadcast)
{
    for(int i; i <= MaxClients; i++) bUsed[i] = false;
}

public Action Cmd_Medic(int client, int args)
{
    if(!client || !iHP || !IsPlayerAlive(client))
        return Plugin_Handled;

    if(bUsed[client])
    {
        PrintToChat(client, "Вы можете использовать эту команду только 1 раз за раунд!");
        return Plugin_Handled;
    }

    int HP;
    if((HP = GetClientHealth(client) + iHP) <= g_iMaxHealth) {
        PrintToChat(client, "Ваше здоровье восполнено");
        SetEntityHealth(client, HP);
        bUsed[client] = true;
    }
    return Plugin_Handled;
}
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
ты же ничего не делаешь с самими игроками в этот момент, поэтому и нет необходимости проверять их наличие на сервере
В CS:GO, к сожалению, всё действительно плохо, как Выше написал Rabb1t.
PHP:
L 07/15/2018 - 15:48:00: [SM] Exception reported: Client index 8 is invalid
L 07/15/2018 - 15:48:00: [SM] Blaming: Discord/Core.smx
L 07/15/2018 - 15:48:00: [SM] Call stack trace:
L 07/15/2018 - 15:48:00: [SM]   [0] FormatNativeString
L 07/15/2018 - 15:48:00: [SM]   [1] Line 132, discord/API.sp::API_SetContent
L 07/15/2018 - 15:48:00: [SM]   [3] Discord_SetContent
L 07/15/2018 - 15:48:00: [SM]   [4] Line 18, chat_logger.sp::OnClientUseChat

PHP:
#include <sourcemod>
#include <discord_extended>

#pragma semicolon 1
#pragma newdecls required

public void OnPluginStart() {
    AddCommandListener(OnClientUseChat, "say");
    AddCommandListener(OnClientUseChat, "say_team");
}

public Action OnClientUseChat(int iClient, const char[] szCommand, int iArgCount) {
    char szMessage[256];
    GetCmdArgString(szMessage, sizeof(szMessage));

    Discord_StartMessage();
    Discord_SetUsername("Chat Logger");
    Discord_SetContent("**%N**, используя %sтекстовый чат, сказал:\n```\n%s\n```", iClient, szCommand[3] == '_' ? "командный " : "", szMessage);
    Discord_EndMessage("chat_logger", true); // отправляем сообщение на веб-хук chat_logger из конфига, одобряя использование стандартного веб-хука, если нужного нет.

    return Plugin_Continue;
}


Я так и не понял, как это возможно в CS:GO, что инвалидный игрок как-то пишет в чат.
Тем более, что инвалид подразумевает что ID либо меньше единицы, либо больше кол-ва слотов. Это вообще выносит мозг.
 

AlexPa1

Участник
Сообщения
292
Реакции
54
Ребят нужен простеньки ДМ как этот Knife_DM но он выдает такую
upload_2018-7-19_7-12-13.png
может есть где то на hlmod'e ?
 

Вложения

  • knife_dm.sp
    6.2 КБ · Просмотры: 5
Сверху Снизу