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

DeeperSpy

Гений, миллиардер, плейбой, филантроп, майнкрафтер
Сообщения
588
Реакции
362

Вложения

  • helloween.sp
    5 КБ · Просмотры: 13

Z-RAY-Z

Участник
Сообщения
775
Реакции
243
Подправьте, пожалуйста, данный плагин, чтобы настройки игроков сохранялись в clientprefs.
 

Вложения

  • shop_flipgame.sp
    42.2 КБ · Просмотры: 11

Туник

Участник
Сообщения
1,281
Реакции
263
Может кто пофиксить данный плагин, чтобы при спавне не дропался нож и usp на пол
 

Вложения

  • game_player_equip_fix_usp.sp
    1.7 КБ · Просмотры: 6

s777

Участник
Сообщения
449
Реакции
74
Кто сможет заменить суицид на кик с причиной "reason"? (нужен исходный код)
#include <sdktools>

public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) {
if (GetClientTeam(client) >1 && IsPlayerAlive(client) && (buttons & IN_LEFT || buttons & IN_RIGHT)) {
ForcePlayerSuicide(client);
}
}
 

Mensi1337

Участник
Сообщения
242
Реакции
16
Добрый вечер, кто может написать плагин, что бы он менял кол-во патронов в дигле на карте awp_lego_2, изменить на 1 патрон.
Игра: CSS v34
 

Rabb1t

Амбассадор
Сообщения
2,968
Реакции
1,429
@Mensi1337, в обойме или общее количество? Уточните, пожалуйста.
 

vb

Участник
Сообщения
385
Реакции
31
Добрый вечер.
Помогите пожалуйста с плагином..
Поправить нужно следующее:
1) Нужно добавить доступ по флагу "b" т.е что б при коннекте игрока с флагом "b" и начиналось воспроизведение приветствия.
 

Вложения

  • joinsound.sp
    1.1 КБ · Просмотры: 7

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
436
Добрый вечер.
Помогите пожалуйста с плагином..
Поправить нужно следующее:
1) Нужно добавить доступ по флагу "b" т.е что б при коннекте игрока с флагом "b" и начиналось воспроизведение приветствия.

Хоть я в скиптинге не спец, но вроде сделал, проверил - у меня работает.
Использовал конструкцию
C-подобный:
if (GetUserFlagBits(client) & ADMFLAG_GENERIC)
Где ADMFLAG_GENERIC - это тип администратора, их список есть тут.

Если захочешь добавить воспроизведения для нескольких типов администраторов, то используй:
C-подобный:
public OnClientPostAdminCheck(client)
{

if(GetUserFlagBits(client) & ADMFLAG_ROOT ||
    GetUserFlagBits(client) & ADMFLAG_CUSTOM3 ||
    GetUserFlagBits(client) & ADMFLAG_GENERIC)
EmitSoundToClient(client,g_soundName);
}

Наверное код можно сделать покороче.
 

Вложения

  • joinsound.sp
    1.1 КБ · Просмотры: 6
  • Мне нравится
Реакции: vb

rejchev

менеджер клоунов
Сообщения
1,669
Реакции
1,291
Добрый вечер.
Помогите пожалуйста с плагином..
Поправить нужно следующее:
1) Нужно добавить доступ по флагу "b" т.е что б при коннекте игрока с флагом "b" и начиналось воспроизведение приветствия.
PHP:
#include <sourcemod>
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required
#define PMP PLATFORM_MAX_PATH

#define FLAG ADMFLAG_CUSTOM4 // Флаг доступа

EngineVersion g_eGame;
ConVar g_CvarSoundName;
char g_soundName[PMP];


