26

» WarCraft 3 / Поиск игроков

ИРИНА БОТ !!!
Я раньше залипал в доту-имбу, когда ещё гарена жива была (2011-2015 года). Собирали фуллы по 5х5 за пару минут, порой не успеваешь зайти они уже поехали.
Сейчас увидел её кто-то схостил на ирине, другая версия конечно, но схожая. Игра всего-то 2х2, я уж думал что всё, фигня это... но через пару дней я влился в костяк постоянных игроков (среди которых даже узбеки были) и их оказалось на много больше. Так что мыуже собирали 5х5 и катали нормально. Только осталось подгадать время, у меня так выходило с этими ребятами собираться с 16 до 20 часов по МСК, в остальное время - их поменьше, но они есть. В другие карты других игроков так же может быть довольно много, так что просто надо мониторить и не стесняться контактировать с адекватными игроками.
26

» WarCraft 3 / Способности и алгоритмы на заказ

Chongoyuto, если делать совсем топорно, то за основу можно взять дефолтный "веер клинков" Варденки, и в нём выставить базовый урон 20/40/60/80. Далее триггерно отлавливать момент каста, и выбирая всех вокруг наносить им дополнительный урон, который надо как-то посчитать...
Я бы сделал триггерный дебафф, который считал бц стаки на конкретном юните, а при попытке нанести ему урон - проверял бы наличие баффа. Если он есть, то +1 стак и урон от числа стаков. Если нету - то просто добавить бафф и первый стак + урон от этого стака (я не помню получает ли он урон первого стака в момент его получения, или же только после первого).
26

» WarCraft 3 / Способности и алгоритмы на заказ

Chongoyuto, ну здесь же всё подписано, и можно изменить.
Базовый урон, расчет мин/макс значений для пика Силы/Ловкости, отталкивание (хоть и мгновенное), время стана...
26

» WarCraft 3 / Способности и алгоритмы на заказ

но это не настоящий расчет адаптивного удара
Chongoyuto, ты уверен что оно тебе надо?
Вот тебе как из доты, только тут базовый урон сразу 20/40/60/80 и плюс ещё от 25% до 50/100/150/200% (от Ловкости). А оглушение от 0.25 до 0.75/1.5/2.25/3.0 секунды.
local unit CASTER = GetTriggerUnit()
local unit TARGET = GetSpellTargetUnit()
local integer LEVEL = GetUnitAbilityLevel(CASTER,'A0G6') // A0G6 - равкод от "Adaptive Strike"
local integer AGI = GetHeroAgi(CASTER,true)
local integer STR = GetHeroStr(CASTER,true)
local real AxS = I2R(AGI) / I2R(STR)
local real SxA = I2R(STR) / I2R(AGI)
local real AGI_BONUS = 0.25
local real DAMAGE_BASE = LEVEL * 20.
local real STUN = 0.25
local real PUSH = 100.
local real DAMAGE_TOTAL
local real ANGLE = Atan2(GetUnitY(TARGET)-GetUnitY(CASTER),GetUnitX(TARGET)-GetUnitX(CASTER))
local location POINT

if AxS > 1.5 then
	set AGI_BONUS = LEVEL * 0.5
elseif AxS >= 0.5 then
	set AGI_BONUS = AGI_BONUS + (AxS-0.5) * (0.5*LEVEL-0.25)
endif

if SxA > 1.5 then
	set STUN = LEVEL * 0.75
	set PUSH = 300.
elseif SxA >= 0.5 then
	set PUSH = PUSH + (SxA-0.5) * 200
	set STUN = STUN + (SxA-0.5) * (0.75*LEVEL-0.25)
endif

set DAMAGE_TOTAL = DAMAGE_BASE + AGI_BONUS * AGI

// толчок + ломает деревья
set POINT = Location(GetUnitX(TARGET)+PUSH*Cos(ANGLE),GetUnitY(TARGET)+PUSH*Sin(ANGLE))
call SetUnitPositionLoc(TARGET,POINT)
call DestroyTree(GetLocationX(POINT),GetLocationY(POINT),200.) // ломает деревья в радиусе 200
call RemoveLocation(POINT)

// наносит урон конкретного типа
call DealDamage(CASTER,TARGET,1,DAMAGE_TOTAL)

// даммикаст оглушения (ротация на 24 уровня от 0.25 до 4.00)
call DStun_cast(CASTER,TARGET,STUN)
26

» WarCraft 3 / Способности и алгоритмы на заказ

Хотел бы я тебе рассказать как автор этой карты считал урон и оглушение, но лучше туда вообще не смотреть... х)
Загруженные файлы
26

» WarCraft 3 / Анимация юнита при нажатии способности

Qulore:
как ульта сфа из доты
Изначально ульт СФа из доты базировался на 2м скилле Горного Короля (клэп), только урон на 0 выставлен и добавлено время подготовки. Сам по себе он обеспечивал только лишь кратковременно замедляющий дебафф (не знаю как там сейчас, не слежу). Раз от деформации рельефа избавились, то полагаю что можно использовать вместо него любой другой скилл, например Рёв (без наложения эффекта), а дебафф - накладывать вручную (не говоря уже об уроне от так же вручную создаваемых волн).
26

» WarCraft 3 / SLK оптимизация при помощи w3x2lni

IceFog, странная штука. У меня она так не делает.
У меня на карте стоят "рынки" у которых есть абилки Aneu,Apit,Avul (выбор, скупка, инвул).
Я кучу раз прогонял множества версий своей карты через Lni, и у меня ни разу не было такой проблемы.
А проблема только в иконке? или что-то не работает?
26

» WarCraft 3 / Как узнать есть ли цель способности за кастующим юнитом

