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

backedelk031

Участник
Сообщения
35
Реакции
7
1. Нужен плагин который будет отключать звуки шагов и прыжков у других игроков через команду.
2. Нужен плагин который будет отключать звуки выстрелов у других игроков через команду.
 
Последнее редактирование:

Jugheadbomb

CTFPlayer
Сообщения
168
Реакции
24
Нужен плагин, который открывает игроку меню через чат-триггер (lower())
 

rokfestr

Участник
Сообщения
340
Реакции
63
Как сделать чтобы игроки не застревали в пропах? Чтобы проп отталкивал игрока, а не проходил сквозь него
 

Вложения

  • zprop.sp
    14.5 КБ · Просмотры: 4

Туник

Участник
Сообщения
1,281
Реакции
263
Народ есть ли плагин, для того чтобы запретить игрокам входить на сервер, если у них VAC бан за любую игру???
 

hostvd

Участник
Сообщения
21
Реакции
2
В этой теме есть такой кусок кода:
PHP:
#include <sourcemod>
new Handle:mp_c4timer, g_explosionTime;
public OnPluginStart()
{
    mp_c4timer = FindConVar("mp_c4timer");
    HookEvent("bomb_planted", OnBombPlanted, EventHookMode_Post);
    HookEvent("bomb_beep", OnBombBeep, EventHookMode_Post);
}
public OnBombPlanted(Handle:event, const String:name[], bool:dontBroadcast)
    g_explosionTime = GetTime() + GetConVarInt(mp_c4timer);

public OnBombBeep(Handle:event, const String:name[], bool:dontBroadcast)
{
    new diff = g_explosionTime - GetTime();
    if (diff >= 0 && diff <= GetConVarInt(mp_c4timer))
        PrintHintTextToAll("C4: %d", diff);
}
при попытке прикинуть на новый синтаксис, выходить ошибка
test.jpg

PHP:
#pragma newdecls required

Handle mp_c4timer, g_explosionTime;

public void OnPluginStart()
{
    mp_c4timer = FindConVar("mp_c4timer");
    HookEvent("bomb_planted", OnBombPlanted, EventHookMode_Post);
    HookEvent("bomb_beep", OnBombBeep, EventHookMode_Post);
}

public void OnBombPlanted(Event hEvent, const char[] name, bool dontBroadcast)
{
   g_explosionTime = GetTime() + GetConVarInt(mp_c4timer);
}

public void OnBombBeep(Event hEvent, const char[] name, bool dontBroadcast)
{
    int diff = g_explosionTime - GetTime();
    if (diff >= 0 && diff <= GetConVarInt(mp_c4timer))
        PrintHintTextToAll("C4: %d", diff);
}

Как можно исправить?
 

Grey83

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

int iCDStart;
float fC4Timer;

public void OnPluginStart()
{
    ConVar cvar;
    (cvar = FindConVar("mp_c4timer")).AddChangeHook(CVarChanged_Timer);
    fC4Timer = cvar.FloatValue;

    HookEvent("bomb_planted", Event_BombPlanted, EventHookMode_Post);
    HookEvent("bomb_beep", Event_BombBeep, EventHookMode_Post);
}

public void CVarChanged_Timer(ConVar cvar, const char[] oldVal, const char[] newVal)
{
    fC4Timer = cvar.FloatValue;
}

public void Event_BombPlanted(Event hEvent, const char[] name, bool dontBroadcast)
{
    iCDStart = GetTime();
}

public void Event_BombBeep(Event event, const char[] name, bool dontBroadcast)
{
    static int diff;
    if((diff = GetTime() - iCDStart) < 0 || diff > fC4Timer) return;
    PrintHintTextToAll("C4: %d", RoundFloat(fC4Timer) - diff);
}
 
Последнее редактирование:

sPonso™

Участник
Сообщения
169
Реакции
48
Необходимо переделать бхоп [VIP] MULTI JUMP (CSS/CSGO) под shop core fork. Тот который есть здесь shop bhop (Модуль плагина - [Shop] BHop) при падении с большой высоты стопит и не получается бхопить, а в плагине феникса всё с этим нормально. Кто-нибудь может взяться? В плагине нужна возможность установки цены и времени через отдельный конфиг
 