#define PLUGIN_VERSION "1.1"
public Plugin myinfo =
{
    name = "CS:GO Sound",
    author = "Team-Secretforce.com",
    description = "Join Sound on your CS:GO Server",
    version = PLUGIN_VERSION,
    url = "..."
};
public void OnPluginStart()
{
    g_eGame = GetEngineVersion();
    g_CvarSoundName = CreateConVar("sm_start_sound", "music/welcome/secretforce.mp3", "Welcome sound");
}
public void OnMapStart()
{
    g_CvarSoundName.GetString(g_soundName, sizeof g_soundName);
    char szBuffer[PMP];
  
    FormatEx(szBuffer, sizeof(szBuffer), "sound/%s", g_soundName);
    AddFileToDownloadsTable(szBuffer);
  
              
    if(g_eGame == Engine_CSGO)
    {
        FormatEx(szBuffer, sizeof szBuffer, "*%s", g_soundName);
        AddToStringTable(FindStringTable("soundprecache"), szBuffer);
    }
    else{
        PrecacheSound(szBuffer, true);
    }
}
public void OnClientPostAdminCheck(int client)
{
    if(!client || !IsClientInGame(client) || !(GetUserFlagBits(client) & FLAG))    return;
    if(g_eGame == Engine_CSGO)
    {
        char szBuffer[PMP];
        FormatEx(szBuffer, sizeof(szBuffer), "*%s", g_soundName);
        EmitSoundToClient(client,szBuffer);
    }
    else{
        EmitSoundToClient(client,g_soundName);
    }
  
}
 
Последнее редактирование:
  • Мне нравится
Реакции: vb

GuSenoK

Участник
Сообщения
253
Реакции
8
Помогите убрать native ZR_Is_client_zombie. Из-за него плагин не работает, потому что он для ZR, а у меня zombiemod.
И ещё. Сложно ли подфикшивать все плагины zr под zm? Не нравится zr, пользуюсь zombiemod 2.0.1 и все создаваемые плагины не подходят для него.
 

Вложения

  • ze_respawn.sp
    6.2 КБ · Просмотры: 4

Hustle29

Участник
Сообщения
109
Реакции
4
Ребят кому несложно, фиксаните пж плагин проигрывания рекордов в конце карты. Играют все режимы звуков. Рекорд карты (best) ставишь - звук, свой личный рекорд (pb) - звук, просто карту прошел не побив свой личный рекорд (other) - звук , но они все работают так, что слышат все игроки сервера, а мне нужно,чтобы рекорд карты все слышали, а личный рекорд и когда просто прошел карту только ты слышал.
Прикладываю исходник и cfg где все настраивается,заранее спасибо.
 

Вложения

  • influx_recsounds.sp
    6.6 КБ · Просмотры: 11
  • influx_sounds.cfg
    561 байт · Просмотры: 4

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
@Hustle29
попробуй заменить в файле
upd. v2
PHP:
stock void PlayRecordSound( const char[] szSound, int finisher, int resflags )
{
    int[] clients = new int[MaxClients];
    int nClients = 0;

    if (resflags & RES_TIME_ISBEST)
    {
        for ( int i = 1; i <= MaxClients; i++ )
        {
            if ( IsClientInGame( i ) && !IsFakeClient( i ) )
            {
                if ( g_bLib_Hud )
                {
                    if ( !CanPlaySoundToClient( i, finisher, resflags ) )
                        continue;
                }
               
                clients[nClients++] = i;
            }
        }
    }
    else
    {
        if ( g_bLib_Hud )
        {
            if ( !CanPlaySoundToClient( finisher, finisher, resflags ) )
                continue;
        }

        clients[nClients++] = finisher;
    }
   
    if ( nClients )
    {
        EmitSoundCompatible( clients, nClients, szSound, resflags );
    }
}
 

Hustle29

Участник
Сообщения
109
Реакции
4
@Hustle29
попробуй заменить в файле
upd. v2
PHP:
stock void PlayRecordSound( const char[] szSound, int finisher, int resflags )
{
    int[] clients = new int[MaxClients];
    int nClients = 0;

    if (resflags & RES_TIME_ISBEST)
    {
        for ( int i = 1; i <= MaxClients; i++ )
        {
            if ( IsClientInGame( i ) && !IsFakeClient( i ) )
            {
                if ( g_bLib_Hud )
                {
                    if ( !CanPlaySoundToClient( i, finisher, resflags ) )
                        continue;
                }
              
                clients[nClients++] = i;
            }
        }
    }
    else
    {
        if ( g_bLib_Hud )
        {
            if ( !CanPlaySoundToClient( finisher, finisher, resflags ) )
                continue;
        }

        clients[nClients++] = finisher;
    }
  
    if ( nClients )
    {
        EmitSoundCompatible( clients, nClients, szSound, resflags );
    }
}
Не хочет у меня компилировать, может у тебя получится?
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    27.3 КБ · Просмотры: 30

