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

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@-=|УЧЕНИК|=-, т.е. работает.
Можно прикрутить обратно таймер, только проверку на владельца скорее всего придётся вырубить (кмк, у дыма владельца не будет, хотя вы можете всегда это сами проверить)
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
@-=|УЧЕНИК|=-, т.е. работает.
Можно прикрутить обратно таймер, только проверку на владельца скорее всего придётся вырубить (кмк, у дыма владельца не будет, хотя вы можете всегда это сами проверить)
Работает да,удаляет его.
С таймером попробую проверить<спасибо.
Ну если получится)
 

Охотник НА ЗМЕЙ

Скользкий ТИП
Сообщения
218
Реакции
52
Так и будет
Там реализация совсем другая
не как во всяких смоуках,тип цветной дым и т.д
Вроде можно сделать так. Когда кинул дым он 40 секунд держится если не ошибаюсь.. и после этого истечении старого дыма сразу же появляется новый дым. И то время которое ты хочешь выставить продолжение дыма
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Вроде можно сделать так. Когда кинул дым он 40 секунд держится если не ошибаюсь.. и после этого истечении старого дыма сразу же появляется новый дым. И то время которое ты хочешь выставить продолжение дыма
Смысле?
Всю жизнь быть в дыму что ли?
Удаление дыма,реализовано в других плагинах,таких как цветной дым и подобной ерунде.
Там да,дым удаляется по времени через таймер.
Что касеться стандарт дыма в игре,то это совсем другая история,которая не относится к этим плагинам ваше не как,даже по коду.
 

Охотник НА ЗМЕЙ

Скользкий ТИП
Сообщения
218
Реакции
52
Смысле?
Всю жизнь быть в дыму что ли?
Удаление дыма,реализовано в других плагинах,таких как цветной дым и подобной ерунде.
Там да,дым удаляется по времени через таймер.
Что касеться стандарт дыма в игре,то это совсем другая история,которая не относится к этим плагинам ваше не как,даже по коду.
Теперь понял.
 

NeLifeASkazka

Участник
Сообщения
128
Реакции
70
Вроде можно сделать так. Когда кинул дым он 40 секунд держится если не ошибаюсь.. и после этого истечении старого дыма сразу же появляется новый дым. И то время которое ты хочешь выставить продолжение дыма

