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

[ACS] INJECTION 1.0.7.2

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

Garey

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

Garey

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

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

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