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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Триггер на воскрешение крипов (Не пашет)
Триггер на воскрешение крипов
FatalBladeДата: Пятница, 22 Июля 2011, 15:40:12 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Вот триггер:
Code

function Trig_Creeps_Conditions takes nothing returns boolean
      if ( not ( GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) ) ) then
          return false
      endif
      if ( GetDyingUnit() == gg_unit_h03E_0015 ) then
          return false
      endif
      if ( GetDyingUnit() == gg_unit_h03F_0014 ) then
          return false
      endif
      return true
endfunction

function Trig_Creeps_Actions takes nothing returns nothing
      local integer i = 1
      local integer CreepIndex = 0
      local location CreepLoc
      local integer UT = GetUnitTypeId(GetDyingUnit())
      loop
          exitwhen i > 26
          if (( IsUnitInGroup(GetDyingUnit(), udg_CreepUnits[i]) == true ) ) then
              set CreepIndex = i
          endif
          set i = i + 1
      endloop

      if ( CreepIndex == 0 ) then
          return
      endif

      call GroupRemoveUnitSimple( GetDyingUnit(), udg_CreepUnits[CreepIndex] )
      call TriggerSleepAction( 30.00 )
      set CreepLoc = GetRectCenter(udg_CreepsRegions[CreepIndex])
      call CreateNUnitsAtLoc( 1, UT, Player(PLAYER_NEUTRAL_AGGRESSIVE), CreepLoc, bj_UNIT_FACING )
      call GroupAddUnitSimple( GetLastCreatedUnit(), udg_CreepUnits[CreepIndex] )
      call RemoveLocation(CreepLoc)
      set UT = 0
endfunction

//===========================================================================
function InitTrig_Creeps takes nothing returns nothing
      set gg_trg_Creeps = CreateTrigger(  )
      call TriggerRegisterAnyUnitEventBJ( gg_trg_Creeps, EVENT_PLAYER_UNIT_DEATH )
      call TriggerAddCondition( gg_trg_Creeps, Condition( function Trig_Creeps_Conditions ) )
      call TriggerAddAction( gg_trg_Creeps, function Trig_Creeps_Actions )
endfunction


Он воскрешает убитых крипов на их первоначальной локации. Тут присутствуют массивы - это группы юнитов и области в которых созданны юниты. Т.е. должен вокрешать. Но он почему то не работает. Прошу помоши у джассеров, помогите разобраться в чём проблема. Код простой, не трудно прочитать.




Сообщение отредактировал FatalBlade - Пятница, 22 Июля 2011, 15:41:35
 

FkoFFДата: Пятница, 22 Июля 2011, 15:51:31 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (FatalBlade)
call TriggerSleepAction( 30.00 )


FFFFFFFFUUUUUUUUUU, вейты.

Да и условие гуевое. 1\10.


 

FatalBladeДата: Пятница, 22 Июля 2011, 16:03:36 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (FkoFF)
FFFFFFFFUUUUUUUUUU, вейты.

Для таймера нужен ещё 1 триггер. Или можно как то создать паузу внутри триггера без вейта.

Quote (FkoFF)
Да и условие гуевое. 1\10.

Но ведь результат тот же.


 

lawsonДата: Пятница, 22 Июля 2011, 16:23:51 | Сообщение # 4
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
FatalBlade,
Если тебе надо воскрешать крипов группами то вот у меня в подписи наработка на воскрешение крипов.
А вообще что это за код, ты говоришь лекго читается я вообще не могу понять что ты тут делаешь.
Зачем проверять юнита есть ли он в группе, что это такое?
Code
  if ( CreepIndex == 0 ) then   
            return   
        endif

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


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


Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 16:24:55
 

FatalBladeДата: Пятница, 22 Июля 2011, 16:32:04 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
попроси кого нибудь и тебе сделают или даже наработку скинут без этого Гкода.