The End Is Near...

Russian Roulette
Сообщения
874
Реакции
691
@Hustle29
PHP:
#include <sourcemod>
#include <sdktools>

#include <influx/core>

#undef REQUIRE_PLUGIN
#include <influx/hud>


//#define DEBUG


#define SOUNDS_FILE                 "influx_sounds.cfg"




#define PLATFORM_MAX_PATH_CELL      PLATFORM_MAX_PATH / 4


ArrayList g_hOtherSounds;
ArrayList g_hBestSounds;
ArrayList g_hPBSounds;

bool g_bLib_Hud;


public Plugin myinfo =
{
    author = INF_AUTHOR,
    url = INF_URL,
    name = INF_NAME..." - Record Sounds",
    description = "Plays sound when finishing",
    version = INF_VERSION
};

public void OnPluginStart()
{
    g_hOtherSounds = new ArrayList( PLATFORM_MAX_PATH_CELL );
    g_hBestSounds = new ArrayList( PLATFORM_MAX_PATH_CELL );
    g_hPBSounds = new ArrayList( PLATFORM_MAX_PATH_CELL );
   
   
    g_bLib_Hud = LibraryExists( INFLUX_LIB_HUD );
}

public void OnLibraryAdded( const char[] lib )
{
    if ( StrEqual( lib, INFLUX_LIB_HUD ) ) g_bLib_Hud = true;
}

public void OnLibraryRemoved( const char[] lib )
{
    if ( StrEqual( lib, INFLUX_LIB_HUD ) ) g_bLib_Hud = false;
}

public void Influx_OnRequestResultFlags()
{
    Influx_AddResultFlag( "Don't play record sound", RES_SND_DONTPLAY );
}

public void OnMapStart()
{
    ReadSounds();
}

stock bool ReadSounds()
{
    g_hOtherSounds.Clear();
    g_hBestSounds.Clear();
    g_hPBSounds.Clear();
   
    char szFile[PLATFORM_MAX_PATH];
    BuildPath( Path_SM, szFile, sizeof( szFile ), "configs/"...SOUNDS_FILE );
   
   
    KeyValues kv = new KeyValues( "Sounds" );
    kv.ImportFromFile( szFile );
   
    if ( !kv.GotoFirstSubKey() )
    {
        delete kv;
        return false;
    }
   
   
    char szPath[PLATFORM_MAX_PATH], szDownload[PLATFORM_MAX_PATH];
   
    do
    {
        if ( !kv.GetSectionName( szPath, sizeof( szPath ) ) )
        {
            continue;
        }
       
       
        bool bAdded = false;
       
        int sounds_offset = 0;
       
        if (StrContains( szPath, "sound/", false ) == 0
        ||  StrContains( szPath, "sound\\", false ) == 0)
        {
            sounds_offset = 6;
           
            strcopy( szDownload, sizeof( szDownload ), szPath );
        }
        else
        {
            FormatEx( szDownload, sizeof( szDownload ), "sound/%s", szPath );
        }
       
       
#if defined DEBUG
            PrintToServer( INF_DEBUG_PRE..."Found sound: '%s' | Download path: '%s'",
                szPath[sounds_offset],
                szDownload );
#endif
       
        if ( !FileExists( szDownload, true ) )
        {
            LogError( INF_CON_PRE..."Sound file '%s' does not exist! Ignoring it.", szDownload );
            continue;
        }
       
        if ( PrecacheSound( szPath[sounds_offset] ) )
        {
            PrefetchSound( szPath[sounds_offset] );
           
            AddFileToDownloadsTable( szDownload );
        }
        else
        {
            LogError( INF_CON_PRE..."Couldn't precache record sound! Ignoring it. Sound: '%s'", szPath[sounds_offset] );
           
            continue;
        }
       
       
        if ( kv.GetNum( "pb", 0 ) )
        {
            g_hPBSounds.PushString( szPath[sounds_offset] );
            bAdded = true;
        }
       
        if ( kv.GetNum( "best", 0 ) )
        {
            g_hBestSounds.PushString( szPath[sounds_offset] );
            bAdded = true;
        }
       
        // If we have none just add to this.
        if ( kv.GetNum( "other", 0 ) || !bAdded )
        {
            g_hOtherSounds.PushString( szPath[sounds_offset] );
        }
       
        /*if ( kv.JumpToKey( "users", false ) )
        {
            kv.GoBack();
        }*/
    }
    while( kv.GotoNextKey() );
   
    delete kv;
   
    return true;
}

