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

[ACS] INJECTION 1.0.6.2

Нет прав для скачивания
Сообщения
265
Реакции
84
Ruby, не видел такого, сейчас посмотрю... Спасибо, вроде подходит :good2: сейчас попробую.
 
Последнее редактирование:
Сообщения
336
Реакции
396
Предупреждения
5
Помог
7 раз(а)
is_valid_player -> Ham_IsPlayer
 
Сообщения
265
Реакции
84
Ruby, а нет, пробовал... были ошибки при дропе оружия и post=true (индекс игрока get_member(p_weapon, m_pPlayer) у него будет невалидный), в c post=false, тоже был какой-то косяк, событие прилетало, а оружие по факту не переключалось... в общем были ошибки с получением валидного ID игрока. но я попробую еще раз с обработкой хука до фактической смены оружия, давно это было, не помню результат. Спасибо!
15 Май 2023
Albertio, спасибо, принципиально разные вещи. в моей реализации добавлено && is_user_connected(id) без этого отправляя сообщения messages игроку крашится рандомно сервер при переходных событиях (дроп клиента в процессе отправки). Это как бы универсальный вариант, от которого больше не откажусь, так надежнее...
 

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Код неплохой, только непонятно зачем столько static переменных для cell данных? static для буффера да норм но для cell значений быстрее будет работать сразу в стеке чем в куче перезаписывать каждый раз.
 

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Ну в каждой функции почти:
C:
public @use_injection(id)
{
    static p_result, Float:f_inj_time, Float:CUR_HEALTH, Float:MAX_HEALTH, Float:HEALTH_UP;
    ...
}
16 Май 2023
Ну и с доминированием (acs_get_team_dominate), правильнее было бы проверять победы подряд а не общее количество с обеих сторон.
 
Сообщения
265
Реакции
84
Garey, везде где не требуется инициализация переменных, я использую static, они хранятся в пределах стека, из-за кучи косяков которые возникают при использовании оператора new на высоконагруженном сервере. я не знаком с терминологией cell данные, но предполагаю, что это данные размером в 4 байта, как int. Я получил кучу рандомных ошибок, примерно в таком коде:

Код:
stock log_acs(const level, format[], any:...) {
    static s_log_data[768];
    if (CVAR[ACS_LOG] > 0 && CVAR[ACS_LOG_LEVEL] >= level ) {
        vformat(s_log_data, charsmax(s_log_data), format, 3);
        if (CVAR[ACS_LOG_CONSOLE] > 0)
            acs_console_print(0, s_log_data);
        log_to_file(CVAR[ACS_LOG_FILE], s_log_data);
    }
}
Если поменять static на new, сервер будет нестабильно работать под нагрузкой при компиляции плагина с любым параметром #pragma dynamic 20 * 65536. Поэтому, частично, можно встретить в коде объявление переменной через new, возвращаемой из функции в качестве значения.

Ну и самое главное, если ошибиться с переменной типа static (которая хранит указатель на объект) и не освободить выделенную объекту память, то "менеджер памяти", на сколько я понял очистит выделяемую объекту память, по указателю (не пинайте, я не смотрел, так написано в описании). По крайней мере, я в это верю :derisive: У разработчика это приблуды, в описании написано: "не задавайте вопросов, если вам кажется что что-то работает не так - вам только кажется, попробуйте поставить себя на мое место и еще раз подумать зачем я это сделал". Я не стал задавать ему вопросы, тем более что его сайт помер 7 лет назад.

В общем простая замена переменной с new на static - решила проблему с утечками памяти, хотя сами косяки, например, незакрытые указатели на mysql запрос, я уже обнаружил и исправил позднее... глядя на то как безобразно обращаются с переменными в других плагинах, изначально, я предполагал, что хоть с памятью проблем не будет... я ошибался :rofl: Одно дело 10 переменных на плагин, другое дело 200 и десятки массивов.

Утечек памяти давно нет + под все что использует динамические массивы я пишу свой "менеджер" и независимо от поведения штатного функционала AMXX - стараюсь корректно освободить указатели (destroy, close) и все используемые динамические данные.
 
Последнее редактирование:

Garey

ninjaCow
Сообщения
411
Реакции
1,051
Помог
10 раз(а)
Refresh, Как раз наоборот new - для стека, static - для кучи. И да ты прав с массивами лучше использовать static и за чего у тебя ошибка была, но для 4 байтов (cell в pawn), не думаю что могут быть проблемы.
 
Сообщения
265
Реакции
84
Refresh, Как раз наоборот new - для стека, static - для кучи.
Да, верно. Смысл - получить стабильность и прогнозируемое поведение кода, поскольку я не понимаю, как указывая параметр #pragma dynamic 16384 можно получить всего 2КБ доступного для переменных пространства данных.
 
Сообщения
265
Реакции
84
Garey, нашел, спасибо. Проверил, это логически немного не то, поскольку при равном счете CT могут доминировать, если были в роли догоняющих... И если рассматривать шприц как преимущество, то блокировать его при равном счете мне кажется неправильным... я сделаю наверно отдельный квар, который переключает логику с доминирования на N очков, на имеет подряд N побед..
 
Последнее редактирование:
Сообщения
19
Реакции
1
как отключить после вылечивание зеленый свет
 
Сообщения
265
Реакции
84
Yura, закоментировать 205 строку //acs_screen_fade(id, { 0, 200, 0 }, 1.5, 0.6, 200);
 
Сообщения
940
Реакции
188
Помог
4 раз(а)
Refresh, а нормальный скринфейд завести не?
 
Сообщения
453
Реакции
255
Помог
9 раз(а)
BiZaJe, что такое "нормальный скринфейд"? К чему эта пассивная агрессия? Не уподобляйтесь товарищу Анатолию (Code_0xABC), которого разве что ленивый в игнор не кинул
 
  • Nice
Реакции: Arni
Сообщения
940
Реакции
188
Помог
4 раз(а)
ufame, имелось ввиду, чтобы screenfade сам пропадал как это и должно быть или регулировать кваром этот момент
Если я так понял человека
 
Сообщения
265
Реакции
84
BiZaJe, здесь много хороших программистов, у кого руки не из того места - могут обратиться к ним в раздел заказ.
 
Сообщения
46
Реакции
0
Refresh
Можешь и это добавить для CSMD режима
С настройками: первый раз после 3 килла, второй после 6 с hud вы получили шприц нажимайте X чтобы исползовать
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу