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

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
Держи уже проверил =)
привёл в божеский вид этот переделанный декомпил
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_hooks>

bool bEnabled;

public void OnPluginStart()
{
    ConVar CVar;
    (CVar = CreateConVar("sm_noscope_enable", "1", "On/Off block zoom for sniper rifles", FCVAR_NOTIFY, true, _, true, 1.0)).AddChangeHook(CVarChanged);
    bEnabled = CVar.BoolValue;

    AutoExecConfig(true, "noscope");
}

public void CVarChanged(ConVar CVar, const char[] oldValue, const char[] newValue)
{
    bEnabled = CVar.BoolValue;
}

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon)
{
    if(bEnabled && (buttons & IN_ATTACK2))
    {
        static int active_weapon;
        if((active_weapon = GetEntPropEnt(client, Prop_Send, "m_hActiveWeapon")) != -1)
        {
            static char wpn[32];
            GetEdictClassname(active_weapon, wpn, 32);
            if(StrEqual(wpn[7], "awp", false) || StrEqual(wpn[7], "scout", false)
            || StrEqual(wpn[7], "sg550", false) || StrEqual(wpn[7], "g3sg1", false))
                buttons &= ~IN_ATTACK2;
        }
    }

    return Plugin_Continue;
}
 

Вложения

  • noscope.sp
    1 КБ · Просмотры: 18
  • noscope.smx
    4.4 КБ · Просмотры: 12

edgar

Участник
Сообщения
139
Реакции
12
Прошу исправить код. При спавне появляется дигл, с которого нельзя стрелять) И при заходе в начале нового раунда дигл рабочий(не срабатывает плагин).
#pragma semicolon 1
#pragma newdecls required

ConVar hs_Weapon; char s_Weapon[22];

public void OnPluginStart()
{
hs_Weapon = CreateConVar("sm_weapondelete", "weapon_deagle", _);
hs_Weapon.AddChangeHook(Cvar_s_Weapon);
GetConVarString(hs_Weapon, s_Weapon, sizeof(s_Weapon));
HookEvent("round_start", Cleanup, EventHookMode_PostNoCopy);
AutoExecConfig(true, "weapondelete");
}

public void Cvar_s_Weapon(Handle convar, const char[] oldValue, const char[] newValue)
{
GetConVarString(hs_Weapon, s_Weapon, sizeof(s_Weapon));
}

public void Cleanup(Event event, const char[] name, bool dontBroadcast)
{
int maxEntitiesCout = GetEntityCount();
char SerWeapon[22];
for (int i = MaxClients + 1; i < maxEntitiesCout; ++i)
{
if (IsValidEdict(i) && GetEdictClassname(i, SerWeapon, sizeof(SerWeapon)))
{
if (strcmp(SerWeapon, s_Weapon) == 0)RemoveEdict(i);
}
}
}
 

Felton

Участник
Сообщения
799
Реакции
59
C-подобный:
#pragma semicolon 1
#include <sourcemod>

public Plugin:myinfo =
{
    name    = "Spawn Protect",
    author    = "wS / Schmidt",
    version    = "1.1",
    url        = "http://world-source.ru/"
};

new Handle:spawn_protect_timer[MAXPLAYERS + 1];
new Handle:spawn_protect_sec;

public OnPluginStart()
{
    spawn_protect_sec = CreateConVar("spawn_protect_sec", "2", "Сколько сек защищать игрока после рождения", _, true, 1.0);
    HookEvent("player_spawn", player_spawn);
}


///


public player_spawn(Handle:event, const String:name[], bool:silent)
{
    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    Kill_Protect_Timer(client);
    SetEntProp(client, Prop_Data, "m_takedamage", 0);
    SetNewColor(client, 0, 255, 0, 75);
    spawn_protect_timer[client] = CreateTimer(GetConVarFloat(spawn_protect_sec), StopProtect, client);
}

SetNewColor(client, r, g, b, a)
{
    SetEntityRenderMode(client, RENDER_TRANSCOLOR);
    SetEntityRenderColor(client, r, g, b, a);
}