Djgadzilla

Участник
Сообщения
14
Реакции
0
@Djgadzilla, ещё одну строчку надо. Которая над Displaying stack trace.
Без неё можно лишь догадываться, в чём проблема.

Вот она строчка)
заранее спасибо!
[SM] Native "PrintToChat" reported: Client 27 is not in game
[SM] Displaying call stack trace for plugin "sm_parachute 2.6.0.smx":
[SM] [0] Line 356, C:\Users\ емерово\Desktop\sm_parachute 2.6.0.sp::PrintMsg()
[SM] [1] Line 215, C:\Users\ емерово\Desktop\sm_parachute 2.6.0.sp::RoundMsg()
 

Вложения

  • sm_parachute 2.6.0.sp
    14.8 КБ · Просмотры: 2

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как можно админу установить иммунитет выше серверного или хотя-бы что бы = серверному?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Loco, никак.
У сервера иммунитет 0.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Можете сделать (дописать плагин) возможность указать конкретному флагу количество использований команды на указанный промежуток (на карту, раунд, или по времени).
К примеру: sm_slap "a;12;map" // шлёпнуть можно только 12 раз на карту админу с доступом "a"
А лучше всего это размещать в Adding Groups (SourceMod) - AlliedModders Wiki
PHP:
"Groups"
{
    "full"
    {
        "flags"            "abc"    //reservation, generic admin, kick
        "immunity"        "1"    //low immunity value

        "Overrides"
        {
        }

        "Limite"
        {
         // [param1]     [key1:key2]    // где key1 - количество, где key2 - ограничение на 0 - карту, или -1 - раунд. Если >0, то это время в секундах (именно в секундах)
                  "sm_slap"           "5:-1"      // шлёпать можно 5 раз на раунд
                  "sm_respawn"   "1:360"  // возродится можно 1 раз каждые 6 минут                  
        }
  
    }
}
Будет очень полезно для плавного контроля администраторов или донат-груп.
Если есть плагин с подобными действиями, поделитесь ссылочкой на него)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@Loco, это SourceMod дописывать надо, если интегрировать именно в группы.
Лучше отдельным плагином, всё же.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Можете написать плагин, который по евенту смерти, умершему будет выводить текст в худ с именем убившего тебя игрока и с какого оружия с поддержкой цветов и измененниям названия оружия в файле перевода на указанное время и желательно с размером букв (если возможно).
К примеру: Игрок Loco убил вас из пистолета.
 
Последнее редактирование:

Grey83

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

white_bubblegum

Участник
Сообщения
103
Реакции
7
1.[DR]Skip
2.Помогите дописать плагин, не могу исходник нужный найти. Надо чтобы у террориста в начале раунда вылазила меню "пропустить кт? да нет" Прикреплю исходник, который есть.
 

Вложения

  • DRSkip.sp
    2.2 КБ · Просмотры: 9

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Ребят, может кто добавить в плагинах VIP HP и VIP Armor квар на выключение, а также изменить немного плагин Stop Music? Просто когда их выгружаешь (VIP HP и VIP Armor), выдает ошибки в консоль. А в плагине Stop Music там таймер на выключение стоит, он выключает музыку с задержкой. Играет музыка 5 сек - выкл, мешает сильно. Нельзя сделать так, чтобы сразу выключало при начале раунда?
[TEST] [VIP] Features Manager (DEV) или более гибкий Модуль плагина - [VIP] Features Manager
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <csgo_colors>

#define PLUGIN_NAME     "Stop Map Music"
#define PLUGIN_VERSION     "1.0.0"

#define MAX_EDICTS        2048

new Float:g_fCmdTime[MAXPLAYERS+1];
new g_iSoundEnts[MAX_EDICTS];
new g_iNumSounds;
new bool:disabled[MAXPLAYERS + 1];

public Plugin:myinfo =
{
    name = PLUGIN_NAME,
    author = "GoD-Tony [Fixed by The Count]",
    description = "Allows clients to stop ambient sounds played by the map",
    version = PLUGIN_VERSION,
    url = "http://www.sourcemod.net/"
};

