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

FokS

Участник
Сообщения
422
Реакции
52
Может кто написать простой плагин? Если раунд завершился, то бомбу поставить нельзя будет. Заранее спасибо.
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
Может кто написать простой плагин? Если раунд завершился, то бомбу поставить нельзя будет. Заранее спасибо.
C-подобный:
#include <cstrike>
#include <sdktools>

public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && !IsFakeClient(i))
        {
            int item = GetPlayerWeaponSlot(i, CS_SLOT_C4);
            if(IsValidEdict(item) && item != -1)
            {
                RemovePlayerItem(i, item);
                AcceptEntityInput(item, "kill");
                break;
            }
        }
    }
    return Plugin_Continue;
}
 
Последнее редактирование:
  • Мне нравится
Реакции: FokS

FokS

Участник
Сообщения
422
Реакции
52
C-подобный:
public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason)
{
    for(int i = 1; i <= MaxClients; i++)
    {
        if(IsClientInGame(i) && !IsFakeClient(i))
        {
            int item = GetPlayerWeaponSlot(client, CS_SLOT_C4);
            if(IsValidEdict(item))
            {
                RemovePlayerItem(client, item);
                AcceptEntityInput(item, "kill");
            }
        }
    }
}
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// bomd_block_roundend.sp
//
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(1) : error 139: could not find type "CSRoundEndReason"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(7) : error 017: undefined symbol "GetPlayerWeaponSlot"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(8) : error 017: undefined symbol "RemovePlayerItem"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(9) : error 017: undefined symbol "AcceptEntityInput"
//
// 4 Errors.
//
// Compilation Time: 0,16 sec
// ----------------------------------------

Press enter to exit ...
 

Palonez

бб братки
Сообщения
3,035
Реакции
1,837
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// bomd_block_roundend.sp
//
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(1) : error 139: could not find type "CSRoundEndReason"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(7) : error 017: undefined symbol "GetPlayerWeaponSlot"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(8) : error 017: undefined symbol "RemovePlayerItem"
// C:\Users\Desktop\compiled\sm 1.10\addons\sourcemod\scripting\bomd_block_roundend.sp(9) : error 017: undefined symbol "AcceptEntityInput"
//
// 4 Errors.
//
// Compilation Time: 0,16 sec
// ----------------------------------------

Press enter to exit ...
обновил
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
Если раунд завершился, то бомбу поставить нельзя будет
Разве такое вообще возможно сделать?
Обычно даже времени на это не хватит.
Сообщения автоматически склеены:

break добавь, что ли (много ли серверов, где игрокам позволено носить больше одной бомбы на команду?)
Сообщения автоматически склеены:

если индекс не равен -1, то энтити всегда валидна, насколько я понимаю
 

-=|УЧЕНИК|=-

вся жизнь,сплошной цирк.
Сообщения
876
Реакции
212
Щас бы блокировать бомбу,из за каких то пару очков)
 

FokS

Участник
Сообщения
422
Реакции
52
Разве такое вообще возможно сделать?
Обычно даже времени на это не хватит
конец раунда 10 сек. за это время можно успеть поставить бомбу, если игрок рядом с плентом.
Щас бы блокировать бомбу,из за каких то пару очков)
Да нет, просто стоят 2 плагина которые выводят оверлей, один в конце раунда, а другой при установки бомбы, это нужно было чтобы не было конфликта у оверлеев.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@Palonez, кстати, определить у какого игрока бомба можно вот так:
C-подобный:
int hPlayerResource = -1;

public void OnMapStart()
{
    hPlayerResource = -1;
}

stock int GetCarrier()
{
    return hPlayerResource != -1 || (hPlayerResource = FindEntityByClassname(hPlayerResource, "cs_player_manager")) != -1
        ? GetEntProp(hPlayerResource, Prop_Send, "m_iPlayerC4") : -1;
}
 

Nekro

Терра инкогнита
Сообщения
4,026
Реакции
2,260
@Palonez, кстати, определить у какого игрока бомба можно вот так:
C-подобный:
int hPlayerResource = -1;

public void OnMapStart()
{
    hPlayerResource = -1;
}

