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

R1w3d

Участник
Сообщения
153
Реакции
31
Здрасте, нужен плагин который в табе вместо общего счета показывает общий уровень в вкс
 
Последнее редактирование:

Mr_panica

XenForo one 💖
Сообщения
921
Реакции
435
Люди добрые здравствуйте,может кто поможет.
Нужно плагин VIP SKINS подправить чтобы можно было выгружать без ошибок тут есть инструкция но у меня все равно не удалось сделать.
Сделал как было написано,он скомпилился с одной ошибкой и при нажатии выбор скина менюшка просто офалась.
Что за ошибка? Может она у тебя только.
 

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Что за ошибка? Может она у тебя только.
Товарисч Паника,будьте любезны откройте обе ссылки,и на ссылке "инструкция" есть данный текст,цитирую

Обновление позволяет решить такие проблемы:

Адекватная загрузка/выгрузка модуля средствами SourceMod (sm plugins load/reload/unload)


Ошибка стандартная для всех модулей что делались под старое ядро не выгружаемыми,если про ошибку при компиляции то вот
 

Wanderer

Шизофреник
Сообщения
171
Реакции
27
Можно ли выдать сразу 3 гранаты, не проверял...
Как я себе это представляю? Выдаешь гранату и устанавливаешь ей 'запас'.

Но есть такой варик (легкий же плагин):
PHP:
#include <sourcemod>
#include <sdktools_functions>
#include <sdkhooks>

public Plugin myinfo =
{
    name = "Limited Grenade",
    author = "Drumanid",
    version = "1.0.0",
    url = "Discord: Drumanid#9108 | Telegram: t.me/drumanid"
};

int g_iCountGrenade[MAXPLAYERS +1];
static const char g_sGrenade[32] = "weapon_hegrenade";  // Название гранаты
#define COMMAND "sm_he"                                 // Команда выдачи гранат(ы)
#define COUNT 3                                         // Кол-во выдаваемых гранат

#define VE(%0) view_as<EventHook>(%0)
#define LC(%0) for(int %0 = 1; %0 <= MaxClients; ++%0) if(IsClientInGame(%0))
public void OnPluginStart()
{
    LoadTranslations("limited_grenade.phrases.txt");

    RegConsoleCmd(COMMAND, Comamnd);

    HookEvent("round_start",VE(RoundStart), EventHookMode_PostNoCopy);
    HookEvent("hegrenade_detonate", VE(HeGrenadeDetonate));

    LC(iClient)
        OnClientPostAdminCheck(iClient);
}

public Action Comamnd(int iClient, int iArgs)
{
    if(iClient && iArgs == 0)
    {
        if(IsPlayerAlive(iClient))
        {
            if(g_iCountGrenade[iClient] == -1)
            {
                GivePlayerItem(iClient, g_sGrenade);
                PrintHintText(iClient, "%t", "Give grenade", (g_iCountGrenade[iClient] = COUNT));
            }
            else
                PrintToChat(iClient, "%t", "Took grenades");
        }
        else
            PrintToChat(iClient, "%t", "Player is dead");
    }

    return Plugin_Handled;
}

void RoundStart()
{
    LC(iClient)
        g_iCountGrenade[iClient] = -1;
}

void HeGrenadeDetonate(Event hEvent)
{
    RequestFrame(HeGrenadeDetonateFrame, hEvent.GetInt("userid"));
}

void HeGrenadeDetonateFrame(int iClient)
{
    if((iClient = GetClientOfUserId(iClient)) &&
    IsClientInGame(iClient) &&
    IsPlayerAlive(iClient))
    {
        if(g_iCountGrenade[iClient] > 0)
        {
            if(--g_iCountGrenade[iClient] == 0)
            {
                PrintHintText(iClient, "%t", "No grenade");
                return;
            }

            GivePlayerItem(iClient, g_sGrenade);
            PrintHintText(iClient, "%t", "Count of greandes", g_iCountGrenade[iClient]);
        }
    }
}

