Сейчас 00:03:31 Среда, 18 мая, 2022 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Cистема атаки с разных сторон
Cистема атаки с разных сторон
pirat9629Дата: Понедельник, 08 Ноября 2010, 16:04:06 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
черный квадрат-юнит, как отследить с какой стороны его атакуют ?

юнит может поворачоватса такшто угол между точками непомагает
вот делал с углом с поворотом юнита чот ничо некатит мож у вас идейки будут




сделаю минекрафт сервер на заказ. платно
 

[san9]Дата: Понедельник, 08 Ноября 2010, 16:10:08 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
pirat9629,
Тебе надо отслеживать все стороны,или только одну?


 

pirat9629Дата: Понедельник, 08 Ноября 2010, 16:12:42 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
все ето ка бы каждий удар БЕКСТАБ только в определеные стороны и мне нужно знать в какую сторону атакуют



сделаю минекрафт сервер на заказ. платно
 

-Castro-Дата: Понедельник, 08 Ноября 2010, 16:13:49 | Сообщение # 4
УГ продюсер
Группа: Ветераны
Сообщений: 2099
Награды: 3
Репутация: 1213
Блокировки:
pirat9629, сравнивай углы обзора атакующего и атакуемого юнитов
 

pirat9629Дата: Понедельник, 08 Ноября 2010, 16:16:28 | Сообщение # 5
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
-Castro-, фигово работает иногда бю с зади пишет что слева...и тд...мне нужно чтоб хотяб 80-90% правильно, а там 10-20% мне б на jass наверно надо



сделаю минекрафт сервер на заказ. платно
 

-Castro-Дата: Понедельник, 08 Ноября 2010, 16:23:59 | Сообщение # 6
УГ продюсер
Группа: Ветераны
Сообщений: 2099
Награды: 3
Репутация: 1213
Блокировки:
pirat9629, мю не очень правильно проверяешь.

Вот еще вариант - берем точку с полярным смешением, к примеру на расстояние 200, по отношению к взгляду юнита и проверяем в круге радиусом 100 есть ли там атакующий юнит.
затем проверяем относительно обзор юнита + 90
затем +180...
+270...

 

pirat9629Дата: Понедельник, 08 Ноября 2010, 16:26:47 | Сообщение # 7
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
-Castro-, хмм непонял, но попробую чото такое



сделаю минекрафт сервер на заказ. платно
 

-Castro-Дата: Понедельник, 08 Ноября 2010, 16:30:48 | Сообщение # 8
УГ продюсер
Группа: Ветераны
Сообщений: 2099
Награды: 3
Репутация: 1213
Блокировки:
Quote (pirat9629)
-Castro-, хмм непонял, но попробую чото такое

создаем круг с севера, юга, запада и востока относительно юнита и проверяем есть ли в этом круге атакующий, хз получится ли
 