Проверите плагин:
code:
#define DEFAULT_DURATION_SMOK   18.0 // Стандартная продолжительность смока !не менять! (Возможно стоит сменить т.к. я не помню какая продолжительность стандартного смока)
#define DURATION_SMOK   10.0
public void OnEntityCreated(int entity, const char[] classname){
    if(StrEqual(classname, "env_particlesmokegrenade", false))
        SDKHook(entity, SDKHook_SpawnPost, OnSpawnPostProjectile);
}
public void OnSpawnPostProjectile(int smoke){
    float pos_smoke[3];
    GetEntPropVector(smoke, Prop_Send, "m_vecOrigin", pos_smoke);
    int grenade;
    while((grenade = FindEntityByClassname(grenade, "smokegrenade_projectile")) > 0){
        float pos_nade[3];
        GetEntPropVector(grenade, Prop_Send, "m_vecOrigin", pos_nade);
        if(pos_smoke[0] == pos_nade[0] && pos_smoke[1] == pos_nade[1] && pos_smoke[2] == pos_nade[2]){
            int owner = GetEntPropEnt(grenade, Prop_Data, "m_hOwnerEntity");
            if(owner > 0){
                if(DURATION_SMOK > DEFAULT_DURATION_SMOK){
                    float fade_start = GetEntPropFloat(smoke, Prop_Send, "m_FadeStartTime");
                    float fade_end = GetEntPropFloat(smoke, Prop_Send, "m_FadeEndTime");
                    int stage = GetEntProp(smoke, Prop_Send, "m_CurrentStage");
                    AcceptEntityInput(smoke, "kill");
                    int new_smoke = CreateEntityByName("env_particlesmokegrenade");
                    if(new_smoke > 0){
                        TeleportEntity(new_smoke, pos_smoke, NULL_VECTOR, NULL_VECTOR);
                        SetEntProp(new_smoke, Prop_Send, "m_CurrentStage", stage);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeStartTime", fade_start);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeEndTime", fade_end);
                        DispatchSpawn(new_smoke);
                        ActivateEntity(new_smoke);
                        SetEntPropEnt(new_smoke, Prop_Data, "m_hOwnerEntity", owner);
                        RemoveEnt(new_smoke);
                    }
                }
                else{
                    RemoveEnt(smoke);
                }
            }
            break;
        }
    }
}
void RemoveEnt(int ent){
    static char buffer[256];
    FormatEx(buffer, sizeof(buffer), "OnUser1 !self:Kill::%f:1", DURATION_SMOK);
    SetVariantString(buffer);
    AcceptEntityInput(ent, "AddOutput");
    AcceptEntityInput(ent, "FireUser1");
}
Если DURATION_SMOK > DEFAULT_DURATION_SMOK, тогда создастся новый смок с обновленной продолжительностью
Сам проверить пока не могу
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Проверите плагин:
code:
#define DEFAULT_DURATION_SMOK   18.0 // Стандартная продолжительность смока !не менять! (Возможно стоит сменить т.к. я не помню какая продолжительность стандартного смока)
#define DURATION_SMOK   10.0
public void OnEntityCreated(int entity, const char[] classname){
    if(StrEqual(classname, "env_particlesmokegrenade", false))
        SDKHook(entity, SDKHook_SpawnPost, OnSpawnPostProjectile);
}
public void OnSpawnPostProjectile(int smoke){
    float pos_smoke[3];
    GetEntPropVector(smoke, Prop_Send, "m_vecOrigin", pos_smoke);
    int grenade;
    while((grenade = FindEntityByClassname(grenade, "smokegrenade_projectile")) > 0){
        float pos_nade[3];
        GetEntPropVector(grenade, Prop_Send, "m_vecOrigin", pos_nade);
        if(pos_smoke[0] == pos_nade[0] && pos_smoke[1] == pos_nade[1] && pos_smoke[2] == pos_nade[2]){
            int owner = GetEntPropEnt(grenade, Prop_Data, "m_hOwnerEntity");
            if(owner > 0){
                if(DURATION_SMOK > DEFAULT_DURATION_SMOK){
                    float fade_start = GetEntPropFloat(smoke, Prop_Send, "m_FadeStartTime");
                    float fade_end = GetEntPropFloat(smoke, Prop_Send, "m_FadeEndTime");
                    int stage = GetEntProp(smoke, Prop_Send, "m_CurrentStage");
                    AcceptEntityInput(smoke, "kill");
                    int new_smoke = CreateEntityByName("env_particlesmokegrenade");
                    if(new_smoke > 0){
                        TeleportEntity(new_smoke, pos_smoke, NULL_VECTOR, NULL_VECTOR);
                        SetEntProp(new_smoke, Prop_Send, "m_CurrentStage", stage);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeStartTime", fade_start);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeEndTime", fade_end);
                        DispatchSpawn(new_smoke);
                        ActivateEntity(new_smoke);
                        SetEntPropEnt(new_smoke, Prop_Data, "m_hOwnerEntity", owner);
                        RemoveEnt(new_smoke);
                    }
                }
                else{
                    RemoveEnt(smoke);
                }
            }
            break;
        }
    }
}
void RemoveEnt(int ent){
    static char buffer[256];
    FormatEx(buffer, sizeof(buffer), "OnUser1 !self:Kill::%f:1", DURATION_SMOK);
    SetVariantString(buffer);
    AcceptEntityInput(ent, "AddOutput");
    AcceptEntityInput(ent, "FireUser1");
}
Если DURATION_SMOK > DEFAULT_DURATION_SMOK, тогда создастся новый смок с обновленной продолжительностью
Сам проверить пока не могу
Ваше идеально.
Спасибо большое
 

Охотник НА ЗМЕЙ