public Action:StopProtect(Handle:timer, any:client)
{
    spawn_protect_timer[client] = INVALID_HANDLE;
    if (IsPlayerAlive(client))
    {
        SetEntProp(client, Prop_Data, "m_takedamage", 2);
        SetNewColor(client, 255, 255, 255, 255);
    }
    return Plugin_Stop;
}


///


public OnClientDisconnect(client)
{
    Kill_Protect_Timer(client);
}

Kill_Protect_Timer(client)
{
    if (spawn_protect_timer[client] != INVALID_HANDLE)
    {
        KillTimer(spawn_protect_timer[client]);
        spawn_protect_timer[client] = INVALID_HANDLE;
    }
}
А можно в этом плагине переделать для каждой стороны задать свой цвет при рождении?для терроров один цвет а для кт другой.
@Райский
Не захотел на моём стареньком sourcemod компелироваться.Пришлась онлайн компилом воспользоваться.Всё ок.Ошибок нет.
@Grey83
А этот код даже онлайн компилом не компелиться.
Всем спасибо!
Да и вот еще можете ещё поправить плагин spawn_protect ?Заранее спасибо!
 

Felton

Участник
Сообщения
799
Реакции
59
@Grey83,
Ну это и понятно.У меня SM старенький вот и поэтому так.
А по вопросу spawn_protect сможеш помоч?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@edgar, для кода используй теги
HTML:
[PHP][/PHP]
При спавне появляется дигл, с которого нельзя стрелять)
Потому что неправильно удаляешь предмет.
И при заходе в начале нового раунда дигл рабочий(не срабатывает плагин).
А ты это событие и не отлавливаешь.

Пробуй вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>
#include <sdktools_entinput>

int iWpnOffset = -1;
char sWeapon[22];

public void OnPluginStart()
{
    iWpnOffset = FindSendPropInfo("CCSPlayer", "m_hMyWeapons");

    ConVar CVar;
    (CVar = CreateConVar("sm_weapondelete", "weapon_deagle", _, FCVAR_PRINTABLEONLY)).AddChangeHook(CVarChanged);
    CVar.GetString(sWeapon, sizeof(sWeapon));
    TrimString(sWeapon);

    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_PlayerSpawn);

    AutoExecConfig(true, "weapondelete");
}

public void CVarChanged(ConVar CVar, const char[] oldValue, const char[] newValue)
{
    strcopy(sWeapon, sizeof(sWeapon), newValue);
    TrimString(sWeapon);
}

public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    if(!sWeapon[0]) return;

    for(int i = MaxClients+1, max_ent = GetEntityCount(), client; i <= max_ent; ++i) if(IsWeaponValid(i))
    {
        if(0 < (client = GetEntPropEnt(i, Prop_Data, "m_hOwnerEntity")) <= MaxClients) RemovePlayerItem(client, i);
        AcceptEntityInput(i, "Kill");
    }
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(!(client = GetClientOfUserId(event.GetInt("userid")))) return;

    static int i, ent;
    for(i = 0; i < 48; i++) if((ent = GetEntDataEnt2(client, iWpnOffset + i * 4)) != -1 && IsWeaponValid(i))
    {
        RemovePlayerItem(client, ent);
        AcceptEntityInput(ent, "Kill");
    }
}

stock bool IsWeaponValid(int entity)
{
    static char wpn[22];
    return IsValidEdict(entity) && GetEdictClassname(entity, wpn, sizeof(wpn)) && !strcmp(wpn, sWeapon);
}
 

Вложения

  • sm_weapondelete.sp
    1.7 КБ · Просмотры: 22
  • sm_weapondelete.smx
    5.1 КБ · Просмотры: 15

edgar

Участник
Сообщения
139
Реакции
12
@edgar, для кода используй теги
HTML:
[PHP][/PHP]
Потому что неправильно удаляешь предмет.А ты это событие и не отлавливаешь.

Пробуй вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>
#include <sdktools_entinput>

int iWpnOffset = -1;
char sWeapon[22];