Я не очень люблю вставлять чужие наработки в свою карту, потому что:
1) - Я не понимаю большинство из того что они написали, и поэтому если я захочу чтото изменить, то я не буду знать где что и как.
2) - Я хочу не просто чтоб мне всё сделали и всё тип топ, а что бы в следущий раз когда мне надо будет сделать чтото подобное, я уже буду знать как это сделать самому.

Quote (lawson)
Code
if ( CreepIndex == 0 ) then
return
endif

Зачем вообще такой триггер если тебе нужно сделать простое вокрешение убитого крипа на его исходной позиции

Если индекс массива равен нулю, то остановить нынешнее действие триггера. На ГУИ - Skip Remaining Actions.


 

lawsonДата: Пятница, 22 Июля 2011, 16:43:45 | Сообщение # 6
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Я не понимаю большинство из того что они написали, и поэтому если я захочу чтото изменить, то я не буду знать где что и как.

Это правильно.
Значит попроси кого то тебе объяснить как это реализовать, а не скидывать сюда эти триггеры.
Сначала напиши конкретно что ты хочешь сделать, а то что ты написал сильно расходится с кодом который ты выложил.

Добавлено (22-07-2011, 16:36)
---------------------------------------------
Quote (FatalBlade)
Если индекс массива равен нулю, то остановить нынешнее действие триггера

Я про другое, что ты здесь возврашаещь а? return здесь зачем?

Добавлено (22-07-2011, 16:43)
---------------------------------------------
Еще раз говорю у меня в подписи есть СТАТЬЯ как вокрешать крипов там все елементарно написано и даже с объяснением.


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


Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 16:41:19
 

FatalBladeДата: Пятница, 22 Июля 2011, 16:57:30 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Еще раз говорю у меня в подписи есть СТАТЬЯ как вокрешать крипов там все елементарно написано и даже с объяснением.

Этот код для каждой локации индивидуально???

Почему local trigger t = CreateTrigger() ??? Почему local a не set?




Сообщение отредактировал FatalBlade - Пятница, 22 Июля 2011, 17:01:05
 

lawsonДата: Пятница, 22 Июля 2011, 16:59:30 | Сообщение # 8
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Этот код для каждой локации индивидуально???

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


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

FatalBladeДата: Пятница, 22 Июля 2011, 17:03:12 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Как хочешь можешь сделать чтобы на исходной позиции респавнились или на любой другой.

Я имею ввиду что для каждой локации в который респавнятся крипы нужно писать такой же код как у тебя? У меня 26 локаций где респавнятся крипы...


 

lawsonДата: Пятница, 22 Июля 2011, 17:07:05 | Сообщение # 10
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Я имею ввиду что для каждой локации в который респавнятся крипы нужно писать такой же код как у тебя? У меня 26 локаций где респавнятся крипы...

Да для каждой локации просто повторять код, я же все описал в статье.

Добавлено (22-07-2011, 17:07)
---------------------------------------------
set g = CreateGroup()
call GroupEnumUnitsInRect(g, локация 1, null)
if GetGroup(g) then
call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локация 1), 0)
endif
call DestroyGroup(g)

set g = CreateGroup()
call GroupEnumUnitsInRect(g, локация 2, null)
if GetGroup(g) then
call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локация 2), 0)
endif
call DestroyGroup(g)


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


Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 17:08:11
 

FatalBladeДата: Пятница, 22 Июля 2011, 17:08:02 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (lawson)
Да для каждой локации просто повторять код, я же все описал в статье.

У меня просто уже есть массив этих 26 локаций. Может как то можно с вспомогательным триггером регулировать индексы массива и сам массив в самом триггере?


 

lawsonДата: Пятница, 22 Июля 2011, 17:10:33 | Сообщение # 12
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
У меня просто уже есть массив этих 26 локаций. Может как то можно с вспомогательным триггером регулировать индексы массива и сам массив в самом триггере?

