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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[Вопрос] Эмпатия
RaiN_SДата: Воскресенье, 10 Марта 2013, 17:36:09 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Делаю способность, которая по действию похожа на эмпатию, т.е. если один из юнитов в группе получает урон, то часть от этого урона распространяется по остальным юнитам из данной группы. Проблема возникла на стадии распространения урона. Триггер реагирует на любое нанесение урона каждому юниту в группе, а распространение урона порождает новую реакцию триггера и т.д.
В общем, как избавиться от зацикливания?
Код
function Trig_b_Actions takes nothing returns nothing
       local unit u
       local group gr = LoadGroupHandle(udg_hash, GetHandleId(GetTriggerUnit()), 1)
       local group gr2 = CreateGroup()
       loop
           set u = FirstOfGroup(gr)
           exitwhen(u == null)
               call UnitDamageTarget(GetEventDamageSource(), u, GetEventDamage() ,    
false, false, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL,    
WEAPON_TYPE_WHOKNOWS)
               call GroupAddUnit(gr2, u)
               call GroupRemoveUnit(gr, u)
               call SaveGroupHandle( udg_hash, GetHandleId(GetTriggerUnit()), 1, gr2)
       endloop
endfunction

function Trig_a_Actions takes nothing returns nothing
...
loop
           set u = FirstOfGroup(gr)
           exitwhen (u == null)
               call TriggerRegisterUnitEvent( trig, u, EVENT_UNIT_DAMAGED )
               call TriggerAddAction( trig, function Trig_b_Actions )
               call SaveTriggerHandle( udg_hash, GetHandleId(u), 0, trig)
               call SaveGroupHandle( udg_hash, GetHandleId(u), 1, gr2)
               call GroupRemoveUnit(gr, u)
       endloop
...




Сообщение отредактировал RaiN_S - Воскресенье, 10 Марта 2013, 17:37:18
 

SirNikolasДата: Воскресенье, 10 Марта 2013, 18:09:00 | Сообщение # 2
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Самый простой вариант - поднимать/сбрасывать флаг (глобальную логическую).

 

RaiN_SДата: Воскресенье, 10 Марта 2013, 18:22:56 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 163
Награды: 0
Репутация: 77
Блокировки:
Я дурак, все просто, как апельсин (через Disable/EnableTrigger). :)

Добавлено (10 Марта 2013, 18:22:56)
---------------------------------------------
Можно закрыть. Спасибо. :)


 

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

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