public void OnPluginStart()
{
    iWpnOffset = FindSendPropInfo("CCSPlayer", "m_hMyWeapons");

    ConVar CVar;
    (CVar = CreateConVar("sm_weapondelete", "weapon_deagle", _, FCVAR_PRINTABLEONLY)).AddChangeHook(CVarChanged);
    CVar.GetString(sWeapon, sizeof(sWeapon));
    TrimString(sWeapon);

    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_PlayerSpawn);

    AutoExecConfig(true, "weapondelete");
}

public void CVarChanged(ConVar CVar, const char[] oldValue, const char[] newValue)
{
    strcopy(sWeapon, sizeof(sWeapon), newValue);
    TrimString(sWeapon);
}

public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    if(!sWeapon[0]) return;

    for(int i = MaxClients+1, max_ent = GetEntityCount(), client; i <= max_ent; ++i) if(IsWeaponValid(i))
    {
        if(0 < (client = GetEntPropEnt(i, Prop_Data, "m_hOwnerEntity")) <= MaxClients) RemovePlayerItem(client, i);
        AcceptEntityInput(i, "Kill");
    }
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(!(client = GetClientOfUserId(event.GetInt("userid")))) return;

    static int i, ent;
    for(i = 0; i < 48; i++) if((ent = GetEntDataEnt2(client, iWpnOffset + i * 4)) != -1 && IsWeaponValid(i))
    {
        RemovePlayerItem(client, ent);
        AcceptEntityInput(ent, "Kill");
    }
}

stock bool IsWeaponValid(int entity)
{
    static char wpn[22];
    return IsValidEdict(entity) && GetEdictClassname(entity, wpn, sizeof(wpn)) && !strcmp(wpn, sWeapon);
}
Спасибо)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@Felton, ты про окрашивание игроков?
PHP:
#pragma semicolon 1

static const iColor[][] =
{
    {255, 64, 64},    // террористы
    {153, 204, 255}    // контр-террористы
};

public Plugin:myinfo =
{
    name    = "Spawn Protect",
    author    = "wS / Schmidt (mod by Grey83)",
    version    = "1.1.1",
    url        = "http://world-source.ru/"
};

new Handle:hProtectTimer[MAXPLAYERS+1],
    Float:fProtectTimer;

public OnPluginStart()
{
    new Handle:CVar;
    HookConVarChange((CVar = CreateConVar("spawn_protect_sec", "2", "Сколько сек защищать игрока после рождения (<1 - отключено)", _, true, 0.0)), CVarChanged);
    fProtectTimer = GetConVarFloat(CVar);

    HookEvent("player_spawn", Event_Spawn);
}

public CVarChanged(Handle:CVar, const String:oldValue[], const String:newValue[])
{
    fProtectTimer = GetConVarFloat(CVar);
}

public Event_Spawn(Handle:event, const String:name[], bool:silent)
{
    if(fProtectTimer < 1) return;

    new client = GetClientOfUserId(GetEventInt(event, "userid"));
    if(!client) return;

    new team = GetClientTeam(client);
    if(team < 2) return;

    team -= 2;
    SetNewColor(client, iColor[team][0], iColor[team][1], iColor[team][2], 75);
    Kill_Protect_Timer(client);
    SetEntProp(client, Prop_Data, "m_takedamage", 0);
    hProtectTimer[client] = CreateTimer(fProtectTimer, StopProtect, GetClientUserId(client));
}

public Action:StopProtect(Handle:timer, any:client)
{
    if((client = GetClientOfUserId(client)) && IsPlayerAlive(client))
    {
        SetEntProp(client, Prop_Data, "m_takedamage", 2);
        SetNewColor(client, 255, 255, 255, 255);
    }
    hProtectTimer[client] = INVALID_HANDLE;
}

SetNewColor(client, r, g, b, a)
{
    SetEntityRenderMode(client, RENDER_TRANSCOLOR);
    SetEntityRenderColor(client, r, g, b, a);
}

public OnClientDisconnect(client)
{
    Kill_Protect_Timer(client);
}

Kill_Protect_Timer(client)
{
    if(hProtectTimer[client] != INVALID_HANDLE)
    {
        KillTimer(hProtectTimer[client]);
        hProtectTimer[client] = INVALID_HANDLE;
    }
}
 

