Сейчас 07:29:09 Понедельник, 24 января, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Система] Easy Damage System (Очередная система отлова урона)
[Система] Easy Damage System
AjaccioДата: Четверг, 17 Марта 2011, 22:50:34 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Easy Damage System


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





Просто скопируйте к себе в карту триггер (при этом нужно иметь JNGP и, возможно, AdicParser), способность "Метка" и её эффект...
Затем можете использовать новые функции:

1) TriggerRegisterAllUnitDamaged(<Триггер>) - новое событие, срабатывает при получении любым воинов урона.
2) GetDSSource, GetDSTarget и GetDSCounts - работают аналогично GetEventDamageSource, GetTriggerUnit и GetEventDamage соответственно.
3) GetEventAttackType и GetEventDamageType - возвращают, как ни странно, тип атаки и урона.
4) UserUnitDamageTarget - только для vJass версии, принимает те же параметры, что и UnitDamageTarget...

Вроде всё... alco
Прикрепления: EMDS.w3x(73.6 Kb)


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

QuasarДата: Суббота, 02 Апреля 2011, 01:47:05 | Сообщение # 26
7 уровень
Группа: Проверенные
Сообщений: 334
Награды: 0
Репутация: 41
Блокировки:
сори я просто мало разбираюсь можешь сказать откуда и куда... или скинь уже в готовом виде....
я просто невсёк ещё эти отловы урона..(


Спелмейкер ищет работу)
 

rixt7956Дата: Суббота, 02 Апреля 2011, 07:45:35 | Сообщение # 27
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
не стал разбираться почему, но когда поместил систему в одну карту, начались страшные лаги, из за которых даже играть стало невозможно. естевственно лаги начались после регистра триггера.
 

AjaccioДата: Суббота, 02 Апреля 2011, 15:22:30 | Сообщение # 28
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
rixt7956, тестировал на разных картах и лагов не заметил -> скорее всего проблема с триггере.
Там урон не наносится? Если не сложно, скопируйте сюда код.

Quasar, чуть позже выложу в отдельной карте.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

rixt7956Дата: Суббота, 02 Апреля 2011, 15:26:41 | Сообщение # 29
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
только я тебе весь скину , чуть позже.)
 

swdnДата: Суббота, 02 Апреля 2011, 19:56:48 | Сообщение # 30
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 32
Блокировки:
Ajaccio, система хорошая, написано всё аккуратно, прямо как мне нравится.
Всё же есть некоторые замечания.

Code

private void TimerLoop() {
     GroupEnumUnitsInRect(genum, bj_mapInitialPlayableArea, filter)
}
// ...
TimerStart(CreateTimer(), 0.1, true, function TimerLoop)

10 раз в секунду перебирает всех юнитов на карте. Это нехорошо. Лучше будет использовать событие TriggerRegisterEnterRegion.

Функции GetAttackTypeID и GetDamageTypeID можно записать более коротко:

Code

int GetAttackTypeID (attacktype a_t) {
     if (a_t == null) { return -1 }
     return GetHandleId(a_t)
}

int GetDamageTypeID (damagetype d_t) {
     if (d_t == null) { return -1 }
     return GetHandleId(d_t)
}

GetHandleId(null) выдает 0, поэтому первое условие сохранено.

Ну и я бы в cJass коде разделил все пользовательские и системные (которые объявлены как private) функции. Первые наверх, вторые - вниз.

 

AjaccioДата: Воскресенье, 03 Апреля 2011, 08:04:45 | Сообщение # 31
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Спасибо за комментарии. Таймер использую просто потому, что боюсь пропажи способности из-за разных morph-заклинаний.
Можно использовать UnitMakeAbilityPermanent(...) конечно, но говорят она не сильно надёжная...

GetHandleId(...) не подошёл, так как я хотел выдавать ID согласно common.j, а там номера хаотично расставлены.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

swdnДата: Воскресенье, 03 Апреля 2011, 11:38:39 | Сообщение # 32
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 32
Блокировки:
Quote
Таймер использую просто потому, что боюсь пропажи способности из-за разных morph-заклинаний.

Да, кстати, система некорректно работает с морф-юнитами. Допустим, я ставлю демон хантера, пробую драться 1х1 с любым юнитом (например, орк бугай) - урон от обоих юнитов идет физический. После "перевоплощения", когда бугай бьет, система распознает два типа урона от орка - 1 физический и 1 магический, причем с одинаковыми значениями урона. После того, как "перевоплощение" закончилось, уже 3 типа урона (1 физический и 2 магических). А всё почему? Потому что на демон хантера при каждом "перевоплощении" вешается событие нанесения урона.

