DamageSystem
|
|
BuРyC | Дата: Понедельник, 06 Июня 2011, 14:13:46 | Сообщение # 1 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| Запускается только в JNGP. Если его у вас нет, то вам его необходимо скачать. Так же для использования cJass версии и запуска этой карты из редактора вам нужен AdicHelper, который надо установить в JNGP. Описание: Данная система даёт возможность добовлять к триггеру событие " Юнит получил урон ". Как известно, стандартно это событие можно добавить указывая определённого юнита. Эта ситема регистрирует событие "Получил урон ", для всех юнитов. Импорт: Скопируйте триггер один из двух тириггеров из категории "Система". Один из них cJass версия, второй vJass. Копируте тот , который вам более понятен. Функции: DamageSystem_TriggerRegisterAllUnitDamaged takes trigger trg returns nothing - Регестрирует для триггера наше новое событие. DamageSystem_RemoveTriggerFromSystem takes trigger t returns nothing - Перед удалением триггера, для которого было зарегестрированно наше новое событие, обязательно делайте это действие. Функции получения: Они те же самые, т.е это функции GetTriggerUnit() , GetEventDamage() , и GetEventDamageSource(). Использование в GUI: Если вы не владеете знаниями Jass, то вы так же можете использовать ситему в GUI триггерах. Для этого в триггере с событием Инициализация карты, в действиях сделайте следущее. Личный сценарий : DamageSystem_TriggerRegisterAllUnitDamaged ( gg_trg_Название триггера)
Добавлено (06-06-2011, 14:13) --------------------------------------------- P.S на форуме уже была такая система. Но эта менее громоздкая и отвечает именно за получение урона.
|
|
|
|
SirNikolas | Дата: Понедельник, 06 Июня 2011, 14:54:52 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Код выложи.
|
|
|
|
DragoN | Дата: Понедельник, 06 Июня 2011, 15:32:41 | Сообщение # 3 |
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
| код выложи, качать не хочу
El Psy Congroo
|
|
|
|
BuРyC | Дата: Понедельник, 06 Июня 2011, 15:54:24 | Сообщение # 4 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| Code library DamageSystem initializer Init {
#include "cj_types.j" #include "cj_typesEX.j"
private constant trigger AddEventTrig = new trigger private int iTrig = 0 private trigger array Take_Trig
private bool AddEvent_Conditions () { return GetUnitAbilityLevel(GetTriggerUnit(),'Aloc') == 0 }
private void AddEvent () { int i = 0 whilenot i == iTrig { TriggerRegisterUnitEvent ( Take_Trig[++i],GetTriggerUnit(), EVENT_UNIT_DAMAGED) } }
public void RemoveTriggerFromSystem ( trigger t ) { int i = 0 whilenot t == Take_Trig[++i] {} --iTrig whilenot i == iTrig { Take_Trig[i] = Take_Trig[i++] } } public void TriggerRegisterAllUnitDamaged (trigger trg) { group g = new group unit u int i = 0 GroupEnumUnitsInRect (g,bj_mapInitialPlayableArea,null) do { u = FirstOfGroup(g) exitwhen u == null TriggerRegisterUnitEvent ( trg, u, EVENT_UNIT_DAMAGED) GroupRemoveUnit( g, u) } Take_Trig[++iTrig] = trg DestroyGroup(g) g = null }
private void Init () { region r = new region RegionAddRect( r, bj_mapInitialPlayableArea) TriggerRegisterEnterRegion( AddEventTrig, r, null) TriggerAddCondition( AddEventTrig, Condition(function AddEvent_Conditions)) TriggerAddAction(AddEventTrig,function AddEvent) r = null } }
|
|
|
|
Ajaccio | Дата: Понедельник, 06 Июня 2011, 16:20:23 | Сообщение # 5 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
|
Quote (BuРyC) group g = new group
Хорошо бы сделать группу глобальной и перебор не в цикле, а в условии GroupEnumUnitsInRect, да? БТВ, событие TriggerRegisterEnterRegion не отлавливает "призванных" воинов. А вообще не смотрел.
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
SirNikolas | Дата: Понедельник, 06 Июня 2011, 16:24:15 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ajaccio) БТВ, событие TriggerRegisterEnterRegion не отлавливает "призванных" воинов. В смысле? У меня на нем один спелл построен. С призванными.Добавлено (06-06-2011, 16:24) ---------------------------------------------
Quote (BuРyC) Code private bool AddEvent_Conditions () { return GetUnitAbilityLevel(GetTriggerUnit(),'Aloc') == 0 } А ты уверен, что это будет работать?
|
|
|
|
Ajaccio | Дата: Понедельник, 06 Июня 2011, 16:30:21 | Сообщение # 7 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| Вы правы, все таки отлавливает. Правда функции GetWidgetLife(...) для них почему-то возвращает 0.0, во как. А вообще я о способности "Астральный зверь".
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
SirNikolas | Дата: Понедельник, 06 Июня 2011, 16:41:09 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (Ajaccio) Правда, функция GetWidgetLife(...) для них почему-то возвращает 0.0, во как. А ты кого в нее передаешь? GetTriggerUnit() или GetFilterUnit()? Если ты добавляешь действие методомCode call TriggerRegisterEnterRegion(CreateTrigger(), r, Filter(function Trig_Test_Actions)) , то из всех реакций на события будет работать только GetFilterUnit().
|
|
|
|
Ajaccio | Дата: Понедельник, 06 Июня 2011, 16:46:22 | Сообщение # 9 |
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
| private bool CreateNewMember() { ___if (GetTriggerEventId() == EVENT_UNIT_DAMAGED) {return false} ___unit targ = GetFilterUnit()
___BJDebugMsg(R2S(GetWidgetLife(targ)))___//Выводит 0.0, у остальных нормально.
___if (GetWidgetLife(targ) > 0.0 && GetUnitAbilityLevel(targ, SPELL_MARK) == 0) { ______TriggerRegisterUnitEvent(gg_trg_EMDSystem, targ, EVENT_UNIT_DAMAGED) ______UnitAddAbility(targ, SPELL_MARK) ______UnitMakeAbilityPermanent(targ, true, SPELL_MARK) ___} ___targ = null ___return false }
XOR EAX, EAX MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
|
|
|
|
BuРyC | Дата: Вторник, 07 Июня 2011, 22:42:03 | Сообщение # 10 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| Quote (Ajaccio) Хорошо бы сделать группу глобальной и перебор не в цикле, а в условии GroupEnumUnitsInRect, да? Точно Добавлено (07-06-2011, 22:42) ---------------------------------------------
Quote (BuРyC) отвечает именно за получение урона. Ajaccio, Я имел ввиду что, твоя содержит кучу функций, к примеру, на определение типа атаки, моя же , только для регистрации события.
|
|
|
|
Omni174 | Дата: Среда, 08 Июня 2011, 22:24:34 | Сообщение # 11 |
Группа: Заблокированные
Сообщений: 1274
Награды: 1
Репутация: 359
Блокировки:
| Юзай хайв
|
|
|
|
BuРyC | Дата: Среда, 08 Июня 2011, 23:26:42 | Сообщение # 12 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| Идиот?
|
|
|
|
Diabfall | Дата: Четверг, 09 Июня 2011, 09:14:19 | Сообщение # 13 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Quote (BuРyC) TriggerRegisterUnitEvent ( Take_Trig[++i],GetTriggerUnit(), EVENT_UNIT_DAMAGED) Это событие регистрируется для каждого нового юнита?
|
|
|
|
BuРyC | Дата: Четверг, 09 Июня 2011, 10:37:37 | Сообщение # 14 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| для всех юнитов на карте, а так же для всех, появляющихся.
|
|
|
|
Diabfall | Дата: Четверг, 09 Июня 2011, 10:43:29 | Сообщение # 15 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Quote (BuРyC) для всех юнитов на карте, а так же для всех, появляющихся. Событие же нельзя удалить. => Они будут накапливаться и висеть в памяти?
|
|
|
|
BuРyC | Дата: Четверг, 09 Июня 2011, 10:51:07 | Сообщение # 16 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| возможно, но поставил код на убийство с одного удара, крипов, которые мгновенно возрождаются, ушел из дома на 4 часа, когда пришел, не было ни одного лага.
|
|
|
|
SirNikolas | Дата: Четверг, 09 Июня 2011, 11:04:19 | Сообщение # 17 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| BuРyC, событие для появляющихся на карте добавляется только в том случае, если они имеют способность "Москиты". Именно поэтому твой, несомненно, оригинальный, способ тестирования не показал никаких лагов.
|
|
|
|
BuРyC | Дата: Четверг, 09 Июня 2011, 11:21:18 | Сообщение # 18 |
3 уровень
Группа: Пользователи
Сообщений: 74
Награды: 0
Репутация: -27
Блокировки:
| нет, для тех кто не имеет способность москиты, как раз и добавляется, в докозательство, обрати внимание что плавающий текст появляется над всеми новыми юнитами. Это показано в карте, ссылка на которую в первом посте.Добавлено (09-06-2011, 11:21) --------------------------------------------- система работает со всеми кроме москитов.
|
|
|
|