Вложения

  • spawn_protect.sp
    2 КБ · Просмотры: 23
  • spawn_protect.smx
    5.2 КБ · Просмотры: 12

Felton

Участник
Сообщения
799
Реакции
59
@Grey83,
Скомпелировалась бес проблем.Ошибки плагин не даёт.Всё ок!Ну не пойму как свой цвет добавить каждой команде.Тут они какието полу прозрачные а мне такого не надо.Почему в оригинале идет 4 цвета SetNewColor(client, 0, 255, 255, 250); а у тебя 3 {255, 64, 64}, // террористы.Возникает вопрос как установить свой цвет?За труды спасибо!
Я хотел теры красные-250 0 0 255
кт синие- 0 0 255 255
и как тут цвета менять не пойму.Тут то SetNewColor(client, 255, 255, 255, 255); а почему {153, 204, 255} // контр-террористы.
 
Последнее редактирование:

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
@Grey83,
Скомпелировалась бес проблем.Ошибки плагин не даёт.Всё ок!Ну не пойму как свой цвет добавить каждой команде.Тут они какието полу прозрачные а мне такого не надо.Почему в оригинале идет 4 цвета SetNewColor(client, 0, 255, 255, 250); а у тебя 3 {255, 64, 64}, // террористы.Возникает вопрос как установить свой цвет?За труды спасибо!
Я хотел теры красные-250 0 0 255
кт синие- 0 0 255 255
и как тут цвета менять не пойму.Тут то SetNewColor(client, 255, 255, 255, 255); а почему {153, 204, 255} // контр-террористы.
Тут цвета. Смотри колонку RGB
 

Felton

Участник
Сообщения
799
Реакции
59
@Райский,
И как мне это поможет?как были они поупрозрачные так и после смены цвета так и остались
{255, 0, 0}, // террористы
{0, 0, 255} // контр-террористы
Разные цвета устанавливал итог -они вообще не меняются.Мне нужно 4 цвета.
прбывал так
{255, 0, 0, 255 }, // террористы
{0, 0, 255, 255 } // контр-террористы
Цвета не меняются.
Вообщем поставил оригинал плагин с одним цветом SetNewColor(client, 0, 255, 255, 255)Жалкко что не получилось с двумя цветами.
 
Последнее редактирование:

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
@Райский,
И как мне это поможет?как были они поупрозрачные так и после смены цвета так и остались
{255, 0, 0}, // террористы
{0, 0, 255} // контр-террористы
Разные цвета устанавливал итог -они вообще не меняются.Мне нужно 4 цвета.
прбывал так
{255, 0, 0, 255 }, // террористы
{0, 0, 255, 255 } // контр-террористы
Цвета не меняются.
Вообщем поставил оригинал плагин с одним цветом SetNewColor(client, 0, 255, 255, 255)Жалкко что не получилось с двумя цветами.
Вот убрал RGBA , сделал RGB. Посмотри, то что тебе надо ?
 

Вложения

  • spawn_protect.smx
    6.4 КБ · Просмотры: 14
  • spawn_protect.sp
    1.9 КБ · Просмотры: 18

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
@Felton, в строке SetNewColor(client, iColor[team][0], iColor[team][1], iColor[team][2], 75); последний параметр отвечает за прозрачность.
Если хочешь сделать игрока полностью непрозрачным, то просто замени 75 на 255
А в массиве просто указаны значения для каналов: Красный, Зелёный и Синий
 

Felton

Участник
Сообщения
799
Реакции
59
@Райский
Твой код не захотел на моём стареньком sourcemod компелироваться -выдал много ошибокПришлась онлайн компилом воспользоваться.Закинул на домашний сервер.Выдаёт ошибку "spawn_protect.smx": Native "__FLOAT_LT__" was not found
@Grey83,
@Felton, в строке SetNewColor(client, iColor[team][0], iColor[team][1], iColor[team][2], 75); последний параметр отвечает за прозрачность.
Если хочешь сделать игрока полностью непрозрачным, то просто замени 75 на 255
А в массиве просто указаны значения для каналов: Красный, Зелёный и Синий
Сделал как написал всё работает как часики всё ок не эррорит.
Взял этот плагин от Grey83.Теперь работает как надо.Спасибо вам ребята за помощ!
 

