Вопрос касательно событий. Предположим сделать 1 из вариантов:
  1. 1 событие на все (ну или но большинство) спелы "Юнит применил способность" и уже от туда проверять нажатую абилку и запускать действие. В таком случае мы будет создавать намного меньше событий и условий триггера, но сделаем большой каскад условий (+ это может быть крайне неудобно)
  2. 1 событие на каждого героя. Тоже что и в первом, но мы будет подгружать это только в момент пика героя, т.е. герои которыми не играют, не будут занимать память.
  3. Просто подгружать события и действия для каждого героя.
Какой из трех вариантов, наиболее оптимальный? Вопрос чисто гипотетический и хочется узнать ответ.

Принятый ответ

Похожие вопросы:

ответ
Есть, триггер для триггерных скиллов 1, 3 ивента, кастанул, завершил каст, выучил - все, далее условие что абилка в базе данных и собственно действие екзикут функции взятой из базы данных.
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

0
19
6 лет назад
0
Похожие вопросы:

ответ
Есть, триггер для триггерных скиллов 1, 3 ивента, кастанул, завершил каст, выучил - все, далее условие что абилка в базе данных и собственно действие екзикут функции взятой из базы данных.
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

Принятый ответ
1
32
6 лет назад
1
Уже же 10 раз мусослили, 1 триггер одно событие EeventPlayerUnitSpellCast и проверка есть ли id абилки в бд, если есть то в действие ExecunteFunc которая записана по Id абилки в этой бд, от и все, так проще и удобнее реализовать много спеллов и явно оптимальнее, в boolexpr события добавь всех тех на кого не должно срабатывать событие, там даммики или здания.
0
19
6 лет назад
0
quq_CCCP:
Уже же 10 раз мусослили, 1 триггер одно событие EeventPlayerUnitSpellCast и проверка есть ли id абилки в бд, если есть то в действие ExecunteFunc которая записана по Id абилки в этой бд, от и все, так проще и удобнее реализовать много спеллов и явно оптимальнее, в boolexpr события добавь всех тех на кого не должно срабатывать событие, там даммики или здания.
Есть где ни будь статья, как правильно пользоваться ExecunteFunc или пример, просто ни разу не использовал?
0
27
6 лет назад
Отредактирован MpW
0
посмотри здесь тему, примеры
Используйте хэш-таблицу. С помощью нее делаете базу данных при инициализации. В ней сохраняете строку, название функции. Вызываете через ExecuteFunc. Выводы какие:
  1. не надо перебирать if-ами условия, проще напрямую
  2. можно было в качестве ключа строки использовать, но быстрее было бы использовать числа, что есть у хэш-таблицы.
  3. Используйте фильтр boolexpr для отсеивания тех, на кого событие не должно работать. см. внизу нативку, вместо null ставите условие
TriggerRegisterPlayerUnitEvent(trig, whichPlayer, whichEvent, null)
Что тут не понятно то?
пример ExecuteFunc
function ASWE takes nothing returns nothing
действие........
endfunction
call ExecuteFunc("ASWE")
0
19
6 лет назад
0
Steal nerves:
посмотри здесь тему, примеры
Используйте хэш-таблицу. С помощью нее делаете базу данных при инициализации. В ней сохраняете строку, название функции. Вызываете через ExecuteFunc. Выводы какие:
  1. не надо перебирать if-ами условия, проще напрямую
  2. можно было в качестве ключа строки использовать, но быстрее было бы использовать числа, что есть у хэш-таблицы.
  3. Используйте фильтр boolexpr для отсеивания тех, на кого событие не должно работать. см. внизу нативку, вместо null ставите условие
TriggerRegisterPlayerUnitEvent(trig, whichPlayer, whichEvent, null)
Что тут не понятно то?
пример ExecuteFunc
function ASWE takes nothing returns nothing
действие........
endfunction
call ExecuteFunc("ASWE")
Хорошо, с этим вроде понятно. А в случае если в ячейке хэша ничего не сохранено, а я попробую вызвать фунцию по ячейке хэша, что случится?
0
27
6 лет назад
0
Vadik29, если в хэше ничего не сохранено, то оно вернет для хэндлов = null или для чисел = ноль. возможно и ничего не случится.
0
30
6 лет назад
0
Самым верным решением будет загрузка только нужных ресурсов, например, загрузка логики и предзагрузка fx способностей героя только после его выбора.
Оптимизация здесь важна исключительно с целью ускорить загрузку карты, экономить память на единоразовом действии абсолютно бессмысленно.

и никакой хеш для этого нафиг не нужен.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.