все дописал свою наработку. сам дорабатывать буду.
недостаток с регионом
обнаружил пару месяцев назад еще один недостаток: это все же добавления ректа в регион. эта сама нативка
native RegionAddRect takes region whichRegion, rect r returns nothing
есть добавить рект с вершинами (minx=0, miny=0,maxx=32.,maxy=32). То рект он добавляет с размерами (minx=0,miny=0,maxx=64.,maxy=64). Короче берет ближайшую координату кратно числу 32. Если взять число 64, то вставит 96. Если 96, то 128. Пробовал меньше 31, подправляет на 32. В нативке RegionAddRect специально убавлять пришлось maxx-32, maxy-32. Тогда не работает норм проверка IsPointInRegion, точки (32. , 32.) не существует. Здесь скажет что IsPointInRegion(maxx,maxy) не существует
GetLocalPlayer, спасибо. интересный материал. Если что пригодиться =)) quq_CCCP, да я помню скидывал мне. К сожалению, я пока не нашел применения ему. Взаимодействую со прямыми сторонами многоугольника. но думаю мб пригодиться
алгоритм пересечения круга
function Is2cc takes real r, real cx, real cy, real px1, real py1, real px2, real py2 returns boolean
local real dx = 0.00
local real dy = 0.00
local real a = 0.00
local real b = 0.00
local real c = 0.00
set px1 = px1 - cx
set py1 = py1 - cy
set px2 = px2 - cx
set py2 = py2 - cy
set dx = px2 - px1
set dy = py2 - py1
set a = dx * dx + dy * dy
set b = 2.00 * ( px1 * dx + py1 * dy )
set c = px1 * px1 + py1 * py1 - r * r
if ( -b < 0.00 ) then
return ( c < 0.00 )
elseif ( -b < ( 2.00 * a ) ) then
return ( ( 4.0 * a * c - b * b ) < 0 )
endif
return ( a + b + c < 0 )
endfunction
в карте worm war вот такая функция (вполне рабочая)
function InterLineLine takes real x1, real y1, real x2, real y2, real a1, real b1, real a2, real b2, location loc returns boolean
local real p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
local real x
local real y
if ( p == 0 ) then
return false
endif
set x = ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
set y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
call MoveLocation( loc, x, y )
return true
endfunction
немного не понятно. вам нужно создать в центре ректа (области)?
есть нативки возвращающие центр GetRectCenterX, GetRectCenterY
или
centerx = (minx+maxx)/2
centery = (miny+maxy)/2
в варкрафте область это прямоугольник
easypeasy, ты мог бы в константах (переменных) прочитать олисания. обычно инфа краткая и не всегда понятно, и что там там есть на гуи и в библиотеки функции. Обычно дебагом проверяешь какой это юнит или итем и прочее
используй подходящие константы к конкретным событиям триггера.
продажа итема
событие - юнит закладывает предмет в лавку
переменные:
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
покупка итема
событие - продает предмет (из лавки)
GetSellingUnit()=GetTriggerUnit() =продающий торговец (в данном случае магазин продает нам)
GetBuyingUnit() = покупающий торговец (это наш герой отдает денюшку, а сам получает артефает или лошадь)
А предмет который продают или покупают
GetSoldItem()
Феникс, у каменных доспех вроде не меньше проблем. ему надо 300 единиц дамага отсчитать, чтобы убрать их в нужный момент. а с каменными доспехами урон всегда будет обнулен, и событие урона сегда будет показывать дамаг нулевым, и как он отсчитает. он наверн хочет сделать подобие энергетического щита. если я не ошибаюсь
событие урона показывает сколько нанесет урона сейчас, но урон еще не пришел. урон происходит через 0.00 сек.
у вас может быть в этот момент максимальный запас здоровья (например у курицы 10 хп). А урон противника получается слишком большим.
раскрыть
2.1. Манипуляциями с хп через команды типа set life of unit вы не всегда можете наперед подправлять. Тк хп может упереться в лимит запаса здоровья юнита. А получаемый урон больше чем запас, и юнит умрет.
2.2. Можно сделать юнита временно неуязвимым, тогда атака не срабатывает
2.3.поэтому самое идеальное даем абилку с максимальным запасом здоровья с 999999к хп. Юнит точно не умрет от урона.
после таймера 0.00 сек убираем абилу и подправляем как надо.
ты можешь делать проверки сколько очков осталось на поглощение
Nemezid, это незаметно, тк все происходит очень быстро.
а настройках абилы выборки
Радиус запуска - радиус действия (автоматически выбирает юнитов по типу взаимодействия. Кстати, в абилке можно настроить цели, но это бесполезно для автопоиска и автовыборки. Настройка цели в абилке не дает ничего).
тип взаимодействия, есть 4 галочки у выборки
"Нет" (никакая галочка не стоит) - действует только на героев (и не важно есть ли у него инвентарь или нету);
"Любая боевая единица с предметами" - юниты с наличием инвентаря (не важно герой или не герой, здание или не здание. Важно чтобы был у него инвентарь);
"Любое не здание" - действует на любых юнитов, кроме здания (и не важно есть ли у юнитов инвентарь или нету);
"Не важно" - действует на всех (здание в том числе)
самый интересный момент - пробуждение противником. это случается, если:
если атаковали нейтрала, или ближайшего соратника-нейтрала. конечно, нейтралы должны проснуться.
если рядом кто то из вражин кастует спел. По-моему нейтралы просыпаются, даже, если каст не направлен на них *(возможно ошибаюсь, надо проверить)
еще можно добавить:
если два разных противника рядом с спящими нейтралами дерутся друг с другом, а нейтралы спят, то это было бы странно. Я играл классический вар, и замечал не раз такую странную механику. когда атакуют непадалеку нейтрала-соратника, они просыпаются, а когда идет драка между противниками спят. пофигизм,равнодушие, лень у них наверн. они же должны от дома прогнать, звери же. мб боятся. Обычно такое любят использовать, чтобы потом атакой будить и агром перенаправить на вражину
если рядом бегают противники, а нейтралы спят. это еще страннее.особенно вплотную приблизился, побегал вокруг них. нейтралы глухие
там внутри программы встроен конвертер: формат изображения на blp или наоборот. очень хорошо конвертирует большие изображения. других че-то не припомню. например button manager отсекает размер на 64x64, а blp Lab тоже с маленькими работает, 64x64 норм, а большие открыть не может (а не просто че то долго открывает).
можешь:
заменить существующую. это рабочий вариант. берешь какой-нибудь тип терраина и заменяешь по тому же пути. когда импортируешь и укажешь путь. это не значит, что при запуске карты у тебя будет сразу, надо сохранить и потом перезапустить редактор (советую это просто как попробовать)
создать новый. это надо лезть в slk и создавать, указывать новые пути и пр. не пробовал и не знаю. помню что кто то хотел импортнуть slk но внутри редактора ... оставалось все без изменении.
UnitAddSleep - дает через true юниту возможность спать. Теперь каждую ночь будет засыпать. Если снять через false, то ночью бодрствует и никогда не будет спать ночью. В действии UnitAddSleep пишут что юниты игроков 1-12 никогда не спят, это значит, что действует на нейтралов (проверка и действие не работают на не нейтралов). Но и бывает плохо работало и в 1.26, даже на нейтралов.
есть еще функция UnitAddSleepPerm - аналогично, только вроде днем еще спят так?
Короче эта функция вообще не работает не понятная функция
Ред. MpW
» WarCraft 3 / как разбить фигуры на прямоугольники?
Ред. MpW
» WarCraft 3 / как разбить фигуры на прямоугольники?
» WarCraft 3 / Пересечение двух отрезков
quq_CCCP, да я помню скидывал мне. К сожалению, я пока не нашел применения ему. Взаимодействую со прямыми сторонами многоугольника. но думаю мб пригодиться
Ред. MpW
» WarCraft 3 / Пересечение двух отрезков
Ред. MpW
» WarCraft 3 / Пересечение двух отрезков
карту пример скинул
Ред. MpW
» WarCraft 3 / Пересечение двух отрезков
Ред. MpW
» WarCraft 3 / Пересечение двух отрезков
» WarCraft 3 / Пересечение двух отрезков
» WarCraft 3 / Energy Greed TD 0.20.6.c
» WarCraft 3 / Помогите создать способность.
Ред. MpW
» WarCraft 3 / Как создать юнит...?
есть нативки возвращающие центр GetRectCenterX, GetRectCenterY
или
centerx = (minx+maxx)/2
centery = (miny+maxy)/2
в варкрафте область это прямоугольник
» WarCraft 3 / Продажа предмета
Ред. MpW
» WarCraft 3 / Продажа предмета
переменные:
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
GetSellingUnit()=GetTriggerUnit() =продающий торговец (в данном случае магазин продает нам)
GetBuyingUnit() = покупающий торговец (это наш герой отдает денюшку, а сам получает артефает или лошадь)
GetSoldItem()
Ред. MpW
» WarCraft 3 / Как сделать поглощение/блок урона в варкрафте 3.
» WarCraft 3 / Как сделать поглощение/блок урона в варкрафте 3.
ты можешь делать проверки сколько очков осталось на поглощение
» WarCraft 3 / Дали носит воздействия магазина и героя WarCraft 3
» WarCraft 3 / Не открывается обычный редактор
» WarCraft 3 / Таверна требует наличия героя
Ред. MpW
» WarCraft 3 / Таверна требует наличия героя
Радиус запуска - радиус действия (автоматически выбирает юнитов по типу взаимодействия. Кстати, в абилке можно настроить цели, но это бесполезно для автопоиска и автовыборки. Настройка цели в абилке не дает ничего).
"Любая боевая единица с предметами" - юниты с наличием инвентаря (не важно герой или не герой, здание или не здание. Важно чтобы был у него инвентарь);
"Любое не здание" - действует на любых юнитов, кроме здания (и не важно есть ли у юнитов инвентарь или нету);
"Не важно" - действует на всех (здание в том числе)
Ред. MpW
» WarCraft 3 / UnitAddSleepPerm
Ред. MpW
» WarCraft 3 / По поводу импорта текстур (очередной нубо-вопрос)
» Администрация XGM / Исчезла возможность редактирования некоторых страниц блога
» WarCraft 3 / [Lua] Универсальный каст
Ред. MpW
» WarCraft 3 / UnitAddSleepPerm
есть еще функция UnitAddSleepPerm - аналогично, только вроде днем еще спят так?