Исследование порчи (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
Триггерных действий
(WRONG IMAGE URL - imageshack)
Как и в WE порча привязана к сетке. SetBlightPoint создаёт никакой не point, а регион размером 512 на 512.
Минимальный радиус региона наведённого с помощью SetBlight - 128. Значения меньшие 128 округляются до 128. Следующие радиусы кратны 128. При указании не кратного радиус округляется к ближайшему кратному, т.е. 150 к 128, 192 к 256 и т.д.
Визуально минимальный порченый регион выглядит меньше,
чем есть на самом деле
(WRONG IMAGE URL - imageshack)
Круговые регионы порчи - достаточно
квадратные
(WRONG IMAGE URL - imageshack)
Здесь любопытный момент в том, что мелкие квадратики имеют сторону 128, а не 256. Значит минимальный радиус таки 64, а не 128, об этом ниже.
В WE они ещё более квадратные:
без маленьких скругляющих квадратиков + размер "кистей" другой
(WRONG IMAGE URL - imageshack)
Центр порченного региона, создаваемового с помощью SetBlight или SetBlightRect привязан к сетке. Квадрат сетки размером 256 на 256. Поэтому, если указать центром, скажем, (2200, 450), то регион будет создан с центром в (2176,512)
Параметр whichPlayer определяет собственника порчи. Учитывая, что порча снимается диспелом по местности, собственник порчи свою порчу снять не сможет. (Thanks to DioD)

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

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

Заключение

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
6
11 лет назад
1
Я бы не сказал что статья бесполезная, но почти ненужная. Это просто слоупок(короче объясняюсь), или как первое документальное дело:)
0
20
11 лет назад
0
Insenne, при размере карты 512 на 512 порча только в определенном легионе работает. В каком смысле работает, на ней нельзя строить здания нежити.
Поверь порча гадкая. -_-
0
10
11 лет назад
0
Vampir1991, при размере карты 512 на 512 порча только в определенном легионе работает
Заинтересовало, т.е. на картах 512 на 512 в опред. регионе порча отображается, но на самом деле земля не порченная?
0
20
11 лет назад
0
Угу.
1
5
11 лет назад
1
Интересная и даже полезная статья. Уже сталкивался с проблемой точного наведения порчи.
Но хотелось бы получить чуть больше, а именно:
  1. У меня давно есть вопрос - как наводить порчу на отдельное дерево - например когда Гуль нежити трогает дерево - оно портится. Нужен такой же эффект. Как его достичь тригерно?
  2. Хотелось бы скорректированный API - заменяющий (и расширяющий) стандартный максимально снижающий баг-эффекты.
  3. Хотелось бы больше функций (в новом API) для проверки регионов на предмет порчи, и, наверное, стоит разделить функции на добавляющие порчу и убирающие порчу (и на проверяющие наличие порчи).
Прошу воспринимать мои просьбы не как выклянчивание готовых решений или наезд на неполную статью, а как повод к возможному продолжению данной статьи. И автору спасибо за статью.
0
10
11 лет назад
Отредактирован Romeno
0
У меня давно есть вопрос - как наводить порчу на отдельное дерево - например когда Гуль нежити трогает дерево - оно портится. Нужен такой же эффект. Как его достичь тригерно?
Точечно порча не наводится, как я и писал, только мин размер 128 на 128. Поэтому как ты и написал тригерно: создать гуля, ударить по дереву удалить гуля, восстановить здоровье дереву :)
Хотелось бы скорректированный API - заменяющий (и расширяющий) стандартный максимально снижающий баг-эффекты.
Я думал о том, чтобы написать пару тройку функций для создания региона на 128 на 128 и т.п. Но там такая мудистика... Рисовать мелкие квадратики можно только, минимум, порчей радиусом 256, а значит рисование/стирание будет портить рисунок порчи вокруг. Я честно говоря вообще сомневаюьс что это можно сделать номально, с существующим API. А если и можно придётся всю карту порчи перерисовывать начиная с нижнего угла наверное....
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.