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

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
@Grey83, то есть это никак не исправить?
20190127132210_1.jpg
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Wightjeck, я тебе предложил вариант уже. Ты его пробовал использовать?
 

rokfestr

Участник
Сообщения
340
Реакции
63
Может кто-то помочь? Нужен плагин для CSGO, который будет делать no block для игроков, но чтобы гранаты не пролетали сквозь них. Уже разные noblock плагины пробовал, во всех гранаты пролетают сквозь игрока.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Может кто-то помочь? Нужен плагин для CSGO, который будет делать no block для игроков, но чтобы гранаты не пролетали сквозь них. Уже разные noblock плагины пробовал, во всех гранаты пролетают сквозь игрока.
[CS:GO] Noblock for players and nades. - AlliedModders
с параметром sm_nonadeblock_enabled 0 попробуйте

Весь список
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Wightjeck, попробуй так, может поможет от дублирования
 

Вложения

  • kdlp-gameevents.sp
    3.2 КБ · Просмотры: 11

Wanderer

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

wightjeck

Костыли заказывали?
Сообщения
472
Реакции
154
@Grey83, а нельзя удалить стандартное сообщение и свое, новое выводить?
 

rejchev

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

wightjeck

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

Вложения

  • kdlp-gameevents.sp
    3 КБ · Просмотры: 6

Truyn

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

C-подобный:
#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 );
}
 

Вложения

  • influx_wepgive.sp
    3.2 КБ · Просмотры: 3

wightjeck

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

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

Вложения

  • simple_announce.smx
    5.3 КБ · Просмотры: 4
  • simple_announce.sp
    2 КБ · Просмотры: 17
  • csgo_colors.inc
    3.7 КБ · Просмотры: 3
Последнее редактирование:
  • Мне нравится
Реакции: vb

vb

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

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

Faya™

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

C-подобный:
#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 );
}
 

Вложения

  • wepgive.smx
    5.2 КБ · Просмотры: 2
  • wepgive.sp
    2.1 КБ · Просмотры: 5
Последнее редактирование:
Сверху Снизу