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

s777

Участник
Сообщения
449
Реакции
74
Плагин блокирует весь урон по тиммейтам, кроме молотова. После сегодняшней обновы перестал блокировать. Может кто глянуть что не так?

#include <sourcemod>
#include <sdkhooks>

public Plugin myinfo = {
name = "Enable FF Molotov/Inc only Damage",
author = "||ECS|| nUy & Ilusion9",
description = "This plugin blocks Friendlyfire but enables incendiary/molotove damage to teammates.",
version = "1.6",
url = "Abhishek Deshkar"
};

ConVar g_Cvar_FriendlyFire;

public void OnPluginStart()
{
g_Cvar_FriendlyFire = FindConVar("mp_friendlyfire");
}

public void OnConfigsExecured()
{
g_Cvar_FriendlyFire.SetInt(1);
}

public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
if (attacker < 1 || attacker > MaxClients || attacker == victim || attacker == inflictor || weapon < 1)
{
return Plugin_Continue;
}

if (GetClientTeam(victim) == GetClientTeam(attacker))
{
return Plugin_Handled;
}

return Plugin_Continue;
}
 

RudikS

Участник
Сообщения
130
Реакции
61
Плагин блокирует весь урон по тиммейтам, кроме молотова. После сегодняшней обновы перестал блокировать. Может кто глянуть что не так?

#include <sourcemod>
#include <sdkhooks>

public Plugin myinfo = {
name = "Enable FF Molotov/Inc only Damage",
author = "||ECS|| nUy & Ilusion9",
description = "This plugin blocks Friendlyfire but enables incendiary/molotove damage to teammates.",
version = "1.6",
url = "Abhishek Deshkar"
};

ConVar g_Cvar_FriendlyFire;

public void OnPluginStart()
{
g_Cvar_FriendlyFire = FindConVar("mp_friendlyfire");
}

public void OnConfigsExecured()
{
g_Cvar_FriendlyFire.SetInt(1);
}

public OnClientPutInServer(client)
{
SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
if (attacker < 1 || attacker > MaxClients || attacker == victim || attacker == inflictor || weapon < 1)
{
return Plugin_Continue;
}

if (GetClientTeam(victim) == GetClientTeam(attacker))
{
return Plugin_Handled;
}

return Plugin_Continue;
}
Обнови sm. В OnTakeDamage передается невалидный attacker
 

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
Как сделать так, чтобы скин выдавался спустя 2 секунды от начала раунда??7 @Grey83 хелпани пж))
 

Вложения

  • sm_personal_skin.sp
    3.1 КБ · Просмотры: 6

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289

Вложения

  • sm_personal_skin.sp
    3.4 КБ · Просмотры: 4
  • sm_personal_skin.smx
    6.8 КБ · Просмотры: 1

RudikS

Участник
Сообщения
130
Реакции
61
Как сделать так, чтобы скин выдавался спустя 2 секунды от начала раунда??7 @Grey83 хелпани пж))
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

Handle kvsteam;

char g_TModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_TArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH];

bool g_SetSkin[MAXPLAYERS+1];

public Plugin myinfo =
{
    name = "Personal Skin",
    author = "LeXuS",
    description = "Personal skins for players.",
    version = "1.0.2",
    url = "http://hlmod.ru/forum/plaginy-dlya-sourcemod/27549-cs-go-personal-skin-v1-0-a.html"
};

public void OnPluginStart()
{
    kvsteam = CreateKeyValues("SteamIDs");
    if(!FileToKeyValues(kvsteam, "addons/sourcemod/configs/sm_personal_skin/steamids.ini"))
    SetFailState("Failed to load addons/sourcemod/configs/sm_personal_skin/steamids.ini");
    HookEvent("player_spawn", Player_Spawn);
}

public void OnMapStart()
{
    Handle file = OpenFile("addons/sourcemod/configs/sm_personal_skin/downloads.txt", "r");
    if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/sm_personal_skin/downloads.txt");
    char path[PLATFORM_MAX_PATH];
    while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
    {
        TrimString(path);
        if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
    }
    CloseHandle(file);
}

