XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Romeno

offline
Опыт: 3,167
Активность:
Исследование порчи (Blight).
Делал тригерный спел с эффектом наведения порчи и... решил разобраться как она работает.
Казалось бы всё просто координаты, размер региона и готово. И тем не менее выкладываю результат сего изыска...
Дисклеймер статья абсолютно уныла, тут ничего интересного кроме невидимой порчи.

Основы

В первую очередь нужно сказать, что наведение порчи в WE отличается от наведения порчи с помощью скриптов.
Наводить порчу на землю можно или в WE или в игре с помощью
» Blight API
native SetBlight takes player whichPlayer, real x, real y, real radius, boolean addBlight returns nothing
native SetBlightRect takes player whichPlayer, rect r, boolean addBlight returns nothing
native SetBlightPoint takes player whichPlayer, real x, real y, boolean addBlight returns nothing
native SetBlightLoc takes player whichPlayer, location whichLocation, real radius, boolean addBlight returns nothing
native IsPointBlighted takes real x, real y returns boolean
» Триггерных действий
Как и в WE порча привязана к сетке. SetBlightPoint создаёт никакой не point, а регион размером 512 на 512.
Минимальный радиус региона наведённого с помощью SetBlight - 128. Значения меньшие 128 округляются до 128. Следующие радиусы кратны 128. При указании не кратного радиус округляется к ближайшему кратному, т.е. 150 к 128, 192 к 256 и т.д.
Визуально минимальный порченый регион выглядит меньше,
» чем есть на самом деле
Круговые регионы порчи - достаточно
Здесь любопытный момент в том, что мелкие квадратики имеют сторону 128, а не 256. Значит минимальный радиус таки 64, а не 128, об этом ниже.
В WE они ещё более квадратные:
» без маленьких скругляющих квадратиков + размер "кистей" другой
Центр порченного региона, создаваемового с помощью SetBlight или SetBlightRect привязан к сетке. Квадрат сетки размером 256 на 256. Поэтому, если указать центром, скажем, (2200, 450), то регион будет создан с центром в (2176,512)
Параметр whichPlayer определяет собственника порчи. Учитывая, что порча снимается диспелом по местности, собственник порчи свою порчу снять не сможет. (Thanks to DioD)
При снятии порчи с местности текстура рельефа не восстанавливается, а заменяется однотипной.

Невидимая порча

После того как стало ясно, что минимальный размер квадратика с порчей 128 на 128, я решил поэкспериментировать и посмотреть что будет, если обрезать в-кавычках-минимальный регион 256/256 с помощью мелких квадратиков. Т.е. сначала создал круговую порчу радиуса 256, а затем удалил порчу тоже радиуса 256, сместив центр как
В итоге местность перестала отображаться порченной, но по факту порча на ней частично осталась (красная на рисунке). Типа не видимая порча.
Наверное это можно как-то использовать.
» Также т.о. можно создать порченный регион размера 256 на 384
Удаление кругового региона порчи радиуса 384 (может и не только для него) работает бажно. Верхняя часть региона не удаляется, оставляя небольшой клочок порчи.
SetBlightPoint тоже работает и странно, и бажно. При создании порчи создаётся регион 512 на 512. Центр расположен как показано
Как видно из рисунка "нарисованная" порча, смещена вверх и вправо на 128 от реальной (ахтунг!).
SetBlightRect также
» криво отображает порчу
При размерах региона меньше 65 не создаёт порчу. При размере больше, создаёт прямоугольный регион порчи размером равным ближайшему числу кратному 128. У меня не получилось добиться того, чтобы SetBlightRect нормально отображала наведённую порчу. Так что, наверное, её не стоит использовать.

Заключение

Имхо самое полезное из всего этого, это то что минимальный регион, который можно "испортить" это таки 128 на 128 (для круга) он и отображается не смещённо. Порча такого размера будет видна, если будет граничить с порченным регионом 256 на 256. Если такого региона не будет, то порченным он будет, но отображаться как таковой - нет.
В целом порча работает не очевидно, а кое-где и бажно.
Тестировалось с помощью IsPointBlighted.

Отредактировано Romeno, 07.01.2013 в 17:37.
Старый 06.01.2013, 00:11
WarSC
Silenced by WarSC
offline
Опыт: 3,473
Активность:
Вау, Клас, плюс-плюс, о чом тут речь знает только автор [я рисунков не видел].
А просто создать модель порчи? ет ведь модель:), ну а если строить здания хочеш после приминения какого либо строения [нежити], строим тупо здание без каких либо данных[чтобы роспространяло порчу];). Както так с дание могу быть не прав...!
Старый 06.01.2013, 01:38
Romeno

offline
Опыт: 3,167
Активность:
Все картинки в катах, они должны быть видны
Старый 06.01.2013, 18:09
Romeno

offline
Опыт: 3,167
Активность:
Мне вот что интересно: имеет ли смысл это оформлять в статью или такая тема слишком бесполезна и не дотягивает до статьи/подстатьи?
Старый 07.01.2013, 04:17
ScorpioT1000
Работаем
offline
Опыт: отключен
И где тут наработка? Раздел для наработок.
Старый 07.01.2013, 04:28
Romeno

offline
Опыт: 3,167
Активность:
ScorpioT1000, ок, попробую создать статью.
Старый 07.01.2013, 10:32
DioD

offline
Опыт: 45,134
Активность:
капитан очевидность решил рассказать как работает функция?
native SetBlightRect takes player whichPlayer, rect r, boolean addBlight returns nothing

да я кстати и так расскажу что она берёт собственника порчи регион и флаг ставить или убирать порчу, без тестов, без исследований, просто потому что она так называется....

native IsPointBlighted takes real x, real y returns boolean
внезапно вернёт тру если точка в ячейке с порчей, ВАУ!!!111, спасибо кеп!!!

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

да и ваши совершенно бестолковые исследования не выяснили тот факт, что порча снимается диспелом и собственник порчи заданный в параметре свою порчу снимать не будет, а вот его враги будут, всё чертовски просто.

вывод - вы опоздали со своими исследования на 6 лет, сами исследования не имеют никакой практической ценности и попахивают капитаном очевидностью
Старый 07.01.2013, 11:07
Romeno

offline
Опыт: 3,167
Активность:
размер ячейки в 128 настолько очевиден что даже не знаю, зачем рассказывать то об этом, любой даже самый тупой нуб заметит это после первого же применения порчи.
Не факт, что размер 128. Пока не проверил было не очевидно.
да и ваши совершенно бестолковые исследования не выяснили тот факт, что порча снимается диспелом
вот это было как раз очевидно
собственник порчи заданный в параметре свою порчу снимать не будет, а вот его враги будут, всё чертовски просто.
О, а это круто, не знал. Добавил)
вы опоздали со своими исследования на 6 лет
Круто! Хорошо, что не на 7!
Мне больше всего понравилось что порча бывает невидимой.
Romeno добавил:
собственник порчи заданный в параметре свою порчу снимать не будет, а вот его враги будут, всё чертовски просто.
Враки. Проверил. Всё прекрасно снимается и свою и порчу союзников. Пруф в студию!

Отредактировано Romeno, 07.01.2013 в 17:50.
Старый 07.01.2013, 17:43
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 22:57.