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

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

Ответ
 
RSQR

offline
Опыт: 29,316
Активность:
Получение урона сзади(хз как обозвать)
Народ. Научите наконец, Как расчитать чтоб Если юнит получает урон сзади то он получает х2 урон?(как ето полярные координаты называются или что?)
Старый 17.01.2011, 07:04
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Rescuer, динамически узнаешь кто наносит урон юнит, смотришь его положение по отношению к атакованному юниту и если получается, что он стоит сзади - наноси 2х урон.
Старый 17.01.2011, 07:09
RSQR

offline
Опыт: 29,316
Активность:
Vampirrr, эм.
если получается, что он стоит сзади - наноси 2х урон.
Отсюдова поподробней можно?
Старый 17.01.2011, 07:25
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Rescuer, ну в теории, если у тебя нет юнитов бьющих задом, то достаточно будет сверить facing angle атакующего и атакуемого юнита. Если они более-менее совпадают (скажем +/- 50 градусов), то все офигенно.
Vampirrr добавил:
а доп. урон можно будет нанести триггерно от лица атакующего..
Старый 17.01.2011, 07:29
RSQR

offline
Опыт: 29,316
Активность:
Vampirrr, К, попробую. Не получится отпишусь ещё
Старый 17.01.2011, 07:55
granderpro

offline
Опыт: 12,165
Активность:
Rescuer, если что , то вот - xgm.ru/forum/showthread.php?t=16332
granderpro добавил:
там и на гуи есть
Старый 17.01.2011, 07:57
DioD

offline
Опыт: 45,134
Активность:
стреляющий юнит может повернуться после выстрела и такая проверка пойдёт боком.
Старый 17.01.2011, 08:01
RyoTsubaki
Отпустит - убегу :3
offline
Опыт: 3,686
Активность:
Это называется backstab и это Рикимару из опендоты.
Старый 17.01.2011, 08:04
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
скоре надо смотреть бристбека и доты там как раз получение урона в спину отслеживается
Старый 17.01.2011, 08:08
Extremator

offline
Опыт: 39,512
Активность:
более точным было бы приравнивать два направления:
  1. направление от героя до жерты
  2. направление поворота жертвы
Вопрос: как именно приравникать? (точнее что к чему и с каким значением в модуле)
Extremator добавил:
RyoTsubaki, Рики может быть лицом в спину и спиной в лицо... это как бы не логично...
16GB, отслеживать урона если угол совпадает...
Vampirrr, что бы нанести 2x урона в спину надо просто нанести этот же урон второй раз если удар совершён со спины...
Extremator добавил:
granderpro, тьфу... это гуи поймёт только тот кто знает джасс
Старый 17.01.2011, 12:24
Extremator

offline
Опыт: 39,512
Активность:
Vampirrr, я прочто жду пока кто нить покажет как ститать градусы хддд
просто у меня угол имеет градус -112 с доспустимыми рамками в 0-360
ну или жертва отворачивается на 400-900 градусов и я тупо не погу прощупать спину хдддд
Старый 17.01.2011, 13:28
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
вот из опен доты от бриста проверка урона в спину
function AngleFromUnits takes unit paa,unit pbb returns real
	return bj_RADTODEG*Atan2(GetUnitY(pbb)-GetUnitY(paa),GetUnitX(pbb)-GetUnitX(paa))
endfunction
function Bristleback_Main takes nothing returns nothing
	local unit lnk=GetTriggerUnit()
	local unit lKg=GetEventDamageSource()
	local real lnK=AngleFromUnits(lKg,lnk)
	local real lnl=GetUnitFacing(lnk)
	local real lnL
	local real lf7=GetEventDamage()
	local real lnm
	local real lnM
	if(lf7>10)then
		if((lnl-lnK)<(-180.))then
			set lnL=(lnl-lnK+360)
		else
			if((lnl-lnK)>180.)then
				set lnL=(lnl-lnK-360)
			else
				set lnL=(lnl-lnK)
			endif
		endif
		set lnM=RAbsBJ(lnL)
		if lnM<=70 then
			set lnm=GetUnitAbilityLevel(lnk,'A0M3')*.1*lf7
			call Bristleback_DamageGet(lnk,lf7-lnm)
			call SetUnitState(lnk,UNIT_STATE_LIFE,GetUnitState(lnk,UNIT_STATE_LIFE)+lnm)
		elseif lnM<='s' then
			set lnm=GetUnitAbilityLevel(lnk,'A0M3')*.05*lf7
			call SetUnitState(lnk,UNIT_STATE_LIFE,GetUnitState(lnk,UNIT_STATE_LIFE)+lnm)
		endif
	endif
endfunction