public void OnClientPutInServer(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;

        if(IsFakeClient(client)) g_SetSkin[client] = false;
        else
        {
            char authid[32];
            GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));

            KvRewind(kvsteam);
            if((g_SetSkin[client] = KvJumpToKey(kvsteam, authid, false)))
            {
                KvGetString(kvsteam, "model_t", g_TModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_t", g_TArmsID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "model_ct", g_CTModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_ct", g_CTArmsID[client], PLATFORM_MAX_PATH);

                if(g_TModelID[client][0]) PrecacheModel(g_TModelID[client], true);
                if(g_TArmsID[client][0]) PrecacheModel(g_TArmsID[client], true);
                if(g_CTModelID[client][0]) PrecacheModel(g_CTModelID[client], true);
                if(g_CTArmsID[client][0]) PrecacheModel(g_CTArmsID[client], true);
            }
        }
    }
}

public void OnClientDisconnect(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;
    }
}

public void Player_Spawn(Handle event, char[] name, bool dontBroadcast)
{
    CreateTimer(2.0, TimerCallBack, GetClientOfUserId(GetEventInt(event, "userid")));
}

public Action TimerCallBack(Handle hTimer, any userId)
{
    int client = GetClientOfUserId(userId);

    if(client != 0 && IsClientInGame(client))
    {
        if(g_SetSkin[client])
        {
            switch(GetClientTeam(client))
            {
                case 2:
                {
                    if(g_TModelID[client][0]) SetEntityModel(client, g_TModelID[client]);
                    if(g_TArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_TArmsID[client]);
                }
                case 3:
                {
                    if(g_CTModelID[client][0]) SetEntityModel(client, g_CTModelID[client]);
                    if(g_CTArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_CTArmsID[client]);
                }
            }
        }
    }

    return Plugin_Stop;
}
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

Handle kvsteam;

char g_TModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_TArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH];

bool g_SetSkin[MAXPLAYERS+1];

public Plugin myinfo =
{
    name = "Personal Skin",
    author = "LeXuS",
    description = "Personal skins for players.",
    version = "1.0.2",
    url = "http://hlmod.ru/forum/plaginy-dlya-sourcemod/27549-cs-go-personal-skin-v1-0-a.html"
};

public void OnPluginStart()
{
    kvsteam = CreateKeyValues("SteamIDs");
    if(!FileToKeyValues(kvsteam, "addons/sourcemod/configs/sm_personal_skin/steamids.ini"))
    SetFailState("Failed to load addons/sourcemod/configs/sm_personal_skin/steamids.ini");
    HookEvent("player_spawn", Player_Spawn);
}

public void OnMapStart()
{
    Handle file = OpenFile("addons/sourcemod/configs/sm_personal_skin/downloads.txt", "r");
    if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/sm_personal_skin/downloads.txt");
    char path[PLATFORM_MAX_PATH];
    while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
    {
        TrimString(path);
        if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
    }
    CloseHandle(file);
}

public void OnClientPutInServer(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;

        if(IsFakeClient(client)) g_SetSkin[client] = false;
        else
        {
            char authid[32];
            GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));

            KvRewind(kvsteam);
            if((g_SetSkin[client] = KvJumpToKey(kvsteam, authid, false)))
            {
                KvGetString(kvsteam, "model_t", g_TModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_t", g_TArmsID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "model_ct", g_CTModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_ct", g_CTArmsID[client], PLATFORM_MAX_PATH);

                if(g_TModelID[client][0]) PrecacheModel(g_TModelID[client], true);
                if(g_TArmsID[client][0]) PrecacheModel(g_TArmsID[client], true);
                if(g_CTModelID[client][0]) PrecacheModel(g_CTModelID[client], true);
                if(g_CTArmsID[client][0]) PrecacheModel(g_CTArmsID[client], true);
            }
        }
    }
}

