Сейчас 11:57:57 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Синтаксические ошибки
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))


avtortroll


Сообщение отредактировал 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

CM wars 1.15
ЭПОХА АНИМИРОВАННЫХ ТРИГГИРАФ ПРЕШЛА
 

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 сек. игра завершится.
А с юнитом фэйл конечно. Хотя почему-то работало trollface


Сообщение отредактировал Reddalerzn - Суббота, 21 Июня 2014, 10:17:03
 

  • Страница 1 из 1
  • 1
Поиск:

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