Вызов UnitMakeAbilityPermanent(targ, true, SPELL_MARK) после добавления способности SPELL_MARK должен решить вышеуказанную проблему. И ещё раз советую сделать добавление юнитов в систему через событие входа в регион.

Quote
GetHandleId(...) не подошёл, так как я хотел выдавать ID согласно common.j, а там номера хаотично расставлены.

Я бы не говорил этого, если бы не знал заранее и лишний раз не проверил. GetHandleId() выдает совершенно те самые значения.
Code

// как мы знаем:
// constant damagetype DAMAGE_TYPE_DEFENSIVE=ConvertDamageType(21)

// попробуй исполнить код:
call BJDebugMsg(I2S(GetHandleId(DAMAGE_TYPE_DEFENSIVE)))
// или
call BJDebugMsg(I2S(GetHandleId(ConvertDamageType(21))))

// любая из этих строк выведет на экран "21"

Функции типа ConvertSomeType() конвертируют целое число в тип, наследующий хендл, GetHandleId() конвертирует хендл в целое число - почему результаты на входе и выходе должны быть разными?
 

rixt7956Дата: Воскресенье, 03 Апреля 2011, 12:22:15 | Сообщение # 33
9 уровень
Группа: Проверенные
Сообщений: 1097
Награды: 0
Репутация: 153
Блокировки:
лаги были, так как я скачал старую версию. :)
 

AjaccioДата: Воскресенье, 03 Апреля 2011, 18:43:20 | Сообщение # 34
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Ох, я забыл, что событие при превращении не исчезает. avtorfffuuu
Тогда тут и выбора-то нет -> однозначно делать через вход в регион.

БТВ, если GetHandleId(...) сам по себе возвращает номер согласно common.j, то, возможно, мои функции не нужны вовсе.

Ещё думаю добавить проверку на зацикливание при неосторожном использовании (получил урон -> нанёс урон - > 100500 раз -> вылет).
Нужно только узнать предельное число вызовов для ввода ограничения (и уточнить зависит ли оно от мощности машины).

В общем в понедельник будет новая версия...


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

swdnДата: Воскресенье, 03 Апреля 2011, 19:19:18 | Сообщение # 35
1 уровень
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 32
Блокировки:
Quote
Ещё думаю добавить проверку на зацикливание при неосторожном использовании

Насчет этого хотел сказать в первый раз, отвлекся на другие баги.
Я думаю, достаточно будет завести глобальную переменную для проверки на повторное выполнение пользовательских триггеров.
Code

private bool DAMAGE_LOOP = true

// . . .
if DAMAGE_LOOP then
     DAMAGE_LOOP = false
     int i = 0
     while (i < count) {
         if TriggerEvaluate(user[i]) {
             TriggerExecute(user[i])
         }; i++
     }
     DAMAGE_LOOP = true
}
 

AjaccioДата: Понедельник, 04 Апреля 2011, 19:51:45 | Сообщение # 36
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Версия 1.2 с исправлением кучи багов и ещё пачкой новых... но не будем о грустном.
Также добавил мануал и функцию ResetWidgetLife(...) для триггерного лечения.
БТВ да, теперь игра не вылетит если случайно допустить зацикливание.

Разделил версии, теперь скачать cJass вариант вы можете здесь, а JASS2 - здесь.

Основная проблема сейчас - организовать работу системы во много "потоков".
Ибо иначе функции начинают работать немного порой много неправильно при нанесении урона из триггера.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

Mep3aB4uKДата: Понедельник, 11 Апреля 2011, 06:27:26 | Сообщение # 37
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
Quote (Ajaccio)
вариант вы можете здесь, а JASS2 - здесь.

Залей еще раз плиз
 

SirNikolasДата: Понедельник, 06 Июня 2011, 17:39:27 | Сообщение # 38
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Перезалей, пожалуйста, еще раз. Хочу сравнить...

 

AjaccioДата: Понедельник, 20 Июня 2011, 17:12:51 | Сообщение # 39
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
Пожалуйста. Впрочем надо бы переделать многое, а то написал только "чтобы работало".

XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

gaarraaДата: Вторник, 27 Декабря 2011, 16:18:37 | Сообщение # 40
3 уровень
Группа: Пользователи
Сообщений: 41
Награды: 0
Репутация: 4
Блокировки:
Ajaccio, если не сложно, можешь снова залить jass вариант ?

нужен моделлер/жассер для аниме карты по наруто Shinobi Final War(S.F.W.),пишите в лс. Подробности тут http://warcraft3ft.info/forum/26-34400-1#1335316
 

