Иконка ресурса

AdvancedBotSpawner 1.1.0

Tomiks

Участник
Сообщения
419
Реакции
288
  • Автор ресурса
  • #1
Пользователь Tomiks разместил новый ресурс:

AdvancedBotSpawner - Спавнит ботов в соответствии вашим настройкам

Спавнит ботов в соответствии с вашими настройками в конфиге.

Основная функция: в конфиге указываете при скольки игроках сколько будет спавниться ботов.

Например: при 1 игроке - 2 бота

Работа скрипта по настройкам(всё включено, указан 2 бота при 3 игроках):
1) Кик ботов.
2) Спавн ботов.
3) Всё остальное.
P.S. Если отключить спавн бота и включить их кик "KillBots" "1", то просто уберёт ботов.

При "DISABLEsection" ни одна функция не будет работать при указанном кол-ве игроков.

Если ботов...

Узнать больше об этом ресурсе...
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
PHP:
CONFIG.SetNum("PLAYERS", 1);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("2", true);
            CONFIG.SetNum("PLAYERS", 2);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("3", true);
            CONFIG.SetNum("PLAYERS", 3);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("4", true);
            CONFIG.SetNum("PLAYERS", 4);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("5", true);
            CONFIG.SetNum("PLAYERS", 5);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("6", true);
            CONFIG.SetNum("PLAYERS", 6);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("7", true);
            CONFIG.SetNum("PLAYERS", 7);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("8", true);
            CONFIG.SetNum("PLAYERS", 8);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("9", true);
            CONFIG.SetNum("PLAYERS", 9);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("10", true);
            CONFIG.SetNum("PLAYERS", 10);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();

што? просто пошли нахер и пусть положит конфиг и P.S. цикоы вроде как легальны и разрешены для использования.
upload_2019-6-19_16-36-40.png


про ключ "VALUES" забыл.


upload_2019-6-19_16-37-25.png

как минимум else if или continue и не == 1 а < 2 т.к. там еще 0 бывает
но это имело бы смысл если бы не сам код....
зачем прибавлять 0 ? зачем вообще проверка на т/кт если это не играет роли в дальнейшей логике?
upload_2019-6-19_16-39-16.png

2-й rewind уже не нужен.
upload_2019-6-19_16-39-40.png

а тут его нет в начале, но есть в конце.

не проще всего юзать его перед кодом чтобы гарантированно указатель был в начале?

upload_2019-6-19_16-40-55.png

дублирование кода - выноси в ф-ю
 

Tomiks

Участник
Сообщения
419
Реакции
288
  • Автор ресурса
  • #3
PHP:
CONFIG.SetNum("PLAYERS", 1);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("2", true);
            CONFIG.SetNum("PLAYERS", 2);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("3", true);
            CONFIG.SetNum("PLAYERS", 3);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("4", true);
            CONFIG.SetNum("PLAYERS", 4);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("5", true);
            CONFIG.SetNum("PLAYERS", 5);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("6", true);
            CONFIG.SetNum("PLAYERS", 6);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("7", true);
            CONFIG.SetNum("PLAYERS", 7);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("8", true);
            CONFIG.SetNum("PLAYERS", 8);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("9", true);
            CONFIG.SetNum("PLAYERS", 9);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
                CONFIG.JumpToKey("10", true);
            CONFIG.SetNum("PLAYERS", 10);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();

што? просто пошли нахер и пусть положит конфиг и P.S. цикоы вроде как легальны и разрешены для использования.
Посмотреть вложение 42820

про ключ "VALUES" забыл.


Посмотреть вложение 42821
как минимум else if или continue и не == 1 а < 2 т.к. там еще 0 бывает
но это имело бы смысл если бы не сам код....
зачем прибавлять 0 ? зачем вообще проверка на т/кт если это не играет роли в дальнейшей логике?
Посмотреть вложение 42822
2-й rewind уже не нужен.
Посмотреть вложение 42823
а тут его нет в начале, но есть в конце.

не проще всего юзать его перед кодом чтобы гарантированно указатель был в начале?

Посмотреть вложение 42824
дублирование кода - выноси в ф-ю
Подскажешь как сделать генерацию конфига на подобии этого циклом, пожалуйста, я слишком глуп, чтобы до этого додуматься, пробовал вроде, но что-то пошло не так, поэтому "бредокод":)

За остальное спасибо, разберусь.

И там где ты указал "VALUES" забыл - он там не нужен. Там в "BotSpawner" отдельный ключ "GeneralOption"
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #4
И там где ты указал "VALUES" забыл - он там не нужен. Там в "BotSpawner" отдельный ключ "GeneralOption"
да.скобку не увидел.

