[Вопрос] порядок в Jass
|
|
Volk9503 | Дата: Понедельник, 26 Декабря 2011, 10:52:57 | Сообщение # 1 |
7 уровень
Группа: Проверенные
Сообщений: 311
Награды: 0
Репутация: 13
Блокировки:
| Правильно ли я понимаю куда что пишется Code function Trig_w_Actions takes nothing returns nothing // Действия триггера // если нежно условия то // if Condition then // Действия, если условие выполнено //endif endfunction
//=========================================================================== function InitTrig_w takes nothing returns nothing set gg_trg_w = CreateTrigger( ) //События call TriggerAddAction( gg_trg_w, function Trig_w_Actions ) endfunction Если что неправильно напишите в таком же виде как правильно и еще вопрос можноли то что написано до //======================================== и после поменять местами
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 11:01:53 | Сообщение # 2 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Volk9503, в целом прав, но условия лучше выносит в отдельный Condition
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 11:39:06 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Volk9503, в целом прав, но условия лучше выносит в отдельный Condition не лучше
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 11:41:25 | Сообщение # 4 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Hexing, пруф?
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 11:52:24 | Сообщение # 5 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (Ty3uK) Hexing, пруф? если ты не запруфишь своё нет смысла пруфить моё ибо это и будет пруф моего => я прав ну или докажи обратноеДобавлено (26 Декабрь 2011, 11:52:24) --------------------------------------------- я аргументирую лишним вызовом Condition() которая хз какую бяку делает, а проще в актионсах проверять, а дальше иесли условие ок каллим другую функцию(в твоём случаи актионс) которая продолжит поток(кк и в твоем случае) но мы избежим этого Condition + вызова TriggerAddCondition + его дестроя(-1 обьект от хэндла, наверное) => делать как я лучше
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 11:56:59 | Сообщение # 6 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Hexing, чтобы проверить в действиях - тебе надо перед этим насоздавать локалок (для своего же удобства). А это, прости меня, уйма лишних действий
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 12:21:33 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Ty3uK, ничего не надо, не ври по сути это является тем же кондитионом и ничем не отличается только не нужно делать return и кучу лишних действий для регистрации кондишина
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 12:24:11 | Сообщение # 8 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| А теперь давай подумаем, умный человек: Ты пишешь Конд у действия. Перед этим ты создаешь локалки для своего удобства, которые идут в память. Но если конд не прошел, то и локалки не используются. И обнуляются. В итоге: выделил и засрал память без причины, совершил лишние действия (обнулил). Пруф. Если нет - докажи обратное
Сообщение отредактировал Ty3uK - Понедельник, 26 Декабря 2011, 12:24:22 |
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 12:36:52 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ty3uK, Hexing имеет в виду вот такую конструкцию:Code function Trig_test_Actions takes nothing returns nothing //... endfunction
function Trig_test_Conditions takes nothing returns nothing if true /*Условия*/ then call Trig_test_Actions() endif endfunction
function InitTrig_test takes nothing returns nothing local trigger trig = CreateTrigger() //События call TriggerAddAction(trig, function Trig_test_Conditions) set trig = null endfunction Добавлено (26 Декабрь 2011, 12:36:52) --------------------------------------------- Кстати, у IceFrog'а так и сделано. Хотя использовать его код как пруф - мягко говоря, нелогично.
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 12:52:40 | Сообщение # 10 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) Кстати, у IceFrog'а так и сделано. Хотя использовать его код как пруф - мягко говоря, нелогично. не знал что фрог делает также, я делаю так всегда ибо это оптимальнее и эффективнее
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 13:56:35 | Сообщение # 11 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Hexing, нефиг оскорблять меня, окда? Научись давать пруф без оскорблений, ибо Николас же смог разъяснить доступно и без оскорблений.
|
|
|
|
Volk9503 | Дата: Понедельник, 26 Декабря 2011, 13:58:38 | Сообщение # 12 |
7 уровень
Группа: Проверенные
Сообщений: 311
Награды: 0
Репутация: 13
Блокировки:
| где ошибкаДобавлено (26 Декабрь 2011, 13:58:38) --------------------------------------------- а точней почему
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 14:17:13 | Сообщение # 13 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| убери первое true и приготовься к замечанию за оффтоп Quote (Ty3uK) Hexing, нефиг оскорблять меня, окда? Научись давать пруф без оскорблений, ибо Николас же смог разъяснить доступно и без оскорблений. извини, просто мы с тобой очень обидчивы и быстро заводимся... вот для таких случаев и нужны сэры николасы
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 14:19:25 | Сообщение # 14 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ошибка в выделенной строке. Потому что true я написал для примера, нужные условия следует писать вместо него, а не после.
|
|
|
|
Volk9503 | Дата: Понедельник, 26 Декабря 2011, 14:24:24 | Сообщение # 15 |
7 уровень
Группа: Проверенные
Сообщений: 311
Награды: 0
Репутация: 13
Блокировки:
| уже вижу сразу просто не заметил что нету да поставил
Сообщение отредактировал Volk9503 - Понедельник, 26 Декабря 2011, 14:25:44 |
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 14:24:36 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| А, нет, вру. IceFrog функцию условий прогоняет в boolexpr:Code function Trig_test_Conditions takes nothing returns boolean if true then call Trig_test_Actions() endif return false endfunction
function InitTrig_test takes nothing returns nothing local trigger trig = CreateTrigger() //События call TriggerAddCondition(trig, Condition(function Trig_test_Conditions)) set trig = null endfunction
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 14:31:14 | Сообщение # 17 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) function Trig_test_Conditions takes nothing returns boolean if true then call Trig_test_Actions() endif return false endfunction это же бред
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 14:41:12 | Сообщение # 18 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ну, некоторые говорят, что условия быстрее действий.
На примере событий входа в регион и юза спеллов лично я бы составил базу данных, которая принимает object sender (rect/integer) и вызывает что надо через ExecuteFunc(...). Вообще для каждого события достаточно одного триггера.
|
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 14:48:25 | Сообщение # 19 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) На примере событий входа в регион и юза спеллов лично я бы составил базу данных, которая принимает object sender (rect/integer) и вызывает что надо через ExecuteFunc(...). немного не понял, тоесть на все ректы один триггер? а как ты определишь какой рект издает ивент?
|
|
|
|
Ty3uK | Дата: Понедельник, 26 Декабря 2011, 15:11:45 | Сообщение # 20 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Hexing,
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 15:26:31 | Сообщение # 21 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Hexing) немного не понял, то есть на все ректы один триггер? а как ты определишь, какой рект издает ивент? Code include "cj_types.j" include "cj_types_ex.j"
//! runtextmacro DeclareDictionary("handle","string","true","false","HandleComparison","8191")
Dictionary_handle_string RegionDict
void Trig_RegionEvents_Actions() { ExecuteFunc(RegionDict[GetTriggeringRegion()]) }
void InitTrig_RegionEvents() { trigger trig = new trigger region r = new region RegionDict = Dictionary_handle_string.Create() RegionAddRect(r, gg_rct_Region_000) TriggerRegisterEnterRegionEvent(trig, r, null) RegionDict[r] = "Trig_EnterRegion_000_Actions" r = new region RegionAddRect(r, gg_rct_Region_001) TriggerRegisterEnterRegionEvent(trig, r, null) RegionDict[r] = "Trig_EnterRegion_001_Actions" //... RegionDict.Rebuild() TriggerAddAction(trig, function Trig_RegionEvents_Actions) trig = null r = null }
Сообщение отредактировал SirNikolas - Понедельник, 26 Декабря 2011, 15:36:13 |
|
|
|
Hexing | Дата: Понедельник, 26 Декабря 2011, 15:34:19 | Сообщение # 22 |
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
| Quote (SirNikolas) GetTriggeringRegion() вот оно что кстати Quote (SirNikolas) include "cj_types_ex.j" делает код трудным для восприятия, ну или это мне с непривычки...Добавлено (26 Декабрь 2011, 15:34:19) --------------------------------------------- кстати, Quote (SirNikolas) RegionDict[GetTriggeringRegion()] это вы используете тот ваш словарь, раз передаете хэндл?
|
|
|
|
SirNikolas | Дата: Понедельник, 26 Декабря 2011, 15:37:18 | Сообщение # 23 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ну да.Quote (SirNikolas) //! runtextmacro DeclareDictionary("handle","string","true","false","HandleComparison","8191")
Dictionary_handle_string RegionDict
|
|
|
|