☠ ÄйӃи ☠

Добрая душа
Сообщения
220
Реакции
86
@Райский
Твой код не захотел на моём стареньком sourcemod компелироваться -выдал много ошибокПришлась онлайн компилом воспользоваться.Закинул на домашний сервер.Выдаёт ошибку "spawn_protect.smx": Native "__FLOAT_LT__" was not found
@Grey83,

Сделал как написал всё работает как часики всё ок не эррорит.
Взял этот плагин от Grey83.Теперь работает как надо.Спасибо вам ребята за помощ!
То что я тебе кинул. Сам протестил и всё нормально smx приложил. Не каких Error нету компилю на SM 1.9 на сервере 1.8 и всё же проблем так и не обнаружил.
Ну ладно если что пиши еще поможем чем сможем =)
 

pashek71

Участник
Сообщения
232
Реакции
43
Подскажите как можно принудительно закончить раунд? игра cs:go
 

edgar

Участник
Сообщения
139
Реакции
12
@edgar, для кода используй теги
HTML:
[PHP][/PHP]
Потому что неправильно удаляешь предмет.А ты это событие и не отлавливаешь.

Пробуй вот так:
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_functions>
#include <sdktools_entinput>

int iWpnOffset = -1;
char sWeapon[22];

public void OnPluginStart()
{
    iWpnOffset = FindSendPropInfo("CCSPlayer", "m_hMyWeapons");

    ConVar CVar;
    (CVar = CreateConVar("sm_weapondelete", "weapon_deagle", _, FCVAR_PRINTABLEONLY)).AddChangeHook(CVarChanged);
    CVar.GetString(sWeapon, sizeof(sWeapon));
    TrimString(sWeapon);

    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_PlayerSpawn);

    AutoExecConfig(true, "weapondelete");
}

public void CVarChanged(ConVar CVar, const char[] oldValue, const char[] newValue)
{
    strcopy(sWeapon, sizeof(sWeapon), newValue);
    TrimString(sWeapon);
}

public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    if(!sWeapon[0]) return;

    for(int i = MaxClients+1, max_ent = GetEntityCount(), client; i <= max_ent; ++i) if(IsWeaponValid(i))
    {
        if(0 < (client = GetEntPropEnt(i, Prop_Data, "m_hOwnerEntity")) <= MaxClients) RemovePlayerItem(client, i);
        AcceptEntityInput(i, "Kill");
    }
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    static int client;
    if(!(client = GetClientOfUserId(event.GetInt("userid")))) return;

    static int i, ent;
    for(i = 0; i < 48; i++) if((ent = GetEntDataEnt2(client, iWpnOffset + i * 4)) != -1 && IsWeaponValid(i))
    {
        RemovePlayerItem(client, ent);
        AcceptEntityInput(ent, "Kill");
    }
}

stock bool IsWeaponValid(int entity)
{
    static char wpn[22];
    return IsValidEdict(entity) && GetEdictClassname(entity, wpn, sizeof(wpn)) && !strcmp(wpn, sWeapon);
}
Под определенный тайминт, если зайти со спеков за команду - дигл остается. Можно пофиксить это?
 

LeXon

Участник
Сообщения
328
Реакции
30
Плагин CSS:DM
Требуется вырезать с него всё кроме оружия, и меню, т.е. оставить конфиг файлы и перевод только с для оружия, удалить также выдачу defuse щипцы, ночное видение, т.к щипцы спамили при спавне, в итоге усыпана вся карта на GG.
Оставить прежний состав меню.
1. Новое оружие
2. Предыдущее оружие
3. Всегда предыдущее оружие
4. Рандом оружие
5. Всегда рандом оружие

Вдруг кто возьмётся, интересует меню оружиё только с этой актуальной версии, т.к другие малосимпатичны.
 

Вложения

  • cssdm-2.1.6-git246-windows.zip
    297.3 КБ · Просмотры: 17
Сверху Снизу