Отредактировано 16GB, 17.01.2011 в 14:20.
Старый 17.01.2011, 14:12
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Rescuer:
Народ. Научите наконец, Как расчитать чтоб Если юнит получает урон сзади то он получает х2 урон?(как ето полярные координаты называются или что?)
Дети этож просто! Берем, отслеживаем атакера, смотрим, если разница угла между атакером и жертвой и углом фейса жертвы меньше 90(т.е. он стоит сзади), то нанесём ещё урона
Обьясню на примере: Допустим вы стоите смотрите рекламный банер, а сзади вас едет автобус, отсюда вопрос, а как мы узнали что автобус сзади, а не спереди(Увидели в отражение не в счёт!!! =) )? А очень просто, ваше тело повёрнуто к баннеру, а так как угол между нормалью поворота вашего тела и положения автобуса больше 90 градусов, то мы и говорим, что автобус сзади! А проще говоря разница угла вашего зрения(тела) и углом между вами и автобусом больше 90 градусов!
Т.к. разница может быть меньше нуля, обязательно используйте модуль найденной разницы(функция RAbsBJ, на гуи - Математика - Abs), ах да чуть не забыл(Экстрематору сенкс, напомнил), угол между точками имеет рамки (-180; 180), отсюда следует сместить его на 180 градусов в право, проще говоря прибавить 180 градусов.
Честно говоря сейчас проверил, вродебы всё работает исправно, но когда фейс жертвы ближе к нулю, т.е. смотрит на север, кароче смотрит вправо, то позиция атакера не очень прямо определяется, примерно на 45 градусов правее взгляда жертвы позиция атакера определяется, как сзади жертвы.
Если я криво объяснил, вот код, который сложно не понять!

  if (RAbsBJ(AngleBetweenPoints(PosAttackerX, PosAttacker2Y, PosAttackedX, PosAttackedY) + 180 - AttackedFaceAngle) > 90) then
    // Атакер стоит сзади!
  else
    // Атакер стоит спереди
  endif

// Где PosAttackerX, PosAttackerY - координаты атакера
//       PosAttackedX, PosAttackedY - координаты атакуемого
//       AttackedFaceAngle - угол поворота жертвы
Разбираться что к чему и почему, сейчас впадлу!
Я расказал и показал принцип, а остальное сами докурите
Extremator, угол между точками имеет рамки (-180; 180)
Чисто для справки
Icy добавил:
О, 16GB, крутяк!
Афтар, вот тебе и принцип правильного определения позиции
		if((lnl-lnK)<(-180.))then
			set lnL=(lnl-lnK+360)
		else
			if((lnl-lnK)>180.)then
				set lnL=(lnl-lnK-360)
			else
				set lnL=(lnl-lnK)
			endif
		endif
Старый 17.01.2011, 14:22
Пикс

offline
Опыт: 2,405
Активность:
Extremator, 1)если угол между жертва и атакующий >=0 то условие:
-2)если модуль((угол между жертва и атакующий)-(угол поворота жертва))>=90
3)если угол между жертва и атакующий <0 то условие:
-4)если модуль((угол между жертва и атакующий)+360)-(угол поворота жертва))>=90
Итак общее условие (через И, ИЛИ):
ЕСЛИ (1 И 2) ИЛИ (3 И 4) ТО делать действия
Старый 17.01.2011, 14:25
Extremator

offline
Опыт: 39,512
Активность:
Icy:
угол между точками имеет рамки (-180; 180)
у меня выпадает больше 180
проверял выводя на экран angle unit'а
если юнит A в точке X (0000;0000) повёрнут на 45 грудусов, а юнит B в точек Y (0100;0100) повёрнут на 45 градусов, то во время вычисления вектора XY его градус не равен 45,а когда 135, когда 120, когда -30. и при этом юниты не двигаются...
Старый 17.01.2011, 14:57
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Extremator, не знаю не знаю, у меня фикс в этих рамках, позырь мб где накосячил...
Старый 17.01.2011, 15:02
Extremator

offline
Опыт: 39,512
Активность:
какого фига градус вектора считается через (-180 ; 180) а градую юнита через (0 ; 360) ???
Extremator добавил:
Icy:
у меня фикс в этих рамках
ты сначало рамки покажи что ли))))
Старый 17.01.2011, 15:08
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Extremator:
какого фига градус вектора считается через (-180 ; 180) а градую юнита через (0 ; 360) ???
Extremator, вот такая жестокая жызнь! =)
Extremator:
ты сначало рамки покажи что ли))))
На вот тебе (_)(_) =) Показал =)))
Ну а если серьёзно то я тебя не понимаю =)
Старый 17.01.2011, 15:13
Extremator

offline
Опыт: 39,512
Активность:
Icy, если брать за градусы повороты самих юнитов, то нужно просто проверять на разницу в направлениях... и всё...
А иное исчисление векторов совсем убивает...
Старый 17.01.2011, 15:19
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Extremator, нене, тут ты нипапал!
Получается тогда юнит огребёт лопатой только когда атакер стоит на ровно противоположном угле, углу фейса жертвы
Старый 17.01.2011, 15:35
Ответ

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

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

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

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



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