public OnPluginStart()
{
    CreateConVar("sm_stopmusic_version", PLUGIN_VERSION, "Stop Map Music", 0|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    RegConsoleCmd("sm_music", Command_StopMusic, "Toggles map music");
    CreateTimer(0.0, Post_Start, _, TIMER_REPEAT);
}

public OnClientDisconnect_Post(client)
{
    g_fCmdTime[client] = 0.0;
    disabled[client] = false;
}

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    g_iNumSounds = 0;
    
    UpdateSounds();
    CreateTimer(0.0, Post_Start);
}

public OnEntityCreated(entity, const String:classname[]){
    if(!StrEqual(classname, "ambient_generic", false)){
        return;
    }
    new String:sSound[PLATFORM_MAX_PATH];
    GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));   
    new len = strlen(sSound);
    if (len > 4 && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav"))){
        g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity);
    }else{
        return;
    }
    new ent = -1;
    for(new i=1;i<=MaxClients;i++){
        if(!disabled[i] || !IsClientInGame(i)){ continue; }
        for (new u=0; u<g_iNumSounds; u++){
            ent = EntRefToEntIndex(g_iSoundEnts[u]);
            if (ent != INVALID_ENT_REFERENCE){
                GetEntPropString(ent, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
                Client_StopSound(i, ent, SNDCHAN_STATIC, sSound);
            }
        }
    }
}

UpdateSounds(){
    new String:sSound[PLATFORM_MAX_PATH];
    new entity = INVALID_ENT_REFERENCE;
    while ((entity = FindEntityByClassname(entity, "ambient_generic")) != INVALID_ENT_REFERENCE)
    {
        GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
        
        new len = strlen(sSound);
        if (len > 4 && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav")))
        {
            g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity);
        }
    }
}

public Action:Post_Start(Handle:timer){
    if(GetClientCount() <= 0){
        return Plugin_Continue;
    }
    new String:sSound[PLATFORM_MAX_PATH];
    new entity = INVALID_ENT_REFERENCE;
    for(new i=1;i<=MaxClients;i++){
        if(!disabled[i] || !IsClientInGame(i)){ continue; }
        for (new u=0; u<g_iNumSounds; u++){
            entity = EntRefToEntIndex(g_iSoundEnts[u]);
            if (entity != INVALID_ENT_REFERENCE){
                GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
                Client_StopSound(i, entity, SNDCHAN_STATIC, sSound);
            }
        }
    }
    return Plugin_Continue;
}

public Action:Command_StopMusic(client, args)
{
    if (!client || g_fCmdTime[client] > GetGameTime())
        return Plugin_Handled;
    
    if(disabled[client]){
        disabled[client] = false;
        CGOPrintToChat(client, "[SM]: Музыка {GREEN}включиться {DEFAULT}на следующем треке...");
        return Plugin_Handled;
    }
    
    g_fCmdTime[client] = GetGameTime() + 0.0;
    
    CGOPrintToChat(client, "[SM]: Музыка на карте {RED}выключена{DEFAULT}...");
    
    new String:sSound[PLATFORM_MAX_PATH], entity;
    
    for (new i = 0; i < g_iNumSounds; i++)
    {
        entity = EntRefToEntIndex(g_iSoundEnts[i]);
        
        if (entity != INVALID_ENT_REFERENCE)
        {
            GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
            Client_StopSound(client, entity, SNDCHAN_STATIC, sSound);
        }
    }
    disabled[client] = true;
    return Plugin_Handled;
}

stock Client_StopSound(client, entity, channel, const String:name[])
{
    EmitSoundToClient(client, name, entity, channel, SNDLEVEL_NONE, SND_STOP, 0.0, SNDPITCH_NORMAL, _, _, _, true);
}
 

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
[TEST] [VIP] Features Manager (DEV) или более гибкий Модуль плагина - [VIP] Features Manager
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <csgo_colors>

#define PLUGIN_NAME     "Stop Map Music"
#define PLUGIN_VERSION     "1.0.0"

#define MAX_EDICTS        2048

new Float:g_fCmdTime[MAXPLAYERS+1];
new g_iSoundEnts[MAX_EDICTS];
new g_iNumSounds;
new bool:disabled[MAXPLAYERS + 1];