Скользкий ТИП
Сообщения
218
Реакции
52
Проверите плагин:
code:
#define DEFAULT_DURATION_SMOK   18.0 // Стандартная продолжительность смока !не менять! (Возможно стоит сменить т.к. я не помню какая продолжительность стандартного смока)
#define DURATION_SMOK   10.0
public void OnEntityCreated(int entity, const char[] classname){
    if(StrEqual(classname, "env_particlesmokegrenade", false))
        SDKHook(entity, SDKHook_SpawnPost, OnSpawnPostProjectile);
}
public void OnSpawnPostProjectile(int smoke){
    float pos_smoke[3];
    GetEntPropVector(smoke, Prop_Send, "m_vecOrigin", pos_smoke);
    int grenade;
    while((grenade = FindEntityByClassname(grenade, "smokegrenade_projectile")) > 0){
        float pos_nade[3];
        GetEntPropVector(grenade, Prop_Send, "m_vecOrigin", pos_nade);
        if(pos_smoke[0] == pos_nade[0] && pos_smoke[1] == pos_nade[1] && pos_smoke[2] == pos_nade[2]){
            int owner = GetEntPropEnt(grenade, Prop_Data, "m_hOwnerEntity");
            if(owner > 0){
                if(DURATION_SMOK > DEFAULT_DURATION_SMOK){
                    float fade_start = GetEntPropFloat(smoke, Prop_Send, "m_FadeStartTime");
                    float fade_end = GetEntPropFloat(smoke, Prop_Send, "m_FadeEndTime");
                    int stage = GetEntProp(smoke, Prop_Send, "m_CurrentStage");
                    AcceptEntityInput(smoke, "kill");
                    int new_smoke = CreateEntityByName("env_particlesmokegrenade");
                    if(new_smoke > 0){
                        TeleportEntity(new_smoke, pos_smoke, NULL_VECTOR, NULL_VECTOR);
                        SetEntProp(new_smoke, Prop_Send, "m_CurrentStage", stage);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeStartTime", fade_start);
                        SetEntPropFloat(new_smoke, Prop_Send, "m_FadeEndTime", fade_end);
                        DispatchSpawn(new_smoke);
                        ActivateEntity(new_smoke);
                        SetEntPropEnt(new_smoke, Prop_Data, "m_hOwnerEntity", owner);
                        RemoveEnt(new_smoke);
                    }
                }
                else{
                    RemoveEnt(smoke);
                }
            }
            break;
        }
    }
}
void RemoveEnt(int ent){
    static char buffer[256];
    FormatEx(buffer, sizeof(buffer), "OnUser1 !self:Kill::%f:1", DURATION_SMOK);
    SetVariantString(buffer);
    AcceptEntityInput(ent, "AddOutput");
    AcceptEntityInput(ent, "FireUser1");
}
Если DURATION_SMOK > DEFAULT_DURATION_SMOK, тогда создастся новый смок с обновленной продолжительностью
Сам проверить пока не могу
То что нужно
 

Doker0909

Участник
Сообщения
105
Реакции
3
Приветствую.
Скиньте, пожалуйста, .sp на Kigen-пустышку, если у кого-то есть.
Заранее спасибо 🤝
 

Doker0909

Участник
Сообщения
105
Реакции
3
Исходник античита?
раньше, когда ставили nsb + ультру, для работы nsb была пустышка kigena, которая вообще ничего не делала, кроме того, что показывала nsb, типа, стоит kigen и всё
вот нужна эта пустышка в .sp
 

danil253467

💘Italo-Disco & Neon One Love💘
Сообщения
90
Реакции
52
Приветствую.
Скиньте, пожалуйста, .sp на Kigen-пустышку, если у кого-то есть.
Заранее спасибо 🤝
Могу предложить 2 варианта:

1) Декомпил самого kigens NSB
2) Костыл для работы его от Danyas
 

Вложения

  • kigen-nsb.zip
    8.3 КБ · Просмотры: 8
  • kigens_ac-pub.sp
    708 байт · Просмотры: 9

Doker0909

Участник
Сообщения
105
Реакции
3
Уважаемые скриптеры, нужен простенький плагин, помогите, пожалуйста.
игра CSS v34
s.m. 1.10 и выше
нужен плагин отображения времени сервера, для конкретного игрока, то есть одного, определенного стим ид, к примеру, STEAM_0:1:111222333
место отображения в левом, верхнем углу, как при !tsay
промежуток между отображением времени 15 сек.

1. Системное (реальное) время сервера (часы/минуты/секунды)
2. Linux (компилирую на windows)
3. Интервал отображения - каждые 15 секунд
4. Расположение в левом верхнем углу, где указал стрелкой, на скриншоте
5. Отображать, исключительно, для одного стим ид, если тот присутствует на сервере, если не присутствует, то плагин не задействуется
Заранее благодарю 🤗
 

