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

Wanderer

Шизофреник
Сообщения
152
Реакции
27
Помогите написать плагин,чтобы по команде !he , выдавались 3 взрывные гранаты,и при повторном написании команды выводилось сообщение,что лимит исчерпан.
 

Wightjeck

И так сойдет!
Сообщения
349
Реакции
65
@Grey83, а нельзя удалить стандартное сообщение и свое, новое выводить?
 

wAries

Окоп-копальщик
Сообщения
529
Реакции
291
@Wightjeck, а что вас конкретно интересует, кастомный ивент коннекта/дисконнекта и входа за команду или что то большее?
 

Wightjeck

И так сойдет!
Сообщения
349
Реакции
65
@Wightjeck, а что вас конкретно интересует, кастомный ивент коннекта/дисконнекта и входа за команду или что то большее?
Да нет. Просто сообщение о подключении выводить, когда игрока еще не на сервере.
20190127132210_1.jpg
--- Добавлено позже ---
То есть сообщение напечатало, а игрока еще нет секунд 20...
 

Вложения

Truyn

Цынитель
Сообщения
550
Реакции
105
Ребят сделайте кто нибудь простенький плагин который будет выдавать !glock !usp к примеру для csgo,и чтобы нельзя спамить было командой,например раз в 30 секунд могли писать
Никто не откликнулся,это сложный в написании плагин??
Может кто нибудь тогда отвяжет его просто от influx ?

Код:
#include <sourcemod>
#include <cstrike>
#include <sdktools>

#include <influx/core>

#undef REQUIRE_PLUGIN
#include <influx/help>


enum
{
    SLOT_PRIMARY,
    SLOT_SECONDARY,
    SLOT_MELEE
};


float g_flLastAllowed[INF_MAXPLAYERS];


bool g_bIsCSGO;

int g_Offset_hMyWeapons;


public Plugin myinfo =
{
    author = INF_AUTHOR,
    url = INF_URL,
    name = INF_NAME..." - Give Weapons",
    description = "Give or drop weapons.",
    version = INF_VERSION
};

public void OnPluginStart()
{
    g_bIsCSGO = ( GetEngineVersion() == Engine_CSGO );
    
    
    if ( (g_Offset_hMyWeapons = FindSendPropInfo( "CCSPlayer", "m_hMyWeapons" )) == -1 )
    {
        SetFailState( INF_CON_PRE..."Couldn't find offset for m_hMyWeapons!" );
    }
    
    
    RegConsoleCmd( "sm_scout", Cmd_Scout );
    RegConsoleCmd( "sm_usp", Cmd_Usp );
    RegConsoleCmd( "sm_glock", Cmd_Glock );
    RegConsoleCmd( "sm_knife", Cmd_Knife );
    
    RegConsoleCmd( "sm_drop", Cmd_Drop );
    RegConsoleCmd( "sm_dropweapon", Cmd_Drop );
    RegConsoleCmd( "sm_removeweapon", Cmd_Drop );
    RegConsoleCmd( "sm_removeweapons", Cmd_Drop );
    
    if ( g_bIsCSGO )
    {
        RegConsoleCmd( "sm_hkp", Cmd_Hpk );
        RegConsoleCmd( "sm_hkp2000", Cmd_Hpk );
    }
}

public void Influx_RequestHelpCmds()
{
    Influx_AddHelpCommand( "drop", "Remove all weapons." );
}

public void OnClientPutInServer( int client )
{
    g_flLastAllowed[client] = 0.0;
}

public Action Cmd_Drop( int client, int args )
{
    if ( client && IsPlayerAlive( client ) )
    {
        if ( Inf_HandleCmdSpam( client, 1.0, g_flLastAllowed[client], true ) )
        {
            return Plugin_Handled;
        }
        
        
        int wep;
        for ( int i = 0; i < 128; i += 4 )
        {
            if ( (wep = GetEntDataEnt2( client, g_Offset_hMyWeapons + i )) > 0 )
            {
                RemovePlayerItem( client, wep );
            }
        }
    }
    
    return Plugin_Handled;
}

public Action Cmd_Scout( int client, int args )
{
    GiveWeapon( client, g_bIsCSGO ? "weapon_ssg08" : "weapon_scout", SLOT_PRIMARY );
    return Plugin_Handled;
}

