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

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@7pElllHuK, у меня в Revival вот так было сделано:
C-подобный:
stock void AddSound()
{
    FormatEx(sSound, sizeof(sSound), "sound/%s", sCvarPath);
    AddFileToDownloadsTable(sSound);

    ...

    FormatEx(sSound, sizeof(sSound), "%s", sCvarPath);
    PrecacheSound(sSound, true);
}
А воспроизводил звук так: if(sSound[0]) EmitAmbientSound(sSound, fDeathPos[target]);
 

fcqqqqq

Участник
Сообщения
3
Реакции
1
@7pElllHuK, у меня в Revival вот так было сделано:
C-подобный:
stock void AddSound()
{
    FormatEx(sSound, sizeof(sSound), "sound/%s", sCvarPath);
    AddFileToDownloadsTable(sSound);

    ...

    FormatEx(sSound, sizeof(sSound), "%s", sCvarPath);
    PrecacheSound(sSound, true);
}
А воспроизводил звук так: if(sSound[0]) EmitAmbientSound(sSound, fDeathPos[target]);
привет бро, поможешь сделать файл .sp ?
в кс го использовал этот скрипт - public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "ОШИБКА");
в кс 2 при компиляции выдаёт ошибки
// error.sp(1) : error 437: functions in global scope must use braces
// 1 | public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "Access Denied:You are a new user on our server. Please visit rush-point.com to register and gain access");
// -----------------------------------------------------------------------^
//
// error.sp(1) : error 010: invalid function or declaration
// 1 | public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "Access Denied:You are a new user on our server. Please visit rush-point.com to register and gain access");
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
//
// 2 Errors.
//
// Compilation Time: 0,09 sec
помоги пожалуйста, будь добр
Сообщения автоматически склеены:

@alexnet Проверьте в этой версии присутствует данная проблема?
Оставлял чисто функционал как то, без настроек и прочего

C-подобный:
#include <cstrike>
#include <sdktools_functions>

#pragma semicolon 1
#pragma newdecls required

public Plugin myinfo =
{
    name = "Replacing Bot",
    author = "babka68",
    description = "Игрок может заменить бота",
    version = "1.0",
    url = "https://vk.com/zakazserver68"
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    if (buttons & IN_USE && !IsPlayerAlive(client))
    {
        int team_client = GetClientTeam(client);
      
        static int i = 0; i = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget");
        if (i > 0 && IsFakeClient(i))
        {
            int teami = GetClientTeam(i);
          
            if (team_client == teami)
            {
                static float pos[3];
                GetClientAbsOrigin(i, pos);
              
                KickClient(i);
                CS_RespawnPlayer(client);
              
                TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);
            }
        }
    }
    return Plugin_Continue;
}
привет, если силен, помоги с вопросом выше пожалуйста
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@fcqqqqq, в кс2 используется другой язык для написания плагинов, не SourcePawn, а C#:
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
привет бро, поможешь сделать файл .sp ?
в кс го использовал этот скрипт - public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "ОШИБКА");
в кс 2 при компиляции выдаёт ошибки
// error.sp(1) : error 437: functions in global scope must use braces
// 1 | public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "Access Denied:You are a new user on our server. Please visit rush-point.com to register and gain access");
// -----------------------------------------------------------------------^
//
// error.sp(1) : error 010: invalid function or declaration
// 1 | public bool:OnClientConnect(client, String:rejectmsg[], maxlen) strcopy(rejectmsg, maxlen, "Access Denied:You are a new user on our server. Please visit rush-point.com to register and gain access");
// ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
//
// 2 Errors.
//
// Compilation Time: 0,09 sec
помоги пожалуйста, будь добр
Сообщения автоматически склеены:


привет, если силен, помоги с вопросом выше пожалуйста
на c# надо плагины писать для кс2, это уже не ко мне
 

Gaivor

Участник
Сообщения
186
Реакции
18
Привет, помогите пожалуйста скомпилировать плагин. При компиляции ошибка:
// C:\Users\admin\Desktop\scripting\deathmatch.sp(3001) : error 101: fixed dimensions must be after the array name, not on the type
 

Вложения

  • deathmatch.sp
    128.8 КБ · Просмотры: 10

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
@Gaivor, попробуй на строке 3001 заменить bool IsPointSuitableDistance(int spawnPoint, float[][3] enemyEyePositions, int numberOfEnemies) на вот это: bool IsPointSuitableDistance(int spawnPoint, float enemyEyePositions[MAXPLAYERS+1][3], int numberOfEnemies)
 

babka68