void WeaponSwitchPost(int iClient, int iEntity)
{
    if(g_iCountGrenade[iClient] < 1)
        return;
  
    int iOther = GetEntPropEnt(iEntity, Prop_Send, "m_hThrower");
    if(iOther == iClient)
        return;
  
    char sItem[32];
    GetEdictClassname(iEntity, sItem, sizeof(sItem));

    if(StrEqual(sItem, g_sGrenade))
        ++g_iCountGrenade[iClient];
}

public void OnClientPostAdminCheck(int iClient)
{
    g_iCountGrenade[iClient] = -1;

    if(!IsFakeClient(iClient))
        SDKHook(iClient, SDKHook_WeaponSwitchPost, WeaponSwitchPost);
}
Все прекрасно работает.спасибо большое.
 

iLoco

Пишу плагины за печеньки 🍪🍪🍪
Сообщения
2,265
Реакции
1,323
Как добавить считывание нажай двох и более кнопок в данный код? К примеру нужно делать действие по одновременном нажатии несколько кнопок (к примеру drop use +left)
Знаю что можно продублировав AddCommandListener и указать разные действия и через if делать считывание, но это как-то не очень, нужен другой вариант, попроще так сказать.

PHP:
public OnPluginStart()
{
    AddCommandListener(Button_G, "drop");
}

public Action:Button_G(client, String:command[], args)
{
   FakeClientCommand(client, "sm_guns");
   return Plugin_Continue;
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Loco, лучше никак, если используется отлов кнопок, которые ловятся только с помощью AddCommandListener()
Для остальных случаев есть GetClientButtons()
 

sviridov_artem

Добрая душа
Сообщения
134
Реакции
30
Ребят, нужен плагин, который проверяет кол-во с игранных раундов на карте , и меняет её на ту же самую. Бывает так, что играется более 400 раундов и демо не загружается на web сервер.
 

R1w3d

Участник
Сообщения
153
Реакции
31
мне кажется это ксс в34
upload_2019-2-2_12-10-17.png
[\spoiler]
 

Grey83

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

#include <cstrike>

static const int MAX_ROUNDS = 400;

int iRounds;

public void OnMapStart()
{
    iRounds = 1;
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    if(reason == CSRoundEnd_GameStart) return Plugin_Continue;

    iRounds++;
    if(iRounds > MAX_ROUNDS)
    {
        char map[65];
        GetCurrentMap(map, sizeof(map));
        ForceChangeLevel(map, "Max rounds");
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
--- Добавлено позже ---
Возможно в плагине return Plugin_Handled; не нужно
 

Вложения

  • 333.sp
    512 байт · Просмотры: 4
  • 333.smx
    3.7 КБ · Просмотры: 1

gtixon

Участник
Сообщения
1,078
Реакции
401
Нужен плагин который будет воскрешать игрока если он суициднулся в начале раунда.

[CS: Source] - AutoLife 1.1 - не работает на CSGO
Eazy Spawn Protector - защищает только от урона
Spawn Protection - не возраждает после смены команды и суицида
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
Ещё можно добавить восстановления счёта и денег после перезагрузки карты
 

sviridov_artem

Добрая душа
Сообщения
134
Реакции
30
@sviridov_artem, пробуй
PHP:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>

static const int MAX_ROUNDS = 400;

int iRounds;

public void OnMapStart()
{
    iRounds = 1;
}

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    if(reason == CSRoundEnd_GameStart) return Plugin_Continue;

    iRounds++;
    if(iRounds > MAX_ROUNDS)
    {
        char map[65];
        GetCurrentMap(map, sizeof(map));
        ForceChangeLevel(map, "Max rounds");
        return Plugin_Handled;
    }

    return Plugin_Continue;
}
--- Добавлено позже ---
Возможно в плагине return Plugin_Handled; не нужно


Проверил, все работает)) Спасибо большое...
 

Mr.Black

Участник
Сообщения
145
Реакции
61
Добрый день!
Игра CS GO. Нужно сделать, чтобы союзники могли наносить союзникам урон с he гранат и молотова, но не могли с огнестрельного оружия и ножа(также зевса).
Квары отвечающие за урон по союзникам:
Оффтоп
Сейчас плагин выглядит следующим образом и урон с огнестрела, ножа и зевса не наносится по союзникам, а с гранат и молотова урон союзникам наносится как и нужно.
Оффтоп
Помогите, пожалуйста, решить две проблемы:
1) Когда союзники режут союзников с ножа урон не наносится, но происходит замедление. Как отключить это замедление?
2) При падении с большой высоты игроки не получают урона от падения (скорей всего это связано с damagetype урона от ножа, раньше в плагине была проверка на damagetype - переделал по другому, но это не решило проблему). Как сделать проверку получил ли игрок урон с ножа от своего союзника или просто упал с высоты ?
 