KartohaДата: Понедельник, 08 Ноября 2010, 17:18:37 | Сообщение # 9
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
pirat9629, сейчас упорно работаю над атакой в бока, но пока получилось отследить только в лицо и в спину, и только на JASS`е. Скачать.
Уточненный вариант в лицо и спину.
Отследить бока пока не получается(.


Сообщение отредактировал Kartoha - Понедельник, 08 Ноября 2010, 17:20:39
 

pirat9629Дата: Понедельник, 08 Ноября 2010, 17:34:47 | Сообщение # 10
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
Kartoha, благодарю и на том



сделаю минекрафт сервер на заказ. платно
 

DarkVaderДата: Вторник, 09 Ноября 2010, 06:18:02 | Сообщение # 11
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
Quote (pirat9629)
-Castro-, фигово работает иногда бю с зади пишет что слева...и тд...мне нужно чтоб хотяб 80-90% правильно, а там 10-20% мне б на jass наверно надо

вот моя версия движка подобного спела

Quote (-Castro-)
сравнивай углы обзора атакующего и атакуемого юнитов

-Castro-, вот это самая лучшая идея.

вообщем предлагаю вот такую функцию

сделана она по такой модели

заменить углы на другие не составляет труда

функция работает по принципу сравнения разности углов поворота юнитов атакуемого и атакующего
если удар идет в спину функция возвращает целочисленную 1, если в бок то 2 и если в лицо то 3

Code

function BackStab takes unit caster , unit target returns integer
local real angle = GetUnitFacing( target ) - GetUnitFacing( caster )
if( angle > -60 and angle < 0) then
    return 1
elseif ( angle > 0 and angle < 60 ) then
    return 1
elseif ( angle > 300 and angle < 360) then
    return 1
elseif ( angle > -360 and angle < -300) then
    return 1     
elseif ( angle > 60 and angle < 120 ) then
    return 2
elseif ( angle > -120 and angle < -60 ) then
    return 2
elseif ( angle > 240 and angle < 300 ) then
    return 2
elseif ( angle > -300 and angle < -240 ) then
    return 2
elseif ( angle > -240 and angle < - 120 ) then
    return 3
elseif ( angle > 120 and angle < 240 ) then
    return 3
endif
endfunction

вот маленький пример. BackStab
в примере каждую секунду показывается в какую часть будет нанесен удар, можно покрутиться вокруг и побить ( бить паладином !)=)))
по проведенным мной тестам ошибок не выявил все работает отлично в 100% случаев

Добавлено (09-11-2010, 06:18)
---------------------------------------------
Kartoha, а зачем в своем примере ты обнуляешь две переменные реала? ведь на сколько я знаю обнулять необходимо лишь переменные типа Handle.
да и по сути 0 такое же реальное число как 556, 0.325 или 6.3 таким образов данную переменную обнулить невозможно

Прикрепления: 8216517.jpg(30.9 Kb)


Сообщение отредактировал DarkVader - Вторник, 09 Ноября 2010, 06:06:42
 

-Castro-Дата: Вторник, 09 Ноября 2010, 10:16:04 | Сообщение # 12
УГ продюсер
Группа: Ветераны
Сообщений: 2099
Награды: 3
Репутация: 1213
Блокировки:
DarkVader, хорошо работает вроде
 

pirat9629Дата: Вторник, 09 Ноября 2010, 10:41:23 | Сообщение # 13
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
только "бок " а право лево?



сделаю минекрафт сервер на заказ. платно
 

BUUNIДата: Вторник, 09 Ноября 2010, 11:47:41 | Сообщение # 14
7 уровень
Группа: Проверенные
Сообщений: 347
Награды: 1
Репутация: 53
Блокировки:
pirat9629, а чем тебе правый бок не право? Тем более если ты смотришь на юнита как в зеркальном отражении.

 

DarkVaderДата: Вторник, 09 Ноября 2010, 16:10:09 | Сообщение # 15
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
Quote (BUUNI)
только "бок " а право лево?

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

 

pirat9629Дата: Вторник, 09 Ноября 2010, 21:21:32 | Сообщение # 16
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
Code
function BackStab takes unit caster , unit target returns integer
local real angle = GetUnitFacing( target ) - GetUnitFacing( caster )
// следующие условия определяют удар со спины
if( angle > -60 and angle < 0) then
  return 1
elseif ( angle > 0 and angle < 60 ) then
  return 1
elseif ( angle > 300 and angle < 360) then
  return 1
elseif ( angle > -360 and angle < -300) then
  return 1   
// следующие условия определяют удар в бок
elseif ( angle > 60 and angle < 120 ) then
  return 2
elseif ( angle > -120 and angle < -60 ) then
  return 2

elseif ( angle > 240 and angle < 300 ) then
  return 4
elseif ( angle > -300 and angle < -240 ) then
  return 4
// следующие условия определяют удар в лицо
elseif ( angle > -240 and angle < - 120 ) then
  return 3
elseif ( angle > 120 and angle < 240 ) then
  return 3
endif
endfunction

function Trig_AngleAttack_Actions takes nothing returns nothing
  if ( BackStab( udg_Caster, udg_Target) == 1 ) then
   call DisplayTextToForce( GetPlayersAll(), "спина" )
  elseif ( BackStab( udg_Caster, udg_Target) == 2 ) then
    call DisplayTextToForce( GetPlayersAll(), "право" )
  elseif ( BackStab( udg_Caster, udg_Target) == 3 ) then
    call DisplayTextToForce( GetPlayersAll(), "лицо" )
  elseif ( BackStab( udg_Caster, udg_Target) == 4 ) then
    call DisplayTextToForce( GetPlayersAll(), "лево" )
  endif
endfunction

//===========================================================================
function InitTrig_AngleAttack takes nothing returns nothing
     set gg_trg_AngleAttack = CreateTrigger(  )
     call TriggerRegisterUnitEvent( gg_trg_AngleAttack, gg_unit_Hpal_0002, EVENT_UNIT_ATTACKED )
     call TriggerAddAction( gg_trg_AngleAttack, function Trig_AngleAttack_Actions )
endfunction

хмм я чтотл неправильно делаю что показует токо "справа" сама карта




сделаю минекрафт сервер на заказ. платно
 

DarkVaderДата: Вторник, 09 Ноября 2010, 23:04:48 | Сообщение # 17
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
Quote (pirat9629)
хмм я чтотл неправильно делаю что показует токо "справа" сама карта

эм, даже не знаю что сказать, все правильно, карту скачал, зашел все нормально показывает=) и право и лево

 

[san9]Дата: Вторник, 09 Ноября 2010, 23:25:24 | Сообщение # 18
10 уровень
Группа: Проверенные
Сообщений: 1500
Награды: 1
Репутация: 286
Блокировки:
DarkVader,
Скачал. У меня не пашет. Атакую с ло спины,пишет лицо. С стороны лица право)) И каждый раз по разному.


 

DarkVaderДата: Среда, 10 Ноября 2010, 01:21:47 | Сообщение # 19
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
[san9], а ты какую карту качал? в моем посте или последнюю? собственно не знаю в обоих вариантах работает хорошо, и такого сильного бага быть не может, я эту функцию уже использовал ранее только в сокращенном варианте ( учитывался только удар со спины ) работало отлично и тестилось многократно.

Добавлено (10-11-2010, 01:09)
---------------------------------------------
Так во первых смотрите в триггер инициализации который задет переменные. Далее смотрите в триг проверки каким образом там расставлены эти переменные, и событие юнит атакован не подходит, нужно юнит получает урон ( это событие срабатывает при каждом ударе ). Далее нашел ошибку, при определенном повороте юнита цели, левая сторона почему то определяется как правая. Ща попробую исправить.

Добавлено (10-11-2010, 01:09)
---------------------------------------------
а в остальном никаких ошибок нет все работает хорошо.

Добавлено (10-11-2010, 01:12)
---------------------------------------------
да и еще можно вопрос pirat9629, почему так принципиально определять право или лево?=)

Добавлено (10-11-2010, 01:21)
---------------------------------------------
нашел причину=) при определенном повороте юнита цели диапазоны право и лево сливаются. ща буду думать как исправить.

 

KartohaДата: Среда, 10 Ноября 2010, 13:55:40 | Сообщение # 20
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
Quote (DarkVader)
Kartoha, а зачем в своем примере ты обнуляешь две переменные реала? ведь на сколько я знаю обнулять необходимо лишь переменные типа Handle.
да и по сути 0 такое же реальное число как 556, 0.325 или 6.3 таким образов данную переменную обнулить невозможно

Что займет больше ячеик памяти, число 0 или число 556? 0 - 1 знак, 556 - 3 знака. Да и потом я учился джазу по статье Сергея (с близзпланет, если вы его знаете) в своих примерах он обнуляет и реальные тоже.
 

pirat9629Дата: Среда, 10 Ноября 2010, 15:15:57 | Сообщение # 21
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
DarkVader, почему так нужно право и лево?) извини покашто немогу сказать ето для проекта, для одной системы)



сделаю минекрафт сервер на заказ. платно
 

DarkVaderДата: Среда, 10 Ноября 2010, 15:24:34 | Сообщение # 22
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
Quote (Kartoha)
Что займет больше ячеик памяти, число 0 или число 556?

Но если только по этому, тогда согласен=)

Quote (pirat9629)
DarkVader, почему так нужно право и лево?) извини покашто немогу сказать ето для проекта, для одной системы)

=))) ну ок, есть идейка как исправить баг, вчера не успел, сегодня постараюсь доделать.

Добавлено (10-11-2010, 15:21)
---------------------------------------------

Quote (DarkVader)
Да и потом я учился джазу по статье Сергея (с близзпланет, если вы его знаете)

кстати не знаю такого=) если можно дай пожалуйста ссылку на его статьи=)

Добавлено (10-11-2010, 15:24)
---------------------------------------------
и еще pirat9629, тебя углы такие устраивают или другие нужны?

 

pirat9629Дата: Среда, 10 Ноября 2010, 15:40:39 | Сообщение # 23
7 уровень
Группа: Проверенные
Сообщений: 422
Награды: 0
Репутация: 102
Блокировки:
ну мне хотелось типо по 90 если нетижило то можеш зделать



сделаю минекрафт сервер на заказ. платно
 

KartohaДата: Среда, 10 Ноября 2010, 16:10:04 | Сообщение # 24
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
DarkVader, вот его статья.
 

DarkVaderДата: Четверг, 11 Ноября 2010, 03:16:43 | Сообщение # 25
7 уровень
Группа: Проверенные
Сообщений: 357
Награды: 0
Репутация: 95
Блокировки:
Kartoha, спасибо за ссылочку=)))

Quote (pirat9629)
ну мне хотелось типо по 90 если нетижило то можеш зделать

хорошо сделаю 90, совпадение углов для права и лева привели меня в тупик как расставить условия что бы разделить их, но в этом тупике мне пришла идея которая позволит этого избежать, но прейдется немного уйти от первоначальной задумки=))) ща буду проверять свою гипотезу, если получится будет работать с точностью 99% где то=)

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Cистема атаки с разных сторон
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2022 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz