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

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
  • Автор ресурса
  • #1
7pElllHuK добавил(а) новый ресурс:

Map Vote Online - Голосование на смену карты исходя из онлайна

Плагин запускает голосование за смену карты исходя из онлайна.
Если игроков за VoteRoundInterval раундов будет больше или равно MinPlayersForSmallMap и на сервер стоит большая карта, то игрокам на сервере запустится голосование за смену карты на маленькую (список карт будет в конфиге m_maps.ini).
Если игроков будет больше MinPlayersForSmallMap и карта будет маленькая, то запустится голосование на смену из списка больших карт (конфиг b_maps.ini).
В конфиге можно все настроить, так же указать...

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

Nekro

Терра инкогнита
Сообщения
4,026
Реакции
2,260
1. Объявлены инклюды
C-подобный:
#include <sdktools>
#include <sdktools_functions>
Либо туда, либо туда

2. LoadSettingsAndCooldown() отрабатывает дважды каждый старт, при событии старта плагина и событии старта карты

3. Event_RoundStart имеет Action, но вроде как это тут не нужно, однако возвраты идут как у void
C-подобный:
if (iCurrentPlayers > g_iMinPlayersForSmallMap && bIsSmallMap)
        {
            StartVote(g_hMapListBig);
            return;
        }

А тут возврат
C-подобный:
if (bIsSmallMap) StartVote(g_hMapListBig);
        else return;

4. Event_RoundStart имеет старый Handle event, возможно было бы красивее с эстетической точки зрения сделать Event hEvent

5. Handle_VoteMenu имеет int, но возвращает void. На новых sm будет ругаться без return 0;
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
  • Автор ресурса
  • #3
1. Объявлены инклюды
C-подобный:
#include <sdktools>
#include <sdktools_functions>
Либо туда, либо туда

2. LoadSettingsAndCooldown() отрабатывает дважды каждый старт, при событии старта плагина и событии старта карты

3. Event_RoundStart имеет Action, но вроде как это тут не нужно, однако возвраты идут как у void
C-подобный:
if (iCurrentPlayers > g_iMinPlayersForSmallMap && bIsSmallMap)
        {
            StartVote(g_hMapListBig);
            return;
        }

А тут возврат
C-подобный:
if (bIsSmallMap) StartVote(g_hMapListBig);
        else return;

4. Event_RoundStart имеет старый Handle event, возможно было бы красивее с эстетической точки зрения сделать Event hEvent

5. Handle_VoteMenu имеет int, но возвращает void. На новых sm будет ругаться без return 0;
Тестировал все на 1.11, проблем не было выявлено
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
проблем не было выявлено
А как же утечки памяти? Из-за того, что ты каждый раз при голосовании создаёшь новый хэндл меню и не удаляешь старый.

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

Оптимизировал чуток и сделал инклюд colors необязательным (будет компилиться как с ним, так и без него).
Теперь список карт будет подгружаться при каждой смене карты, чтобы для обновления списков не нужно было перезапускать плагин. Хотя можно и обратно вернуть.
Ну и уменьшил размер хэндла меню вдвое (убрал дублирование имени карты в информацию и название пункта).

Надо бы ещё убрать хранение имени всех карт в массиве g_sMapVotes (вместе с этим ненужным массивом, т.к. достаточно айдишники их хранить), но мне пока лень.
Ну и ещё можно было сделать бесконечный размер списка карт, а не максимум 32 штуки (ага, именно из-за g_sMapVotes такое ограничение), но мне опять же было лень.
SM1.13:
//// Map_Vote_Online 1.1.0.sp
//
// Code size:         11564 bytes
// Data size:         8260 bytes
// Stack/heap size:      17248 bytes
// Total requirements:   37072 bytes
//
// Compilation Time: 0,09 sec
// ----------------------------------------
 
Последнее редактирование:

Arhangel

Участник
Сообщения
114
Реакции
3
Добрый день! Меню голосования пропадает через 20 секунд. Почему?

"Settings"
{
"VoteDuration" "60" //Время до смены карты + время до окончания голосования
"VoteRoundInterval" "2" //Через сколько раундов будет проверка на онлайн
"MinPlayersForSmallMap" "6" //Минимальный онлайн для старта маленькой карты
"CooldownTime" "10" //Время кулдауна в секундах (300 сек - 5 минут, значит через 5 минут запустится проверка онлайна)
}
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Arhangel, потому что установлено время существования меню равное 20 секундам.
Можно поменять на другое (строку не помню), если вместо 20 прописать 0, то будет дольше отображаться (пока игрок сам не закроет или что-то его перебьёт)
 

Arhangel

Участник
Сообщения
114
Реакции
3
@Arhangel, потому что установлено время существования меню равное 20 секундам.
Можно поменять на другое (строку не помню), если вместо 20 прописать 0, то будет дольше отображаться (пока игрок сам не закроет или что-то его перебьёт)
Если перебьет сражение один на один как вызвать меню голосования обратно)?
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
  • Автор ресурса
  • #9
Если перебьет сражение один на один как вызвать меню голосования обратно)?
Никак, команды для этого нет, остается ждать пока наступит новая проверка игроков (каждые n раундов, в конфиге настраивается)
 

Arhangel

Участник
Сообщения
114
Реакции
3
Добрый день. скорее всего вышло время голосования
"VoteDuration" "60" //Время до смены карты + время до окончания голосования
А это что? Получается не работает. Спустя 20-ть секунд меню пропадает.
 

7pElllHuK

Участник
Сообщения
1,416
Реакции
465
  • Автор ресурса
  • #13
Я так понял и меню должно отображаться 60 секунд, правильно?
Нет, время отображения меню голосование не связано с временем голосованием,
DisplayMenu(g_hVoteMenu, i, 20); тут можно указать свое время, 20 это 20 сек в течении которых будет открыто меню у игроков
 

FokS

Участник
Сообщения
422
Реакции
52
А как же утечки памяти? Из-за того, что ты каждый раз при голосовании создаёшь новый хэндл меню и не удаляешь старый.

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

Оптимизировал чуток и сделал инклюд colors необязательным (будет компилиться как с ним, так и без него).
Теперь список карт будет подгружаться при каждой смене карты, чтобы для обновления списков не нужно было перезапускать плагин. Хотя можно и обратно вернуть.
Ну и уменьшил размер хэндла меню вдвое (убрал дублирование имени карты в информацию и название пункта).

Надо бы ещё убрать хранение имени всех карт в массиве g_sMapVotes (вместе с этим ненужным массивом, т.к. достаточно айдишники их хранить), но мне пока лень.
Ну и ещё можно было сделать бесконечный размер списка карт, а не максимум 32 штуки (ага, именно из-за g_sMapVotes такое ограничение), но мне опять же было лень.
SM1.13:
//// Map_Vote_Online 1.1.0.sp
//
// Code size:         11564 bytes
// Data size:         8260 bytes
// Stack/heap size:      17248 bytes
// Total requirements:   37072 bytes
//
// Compilation Time: 0,09 sec
// ----------------------------------------
вот что в хинте происходит при голосовании, а в чат вообще не идут сообщения.

L 06/03/2025 - 19:21:09: [SM] Exception reported: Handle d6300a16 is invalid (error 3)
L 06/03/2025 - 19:21:09: [SM] Blaming: Map_Vote_Online.smx
L 06/03/2025 - 19:21:09: [SM] Call stack trace:
L 06/03/2025 - 19:21:09: [SM] [0] CloseHandle
L 06/03/2025 - 19:21:09: [SM] [1] Line 186, C:\Users\Vadim\Desktop\scripting\Map_Vote_Online 1.1.0.sp::Handle_VoteMenu
L 06/03/2025 - 19:21:09: [SM] Exception reported: Handle d6300a16 is invalid (error 3)
L 06/03/2025 - 19:21:09: [SM] Blaming: Map_Vote_Online.smx
L 06/03/2025 - 19:21:09: [SM] Call stack trace:
L 06/03/2025 - 19:21:09: [SM] [0] CloseHandle
L 06/03/2025 - 19:21:09: [SM] [1] Line 186, C:\Users\Vadim\Desktop\scripting\Map_Vote_Online 1.1.0.sp::Handle_VoteMenu
Сообщения автоматически склеены:

игра css v93
 

Вложения

  • Скриншот 03-06-2025 192424.jpg
    Скриншот 03-06-2025 192424.jpg
    9.9 КБ · Просмотры: 42

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@FokS, ща попробую поправить
Сообщения автоматически склеены:

@FokS, проверяй.

Таки убрал массивы g_sMapVotes и g_iMapVoteCounts и сделал ArrayList.
При выводе инфы в хинт первой строкой всегда будет выигрывающий вариант (остальные по порядку, в котором они в конфиге прописаны). Если за карту не голосовали, то и в хинте её видно не будет.
Длительность отображение меню теперь зависит от параметра VoteDuration в конфиге.
Ну и куча других изменений, которые больше на оптимизацию кода заточены.
SM1.13:
//// Map_Vote_Online 1.1.1.sp
//
// Code size:         10372 bytes
// Data size:         3832 bytes
// Stack/heap size:      17152 bytes
// Total requirements:   31356 bytes
//
// Compilation Time: 0,09 sec
// ----------------------------------------
 

Вложения

  • Map_Vote_Online 1.1.1_fix2.sp
    6.8 КБ · Просмотры: 7
Последнее редактирование:

Arhangel

Участник
Сообщения
114
Реакции
3
@FokS, ща попробую поправить
Сообщения автоматически склеены:

@FokS, проверяй.

Таки убрал массивы g_sMapVotes и g_iMapVoteCounts и сделал ArrayList.
При выводе инфы в хинт первой строкой всегда будет выигрывающий вариант (остальные по порядку, в котором они в конфиге прописаны). Если за карту не голосовали, то и в хинте её видно не будет.
Длительность отображение меню теперь зависит от параметра VoteDuration в конфиге.
Ну и куча других изменений, которые больше на оптимизацию кода заточены.
SM1.13:
//// Map_Vote_Online 1.1.1.sp
//
// Code size:         10372 bytes
// Data size:         3832 bytes
// Stack/heap size:      17152 bytes
// Total requirements:   31356 bytes
//
// Compilation Time: 0,09 sec
// ----------------------------------------
Вот так у меня начинается голосование -
[Система] Голосование завершено. Карта не будет изменена. Ничего даже не нажимал.
Сообщения автоматически склеены:

 

Вложения

  • errors_20250603.log
    576 байт · Просмотры: 7
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Arhangel, можно так сделать на строке 64:
if(g_hVotes.Length) ClearArray(g_hVotes);
==>
if(g_hVotes && g_hVotes.Length) ClearArray(g_hVotes);

Перезалил выше с исправлениями.
 

Arhangel

Участник
Сообщения
114
Реакции
3
@Arhangel, можно так сделать на строке 64:
if(g_hVotes.Length) ClearArray(g_hVotes);
==>
if(g_hVotes && g_hVotes.Length) ClearArray(g_hVotes);

Перезалил выше с исправлениями.
Добрый день. Тоже самое - [Система] Голосование завершено. Карта не будет изменена, только без ошибки в логи. Не дает выбрать карту.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Arhangel, в смысле не даёт? Меню не появляется или что?
 
Сверху Снизу