Подскажешь как сделать генерацию конфига на подобии этого циклом,
PHP:
if(!CONFIG.ImportFromFile(configs))
    {
        CONFIG.JumpToKey("VALUES", true);
        char szKey[4];
        for (int i = 1; i <= 10; ++i)
        {
            IntToString(i, szKey, sizeof(szKey));
            CONFIG.JumpToKey(szKey, true);
            CONFIG.SetNum("PLAYERS", i);
            CONFIG.SetNum("BOTS", 1);
            CONFIG.SetNum("SpawnBots", 1);
            CONFIG.SetNum("KillBots", 0);
            CONFIG.SetNum("SpawnToMinTeam", 1);
            CONFIG.SetNum("DISABLEsection", 0);
            CONFIG.GoBack();
        }
        CONFIG.Rewind(); // сброс до глобального ключа
        CONFIG.JumpToKey("GeneralOption", true); // основные настройки
        CONFIG.SetNum("Slots", 10);
        CONFIG.Rewind(); // сброс до глобального ключа
        CONFIG.ExportToFile(configs);
        LogToFileEx(logs, "Отсутствует файл BotSpawner.ini. Файл был сгенерирован автоматически");
    }
вроде так
 

Tomiks

Участник
Сообщения
419
Реакции
288
  • Автор ресурса
  • #5

Faya™

Жуестер
Сообщения
867
Реакции
457
Для чего делать глобальную переменную на команды игроков (кт и т) если есть дефайн в cstrike.inc
PHP:
#define CS_TEAM_NONE        0    /**< No team yet. */
#define CS_TEAM_SPECTATOR    1    /**< Spectators. */
#define CS_TEAM_T             2    /**< Terrorists. */
#define CS_TEAM_CT            3    /**< Counter-Terrorists. */

C-подобный:
numberPlayers = numberPlayers + 1;
->
C-подобный:
numberPlayers++; //прибавляет 1 единицу за итерацию
или
C-подобный:
numberPlayers += 1; //прибавляет то кол-во единиц которое указано после += за одну итерацию
[SourcePawn] Урок 1 - Основы языка (Часть 1)
ctrl + f -> Объединение математических операторов и операторов присвоения

Этот кусок кода считает вообще всех игроков которые находятся на сервере, тебе же нужно считать живых игроков или я не прав?
PHP:
public Action numberOfPlayers(Event hEvent, const char[] sEvName, bool bDontBroadcast) // число игроков
{
    numberPlayers = 0;
    for(int h = 1; h <= MaxClients; ++h)
    {
        if(IsClientInGame(h) && !IsFakeClient(h)) numberPlayers = numberPlayers + 1;
    }
    if(DEBUG == 1) PrintToChatAll("Игроков посчитало, %d", numberPlayers);
}

Эта строка не выполнится пока игроки есть на сервере в чем ее смысл?
C-подобный:
if(numberPlayers == 0) ServerCommand("bot_kick");

В checkPlayers можно убрать переменную Sect т.к ты просто присваиваешь ей значение f, почему бы просто f не юзать?\

Что это вообще такое?! Для чего 2 евента, если можно сделать все в одном?! И не делать лишних глобалок.
C-подобный:
HookEvent("round_end", numberOfPlayers, EventHookMode_Pre);
HookEvent("round_end", checkPlayers, EventHookMode_Pre);

Тут можно сделать так
PHP:
CONFIG.JumpToKey("VALUES", false);
CONFIG.JumpToKey(local_SectionName, false);
->
PHP:
Format(local_SectionName, sizeof local_SectionName, "VALUES/%s", local_SectionName);
CONFIG.JumpToKey(local_SectionName, false);

PHP:
for(int i = 1; i <= MaxClients; ++i)
{
    if(IsClientInGame(i))
    {
        clTeam = GetClientTeam(i);
        if(clTeam == TEAM_T)
        {
            inT = inT + 1;
        }
        if(clTeam == TEAM_CT)
        {
            inCT = inCT + 1;
        }
    }
}
Эту функцию я бы написал так
PHP:
for(int i = 1; i <= MaxClients; i++)
{
    if IsClientInGame(i) *then
    {
        switch(GetClientTeam(i))
        {
            case CS_TEAM_T:
            {
                inT++;
            }
            case CS_TEAM_CT:
            {
                inCT++;
            }
        }
    }
}
Или так
PHP:
int iTeam[4];
for(int i = 1; i <= MaxClients; i++)
{
    if IsClientInGame(i) *then
    {
        iTeam[GetClientTeam(i)]++;
    }
}