stock int GetCarrier()
{
    return hPlayerResource != -1 || (hPlayerResource = FindEntityByClassname(hPlayerResource, "cs_player_manager")) != -1
        ? GetEntProp(hPlayerResource, Prop_Send, "m_iPlayerC4") : -1;
}
Как вариант подкинуть в копилку функций
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@Nekro, я этот код как минимум с сентября 2021 года использую.
Хотя плагины с ним вроде в паблик не попадали.
 

Туник

Участник
Сообщения
1,281
Реакции
263
Подскажите момент по коду, клантег включается но вырубить его нельзя, как правильно реализовать вкл-выкл.
PHP:
#pragma newdecls required
#pragma semicolon 1

#include <cstrike>
#include <premium_core>

#define ClAN_TAG    "ClanTag"

bool bLate;

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    if(bLate) Premium_AddFeature(ClAN_TAG);

    HookEvent("player_team", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("player_spawn", Event_CheckTag, EventHookMode_PostNoCopy);
    HookEvent("round_start", Event_CheckTag, EventHookMode_PostNoCopy);
}

public void Premium_OnPremiumLoaded()
{
    Premium_AddFeature(ClAN_TAG);
}

public void OnClientPutInServer(int client)
{
    SetupTag(client);
}

void Event_CheckTag(Event event, char[] name, bool dontBroadcast)
{
    CreateTimer(0.1, DelayCheck, _, TIMER_FLAG_NO_MAPCHANGE);
}

Action DelayCheck(Handle timer)
{
    for(int i = 1; i <= MaxClients; i++) if(IsClientInGame(i)) SetupTag(i);
    return Plugin_Continue;
}

void SetupTag(int client)
{
    if(IsFakeClient(client)) return;

    if(Premium_IsFeatureUse(client, ClAN_TAG))
    {
        CS_SetClientClanTag(client, "PREMIUM");
    }
}
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
Всем привет, подскажите пожалуйста, как исправить ошибку: Exception reported: Array index out-of-bounds (index -1, limit 31)

Код:
public Action CountTime(Handle hTimer)
{
    for (int i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) > 1)
        {
            if (g_iTime[i]++ > iBonusTime)
            {
                char sBuff[48], sCM[256], sOld[256];
                GetStringTime(iBonusTime, sBuff, sizeof sBuff);
              
                if (++g_iDays[i] > 0 && !g_iGived[g_iDays[i]][i])
                {
                    g_iGived[g_iDays[i]][i] = 1;

                    if (g_iDays[i] >= 30)
                    {
                        g_iDays[i] = 0;
                    }

                    if (g_iGived[g_iDays[i]-1][i] > 0 && g_iGived[g_iDays[i]-1][i] == 1)
                    {
                        for (int t; t < 30; t++)
                        {
                            g_iGived[t][i] = 0;
                        }

                        g_iDays[i] = 0;
                    }
                }

                g_iTime[i] = 0; 
            }
        }
    }
}
Еррор лог указывает на ошибку в выделенной строке
 

khood

Участник
Сообщения
214
Реакции
51
Здраствуйте нужно сделать под vip_core
 

Вложения

  • auto_buy_fork.sp
    18.9 КБ · Просмотры: 14

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
не может он на скобку указывать
давай сюда полное сообщение об ошибке
L 07/30/2023 - 16:41:54: [SM] Exception reported: Array index out-of-bounds (index -1, limit 31)
L 07/30/2023 - 16:41:54: [SM] Blaming: Timed_Bonus.smx
L 07/30/2023 - 16:41:54: [SM] Call stack trace:
L 07/30/2023 - 16:41:54: [SM] [1] Line 344, D:\Desktop\Компиляторы\1.9 scripting\Timed_Bonus.sp::CountTime
Сообщения автоматически склеены:

Какой смысл проверять что число больше 0, а затем что оно равно 1?
Не я автор плагина, попал в руки исходник от 3 лиц
Сообщения автоматически склеены:

Какой смысл проверять что число больше 0, а затем что оно равно 1?
Как я понял идет проверка на то выдан ли предмет
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
@7pElllHuK, у тебя ошибка может быть только на 21 строке процитированного тобой кода
 
Сверху Снизу