Участник
Сообщения
2,124
Реакции
956
Привет, помогите пожалуйста скомпилировать плагин. При компиляции ошибка:
// C:\Users\admin\Desktop\scripting\deathmatch.sp(3001) : error 101: fixed dimensions must be after the array name, not on the type
C-подобный:
error 101: fixed dimensions must be after the array name, not on the type
The following code will trigger this error:

void GetVector(float[3] pos) {}
The brackets ([]) are in the wrong position. Next to the type, they indicate an array of unknown or any size. Next to the name, they indicate a fixed size. The correct syntax is:

void GetVector(float pos[3]) {}
 

Gaivor

Участник
Сообщения
186
Реакции
18
C-подобный:
error 101: fixed dimensions must be after the array name, not on the type
The following code will trigger this error:

void GetVector(float[3] pos) {}
The brackets ([]) are in the wrong position. Next to the type, they indicate an array of unknown or any size. Next to the name, they indicate a fixed size. The correct syntax is:

void GetVector(float pos[3]) {}
Я так делал, новые ошибки появлялись. Фикс grey83 помог решить все ошибки. Спасибо
 

alexnet

Участник
Сообщения
82
Реакции
3
Привет ребят подскажите пжл кто может исправить плагин что бы вот боты когда за них заходишь не стояли спиной (а то они всегда спиной к противнику) сервер cs source и так же если есть вариант что бы после захода не оставалась точек от ботов на радаре (может кто что подскажет я уже писал но может кто сможет все таки если что можно договорится в плане денег)
C-подобный:
#pragma semicolon 1
#pragma newdecls required

#include <cstrike>
#include <sdktools_functions>

public Plugin myinfo =
{
    name        = "Bot Replacer",
    author        = "SenatoR, babka68",
    description    = "Игрок может сыграть вместо бота",
    version        = "1.3.0_22.01.2024 (rewritten by Grey83)",
    url            = "https://vk.com/zakazserver68, hlmod.ru"
}

Handle
    hTimer;
bool
    bShow,
    bNotify,
    iRemove;
int
    iUses[MAXPLAYERS + 1],
    iAmount,
    iCost,
    iTarget;

public void OnPluginStart()
{
    ConVar cvar;
    cvar = CreateConVar("sm_bot_replacer_amount", "20", "Сколько раз за раунд игрок может сыграть вместо бота?", _, true, _, true, 2.0);
    cvar.AddChangeHook(CVarChanged_Amount_Bot);
    iAmount = cvar.IntValue;

    cvar = CreateConVar("sm_bot_replacer_price", "1", "Сколько стоит сыграть за бота?", _, true, _, true, 16000.0);
    cvar.AddChangeHook(CVarChanged_Price_Bot);
    iCost = cvar.IntValue;

    cvar = CreateConVar("sm_bot_replacer_showhud", "1", "Показывать сообщение, что можно играть за бота?", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Show_Message_Hud);
    CVarChanged_Show_Message_Hud(cvar, NULL_STRING, NULL_STRING);

    cvar = CreateConVar("sm_bot_replacer_typekick", "0", "0 - Кикнуть бота, 1 - Удалить бота", _, true, _, true, 1.0);
    cvar.AddChangeHook(CVarChanged_Type_Kick);
    iRemove = cvar.BoolValue;

    AutoExecConfig(true, "sm_bot_replacer");

    HookEvent("round_freeze_end", Event_Round, EventHookMode_PostNoCopy);
    HookEvent("round_end", Event_Round, EventHookMode_PostNoCopy);
}

public void CVarChanged_Amount_Bot(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iAmount = cvar.IntValue;
}

public void CVarChanged_Price_Bot(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iCost = cvar.IntValue;
}

public void CVarChanged_Show_Message_Hud(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    if((bNotify = cvar.BoolValue) == !hTimer) OnMapStart();
}

public void CVarChanged_Type_Kick(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iRemove = cvar.BoolValue;
}

public void OnMapStart()
{
    if(bNotify) hTimer = CreateTimer(1.0, Timer_Notify, _, TIMER_REPEAT);
    else OnMapEnd();
}

public Action Timer_Notify(Handle timer)
{
    if(!bShow)
        return Plugin_Continue;

    static int i, t;
    for(i = 1; i <= MaxClients; i++)
        if(iUses[i] < iAmount                                                                        // может заменять?
        && IsClientInGame(i) && !IsFakeClient(i) && (t = GetClientTeam(i)) > 1 && !IsPlayerAlive(i)
        && (iTarget = GetEntPropEnt(i, Prop_Send, "m_hObserverTarget")) > 0 && IsFakeClient(iTarget)// наблюдает за ботом?
        && (!iCost || iCost <= GetEntProp(i, Prop_Send, "m_iAccount"))                                // достаточно средств?
        && t == GetClientTeam(iTarget) && IsPlayerAlive(iTarget))                                    // подходящий бот?
        {
            PrintHintText(i, "=====================================\nНАЖМИТЕ E ЧТОБЫ ИГРАТЬ ЗА БОТА %N \n=====================================", iTarget);
        }

    return Plugin_Continue;
}

