Сейчас 05:53:23 Среда, 8 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Ошибка в триггере
Ошибка в триггере
TitansДата: Понедельник, 27 Июня 2011, 23:52:36 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Помогите мне найти ошибку в триггере.

Понял что когда дело доходит до создания дамми(h003), триггер пропускает это действие, а если поставить создание спецэффекта, то всё нормально работает. В чём проблема?


Сообщение отредактировал Titans - Вторник, 28 Июня 2011, 15:16:22
 

BinGOДата: Вторник, 28 Июня 2011, 19:14:48 | Сообщение # 2
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
Quote (Titans)
set u = CreateUnitAtLoc(GetOwningPlayer(GetSpellAbilityUnit()), 'h003', l2, AngleBetweenPoints(l1, l0))

this
кастер на данную функцию не распространяется и не передается ей, юзай записанного в 4 ячейку юнита вместо кастера.

Да и вообще как-то много бж функций и никакой оптимизации; не в обиду, код ужасен.
 

TitansДата: Вторник, 28 Июня 2011, 19:33:24 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (B1nGO)
Да и вообще как-то много бж функций и никакой оптимизации; не в обиду, код ужасен.

Это недоделанный код, обычно когда весь код готов, тогда я занимаюсь устранением бж и оптимизацией.

Добавлено (28-06-2011, 19:33)
---------------------------------------------
А и за помощь спасибо!

 

BinGOДата: Вторник, 28 Июня 2011, 19:44:37 | Сообщение # 4
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
Quote (Titans)
Это недоделанный код, обычно когда весь код готов, тогда я занимаюсь устранением бж и оптимизацией.

Зачем мучиться, когда это можно делать по ходу.
Вместо тех же локаций куда быстрее использовать координаты х/у; слипэкшн в цикле категорически нельзя использовать, хотя его вообще лучше не использовать (таймеры работают безотказно); каждое выполнение сохранять в одни и те же ячейки одни и те же значения не нужно, они там и так будут висеть до удаления.
Полярки - еще одна беда. Вместо них лучше использовать х/у координаты и угол наклона, применяя простейшие знания тригонометрии (синусы-косинусы).
Ну обнуления всех переменных, наследуемых от типа handle сразу по ходу в конце функции надо делать, ибо оставляют утечки. Также при уничтожении таймера сперва чисти все записи в хештейбле, ибо опять же утечки.
 

Banzay89Дата: Вторник, 28 Июня 2011, 20:13:06 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 858
Награды: 1
Репутация: 77
Блокировки:
Quote
call TriggerSleepAction(0.10)

никогда не делай этого в цикле
да и вообще оптимизировать триггер нада
ужасен он :'(
 

TitansДата: Вторник, 28 Июня 2011, 20:46:22 | Сообщение # 6
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Как я понял если запустить два таймера, то они работают одновременно?
Quote (B1nGO)
слипэкшн в цикле категорически нельзя использовать, хотя его вообще лучше не использовать

Quote (Banzay89)
никогда не делай этого в цикле

Почему, что в нём плохого кроме того что нельзя задавать значения ниже 0.1 и время в нём странное?


Сообщение отредактировал Titans - Вторник, 28 Июня 2011, 20:46:48
 

BinGOДата: Среда, 29 Июня 2011, 03:48:52 | Сообщение # 7
Группа: Модераторы
Сообщений: 2906
Награды: 8
Блокировки:
Quote (Titans)
Почему, что в нём плохого кроме того что нельзя задавать значения ниже 0.1 и время в нём странное?

Потому что он работает через зад, с ним багов хоть отбавляй. К тому же в цикле он вообще неправильно работает.
Quote (Titans)
Как я понял если запустить два таймера, то они работают одновременно?

Если создаешь 2 разных таймера - будут работать одновременно. Например
Code

...
local timer t = CreateTimer()
call SaveUnitHandle(ht, GetHandleId(t), 1, blablabla)
call TimerStart(t, .5, true, function blablabla)
set t = CreateTimer()
call SaveUnitHandle(ht, GetHandleId(t), 1, blabla2)
call TimerStart(t, .5, true, function blablabla)
set t = null
...

Таким способом запустится два таймера. Если нужно сохранить что-то в хт к первому таймеру - делай это до присваивания переменной второго значения (то есть нового таймера), как в примере сохраняется юнит.
 

TitansДата: Среда, 29 Июня 2011, 10:01:51 | Сообщение # 8
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
А если я запущю один таймер и укажу функцию в которой этот таймер после выполнения действий удаляется, то это скажется на втором таймере?
 

FaionДата: Среда, 29 Июня 2011, 11:59:14 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Хеш тейбл по умолчанию ужасен. Вообще не пойму нафиг его юзать. При написании больших и сложных систем с большими объемами данными хт сильно уступает в производительности массивам с прямой адресацией.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 14:26:19 | Сообщение # 10
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (Faion)
массивам с прямой адресацией

