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

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

Ответ
 
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Как наносить урон за 1 пройденную клетку?
я Делал так
Код:
local location pt=LoadLocationHandle(Hash,i,2) 
local location pt2=GetUnitLoc(t) 
local real dx = GetLocationX(pt) - GetLocationX(pt2) 
local real dy = GetLocationY(pt) - GetLocationY(pt2)  
if GetUnitAbilityLevel(t, 'BEsh')>0then  
call UnitDamageTarget(u,t,SquareRoot(dx * dx + dy * dy)*0.25,true,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) 
...


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

и урон огромен

pt=позиция юнита во время каста
Старый 03.01.2011, 19:49
Doc

offline
Опыт: 63,163
Активность:
Dreii, дак цензура ты сохраняй не позицию юнита а текущую позицию.
local location pt=LoadLocationHandle(Hash,i,2) 
local location pt2=GetUnitLoc(t) 
local real dx = GetLocationX(pt) - GetLocationX(pt2) 
local real dy = GetLocationY(pt) - GetLocationY(pt2)  
if GetUnitAbilityLevel(t, 'BEsh')>0then  
call UnitDamageTarget(u,t,SquareRoot(dx * dx + dy * dy)*0.25,true,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) 
call SaveLocationHandle(Hash,i,2, pt2)
...
[+] 1 пункт от ScorpioT1000: 1.1 (ненормативная лексика)

Отредактировано ScorpioT1000, 04.01.2011 в 02:57.
Старый 03.01.2011, 20:08
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Doc, ааа все понял спс
Старый 03.01.2011, 20:10
Doc

offline
Опыт: 63,163
Активность:
А вообще это делается совсем не так -_-
float ox = LoadReal(Hash, hid, 0)
float oy = LoadReal(Hash, hid, 1)
if GetUnitX(u) != ox || GetUnitY(u) != oy{
	damage(...)
}
SaveReal(Hash, hid, GetUnitX(u))
SaveReal(Hash, hid, GetUnitY(u))
А еще лучше приказом я думаю.
Старый 03.01.2011, 20:10
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Doc, я не знаю cJass, я даже Jass не знаю ^^
Появилась проблема
как только юнит сделает первый шаг то ему нанесться 600 урона почемуто но потом по 150 стабильно
Старый 03.01.2011, 20:15
Doc

offline
Опыт: 63,163
Активность:
Dreii, ну так это я просто чтобы показать, что делается это простым сравнением координат. Вероятно потому, что ты не сохраняешь изначальные данные и он берет расстояние от центра карты (0;0).
Старый 03.01.2011, 20:18
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от Doc
изначальные данные

Это какие?Позиция во время каста?

Dreii добавил:
Doc, попробывал сравнением координат
Код:
local real x=LoadReal(Hash,i,2)
local real y=LoadReal(Hash,i,3)
if GetUnitAbilityLevel(t, 'BEsh')>0 and GetUnitX(t)!=x and GetUnitY(t)!=y then 
call UnitDamageTarget(u,t,SquareRoot(x * x + y * y),true,false,ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
call SaveReal(Hash,i,2,GetUnitX(t))
call SaveReal(Hash,i,3,GetUnitY(t))

Так он дмг вообще не нанносит ^^
Старый 03.01.2011, 20:22
Banzay89

offline
Опыт: 11,155
Активность:
Dreii, каждый раз после того, как юнит пройдет нужное расстояние наноси урон, заноси в переменную его нинешнее положение и опять делай проверку не прошел ли юнит нужную дистанцию =О
Старый 03.01.2011, 20:31
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Цитата:
Сообщение от Banzay89
нужную дистанцию

А я не знаю нужную дистанцию ^^
Старый 03.01.2011, 20:35
Doc

offline
Опыт: 63,163
Активность:
if GetUnitAbilityLevel(t, 'BEsh')>0 and GetUnitX(t)!=x and GetUnitY(t)!=y then 
if GetUnitAbilityLevel(t, 'BEsh')>0 and (GetUnitX(t)!=x or GetUnitY(t)!=y) then 
call SaveReal(Hash,i,2,GetUnitX(t))
call SaveReal(Hash,i,3,GetUnitY(t))
Под endif ятп.
Это какие?Позиция во время каста?
да.
Старый 03.01.2011, 21:12
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Dreii, можна модуляцией проверять, но тож без хеша не обойтись
Наносит 100 урона при переходе из одной клетки в другую

function TimerFunc takes nothing returns nothing
//...
  // Получаем позицию юнита
  local real x = GetUnitX(u)
  local real y = GetUnitY(u)
  // Вычитаем из координат остаток от деления на ширину клетки
  local real bufx = x - ModuloReal(x, 128.)
  local real bufy = y - ModuloReal(y, 128.)

  // Проверяем наши значения хеша, если наш юнит перешёл в другую клетку, то наносим урон
  if (LoadReal(hash, id, 1) != bufx) or (LoadReal(hash, id, 2) != bufy) then
    call UnitDamageTarget(u, t, 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    // Сохраняем координаты текущей клетки
    call SaveReal(hash, id, 1, bufx)
    call SaveReal(hash, id, 2, bufy)
  endif

//...
endfunction

function Init takes nothing returns nothing
//...
  // Инициализируем наши значения
  call SaveReal(hash, id, 1, 0)
  call SaveReal(hash, id, 2, 0)
//...
endfunction
Вот пример:
Прикрепленные файлы
Тип файла: w3x Mirana.w3x (20.5 Кбайт, 9 просмотров )
Старый 03.01.2011, 21:21
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Icy, немогу отрыть ошибка триггера
Старый 03.01.2011, 21:42
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Dreii, у тя паходу ЖНЖП нету
Ща кину для обычного редактора
Icy добавил:
Вот кароч:
Прикрепленные файлы
Тип файла: w3x Mirana.w3x (19.0 Кбайт, 8 просмотров )
Старый 03.01.2011, 22:10
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
Icy, есь JNGP....
Старый 03.01.2011, 23:23
Icy
Это Я!
offline
Опыт: 1,785
Активность:
Dreii, щас то работает?
Старый 04.01.2011, 00:32
Ответ

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

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

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

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



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