PHP:
botTeam = GetClientTeam(g);
if(inCT > inT)
{
    if(botTeam == TEAM_CT)
    {
        ChangeClientTeam(g, TEAM_T);
        if(DEBUG == 1) PrintToChatAll("Команда сменена - %d", g);
    }
}
if(inT > inCT)
{
    if(botTeam == TEAM_T)
    {
        ChangeClientTeam(g, TEAM_CT);
        if(DEBUG == 1) PrintToChatAll("Команда сменена - %d", g);
    }
}
Эту можно так
PHP:
botTeam = GetClientTeam(g);
botTeam = inCT > inT && botTeam == CS_TEAM_CT ? CS_TEAM_T : (inT > inCT && botTeam == CS_TEAM_T ? CS_TEAM_CT : -1);
if botTeam != -1 *then
{
    ChangeClientTeam(g, CS_TEAM_T)
}
if DEBUG == 1 *then
{
    PrintToChatAll("Команда сменена - %d", g);
}
 
  • Мне нравится
Реакции: NaN

Tomiks

Участник
Сообщения
419
Реакции
288
  • Автор ресурса
  • #7
Этот кусок кода считает вообще всех игроков которые находятся на сервере, тебе же нужно считать живых игроков или я не прав?
PHP:
public Action numberOfPlayers(Event hEvent, const char[] sEvName, bool bDontBroadcast) // число игроков
{
    numberPlayers = 0;
    for(int h = 1; h <= MaxClients; ++h)
    {
        if(IsClientInGame(h) && !IsFakeClient(h)) numberPlayers = numberPlayers + 1;
    }
    if(DEBUG == 1) PrintToChatAll("Игроков посчитало, %d", numberPlayers);
}

Мне и нужно, чтобы считало всех игроков.

Эта строка не выполнится пока игроки есть на сервере в чем ее смысл?
if(numberPlayers == 0) ServerCommand("bot_kick");

Сделал, чтобы просто убирало ботов, когда сервер пустой.

Что это вообще такое?! Для чего 2 евента, если можно сделать все в одном?! И не делать лишних глобалок.
HookEvent("round_end", numberOfPlayers, EventHookMode_Pre);
HookEvent("round_end", checkPlayers, EventHookMode_Pre);

Это больше к оптимизации относится, моя нынешняя задачу понять основные принципы в SourcePawn, посмотреть что и как можно делать.

В остальном согласен, можно было и сократить все переменная = переменная + 1; Тут уже мои привычки, у всех своё восприятие написанного, кому-то легче так, кому-то иначе. Оптимизацией я не занимался
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
Последнее редактирование:

Zakhar Revin

Участник
Сообщения
218
Реакции
28
Добрый. А данный плуг может под ксс корректно работать? А можно условия сложности добавить? Индивидуальные)
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,981
OMG Сколько говнокода (алгоритм работы плагина просто поражает, можно было уложиться примерно в 2 раза меньшее количество строк и упростить конфиг)
Сообщения автоматически склеены:

Вот как-то так
C-подобный:
//// BotSpawner 1.2.0.sp
//
// Code size:             7616 bytes
// Data size:             3264 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   27264 bytes
//
// Compilation Time: 0,19 sec
// ----------------------------------------

//// BotSpawner.sp
//
// Code size:             9380 bytes
// Data size:             3576 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   29340 bytes
//
// Compilation Time: 0,2 sec
В принципе можно ещё код поковырять, но мне лень
 

Вложения

  • BotSpawner 1.2.0.sp
    3.9 КБ · Просмотры: 3
  • BotSpawner.ini
    1.5 КБ · Просмотры: 3
Последнее редактирование:

Tomiks

Участник
Сообщения
419
Реакции
288
  • Автор ресурса
  • #11
OMG Сколько говнокода (алгоритм работы плагина просто поражает, можно было уложиться примерно в 2 раза меньшее количество строк и упростить конфиг)
Сообщения автоматически склеены:

Вот как-то так
C-подобный:
//// BotSpawner 1.2.0.sp
//
// Code size:             7616 bytes
// Data size:             3264 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   27264 bytes
//
// Compilation Time: 0,19 sec
// ----------------------------------------

//// BotSpawner.sp
//
// Code size:             9380 bytes
// Data size:             3576 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   29340 bytes
//
// Compilation Time: 0,2 sec
В принципе можно ещё код поковырять, но мне лень
Не могу не согласиться, это мой самый-самый первый плагин, тогда лишь учился^_^
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,376
Не могу не согласиться, это мой самый-самый первый плагин, тогда лишь учился^_^
Хорошая учёба, это смотреть чужие коды и смотреть кто как делает, и брать на заметку где он выглядит лучше.
 

CHILIM

Участник
Сообщения
1
Реакции
0
Модуль не спавнит ботов, все сделал но нету их
У меня даже без изменений боты не добавляет, сомневаюсь что у меня есть плагин который этому помешал. Я уже играл с ботом.
 
Последнее редактирование:

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
Модуль не спавнит ботов, все сделал но нету их
Интересно, что же значит "все"?
Сообщения автоматически склеены:

Grey83 ботов добавляет, но они живут своей жизнью независимо от конфига, то их больше, то их меньше, то тебя убивает в начале раунда...
 
Последнее редактирование:
Сверху Снизу