public void Event_Round(Event event, const char[] name, bool dontBroadcast)
{
    bShow = name[6] == 'f';
    for(int i = 1; i <= MaxClients; i++) OnClientDisconnect(i);
}

public Action OnPlayerRunCmd(int client, int &buttons)
{
    static bool use[MAXPLAYERS+1];
    static int ap, h, armor, helmet, money;
    static float pos[3];
    if(buttons & IN_USE && !use[client] && iUses[client] < iAmount && !IsPlayerAlive(client)
    && (iTarget = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget")) > 0 && IsFakeClient(iTarget)
    && GetClientTeam(client) == GetClientTeam(iTarget)
    && iCost <= (money = GetEntProp(client, Prop_Send, "m_iAccount")))
    {
        int health = GetClientHealth(iTarget);
        if(ap > 0 || (ap = FindSendPropInfo("CCSPlayer", "m_ArmorValue")) > 0)    armor = GetEntData(client, ap, 1);
        if(h > 0 || (h = FindSendPropInfo("CCSPlayer", "m_bHasHelmet")) > 0)    helmet = GetEntData(client, h, 1);
        GetClientAbsOrigin(iTarget, pos);

        if(iRemove)
            ServerCommand("bot_kick %N", iTarget);
        else KickClient(iTarget);

        CS_RespawnPlayer(client);
        iUses[client]++;
        SetEntProp(client, Prop_Send, "m_iAccount", money - iCost);
        TeleportEntity(client, pos, NULL_VECTOR, NULL_VECTOR);

        SetEntityHealth(client, health);
        if(ap > 0)    SetEntData(client, ap, armor, 1, true);
        if(h > 0)    SetEntData(client, h, helmet, 1, true);
    }

    use[client] = !!(buttons & IN_USE);

    return Plugin_Continue;
}

public void OnClientDisconnect(int client)
{
    iUses[client] = 0;
}

public void OnMapEnd()
{
    if(hTimer) delete hTimer;
}
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
можно договорится в плане денег
Недавно было обновление, а так же добавился новый модуль
Что же касается вида при воскрешении, то а как мы узнаем заранее, где будет в тот момент противник?) Можно но сложно, такого функционала нет и нужно больше подробностей для реализации
 

alexnet

Участник
Сообщения
82
Реакции
3
Недавно было обновление, а так же добавился новый модуль
Что же касается вида при воскрешении, то а как мы узнаем заранее, где будет в тот момент противник?) Можно но сложно, такого функционала нет и нужно больше подробностей для реализации
А точки на радаре от них остаются или это убрано?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
когда за них заходишь не стояли спиной
на 126-й строке нужно угол поворота прописывать, скопированый у бота перед его удалением (на 117-й строке только координаты получает плагин):
TeleportEntity(client, pos, углы_поворота, NULL_VECTOR);
 

alexnet

Участник
Сообщения
82
Реакции
3
на 126-й строке нужно угол поворота прописывать, скопированый у бота перед его удалением (на 117-й строке только координаты получает плагин):
TeleportEntity(client, pos, углы_поворота, NULL_VECTOR);
спасибо большое но уже решили вопрос
 

Arhangel

Участник
Сообщения
114
Реакции
3
Всем добрый вечер. Видел когда то на сервере такой плагин, когда игрок зашел в игру и нету активных игроков и ботов, выскакивает менюшка с вопросом хочет ли игрок сыграть с ботом, подскажите есть ли что то похожее? CS: Source (OrangeBox)
 

pl.ol-245

Участник
Сообщения
61
Реакции
5
Всем доброго времени суток, кто может написать не большой плагин?
цель плагина чтобы в начале каждого раунда был применён параметр zr_infect_mzombie_ratio -1
ну и квар на включение и выключение плагина
 

Kewn

Участник
Сообщения
321
Реакции
61
Всем доброго времени суток, кто может написать не большой плагин?
цель плагина чтобы в начале каждого раунда был применён параметр zr_infect_mzombie_ratio -1
ну и квар на включение и выключение плагина
Ты хочешь сделать всегда одного выжившего? Если я правильно помню этот квар то плагин и не нужен . Так как он отвечает за кол-во зараженных.
 
Сверху Снизу