[Вопрос] Синтаксические ошибки
|
|
Reddalerzn | Дата: Вторник, 17 Июня 2014, 17:39:49 | Сообщение # 1 |
4 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 4
Блокировки:
| Код function Trig_End_Actions takes nothing returns nothing local unit u = GetEnteringUnit() local location l = GetUnitLoc(u) local effect e = AddSpecialEffectLoc("Doodads\Cinematic\Lightningbolt\Lightningbolt",l) local timer t = CreateTimer() call KillUnit(u) call TimerStart(t, 0.5, false, function HandleFunc(t,e,l)) Собственно, ругается на эффект и старт таймера, причем считает, что переменная t не объявлена.
Сообщение отредактировал Reddalerzn - Вторник, 17 Июня 2014, 17:55:48 |
|
|
|
Reckit | Дата: Вторник, 17 Июня 2014, 17:55:06 | Сообщение # 2 |
3 уровень
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 7
Блокировки:
| Цитата Reddalerzn ( ) local timer t = CreateTimer() local timer t = CreateTimer() Эм...
Добавлено (17 Июня 2014, 17:55:06) --------------------------------------------- Цитата Reddalerzn ( ) function HandleFunc(t,e,l))
Сообщение отредактировал Reckit - Вторник, 17 Июня 2014, 17:59:14 |
|
|
|
Bibo | Дата: Вторник, 17 Июня 2014, 21:09:56 | Сообщение # 3 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Цитата Reddalerzn ( ) call TimerStart(t, 0.5, false, function HandleFunc(t,e,l)) HandleFunc(t, e, l) - что это такое и откуда взялось? Попытка загрузить функцию из хэша? Когда такое было добавлено в Warcraft? Попытка передать переменные через функцию обратного вызова? Это невозможно и синтаксически неверно. После слова function должно следовать только имя исполняемой функции.
Сообщение отредактировал Bibo - Вторник, 17 Июня 2014, 21:30:21 |
|
|
|
Reddalerzn | Дата: Среда, 18 Июня 2014, 12:48:35 | Сообщение # 4 |
4 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 4
Блокировки:
| Цитата Bibo ( ) HandleFunc(t, e, l) - что это такое и откуда взялось? HandleFunc - функция, выполняемая после истечения таймера, там должен подчищаться эффект и лока. А t там в общем-то и не нужна. Забыл сказать, что на жассе второй день, за плечами опыт Pascal и Delphi. Так что пока в тонкостях не шарю. Пока в общем на эффект забил, вечерком поковыряюсь.
|
|
|
|
DragoN | Дата: Четверг, 19 Июня 2014, 23:52:32 | Сообщение # 5 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| как минимум слешы обратные должны быть двойные в путях в callback функции при старте таймера параметры передавать нельзя, сохраняй хэндлы в хэш таблицу и погляди примеры работы с таймером
El Psy Congroo
Сообщение отредактировал DragoN - Пятница, 20 Июня 2014, 00:01:41 |
|
|
|
Melodia | Дата: Пятница, 20 Июня 2014, 00:29:31 | Сообщение # 6 |
Группа: Проверенные
Сообщений: 8026
Награды: 5
Репутация: 5051
Блокировки:
| DragoN, ты разве не в армии? : D
|
|
|
|
Reddalerzn | Дата: Пятница, 20 Июня 2014, 10:24:09 | Сообщение # 7 |
4 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 4
Блокировки:
| DragoN, спасибо, запомнил, эффект сделал.
|
|
|
|
DragoN | Дата: Пятница, 20 Июня 2014, 10:43:38 | Сообщение # 8 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| я так-то уже 7,5 месяцев в армии :/ будто это мне мешает человеку помочь D: с таймером и функцией разобрался? вообще эффект по другому делать надо, у тебя точка утекает
El Psy Congroo
|
|
|
|
Reddalerzn | Дата: Пятница, 20 Июня 2014, 10:54:23 | Сообщение # 9 |
4 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 4
Блокировки:
| Таки утекает? Код function Defeat takes nothing returns nothing call DestroyTimer(GetExpiredTimer()) call CustomDefeatBJ(Player(0), "Defeat!") call CustomDefeatBJ(Player(1), "Defeat!") endfunction
function ClrMap takes nothing returns nothing call RemoveUnit(GetEnumUnit()) endfunction
function EndFunc takes nothing returns nothing local unit u = GetEnteringUnit() local integer h = GetHandleId(u) local effect e = LoadEffectHandle(udg_Hash,h,1) call DestroyTimer(GetExpiredTimer()) call DestroyEffect(e) call FlushChildHashtable(udg_Hash,h) set u = null set e = null endfunction function EndAct takes nothing returns nothing local unit u = GetEnteringUnit() local location l = GetUnitLoc(u) local timer t = CreateTimer() local effect e local integer h local timer d = CreateTimer() set e = AddSpecialEffectLoc("Doodads\\Cinematic\\Lightningbolt\\Lightningbolt.mdl", l) set udg_Lives=udg_Lives-1 set h = GetHandleId(u) call RemoveUnit(u) call SaveEffectHandle(udg_Hash, h, 1, e) call TimerStart(t,0.1,false,function EndFunc) call LeaderboardSetItemValue(udg_Stat, 2, udg_Lives) if udg_Lives<1 then call DisableTrigger(gg_trg_Wave) call DisableTrigger(gg_trg_KillUnit) call ForGroup(GetUnitsInRectAll(GetPlayableMapRect()),function ClrMap) call StartSound(gg_snd_SadMystery) call DisplayTextToForce(GetPlayersAll(), "You are defeated!") call TimerStart(d,5.00,false,function Defeat) endif call RemoveLocation(l) set u = null set l = null set t = null set e = null set d = null endfunction
function OwnerCheck takes nothing returns boolean return GetOwningPlayer(GetEnteringUnit())==Player(2) endfunction
//=========================================================================== function InitTrig_End takes nothing returns nothing set gg_trg_End = CreateTrigger() call TriggerRegisterEnterRectSimple( gg_trg_End, gg_rct_End ) call TriggerAddCondition( gg_trg_End, Condition( function OwnerCheck ) ) call TriggerAddAction( gg_trg_End, function EndAct ) set udg_Hash = InitHashtable() endfunction
Сообщение отредактировал Reddalerzn - Пятница, 20 Июня 2014, 11:23:21 |
|
|
|
DragoN | Дата: Пятница, 20 Июня 2014, 15:36:06 | Сообщение # 10 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| так нет вроде, но лучше всегда через координаты делать
El Psy Congroo
|
|
|
|
Bibo | Дата: Пятница, 20 Июня 2014, 18:01:45 | Сообщение # 11 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Утекает функция GetUnitsInRectAll, которая создает группу. Функция EndFunc будет вызвана через 0.1 сек. В этом случае внутри нее вызов функции GetEnteringUnit вернет null. Не говоря о том, что ты удаляешь из игры юнита, хэндлид которого используешь для записи спецэффекта в хэш, а значит не сможешь снова получить его. При использовании таймера, лучше производить запись используя хэндлид этого таймера.
Сообщение отредактировал Bibo - Пятница, 20 Июня 2014, 18:06:26 |
|
|
|
Reddalerzn | Дата: Суббота, 21 Июня 2014, 10:16:14 | Сообщение # 12 |
4 уровень
Группа: Проверенные
Сообщений: 89
Награды: 0
Репутация: 4
Блокировки:
| Цитата Bibo ( ) Утекает функция GetUnitsInRectAll, которая создает группу. Это не важно, все равно через 5 сек. игра завершится. А с юнитом фэйл конечно. Хотя почему-то работало
Сообщение отредактировал Reddalerzn - Суббота, 21 Июня 2014, 10:17:03 |
|
|
|