public void OnClientDisconnect(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;
    }
}

public void Player_Spawn(Handle event, char[] name, bool dontBroadcast)
{
    CreateTimer(2.0, TimerCallBack, GetClientOfUserId(GetEventInt(event, "userid")));
}

public Action TimerCallBack(Handle hTimer, any userId)
{
    int client = GetClientOfUserId(userId);

    if(client != 0 && IsClientInGame(client))
    {
        if(g_SetSkin[client])
        {
            switch(GetClientTeam(client))
            {
                case 2:
                {
                    if(g_TModelID[client][0]) SetEntityModel(client, g_TModelID[client]);
                    if(g_TArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_TArmsID[client]);
                }
                case 3:
                {
                    if(g_CTModelID[client][0]) SetEntityModel(client, g_CTModelID[client]);
                    if(g_CTArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_CTArmsID[client]);
                }
            }
        }
    }

    return Plugin_Stop;
}
Не боитесь, если в течение двух секунд карта сменится или игрок умрет?)
 

RudikS

Участник
Сообщения
130
Реакции
61
Вроде ничего не пропустил.
C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

Handle kvsteam;

char g_TModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_TArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH];

bool g_SetSkin[MAXPLAYERS+1];

public Plugin myinfo =
{
    name = "Personal Skin",
    author = "LeXuS",
    description = "Personal skins for players.",
    version = "1.0.2",
    url = "http://hlmod.ru/forum/plaginy-dlya-sourcemod/27549-cs-go-personal-skin-v1-0-a.html"
};

public void OnPluginStart()
{
    kvsteam = CreateKeyValues("SteamIDs");
    if(!FileToKeyValues(kvsteam, "addons/sourcemod/configs/sm_personal_skin/steamids.ini"))
    SetFailState("Failed to load addons/sourcemod/configs/sm_personal_skin/steamids.ini");
    HookEvent("player_spawn", Player_Spawn);
}

public void OnMapStart()
{
    Handle file = OpenFile("addons/sourcemod/configs/sm_personal_skin/downloads.txt", "r");
    if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/sm_personal_skin/downloads.txt");
    char path[PLATFORM_MAX_PATH];
    while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
    {
        TrimString(path);
        if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
    }
    CloseHandle(file);
}

public void OnClientPutInServer(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;

        if(IsFakeClient(client)) g_SetSkin[client] = false;
        else
        {
            char authid[32];
            GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));

            KvRewind(kvsteam);
            if((g_SetSkin[client] = KvJumpToKey(kvsteam, authid, false)))
            {
                KvGetString(kvsteam, "model_t", g_TModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_t", g_TArmsID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "model_ct", g_CTModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_ct", g_CTArmsID[client], PLATFORM_MAX_PATH);

                if(g_TModelID[client][0]) PrecacheModel(g_TModelID[client], true);
                if(g_TArmsID[client][0]) PrecacheModel(g_TArmsID[client], true);
                if(g_CTModelID[client][0]) PrecacheModel(g_CTModelID[client], true);
                if(g_CTArmsID[client][0]) PrecacheModel(g_CTArmsID[client], true);
            }
        }
    }
}

public void OnClientDisconnect(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;
    }
}

