XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Nekit1234007

offline
Опыт: 11,916
Активность:
[cJass] Триггерный телепорт, есть утечки или нет?
Делал триггерный channel телепорт с хэш таблицами. Возникла не очень ясная аномалия... При проверке спелла на утечки, кол-во хендлов, при нескольких кастах, начало прагать от начального до ста, >ста, <ста, до начального, опять до >ста... Вопрос: утечка есть или всётаки нет?
Прикрепленные файлы
Тип файла: w3x Teleport.w3x (18.1 Кбайт, 32 просмотров )

Отредактировано Nekit1234007, 27.10.2009 в 07:41.
Старый 26.10.2009, 21:13
Sebra

offline
Опыт: 5,603
Активность:
Утечек не нашёл, но:
DestroyTrigger(t) вызываешь не в самом конце работы триггера - опусти как можно ниже.
И вообще обычно между остановкой триггера и его уничтожением выдерживается пауза.
И ещё ConvertPlayerUnitEvent(273) вместо EVENT_PLAYER_UNIT_SPELL_CAST думаешь лучше?
Мне кажется заранее присвоенная константа лучше вновь преобразованного целого.
Хотя это уже вопрос к Адольфу. Может в псевдокоде это быстрее.
То, что фильтра на каст нет, это ты и сам думаю знаешь.
Старый 26.10.2009, 22:03
Elf_Stratigo

offline
Опыт: 4,699
Активность:
1) чтото до меня не особо дошло, что тебе не понравилось в результате GetHandleId и ты опускаешь их вниз...
2) разумеется константы лучше использовать
3) перед уничтожения триггера вроде чистят его действия и условия (а может даже его нужно убрать из очереди оО)
ну и так...
4) в блоке define в каждую строчку вроде надо вписать private
5) лично я когда работаю с хеш таблицами, то для каждой записи делаю такую строчку:
private constant int MySpecialHandle=StringHash("MySpecialHandle")
но это дело привычки...
Старый 27.10.2009, 08:35
Arty3ooo
...
offline
Опыт: 3,125
Активность:
Sebra,
call DestroyTrigger(t) ... пауза перед уничтожением... это сказки.
EVENT_PLAYER_UNIT_SPELL_CAST=ConvertPlayerUnitEvent(273) отсюда вывод что быстрее.
Старый 27.10.2009, 08:43
adic3x

offline
Опыт: 108,439
Активность:
ConvertPlayerUnitEvent(273) вместо EVENT_PLAYER_UNIT_SPELL_CAST
вызов медленне обращения к переменной
Старый 27.10.2009, 11:40
NCrashed

offline
Опыт: 13,553
Активность:
Хендлы могут прыгать, главное, чтобы они после возвращались к первоначальному значению.
NCrashed добавил:
Утечек не нашел, но есть одно но... лучше делать пустые строчки между блоками комманд, что повысит читаемость в разы, создание переменных, например, отделить от самого спелла.
Старый 27.10.2009, 12:01
Nekit1234007

offline
Опыт: 11,916
Активность:
Всем спасибо. Утечек нет, хорошо. Заменю конверты константами. Тему клоз можно.
Старый 27.10.2009, 13:41
Sebra

offline
Опыт: 5,603
Активность:
ADOLF:
вызов медленне обращения к переменной
Ты уверен, что ConvertPlayerUnitEvent(273) - вызов, а не указание типа значения?
Взгляни, пожалуйста, в своё (или дарёное) волшебное зеркало. :)
Старый 27.10.2009, 21:16
adic3x

offline
Опыт: 108,439
Активность:
Взгляни, пожалуйста, в своё (или дарёное) волшебное зеркало.
jy не показывает инит глобалок
ну логично что идет вызов фции
Старый 27.10.2009, 21:33
Sebra

offline
Опыт: 5,603
Активность:
ADOLF:
jy не показывает инит глобалок
Не обязательно смотреть на это в глобалках, можно в функции.
ну логично что идет вызов фции
А вар сделан логично?
Впрочем конверты описаны как нативки - 99% что идёт вызов функции.
1% на то, что при переводе в псевдокод это инлайнится.
Старый 27.10.2009, 23:46
adic3x

offline
Опыт: 108,439
Активность:
1% на то, что при переводе в псевдокод это инлайнится.
оно ничего не инлайнит - его задача как можно быстрее обработать код (напомню, что он обрабатыватеся при выборе карты)
Старый 28.10.2009, 11:08
Sebra

offline
Опыт: 5,603
Активность:
По идее эти нативки (конверты) что берут, то и отдают.
Только тип проверяется, да и то не во время работы.
Старый 28.10.2009, 19:05
adic3x

offline
Опыт: 108,439
Активность:
6F3B3770   C3               RETN
6F3B3771   CC               INT3
6F3B3772   CC               INT3
6F3B3773   CC               INT3
6F3B3774   CC               INT3
6F3B3775   CC               INT3
6F3B3776   CC               INT3
6F3B3777   CC               INT3
6F3B3778   CC               INT3
6F3B3779   CC               INT3
6F3B377A   CC               INT3
6F3B377B   CC               INT3
6F3B377C   CC               INT3
6F3B377D   CC               INT3
6F3B377E   CC               INT3
6F3B377F   CC               INT3
6F3B3780   8B4424 04        MOV EAX,DWORD PTR SS:[ESP+4]
6F3B3784  ^E9 E7FFFFFF      JMP game.6F3B3770
это код GetHandleID, что бы было понятнее что такое Blizzzzz =)
да, берет, да возращает, но как обычно через сами знаете какой проход
Старый 28.10.2009, 21:55
Nekit1234007

offline
Опыт: 11,916
Активность:
Адик, т.е. рб был лучше? оО
Старый 28.10.2009, 22:04
adic3x

offline
Опыт: 108,439
Активность:
Адик, т.е. рб был лучше?
он не был лушче, по сути это он и есть
тут радует исполнение, хз как они его прикручивали (компилятор у них вроде нормальный, такого создавать не должен)
ADOLF добавил:
6F3B3140   8B4424 04        MOV EAX,DWORD PTR SS:[ESP+4]
6F3B3144   C3               RETN
если кому то интересно - то это ConvertPlayerUnitEvent под скальпелем ^^
Старый 28.10.2009, 22:46
Sebra

offline
Опыт: 5,603
Активность:
Спасибо.
Старый 28.10.2009, 23:05
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:29.