public void Influx_OnTimerFinishPost( int client, int runid, int mode, int style, float time, float prev_pb, float prev_best, int flags )
{
    // We don't want to play any sounds for this run!
    if ( flags & RES_SND_DONTPLAY ) return;
   
   
    decl String:szPath[PLATFORM_MAX_PATH];
    szPath[0] = '\0';
   
    if ( flags & (RES_TIME_FIRSTREC | RES_TIME_ISBEST) )
    {
        int len = g_hBestSounds.Length;
       
        if ( len )
        {
            g_hBestSounds.GetString( GetRandomInt( 0, len - 1 ), szPath, sizeof( szPath ) );
        }
    }
    else if ( flags & RES_TIME_PB )
    {
        int len = g_hPBSounds.Length;
       
        if ( len )
        {
            g_hPBSounds.GetString( GetRandomInt( 0, len - 1 ), szPath, sizeof( szPath ) );
        }
    }
   
    // Fallback to these sounds if others don't exist.
    if ( szPath[0] == '\0' )
    {
        int len = g_hOtherSounds.Length;
       
        if ( len )
        {
            g_hOtherSounds.GetString( GetRandomInt( 0, len - 1 ), szPath, sizeof( szPath ) );
        }
    }
   
    if ( szPath[0] != '\0' )
    {
        PlayRecordSound( szPath, client, flags );
    }
}

stock bool CanPlaySoundToClient( int client, int finisher, int flags )
{
    int hideflags = Influx_GetClientHideFlags( client );
   
    // Allow my own sounds.
    if ( finisher == client )
    {
        return ( hideflags & HIDEFLAG_SND_PERSONAL ) ? false : true;
    }
   
    // Allow new record sounds.
    if ( flags & (RES_TIME_FIRSTREC | RES_TIME_ISBEST) )
    {
        return ( hideflags & HIDEFLAG_SND_BEST ) ? false : true;
    }
   
    return ( hideflags & HIDEFLAG_SND_NORMAL ) ? false : true;
}

stock void PlayRecordSound( const char[] szSound, int finisher, int resflags )
{
    int[] clients = new int[MaxClients];
    int nClients = 0;

    if (resflags & RES_TIME_ISBEST)
    {
        for ( int i = 1; i <= MaxClients; i++ )
        {
            if ( IsClientInGame( i ) && !IsFakeClient( i ) )
            {
                if ( g_bLib_Hud )
                {
                    if ( !CanPlaySoundToClient( i, finisher, resflags ) )
                        continue;
                }
               
                clients[nClients++] = i;
            }
        }
    }
    else
    {
        if ( g_bLib_Hud )
            CanPlaySoundToClient( finisher, finisher, resflags );

        clients[nClients++] = finisher;
    }
   
    if ( nClients )
    {
        EmitSoundCompatible( clients, nClients, szSound );
    }
}

stock void EmitSoundCompatible( const int[] clients, int nClients, const char[] szSound )
{
    if ( GetEngineVersion() == Engine_CSGO )
    {
        decl String:szCommand[PLATFORM_MAX_PATH];
        FormatEx( szCommand, sizeof( szCommand ), "play */%s", szSound );
       
        for ( int i = 0; i < nClients; i++ )
        {
            ClientCommand( clients[i], szCommand );
        }
    }
    else
    {
        EmitSound( clients, nClients, szSound );
    }
}
 
Сверху Снизу