public void Player_Spawn(Handle event, char[] name, bool dontBroadcast)
{
    int userId = GetEventInt(event, "userid");
    int client = GetClientOfUserId(userId);
    if(g_SetSkin[client])
    {
        CreateTimer(2.0, TimerCallBack, userId, TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action TimerCallBack(Handle hTimer, any userId)
{
    int client = GetClientOfUserId(userId);

    if(client != 0 && IsClientInGame(client) && IsPlayerAlive(client))
    {
        switch(GetClientTeam(client))
        {
            case 2:
            {
                if(g_TModelID[client][0]) SetEntityModel(client, g_TModelID[client]);
                if(g_TArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_TArmsID[client]);
            }
            case 3:
            {
                if(g_CTModelID[client][0]) SetEntityModel(client, g_CTModelID[client]);
                if(g_CTArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_CTArmsID[client]);
            }
        }
    }

    return Plugin_Stop;
}
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
Если карта сменится в течение двух секунд после появления игрока, игрок в некой долей зайдет за другую команду и появится со скином чу
Вроде ничего не пропустил.

C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>

Handle kvsteam;

char g_TModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_TArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTModelID[MAXPLAYERS+1][PLATFORM_MAX_PATH],
    g_CTArmsID[MAXPLAYERS+1][PLATFORM_MAX_PATH];

bool g_SetSkin[MAXPLAYERS+1];

public Plugin myinfo =
{
    name = "Personal Skin",
    author = "LeXuS",
    description = "Personal skins for players.",
    version = "1.0.2",
    url = "http://hlmod.ru/forum/plaginy-dlya-sourcemod/27549-cs-go-personal-skin-v1-0-a.html"
};

public void OnPluginStart()
{
    kvsteam = CreateKeyValues("SteamIDs");
    if(!FileToKeyValues(kvsteam, "addons/sourcemod/configs/sm_personal_skin/steamids.ini"))
    SetFailState("Failed to load addons/sourcemod/configs/sm_personal_skin/steamids.ini");
    HookEvent("player_spawn", Player_Spawn);
}

public void OnMapStart()
{
    Handle file = OpenFile("addons/sourcemod/configs/sm_personal_skin/downloads.txt", "r");
    if(file == INVALID_HANDLE) SetFailState("Failed to open addons/sourcemod/configs/sm_personal_skin/downloads.txt");
    char path[PLATFORM_MAX_PATH];
    while(!IsEndOfFile(file) && ReadFileLine(file, path, PLATFORM_MAX_PATH))
    {
        TrimString(path);
        if(IsCharAlpha(path[0])) AddFileToDownloadsTable(path);
    }
    CloseHandle(file);
}

public void OnClientPutInServer(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;

        if(IsFakeClient(client)) g_SetSkin[client] = false;
        else
        {
            char authid[32];
            GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid));

            KvRewind(kvsteam);
            if((g_SetSkin[client] = KvJumpToKey(kvsteam, authid, false)))
            {
                KvGetString(kvsteam, "model_t", g_TModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_t", g_TArmsID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "model_ct", g_CTModelID[client], PLATFORM_MAX_PATH);
                KvGetString(kvsteam, "arms_ct", g_CTArmsID[client], PLATFORM_MAX_PATH);

                if(g_TModelID[client][0]) PrecacheModel(g_TModelID[client], true);
                if(g_TArmsID[client][0]) PrecacheModel(g_TArmsID[client], true);
                if(g_CTModelID[client][0]) PrecacheModel(g_CTModelID[client], true);
                if(g_CTArmsID[client][0]) PrecacheModel(g_CTArmsID[client], true);
            }
        }
    }
}

public void OnClientDisconnect(client)
{
    if(client)
    {
        g_TModelID[client][0] = 0;
        g_TArmsID[client][0] = 0;
        g_CTModelID[client][0] = 0;
        g_CTArmsID[client][0] = 0;
    }
}

public void Player_Spawn(Handle event, char[] name, bool dontBroadcast)
{
    int userId = GetEventInt(event, "userid");
    int client = GetClientOfUserId(userId);
    if(g_SetSkin[client])
    {
        CreateTimer(2.0, TimerCallBack, userId, TIMER_FLAG_NO_MAPCHANGE);
    }
}

public Action TimerCallBack(Handle hTimer, any userId)
{
    int client = GetClientOfUserId(userId);

    if(client != 0 && IsClientInGame(client) && IsPlayerAlive(client))
    {
        switch(GetClientTeam(client))
        {
            case 2:
            {
                if(g_TModelID[client][0]) SetEntityModel(client, g_TModelID[client]);
                if(g_TArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_TArmsID[client]);
            }
            case 3:
            {
                if(g_CTModelID[client][0]) SetEntityModel(client, g_CTModelID[client]);
                if(g_CTArmsID[client][0]) SetEntPropString(client, Prop_Send, "m_szArmsModel", g_CTArmsID[client]);
            }
        }
    }

    return Plugin_Stop;
}
Еще можно оставлять одно условие, в принципе client > 0 и IsClientInGame(client) - эквивалентны
 

RudikS

Участник
Сообщения
130
Реакции
61
Если карта сменится в течение двух секунд после появления игрока, игрок в некой долей зайдет за другую команду и появится со скином чу

Еще можно оставлять одно условие, в принципе client > 0 и IsClientInGame(client) - эквивалентны
не прокатит
 

Вложения

  • 1595622177549.png
    1595622177549.png
    3.7 КБ · Просмотры: 22

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
Если карта сменится в течение двух секунд после появления игрока, игрок в некой долей зайдет за другую команду и появится со скином чу

Еще можно оставлять одно условие, в принципе client > 0 и IsClientInGame(client) - эквивалентны
Можно ли как то добавить отключение скина командой? тип !offskin или что-то такое? ну и естественно включение,если захочет)
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
Можно ли как то добавить отключение скина командой? тип !offskin или что-то такое? ну и естественно включение,если захочет)
Вот, пожалуйста. !offskin - игрок не будет получать скин при спавне, !onskin - реверс.
 