Вложения

  • timeforone.png
    timeforone.png
    940.3 КБ · Просмотры: 54

alexandr200121

Участник
Сообщения
41
Реакции
1
В этой теме можете оставлять свои заявки по написанию различных плагинов:


P.S. Некоторые плагины могу пропустить

P.S.S. Буду рад, если кто-то из скриптеров сюда будет заглядывать

[/SPOI

В этой теме можете оставлять свои заявки по написанию различных плагинов:


P.S. Некоторые плагины могу пропустить

P.S.S. Буду рад, если кто-то из скриптеров сюда будет заглядывать


открытие дверей на карте jail:
#include <sourcemod>
#include <cstrike>
#include <sdktools>

#pragma semicolon 1

#define CHAT_BANNER2 "\x07FFFFFF[\x0700E5FFJailbreak\x07FFFFFF]\x07FF0000"

new rounds;
new iEnt;
new String:EntityList[][] = {"func_door", "func_door_rotating"};
new bool:cellsopened = false;

public Plugin:myinfo =
{
    name = "Jailbreak Auto Open Cells",
    author = "Unknown",
    version = "1.0"
}

public OnPluginStart()
{
    // Commands
    RegConsoleCmd("sm_open", Jail_OpenCells, "Open all cells");
    
    // Hooks
    HookEvent("round_start", Jail_RoundStart);
    HookEvent("round_end", Jail_RoundEnd, EventHookMode_Pre);
}

public Action:Jail_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    rounds = (GetTeamScore(2) + GetTeamScore(3) + 1);
    PrintToChatAll("%s Раунд: %d.", CHAT_BANNER2, rounds);
    
    cellsopened = false;

    // Проверка на наличие игроков в команде CT
    if (GetTeamScore(3) == 0) // Если в команде CT нет игроков
    {
        OpenAllCells(true); // Автоматическое открытие камер
    }
}

public Action:Jail_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    cellsopened = false; // Сбрасываем состояние камер при окончании раунда
}

public Action:Jail_OpenCells(client, args)
{
    decl String:string[MAX_NAME_LENGTH];
    GetClientName(client, string, sizeof(string));
    
    if(!IsClientInGame(client) || !IsPlayerAlive(client))
    {
        ReplyToCommand(client, "%s Вы должны быть живым CT, чтобы открыть камеры.", CHAT_BANNER2);
        return Plugin_Handled;
    }
    
    if(GetClientTeam(client) != 3 && GetUserAdmin(client) == INVALID_ADMIN_ID)
    {
        ReplyToCommand(client, "%s Эта команда доступна только CT.", CHAT_BANNER2);
        return Plugin_Handled;
    }
    
    if(cellsopened)
    {
        ReplyToCommand(client, "%s Камеры уже открыты!", CHAT_BANNER2);
        return Plugin_Handled;
    }
    
    OpenAllCells(false); // Открытие камер по команде игрока

    PrintToChatAll("%s %N открыл камеры.", CHAT_BANNER2, client);
    cellsopened = true;
    
    return Plugin_Handled;
}

stock OpenAllCells(bool autoOpen)
{
    for(new i = 0; i < sizeof(EntityList); i++)
    {
        while((iEnt = FindEntityByClassname(iEnt, EntityList[i])) != -1)
        {
            AcceptEntityInput(iEnt, "Open");
        }
    }
    cellsopened = true;
    
    if (autoOpen)
    {
        PrintToChatAll("%s Камеры открыты автоматически, так как за CT нет игроков.", CHAT_BANNER2);
    }
}
Переписать код. Цель кода: 1)при отсутствии игроков за команду CT открыть двери 2)при наличии игроков за CT камеры оставить закрытыми.
 

Вложения

  • open_jails.sp
    2.6 КБ · Просмотры: 4

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@alexandr200121, сделал автооткрытие дверей при отсутствии живых игроков за спецназ.
Заодно пофиксил открытие дверей (iEnt не должна быть глобальной и её значение должно сбрасываться после каждого while() или перед ним).
 

Вложения

  • open_jails 1.0_fix.sp
    2.5 КБ · Просмотры: 5
Сверху Снизу