FatalBlade
offline
Опыт:
7,398Активность: |
EnableTrigger(...) - через хэш - Не работает включение сохранённого триггера
Я решил сделать такую тему: отключить все триггеры для спеллов, и сохранить их в равкоды выбираемых способностей (система выбора спеллов). Когда выбирается какой то спелл, все триггеры для данного спелла активируются. Но почему то триггеры не активируются когда я загружаю их из хэша. Сами триггеры то активируются, когда сразу пишешь EnableTrigger( gg_trg_Trigger ), а вот когда я пишу EnableTrigger( LoadTriggerHandle(udg_Hash, id, key) ) - не работает. Почему? |
02.04.2012, 01:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,203Активность: |
FatalBlade, ошибка у тебя с хешем где то, выведи на экран Хендл триггера, и если будет 0 то явно что ты в хеш нечего не сохранил... call DisplayeTextToPlayer(Player(0),0,0,I2S(GetHandleId(LoadTriggerHandle(udg_Hash, id, key) ))) |
02.04.2012, 03:10 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Хэш инициализированный и с ним проблем нету, потому что он является базой данных для системы выбора спеллов. А система выбора спелов же работает :) Вот тут сохраняется.
Равкод 'A0KZ' - пустышка с иконкой и описанием скилла "Прыжок".
Затем, при выборе спеллов, а это дамми с пустышками, выбирается 3 скилла из 9-ти. В начале вычисляется равкод самой абилки. Например мы нажали на Leap, то есть на 'A0KZ'.
Сохранили равкод.
А вот и загружаем триггер. Всё правильно же с указателями, но триггер не активируется( |
02.04.2012, 09:50 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,203Активность: |
FatalBlade, ты проверил? Я тебе писал пример, что на экране показывает? весь код покажи, мб ты хеш без задержки инициализировал, а мб у тебя Disable trigger стоит... Отредактировано quq_CCCP, 02.04.2012 в 10:09. |
02.04.2012, 10:00 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
DioD
offline
Опыт:
45,134Активность: |
отладочные сообщения как сказано выше, почему хотя бы не попробовать вывести текст при до или после линий, может быть у тебя условия косячные и функция никогда не срабатывает.
|
02.04.2012, 14:17 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
quq_CCCP:
quq_CCCP: DioD: DisableTrigger точно нету, я проверял.) С текстом попробую, щас просто не с компа сижу. Но вот насчёт неправильности хэша, этого быть не может. Дело в том что на этом хэше построенна база данных для многих равкодов, скиллов, предметов. Сохраняются там не только равкоды, т.е. Интежеры, но и реальные числа, и строки. И никаких проблем никогда небыло и нету с этими данными. Только вот с этими триггерами. Кроме них не сохраняется никаких хэндлов в этот хэш. Но какие проблемы могут быть в сохранение хэндлов?
Условий в данном случае вообще нету. Идёт простая загрузка хэндла(триггера) из хэша. LoadTriggerHandle
З.Ы. Хэш инициализируется после задержки, не сразу после инита. Задержка = 7.5 секунд
.~ScorpioT1000:
Не умею плакать( Да и что за академия? Тут довольно таки сложная проблема, которую не каждый решит. ) Вопрос тогда вот в чём. Если я вырублю все триггеры которые реагируют на спеллы, и буду включать только те триггеры, которые имеют отношения выбранному герою/скиллу. Это хорошо поднимет производительность, при ~60-70 таких триггерах? |
05.04.2012, 00:29 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,203Активность: |
ну это сомнительно, ты вряд ли заметиш прирост производительности, это раз, два триггеры некуда не делись из память компьютера. их события и действия тоже. то что триггер не запускается, не говорит от том что память занимаемая им освобождена. Кстати ты читал статьи про оптимизацию, что триггер можно для 10 спелов и 1 сделать, только грамотно событие и условие поставит... |
05.04.2012, 03:13 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
quq_CCCP:
При касте спелла будет запускаться 1 условие, а не 100500. Это не даст прирост в производительности? quq_CCCP:
Можно сделать 1 триггер и для 999999999999 спеллов. Не надо даже никакие статьи читать. И это будет лучше чем 999999999999 триггеров. Однако мне, да и любому автору будет в 999999999999 сложнее разбираться в коде этого мега-триггера. |
05.04.2012, 19:37 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J64_
offline
Опыт:
4,724Активность: |
FatalBlade, тогда забудь про WE
а лучше сделай перебор всех Id способностей.
а когда более менее станешь шарить, то можно сделать бинарное дерево
такая схема всегда будет выполняться за log(N) проверок, в отличии от первой, у которого, количество операций колеблется от 1 до N. |
05.04.2012, 19:47 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Можешь пойти другим путем: Изначально не создавать триггеры под спелы,а при выборе спела создавать локальные триггеры и вешать на них нужные события\условия\действия(условия и действия просто изначально вырежи в кастом код карты) Такой подход уменьшит нагрузку,т.к. будут работать только нужные спелам триггеры(ненужные даже не будут созданы\выключены и на них не будет висеть события соответственно) |
05.04.2012, 19:53 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Да, но тогда спеллы которые будут находиться в конце этого дерева, будут происходить с задержкой. Ведь будут проверяться все равкода до него.
Кстати я не знаю как вообще устроена система самих равкодов, но разве всегда 'A002' > 'A001' ?
FatalBlade добавил: Nerevar: Мне нравится эта идея. Попробую. Вот только что ты имеешь ввиду вырезать условия и действия? Они ведь создаются в ините каждого триггера. Значит если функции Инит-триггера нету, то и условия и действия тоже не будет. Я не прав? |
05.04.2012, 20:00 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
prog
offline
Опыт:
32,865Активность: |
FatalBlade, условия, события и действия можно прикрепить к триггеру в любой момент.
Равкод это целое число, на самом деле, просто записанное в непривычной системе исчисления. |
05.04.2012, 20:03 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
prog:
Ок. Тогда 'A002' > 'A001'? Или необязательно? |
05.04.2012, 20:06 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Вырезаешь все функции-действия и функции-условия в отдельный триггер или в кастом код и оттуда добавляешь их в свои локальные триггеры |
05.04.2012, 20:07 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Nerevar:
Ясно я понял систему. Допустим я хочу сохранить все созданные функции-условия, функции-действия и события в хэш, что бы потом загружать эти функции и "прикреплять" к триггеру. Это возможно? LoadFunctionHandle(...), или LoadEventHandle(...), или LoadConditionHandle(...). Вообще.. функции это что? хэндлы? |
05.04.2012, 20:14 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
m-| я не об этом У тебя есть триггеры спеллов В каждом функции-условия и функции-действия Вырезаешь их и вставляешь в кастом код Удаляешь триггеры с остатками инициализации Когда надо создаешь локальные триггеры с такой же инициализацией и вешаешь на них свои перемещенные условия\действия ??? ??? ??? профит |
05.04.2012, 20:18 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Nerevar, это я понял. А при выборе спеллов, как создать нужный триггер с нужными условиями и действиями? if spell==Charge then ??? ))) Тут нужна БД на хэше. И при выборе спелла будет создаваться локальный триггер, а к нему вешаться условия и действия из Кастом Кода. А ссылки на условия и действия будут хранится в хэше. Например для спелла Charge, нужно повесить условие ChargeCondition, и действие ChargeAction. Вот ссылки на эти надо же куда то сохранить, не?)) |
05.04.2012, 20:34 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
кароче я не читал но отвечу очень просто - сделай массив триггеров и загружай из хеша не триггер а номер ячейки в массиве. и активируй/деактивируй.
для того чтобы не запоминать индексы триггеров, можно юзать
|
05.04.2012, 20:41 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Spell1Init - название функции-инициализации,в которой создается локальный триггер и вешаются условия\действия Ну и вместо нулей там свои значения,по которым сохраняешь |
05.04.2012, 20:41 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
FatalBlade
offline
Опыт:
7,398Активность: |
Ок спс попробую |
05.04.2012, 20:46 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|