тогда через цикл
set g = CreateGroup()
call GroupEnumUnitsInRect(g, локации[i], null)
if GetGroup(g) then
call CreateUnitAtLoc(Player(PLAYER_NEUTRAL_AGGRESSIVE), 'otau', GetRectCenter(локации[i], 0)
endif
call DestroyGroup(g)


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

IncludeДата: Пятница, 22 Июля 2011, 17:14:52 | Сообщение # 13
2 уровень
Группа: Пользователи
Сообщений: 20
Награды: 0
Репутация: 0
Блокировки:
FatalBlade,
Code
function Trig_Creeps_Conditions takes nothing returns boolean   
  return GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE) and GetDyingUnit() != gg_unit_h03E_0015 and GetDyingUnit() != gg_unit_h03E_0015
  endfunction   

   function TimerCreep takes nothing returns nothing   
   local timer t=GetExpiredTimer()  
   local integer id=GetHandleId(t)  
   local integer ci=LoadInteger(Hash,id,1)  
  call GroupAddUnit(udg_CreepUnits[ci],CreateUnit(Player(PLAYER_NEUTRAL_AGGRESSIVE),GetUnitTypeId(LoadUnitHandle(Hash,id,0)),GetRectCenterX(udg_CreepsRegions[ci]),GetRectCenterX(udg_CreepsRegions[ci]),bj_UNIT_FACING) )  
   set t=null  
   endfunction  
   function Trig_Creeps_Actions takes nothing returns nothing   
        local timer t=CreateTimer()  
        local integer id=GetHandleId(t)  
        local integer i = 0   
        local unit u=GetTriggerUnit()  
        local integer CreepIndex = 0   
        loop   
            exitwhen i > 26  
            if IsUnitInGroup(u, udg_CreepUnits[i]) == true  then   
            set CreepIndex=i  
            endif   
            set i = i + 1   
        endloop   
       call GroupRemoveUnit(udg_CreepUnits[CreepIndex],u)   
       call SaveUnitHandle(Hash,id,0,u)  
       call SaveInteger(Hash,id,1,CreepIndex)  
       call TimerStart(t,2,false,function TimerCreep)  
      set u=null  
      set t=null  
   endfunction
 

FatalBladeДата: Пятница, 22 Июля 2011, 18:23:53 | Сообщение # 14
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
lawson,
А почему call CreateUnitAtLoc
а не call CreateNUnitsAtLoc
?


 

IncludeДата: Пятница, 22 Июля 2011, 18:47:30 | Сообщение # 15
2 уровень
Группа: Пользователи
Сообщений: 20
Награды: 0
Репутация: 0
Блокировки:
FatalBlade, Забудь про локи я дал тебе рабочий код
 

FatalBladeДата: Пятница, 22 Июля 2011, 19:57:26 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Include)
FatalBlade, Забудь про локи я дал тебе рабочий код

Он выдаёт кучу ошибок. Ему чёто не нравится Handle'ы и Hash'ы


 

lawsonДата: Пятница, 22 Июля 2011, 19:59:07 | Сообщение # 17
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Quote (FatalBlade)
Ему чёто не нравится Handle'ы и Hash'ы

Там нужно создать хеш таблицу в глобальных переменных создай ее. (В нестандартном коду карты.)


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


Сообщение отредактировал lawson - Пятница, 22 Июля 2011, 20:00:21
 

FatalBladeДата: Пятница, 22 Июля 2011, 20:07:58 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Думаешь я знаю как это делать? )))

 

lawsonДата: Пятница, 22 Июля 2011, 20:13:11 | Сообщение # 19
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Редактор Триггеров - Нестандартый код карты прописываешь внизу
hashtable Hash = InitHashtable()


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

FatalBladeДата: Пятница, 22 Июля 2011, 20:19:01 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Пишет ошибку "Expected end of line"

 

Pa3apTДата: Понедельник, 25 Июля 2011, 12:41:01 | Сообщение # 21
8 уровень
Группа: Проверенные
Сообщений: 653
Награды: 0
Репутация: 166
Блокировки:
http://xgm.ru/forum/showthread.php?t=27452
 

xageДата: Понедельник, 25 Июля 2011, 12:43:33 | Сообщение # 22
1 уровень
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 1
Блокировки:
ну ок, я тогда тоже порекламлю. http://xgm.ru/forum/showthread.php?t=20448
 

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

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