ZeromCrouferДата: Воскресенье, 08 Июля 2012, 18:42:00 | Сообщение # 41
7 уровень
Группа: Проверенные
Сообщений: 480
Награды: 0
Репутация: 113
Блокировки:
Custom Damage Event.w3x
Файл удален.

Кто может перезалейте плз пофиксенную систему которая с поста #23, ссылка устаревшая (
 

SirNikolasДата: Воскресенье, 08 Июля 2012, 19:00:52 | Сообщение # 42
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
В первом посте последняя версия.

 

BorodachДата: Четверг, 11 Октября 2012, 18:28:46 | Сообщение # 43
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Я что то не правильно делаю или система с маской смерти не работает?

Karamba
 

NaturekidДата: Четверг, 11 Октября 2012, 18:43:15 | Сообщение # 44
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Borodach, я не чекал орбы и буфплейсеры, но что-то уловил про то, что цель получает "метку", посмотрел наработку - "метка" сделана на основе "Сфера проклятия".
Последняя хавает и орб и буффплейсер, так что если это источник дамага непосредственно её вешает - увы нас ждёт игра без орбов и буффплейсеров. Во всяком случае без непосредственных.


 

SirNikolasДата: Четверг, 11 Октября 2012, 18:47:19 | Сообщение # 45
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Naturekid)
увы нас ждёт игра без орбов и буффплейсеров
Так система для того и сделана, чтобы можно было вручную настроить, что с чем стакается, а что - нет.


 

NaturekidДата: Четверг, 11 Октября 2012, 19:04:00 | Сообщение # 46
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
SirNikolas, ок, оживший огонь мне запили...
Нет можно конечно, но триггерное накладывание этого орба со всеми вытекающими - на мой взгляд самое геморное...

Добавлено (11 Октября 2012, 19:01:41)
---------------------------------------------
Не следует забывать, что стакабельный урон от ожившего огня даёт бонусный вампиризм кстати.

Добавлено (11 Октября 2012, 19:02:09)
---------------------------------------------
И.... ДА!

Добавлено (11 Октября 2012, 19:02:48)
---------------------------------------------
Секундочку! Вампиризм же подавляет сферу проклятия! Точно будет прокать триггер, если маску смерти одеть???

Добавлено (11 Октября 2012, 19:04:00)
---------------------------------------------
Ну хотя, используя такую систему придётся принять такую вещь, как маска смерти без вампиризма, как способности...




Сообщение отредактировал Naturekid - Четверг, 11 Октября 2012, 19:03:01
 

SirNikolasДата: Четверг, 11 Октября 2012, 19:05:03 | Сообщение # 47
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (Naturekid)
ок, оживший огонь мне запили...
Пассивка Урсы? Завтра сделаю.
Quote (Naturekid)
Скекундочку! Вампиризм же подавляет сферу проклятия! Точно будет прокать триггер, если маску смерти надеть???
При импорте системы ты должен с ее помощью переписать все эффекты сфер. Так что маска смерти тоже триггерная будет => все будет нормально работать.


 

NaturekidДата: Четверг, 11 Октября 2012, 19:10:41 | Сообщение # 48
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Quote (SirNikolas)
При импорте системы ты должен с ее помощью переписать все эффекты сфер. Так что маска смерти тоже триггерная будет => все будет нормально работать.

Ну ет само собой. Дошло уже. Постепенно доходят нюансы. :)
Quote (Naturekid)
Ну хотя, используя такую систему придётся принять такую вещь, как маска смерти без вампиризма, как способности...

Добавлено (11 Октября 2012, 19:09:12)
---------------------------------------------

Quote (SirNikolas)
Пассивка Урсы? Завтра сделаю.

Да нет-нет. Сделать-то можно, но геморновато. Хотя...хотя не геморно даже еси так подумать. Но это такой обман! ^_^

Добавлено (11 Октября 2012, 19:10:41)
---------------------------------------------
Да не сложно ни фига. Полученный урон от дамми и пофиг мороз. Дать здоровья герою-хозяину...


 

BorodachДата: Четверг, 11 Октября 2012, 19:10:53 | Сообщение # 49
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Ник, если есть время и желание модифицировать систему, чтоб работало с другими бафами.
Могу предложить идею.


Karamba
 

NaturekidДата: Четверг, 11 Октября 2012, 19:12:02 | Сообщение # 50
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Borodach, так колись. Штирлиц.

 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Система] Easy Damage System (Очередная система отлова урона)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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