Можно просто без цели каст сделать и анимацию легания, а цель выбирать рандомно и тех кто сзади имеется. Если никого нет - то никто и не отлетит.
26

» WarCraft 3 / Сбрасываются триггерные способности

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

» WarCraft 3 / Эффект снижения лечения

human1, можно, я же написал выше пример для GUI - просто юзаешь арифметику, и оно нормально считает результат и задаёт это значение. Для jass ограничение вроде в 10 символов, дальше то ли смысла нет писать, то ли оно просто не выводит результаты конда проверяешь, но считает правильно... Ну там посмотреть самому можно, если тебе прям нужно уточнить эту информацию.
26

» WarCraft 3 / Эффект снижения лечения

Makeba, смысл не в том что оно меньше (спойлер - оно не меньше), а в том что не нужно вручную забивать все знаки после точки, ибо 1/64 = 0.0158730158...
26

» WarCraft 3 / Эффект снижения лечения

human1:
как это возможно? В wc3 минимальное время - 0.01 сек.
Это минимальное которое можно в это окошко вписать, всего-то.
А так ты можешь указать и 0.01 * 0.01, и он тебе посчитает 0.0001
26

» WarCraft 3 / Эффект снижения лечения

OVOgenez:
Можно в тупую без особого напряга - каждые 1/32 сек проверять хп юнита
Ну я ж так делал у себя, только мне там было достаточно и 0.1 секунды
Это та самая абилка которая при понижении ХП возвращала 20/40/60% от потери, и при повышении - докидывала ещё 20/40/60% сверху.
26

» WarCraft 3 / Эффект снижения лечения

TeX13
это все полностью переделывать надо
Нужно сделать отдельную функцию для "лечения", и внедрить её везде.
Внутри этой функции будет идти проверка на бафф, либо вообще на ряд баффов и суммарное изменение эффективности лечения.
Потихоньку все те хилки, где у тебя стоит функция "становить ХП юнита как его ткущее ХП + число" будешь заменять на эту новую, которая внутри будет проверять/считать что нужно и регулировать отхил.
26

» WarCraft 3 / Как была сделана карта Dota LoD?

как там реализовано то, что герою дают на выбор способности, чтобы в дальнейшем эти способности можно улучшать через красный плюсик?
Так ты хотел?
Загруженные файлы
26

» WarCraft 3 / процентное увеличение маг урона как сделать?

Вполне можно юзать абилку Благославение Элуны
При её правильной настройке она просто множит урон на некое значение.
В стандарте число менее 1.00 будет уменьшать урон, а более - увеличивать.
Я у себя её юзаю на 6-ти секундном баффе, который уменьшает входящий маг.урон на 15/30/45/60% (это 0.85/0.70/0.55/0.40 от урона).
Еще есть другой дебафф, который временно повышает входящий маг.урон по указанному врагу на 20/25/30% (это 1.20/1.25/1.30 от урона).
26

» WarCraft 3 / Конкатенация переменной и строки vjass, для получения нового имени переменной

Можно параллельным массивам задать строчные имена как значения, и уже по ним будешь получать прочие нужные данные. Или не вариант?
26

» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.

konvan5:
Идеальные универсальные решения мало кому нужны на практике
vJass пытался быть универсальным... и где он теперь?)
26

» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.

Zeix, все остальные области я бы просто добавил в exitwhen через and )) ну ладно, я думал про новичков тут уже давно не думают...
26

» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.

rsfghd, для решения своего вопроса можешь создать отдельный топик и указать там все исходные.
26

» WarCraft 3 / Спавн в зоне, исключая внутреннюю зону.

rsfghd, можно просто рандомить координаты и при этом, если X выпадает в ненужный промежуток - рандомить Y немного иначе, вот и всё.

Такой вариант, с примером:
Допустим область B имеет размер 6000x6000, а область C в её центре имеет размер 2000x2000. Ищем случайный X для B - это случайное число от 0 до 6000, т.е. мин/макс. координата X для B.
Если случайно полученная координата X выпадает на область C (т.е. между 2000 и 4000), то нужно указать для следующих расчётов что мы будем мнимо сдвигать диапазон в меньшую сторону, поэтому запишем set Y0 = 2000 (иначе оно должно быть равно 0, т.к. проще всегда считать его, но с разным результатом).
Теперь мы ищем координату Y, которая будет равна случайному числу от 0 до 6000 - Y0, т.е. для случаев когда нет наложения - это от 0 до 6000, а когда есть наложение - от 0 до 4000.
Далее, если наше случайно найденное значение для Y удовлетворяет условие Y > 2000 то можно докинуть к нему Y0 (т.е. обратно увеличить на мнимый сдвиг set Y = Y + Y0), который будет равен 0 или 2000 (в случае если диапазон был уменьшен).
На выходе мы получим Y от 0 до 6000 при Y0 = 0 без сдвига.
А со сдвигом - от 0 до 4000 при Y0 = 2000, что даст нам от 0 до 2000 если Y меньше 2000, или от 2000+2000 до 4000+2000 со сдвигом (т.е. от 4000 до 6000).
примерно такой набросочек, может что запамятовал...
	rect B = ... // зона спавна
	rect C = ... // чистая зона
	
	local real xC_min = GetRectMinX(C)
	local real xC_max = GetRectMaxX(C)
	local real xR = GetRandomReal(GetRectMinX(B),GetRectMaxX(B))
	local real yR 
	local real y0 = 0.
	
	if xR > xC_min and xR < xC_max then
		set y0 = xC_max - xC_min
	endif
	
	set yR = GetRandomReal(GetRectMinY(B),GetRectMaxY(B)-y0)
	
	if yR < GetRectMinX then
		set yR = yR + y0
	endif