Что это значит?
И почему второй таймер не запускается? (Точнее запускается но медлено)


Сообщение отредактировал Titans - Среда, 29 Июня 2011, 14:31:41
 

FaionДата: Среда, 29 Июня 2011, 14:56:39 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (Titans)
Что это значит?

Чем больше значений в ХТ, тем медленнее он массивов, т.к. ХТ требует времени на "поиск" нужной ячейки в таблице, и на сколько я знаю, даже после нахождения нужного значения продолжается поиск(хз зачем). В массивах же нет этого "поиска", а идет обращение на прямую.

Разница "на глаз" не заметна, однако я предполагаю что в глобальном проекте будет заметно, если в хт будут хранится сотни тысяч значений. Отмечу, что эта цифра в серьезном проекте очень быстро достигается=) У меня только в квестах уже задействовано 5к+ значений=)

Ну и еще есть слух, что большой объем данных ХТ не держит, типо фаталы будут.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 15:00:18 | Сообщение # 12
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
А как мне с помощью массивов перенести локальную переменую из одной функции в другую?
 

FaionДата: Среда, 29 Июня 2011, 15:04:47 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Можно и без всяких массивов.

http://xgm.ru/forum/showpost.php?p=1078263&postcount=5


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 15:42:28 | Сообщение # 14
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Типо так:
Только таймер не действует.
 

FaionДата: Среда, 29 Июня 2011, 15:57:09 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Quote (Titans)
Только таймер не действует.


CreateTimer.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 16:02:33 | Сообщение # 16
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (Faion)
CreateTimer.

Что?
Quote (Titans)
set t = CreateTimer()
 

FaionДата: Среда, 29 Июня 2011, 16:06:28 | Сообщение # 17
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
А точн, привык просто что таймер создается перед самым запуском=)

Только ты это, создаешь локальный таймер вообще то... как ты к нему пытаешься обратится то? :O


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 16:09:07 | Сообщение # 18
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (Faion)
как ты к нему пытаешься обратится то?

call TimerStart(t,0.02,false,null)
 

FaionДата: Среда, 29 Июня 2011, 16:09:31 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Это ты его запускаешь вообще то.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 16:09:33 | Сообщение # 20
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Что не так? Если его объявить вместе с переменой то после удаления его не станет.

Сообщение отредактировал Titans - Среда, 29 Июня 2011, 16:12:03
 

FaionДата: Среда, 29 Июня 2011, 16:17:50 | Сообщение # 21
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
Выложи полный код. В частности то место, где ты используешь таймер.

О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 16:18:42 | Сообщение # 22
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
С хешем?
Если да то вот:


Сообщение отредактировал Titans - Среда, 29 Июня 2011, 16:19:59
 

FaionДата: Среда, 29 Июня 2011, 16:28:56 | Сообщение # 23
10 уровень
Группа: Проверенные
Сообщений: 1894
Награды: 0
Репутация: 430
Блокировки:
На будующее, нужно обнулять только то что имеет хендл\агент, инты, реальные, булевые значения не нужно обнулять, т.к. они не имеют хендла или агента.

В коде ошибок явных не вижу, но логика алгоритма не ясна, но вероятно суть в том, что либо не верный эвент, т.е. вообще алгоритм не срабатывает, либо из за того что ты уничтожаешь таймер. В общем юзай BJDebugMsg, поможет.

1 утечка небольшая есть.


О нас думают плохо лишь те, кто хуже нас, а те кто лучше нас... Им просто не до нас.
My Project: Nindogatari
MAL
 

TitansДата: Среда, 29 Июня 2011, 16:41:35 | Сообщение # 24
6 уровень
Группа: Проверенные
Сообщений: 167
Награды: 0
Репутация: 77
Блокировки:
Quote (Faion)
что либо не верный эвент, т.е. вообще алгоритм не срабатывает

Не дело в том что пишиш в игре сообщение "t" и у всех выделеных инитов отнимаются жизни и кто выжил тому возращяются жизни, но как отнимание жизней заканчивается, должен запуститься другой таймер на прибавку жизней, в игре они вродебы прибавляются, но с очень маленькой скоростью. (Можно подумать что реген чють больше стал)
Quote (Faion)
BJDebugMsg

Что это?
Quote (Faion)
1 утечка небольшая есть.

Отправка сообщения?
 

lawsonДата: Среда, 29 Июня 2011, 17:35:31 | Сообщение # 25
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (Titans)
Не дело в том что пишиш в игре сообщение "t" и у всех выделеных инитов отнимаются жизни и кто выжил тому возращяются жизни, но как отнимание жизней заканчивается, должен запуститься другой таймер на прибавку жизней, в игре они вродебы прибавляются, но с очень маленькой скоростью. (Можно подумать что реген чють больше стал)

Не фига себе замутил.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Ошибка в триггере
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz