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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Не работает код
Brut@lusДата: Воскресенье, 19 Февраля 2012, 20:16:48 | Сообщение # 1
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Помогите с кодом, не пойму, почему не работает. Суть в том чтобы при взрыве бочки (любой) на расстоянии 512 от ней враждебные умирали, а игрокам наносился урон:
Code
function Trig_barrels_Conditions takes nothing returns boolean
          return GetDestructableTypeId(GetDyingDestructable()) == 'LTex'
endfunction

function Barrels_Loop takes nothing returns nothing
local real life = GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) - 50.00
local player owner = GetOwningPlayer(GetEnumUnit())
local player tplayer = Player(PLAYER_NEUTRAL_AGGRESSIVE)

      if ( owner == tplayer ) then
          call KillUnit( GetEnumUnit() )
      else
          call SetUnitState(GetEnumUnit(), UNIT_STATE_LIFE, RMaxBJ(0,life))
      endif

set owner = null
set tplayer = null
endfunction

function Trig_barrels_Actions takes nothing returns nothing
      set udg_l = Location(GetDestructableX(GetTriggerDestructable()), GetDestructableY(GetTriggerDestructable()))
      call ForGroup(GetUnitsInRangeOfLocAll (512, udg_l), function Barrels_Loop)
endfunction

function InitTrig_barrels takes nothing returns nothing
      set gg_trg_barrels = CreateTrigger(  )
      call TriggerRegisterDestDeathInRegionEvent( gg_trg_barrels, gg_rct_ARENA_CRIPS_RUNS )
      call TriggerAddCondition( gg_trg_barrels, Condition( function Trig_barrels_Conditions ) )
      call TriggerAddAction( gg_trg_barrels, function Trig_barrels_Actions )
endfunction

Добавлено (19 Февраль 2012, 20:16:48)
---------------------------------------------
Кому не удобно читать, с подсветкой тут




Сообщение отредактировал Brut@lus - Воскресенье, 19 Февраля 2012, 20:09:35
 

SirNikolasДата: Воскресенье, 19 Февраля 2012, 20:25:20 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
function Trig_barrels_Actions takes nothing returns boolean
     local unit u
     call GroupEnumUnitsInRange(udg_Group, GetWidgetX(GetTriggerDestructable()), GetWidgetY(GetTriggerDestructable()), 512., null)
     loop
         set u = FirstOfGroup(udg_Group)
         exitwhen u == null
         call GroupRemoveUnit(udg_Group, u)
         if GetOwningPlayer(u) == Player(12) then
             call KillUnit(u)
         else
             call SetWidgetLife(u, GetWidgetLife(u) - 50.)
         endif
     endloop
     return false
endfunction

function Trig_barrels_AddEvents_Filter takes nothing returns boolean
     return GetDestructableTypeId(GetFilterDestructable()) == 'LTex'
endfunction

function Trig_barrels_AddEvents takes nothing returns nothing
     call TriggerRegisterDeathEvent(gg_trg_barrels, GetEnumDestructable())
endfunction

function InitTrig_barrels takes nothing returns nothing
     set gg_trg_barrels = CreateTrigger()
     call EnumDestructablesInRect(gg_rct_ARENA_CRIPS_RUNS, Filter(function Trig_barrels_AddEvents_Filter), function Trig_barrels_AddEvents)
     call TriggerAddCondition(gg_trg_barrels, Condition(function Trig_barrels_Actions))
endfunction
Если не поможет, попробуй GetTriggerWidget().

Добавлено (19 Февраль 2012, 20:25:20)
---------------------------------------------
Нужно создать глобальную Group.




Сообщение отредактировал SirNikolas - Воскресенье, 19 Февраля 2012, 20:39:36
 

Ty3uKДата: Воскресенье, 19 Февраля 2012, 20:26:59 | Сообщение # 3
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Ты пишешь на жассе, причем юзаешь бж на группу, в которой есть утечка? Смысл? Жизнь лучше получать через GetWidgetLife(), юнитов набирать через GrousEnumUnitsInRange() с нулевым фильтром, а вместо умирающего разрушаемого юзать триггер разрушаемое. Переписал бы весь код, но увы с телефона. Ждем других

Добавлено (19 Февраль 2012, 20:26:59)
---------------------------------------------
Не успел. Кстати, ник, можно юзать глобальную бж группу :)


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 19 Февраля 2012, 20:27:33 | Сообщение # 4
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Какую? bj_lastCreatedGroup?

 

Ty3uKДата: Воскресенье, 19 Февраля 2012, 20:29:34 | Сообщение # 5
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
И, кстати, совмести условие и действие- режешь один поток (нет triggeraction)

Добавлено (19 Февраль 2012, 20:29:34)
---------------------------------------------
Вроде она. Не помню точно


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 19 Февраля 2012, 20:31:02 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
У меня нет условий. :) Это фильтр для добавления события.

Добавлено (19 Февраль 2012, 20:31:02)
---------------------------------------------

Quote (SirNikolas)
bj_lastCreatedGroup
В начале игры она равна null, принимает значение после ForGroupBJ, да и то, если не была использована bj_wantDestroyGroup. Безопаснее свою глобалку иметь.


 

Ty3uKДата: Воскресенье, 19 Февраля 2012, 20:32:14 | Сообщение # 7
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Почему бы его не совместить с действием?

Добавлено (19 Февраль 2012, 20:32:14)
---------------------------------------------
У тебя же тогда ни условия не будет, ни действия. Мечта D:


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 19 Февраля 2012, 20:35:00 | Сообщение # 8
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Эм, посмотри внимательнее код. Действие в триггере у меня есть. А те две функции отвечают за регистрацию событий. Я подумал, что лучше разделить фильтр и callback. На таком примитивном уровне, как перебор destructable'ов, Близзы вряд ли могли сильно накосячить. :)

 

Ty3uKДата: Воскресенье, 19 Февраля 2012, 20:36:33 | Сообщение # 9
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Хм... Видимо, я не прав. Ну да ладно, главное, что код как обычно безупречен :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Воскресенье, 19 Февраля 2012, 20:37:31 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
А хотя ты прав. Вместо действия в триггер лучше добавить условие.
Отредактировал.




Сообщение отредактировал SirNikolas - Воскресенье, 19 Февраля 2012, 20:39:02
 

Ty3uKДата: Воскресенье, 19 Февраля 2012, 20:38:09 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
^_^

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

Brut@lusДата: Понедельник, 20 Февраля 2012, 12:52:31 | Сообщение # 12
Группа: Заблокированные
Сообщений: 2496
Награды: 1
Репутация: 924
Блокировки:
Спасибо всем, клоз.

 

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

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