public Action Cmd_Hpk( int client, int args )
{
    GiveWeapon( client, "weapon_hkp2000", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Usp( int client, int args )
{
    GiveWeapon( client, g_bIsCSGO ? "weapon_usp_silencer" : "weapon_usp", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Glock( int client, int args )
{
    GiveWeapon( client, "weapon_glock", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Knife( int client, int args )
{
    GiveWeapon( client, "weapon_knife", SLOT_MELEE );
    return Plugin_Handled;
}

stock void GiveWeapon( int client, const char[] wepname, int slot )
{
    if ( !client ) return;
    
    if ( !IsPlayerAlive( client ) ) return;
    
    if ( Inf_HandleCmdSpam( client, 1.0, g_flLastAllowed[client], true ) )
    {
        return;
    }
    
    
    int wep;
    
    if ( (wep = GetPlayerWeaponSlot( client, slot )) > 0 && IsValidEdict( wep ) )
    {
        RemovePlayerItem( client, wep );
    }
    
    
    GivePlayerItem( client, wepname );
    
    
    // Equipping the weapon will for some reason delete it.
    //if ( wep > 0 ) EquipPlayerWeapon( client, wep );
}
 

Вложения

Wightjeck

И так сойдет!
Сообщения
349
Реакции
65
В общем решил использовать OnClientPostAdminCheck так будет вовремя выводить сообщение при коннекте. Спасибо @Faya™ за помощь с новым синтаксисом. Держите, может кому пригодится.

P.S. Заметил правда одну штуку при коннекте, появляется пустая строка вверху чата (только у подключившегося игрока), не знаю из-за чего это. Может кто знает, отпишите, пожалуйста.
--- Добавлено позже ---
Добавил проверку дисконнекта на нахождение игрока в игре. Игрок мог грузиться, а потом выйти из загрузки и при этом в чат писало отключение игрока, хотя его на сервере даже не было.
 

Вложения

Последнее редактирование:
  • Like
Реакции: vb

vb

Сообщения
279
Реакции
23
В общем решил использовать OnClientPostAdminCheck так будет вовремя выводить сообщение при коннекте. Спасибо @Faya™ за помощь с новым синтаксисом. Держите, может кому пригодится.

P.S. Заметил правда одну штуку при коннекте, появляется пустая строка вверху чата (только у подключившегося игрока), не знаю из-за чего это. Может кто знает, отпишите, пожалуйста.
--- Добавлено позже ---
Добавил проверку дисконнекта на нахождение игрока в игре. Игрок мог грузиться, а потом выйти из загрузки и при этом в чат писало отключение игрока, хотя его на сервере даже не было.
При этом плагине будет выводится стандартное сообщение о подключении ?
 

Faya™

Жуестер
Сообщения
613
Реакции
261
При этом плагине будет выводится стандартное сообщение о подключении ?
а оно есть?
--- Добавлено позже ---
Никто не откликнулся,это сложный в написании плагин??
Может кто нибудь тогда отвяжет его просто от influx ?

Код:
#include <sourcemod>
#include <cstrike>
#include <sdktools>

#include <influx/core>

#undef REQUIRE_PLUGIN
#include <influx/help>


enum
{
    SLOT_PRIMARY,
    SLOT_SECONDARY,
    SLOT_MELEE
};


float g_flLastAllowed[INF_MAXPLAYERS];


bool g_bIsCSGO;

int g_Offset_hMyWeapons;


public Plugin myinfo =
{
    author = INF_AUTHOR,
    url = INF_URL,
    name = INF_NAME..." - Give Weapons",
    description = "Give or drop weapons.",
    version = INF_VERSION
};

public void OnPluginStart()
{
    g_bIsCSGO = ( GetEngineVersion() == Engine_CSGO );
 
 
    if ( (g_Offset_hMyWeapons = FindSendPropInfo( "CCSPlayer", "m_hMyWeapons" )) == -1 )
    {
        SetFailState( INF_CON_PRE..."Couldn't find offset for m_hMyWeapons!" );
    }
 
 
    RegConsoleCmd( "sm_scout", Cmd_Scout );
    RegConsoleCmd( "sm_usp", Cmd_Usp );
    RegConsoleCmd( "sm_glock", Cmd_Glock );
    RegConsoleCmd( "sm_knife", Cmd_Knife );
 
    RegConsoleCmd( "sm_drop", Cmd_Drop );
    RegConsoleCmd( "sm_dropweapon", Cmd_Drop );
    RegConsoleCmd( "sm_removeweapon", Cmd_Drop );
    RegConsoleCmd( "sm_removeweapons", Cmd_Drop );
 
    if ( g_bIsCSGO )
    {
        RegConsoleCmd( "sm_hkp", Cmd_Hpk );
        RegConsoleCmd( "sm_hkp2000", Cmd_Hpk );
    }
}

public void Influx_RequestHelpCmds()
{
    Influx_AddHelpCommand( "drop", "Remove all weapons." );
}

public void OnClientPutInServer( int client )
{
    g_flLastAllowed[client] = 0.0;
}

public Action Cmd_Drop( int client, int args )
{
    if ( client && IsPlayerAlive( client ) )
    {
        if ( Inf_HandleCmdSpam( client, 1.0, g_flLastAllowed[client], true ) )
        {
            return Plugin_Handled;
        }
     
     
        int wep;
        for ( int i = 0; i < 128; i += 4 )
        {
            if ( (wep = GetEntDataEnt2( client, g_Offset_hMyWeapons + i )) > 0 )
            {
                RemovePlayerItem( client, wep );
            }
        }
    }
 
    return Plugin_Handled;
}

public Action Cmd_Scout( int client, int args )
{
    GiveWeapon( client, g_bIsCSGO ? "weapon_ssg08" : "weapon_scout", SLOT_PRIMARY );
    return Plugin_Handled;
}

public Action Cmd_Hpk( int client, int args )
{
    GiveWeapon( client, "weapon_hkp2000", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Usp( int client, int args )
{
    GiveWeapon( client, g_bIsCSGO ? "weapon_usp_silencer" : "weapon_usp", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Glock( int client, int args )
{
    GiveWeapon( client, "weapon_glock", SLOT_SECONDARY );
    return Plugin_Handled;
}

public Action Cmd_Knife( int client, int args )
{
    GiveWeapon( client, "weapon_knife", SLOT_MELEE );
    return Plugin_Handled;
}

stock void GiveWeapon( int client, const char[] wepname, int slot )
{
    if ( !client ) return;
 
    if ( !IsPlayerAlive( client ) ) return;
 
    if ( Inf_HandleCmdSpam( client, 1.0, g_flLastAllowed[client], true ) )
    {
        return;
    }
 
 
    int wep;
 
    if ( (wep = GetPlayerWeaponSlot( client, slot )) > 0 && IsValidEdict( wep ) )
    {
        RemovePlayerItem( client, wep );
    }
 
 
    GivePlayerItem( client, wepname );
 
 
    // Equipping the weapon will for some reason delete it.
    //if ( wep > 0 ) EquipPlayerWeapon( client, wep );
}
 

Вложения

Последнее редактирование:

Wightjeck

И так сойдет!
Сообщения
349
Реакции
65
Дабы не засорять тему, напишу так, на чистом сервере без SM при подключении ничего не показывает, а вот как подключаю SM начинает показывать о подключении - отключении.
Стандартные сообщения не выводятся, сам тестировал.
 
  • Like
Реакции: vb

wAries

Окоп-копальщик
Сообщения
529
Реакции
291
В общем решил использовать OnClientPostAdminCheck так будет вовремя выводить сообщение при коннекте.
OnClientPostAdminCheck() может и не произойти...
Раньше был крюк player_connect_full , происходил он при полном коннекте, сейчас его судьбу не проверял.
 

Wightjeck

И так сойдет!
Сообщения
349
Реакции
65
OnClientPostAdminCheck() может и не произойти...
Раньше был крюк player_connect_full , происходил он при полном коннекте, сейчас его судьбу не проверял.
Подтверждаю. Буду искать другой выход. Может все таки вариант от @Grey83 был неплохим.
--- Добавлено позже ---
Хотя опять же будут вылазить два сообщения. О коннекте и заходе за команду.
 
Последнее редактирование:
Все изображения и файлы загружайте только на наш сервер! Для этого используйте кнопку Прикрепить файлы, расположенную ниже или просто перетащите необходимые файлы/изображения со своего компьютера в окно редактора.
Сверху