Вложения

  • sm_personal_skin.smx
    7.2 КБ · Просмотры: 1
  • sm_personal_skin.sp
    4 КБ · Просмотры: 6

BossKotoriiNeSmok

Участник
Сообщения
976
Реакции
189
@DENFER, можн дописать, тип "Ваш персональный скин будет выключен в следующем раунде", так же и с включение "Ваш персональный скин будет включен в следующем раунде"?:)
 

DENFER

Пишу плагины за два биг тести и картошку фри..
Сообщения
260
Реакции
289
@DENFER, можн дописать, тип "Ваш персональный скин будет выключен в следующем раунде", так же и с включение "Ваш персональный скин будет включен в следующем раунде"?:)
Вот, держи. Но дело в том, что если игрок допустим пропишет !onskin в течение 2 секунд после спавна, надпись высветится, но скин все равно сменится) (или умрет и его возродят)
Сообщения автоматически склеены:

Вы не правильно меня поняли) Я имею ввиду, что эффект одинаковый, по мне проще написать просто if(client), чем if(IsClientInGame(client)), ну чисто принципиально)
 

Вложения

  • sm_personal_skin.sp
    4.3 КБ · Просмотры: 4
  • sm_personal_skin.smx
    7.3 КБ · Просмотры: 2
Последнее редактирование:

0-BuTaJIuK-0

Участник
Сообщения
235
Реакции
57
Делаю дм сервер значит, выходит обновление, в итоге:

C-подобный:
public Action OnTraceAttack(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &ammotype, int hitbox, int hitgroup)
{
    PrintToChatAll("attacker = %i", attacker);
}
ииии
public Action OnTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype)
{
    PrintToChatAll("attacker = %i", attacker);
}

При попадании в игрока, в обоих случаях: "attacker = -1" (до обновы всё работало отлично)
Что случилось после обновления, как это теперь работает?



Вызов:

C-подобный:
public void OnClientPutInServer(int client)
{
    SDKHook(client, SDKHook_TraceAttack, OnTraceAttack);
    SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}

public void OnClientDisconnect(int client)
{
    RemoveRagdoll(client);
    SDKUnhook(client, SDKHook_TraceAttack, OnTraceAttack);
    SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage);
}
 
Последнее редактирование:

lesha

Участник
Сообщения
84
Реакции
7
Добрый день! Напишите пожалуйста кто нибудь плагин, на ограничения покупки гранат по времени, то есть к примеру с начала раунда закуп гранат действует 30 секунд, после 30 секунд что бы нельзя было купить гранаты, а все остальное оружие можно было купить
 
Сверху Снизу