Faya™

Жуестер
Сообщения
867
Реакции
457
Добрый день!
Игра CS GO. Нужно сделать, чтобы союзники могли наносить союзникам урон с he гранат и молотова, но не могли с огнестрельного оружия и ножа(также зевса).
Квары отвечающие за урон по союзникам:
Оффтоп
Сейчас плагин выглядит следующим образом и урон с огнестрела, ножа и зевса не наносится по союзникам, а с гранат и молотова урон союзникам наносится как и нужно.
Оффтоп
Помогите, пожалуйста, решить две проблемы:
1) Когда союзники режут союзников с ножа урон не наносится, но происходит замедление. Как отключить это замедление?
2) При падении с большой высоты игроки не получают урона от падения (скорей всего это связано с damagetype урона от ножа, раньше в плагине была проверка на damagetype - переделал по другому, но это не решило проблему). Как сделать проверку получил ли игрок урон с ножа от своего союзника или просто упал с высоты ?
PHP:
int m_flVelocityModifier; //добавь в начало кода

public void OnPluginStart()
{
    m_flVelocityModifier = FindSendPropOffs("CCSPlayer", "m_flVelocityModifier"); //добавь в OnPluginStart()
}

public Action OnPlayerRunCmd(int iClient) //этот блок, полностью добавь, если нету, если есть то дополни
{
    if(IsPlayerAlive(iClient) && GetEntDataFloat(iClient, m_flVelocityModifier) < 1.0)
        SetEntDataFloat(iClient, m_flVelocityModifier, 1.0, true);

    return Plugin_Continue;
}

public Action OnTakeDamage(int iVictim, int& iAttacker, int& iInflictor, float& fDamage, int& iDamageType) //этот блок замени
{
    if(iAttacker > 0 && GetClientTeam(iVictim) == GetClientTeam(iAttacker))
    {
        char szWeapon[32];
        GetClientWeapon(iAttacker, szWeapon, sizeof szWeapon);
        if(StrEqual(szWeapon[7], "knife") || StrEqual(szWeapon[7], "taser"))
        {
            fDamage = 0.0;

            return Plugin_Changed;
        }
    }

    return Plugin_Continue;
}
пробуй, но замедление будет убрано у всех
 

Mr.Black

Участник
Сообщения
145
Реакции
61
Оффтоп
Теперь урон от падения наносится, но также наносится и урон союзникам от ножа. Кроме того наносится урон союзникам от зевса. Замедление при ударах ножом пропало, но оно также пропало и когда режешь противника (так, увы, не годится).

Вопрос остался актуален!
Как отключить замедление при ударах ножом по союзникам и вернуть урон при падении с высоты (не навредив защите от урона с ножа союзникам) ?
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Оффтоп
Теперь урон от падения наносится, но также наносится и урон союзникам от ножа. Кроме того наносится урон союзникам от зевса. Замедление при ударах ножом пропало, но оно также пропало и когда режешь противника (так, увы, не годится).

Вопрос остался актуален!
Как отключить замедление при ударах ножом по союзникам и вернуть урон при падении с высоты (не навредив защите от урона с ножа союзникам) ?

А если так ?

PHP:
#include <sdkhooks>

public void OnClientPutInServer(int iClient)
{
    SDKHook(iClient, SDKHook_TraceAttack, TraceAttack);
}

public Action TraceAttack(int iVictim, int& iAttacker, int& iInflictor, int &damagetype, int &ammotype, int hitbox, int hitgroup)
{
    return (iAttacker > 0 && GetClientTeam(iVictim) == GetClientTeam(iAttacker) && damagetype != DMG_BLAST) ? Plugin_Stop:Plugin_Continue;
}
 
Сверху Снизу