public Plugin:myinfo =
{
    name = PLUGIN_NAME,
    author = "GoD-Tony [Fixed by The Count]",
    description = "Allows clients to stop ambient sounds played by the map",
    version = PLUGIN_VERSION,
    url = "http://www.sourcemod.net/"
};

public OnPluginStart()
{
    CreateConVar("sm_stopmusic_version", PLUGIN_VERSION, "Stop Map Music", 0|FCVAR_NOTIFY|FCVAR_DONTRECORD);
    HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
    RegConsoleCmd("sm_music", Command_StopMusic, "Toggles map music");
    CreateTimer(0.0, Post_Start, _, TIMER_REPEAT);
}

public OnClientDisconnect_Post(client)
{
    g_fCmdTime[client] = 0.0;
    disabled[client] = false;
}

public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    g_iNumSounds = 0;
   
    UpdateSounds();
    CreateTimer(0.0, Post_Start);
}

public OnEntityCreated(entity, const String:classname[]){
    if(!StrEqual(classname, "ambient_generic", false)){
        return;
    }
    new String:sSound[PLATFORM_MAX_PATH];
    GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));  
    new len = strlen(sSound);
    if (len > 4 && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav"))){
        g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity);
    }else{
        return;
    }
    new ent = -1;
    for(new i=1;i<=MaxClients;i++){
        if(!disabled[i] || !IsClientInGame(i)){ continue; }
        for (new u=0; u<g_iNumSounds; u++){
            ent = EntRefToEntIndex(g_iSoundEnts[u]);
            if (ent != INVALID_ENT_REFERENCE){
                GetEntPropString(ent, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
                Client_StopSound(i, ent, SNDCHAN_STATIC, sSound);
            }
        }
    }
}

UpdateSounds(){
    new String:sSound[PLATFORM_MAX_PATH];
    new entity = INVALID_ENT_REFERENCE;
    while ((entity = FindEntityByClassname(entity, "ambient_generic")) != INVALID_ENT_REFERENCE)
    {
        GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
       
        new len = strlen(sSound);
        if (len > 4 && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav")))
        {
            g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity);
        }
    }
}

public Action:Post_Start(Handle:timer){
    if(GetClientCount() <= 0){
        return Plugin_Continue;
    }
    new String:sSound[PLATFORM_MAX_PATH];
    new entity = INVALID_ENT_REFERENCE;
    for(new i=1;i<=MaxClients;i++){
        if(!disabled[i] || !IsClientInGame(i)){ continue; }
        for (new u=0; u<g_iNumSounds; u++){
            entity = EntRefToEntIndex(g_iSoundEnts[u]);
            if (entity != INVALID_ENT_REFERENCE){
                GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
                Client_StopSound(i, entity, SNDCHAN_STATIC, sSound);
            }
        }
    }
    return Plugin_Continue;
}

public Action:Command_StopMusic(client, args)
{
    if (!client || g_fCmdTime[client] > GetGameTime())
        return Plugin_Handled;
   
    if(disabled[client]){
        disabled[client] = false;
        CGOPrintToChat(client, "[SM]: Музыка {GREEN}включиться {DEFAULT}на следующем треке...");
        return Plugin_Handled;
    }
   
    g_fCmdTime[client] = GetGameTime() + 0.0;
   
    CGOPrintToChat(client, "[SM]: Музыка на карте {RED}выключена{DEFAULT}...");
   
    new String:sSound[PLATFORM_MAX_PATH], entity;
   
    for (new i = 0; i < g_iNumSounds; i++)
    {
        entity = EntRefToEntIndex(g_iSoundEnts[i]);
       
        if (entity != INVALID_ENT_REFERENCE)
        {
            GetEntPropString(entity, Prop_Data, "m_iszSound", sSound, sizeof(sSound));
            Client_StopSound(client, entity, SNDCHAN_STATIC, sSound);
        }
    }
    disabled[client] = true;
    return Plugin_Handled;
}

stock Client_StopSound(client, entity, channel, const String:name[])
{
    EmitSoundToClient(client, name, entity, channel, SNDLEVEL_NONE, SND_STOP, 0.0, SNDPITCH_NORMAL, _, _, _, true);
}
Все равно просачиваеться музыка на пару миллисекунд.
 
Сверху Снизу