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

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

Ответ
 
Tobi123

offline
Опыт: 7,826
Активность:
Temp Lightning System

Описание системы

Удобная система молний, написанная на языке jass, которую легко импортировать и использовать, система используется для создания временных молний.
Плюсы:
  • MUI - так как используются только локальные переменные, каждая функция может работать независимо
  • Могут использоваться любые виды молний
  • Разнообразие функций - хотите связать 2 точки молнией, которая исчезнет через n секунд? Пожалуйста. Хотите чтоб молния связала юнитов? Пожалуйста. Хотите чтоб молния вылетала из одного юнита, и исчезала когда долетает до другого? Пожалуйста.
  • Легко импортировать - копируется только код, никаких глобальных переменных, никаких лишних триггеров.
  • Легко использовать - вставить одну функцию в ваш код, остальное система сделает сама.
От вас требуется:
  • Инициализированная хэш-таблица (в коде используется название udg_Hash)
  • Умение использовать Custom Script
Сам код
» code
function TimerLightning takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer hid = GetHandleId(t)
local lightning l = LoadLightningHandle(udg_Hash, hid, 0)
call DestroyLightning(l)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, hid)
set t = null
set l = null
endfunction
function TimerLightningMoveUnit takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer hid = GetHandleId(t)
local lightning l = LoadLightningHandle(udg_Hash, hid, 0)
local unit u1 = LoadUnitHandle(udg_Hash, hid, 1)
local unit u2 = LoadUnitHandle(udg_Hash, hid, 2)
local real time = LoadReal(udg_Hash, hid, 3)
local real timen = LoadReal(udg_Hash, hid, 4)
local boolean check = LoadBoolean(udg_Hash, hid, 5)
if timen>=time then
call DestroyLightning(l)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, hid)
else
call MoveLightning(l, check, GetUnitX(u1), GetUnitY(u1), GetUnitX(u2), GetUnitY(u2))
call SaveReal(udg_Hash, hid, 4, timen+0.02)
endif
set t = null
set l = null
set u1 = null
set u2 = null
endfunction
function TimerLightningMoveTo takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer hid = GetHandleId(t)
local lightning l = LoadLightningHandle(udg_Hash, hid, 0)
local unit u1 = LoadUnitHandle(udg_Hash, hid, 1)
local unit u2 = LoadUnitHandle(udg_Hash, hid, 2)
local real r = LoadReal(udg_Hash, hid, 3)
local real r1 = LoadReal(udg_Hash, hid, 4)
local real ang = Atan2(GetUnitY(u2)-GetUnitY(u1), GetUnitX(u2)-GetUnitX(u1))
local real x = GetUnitX(u1)+r*Cos(ang)
local real y = GetUnitY(u1)+r*Sin(ang)
local real sq = SquareRoot((x-GetUnitX(u2))*(x-GetUnitX(u2))+(y-GetUnitY(u2))*(y-GetUnitY(u2)))
local boolean check = LoadBoolean(udg_Hash, hid, 5)
if sq<50. then
call DestroyLightning(l)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash, hid)
else
call MoveLightning(l, check, GetUnitX(u1), GetUnitY(u1), x, y)
call SaveReal(udg_Hash, hid, 3, r+r1)
endif
set t = null
set l = null
set u1 = null
set u2 = null
endfunction
function LightningUU takes string m, boolean check, unit u1, unit u2, real time returns nothing
local lightning l = AddLightning(m, check, GetUnitX(u1), GetUnitY(u1), GetUnitX(u2), GetUnitY(u2))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningPP takes string m, boolean check, location l1, location l2, real time returns nothing
local lightning l = AddLightning(m, check, GetLocationX(l1), GetLocationY(l1), GetLocationX(l2), GetLocationY(l2))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningCoord takes string m, boolean check, real x1, real y1, real x2, real y2, real time returns nothing
local lightning l = AddLightning(m, check, x1, y1, x1, y2)
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningExUU takes string m, boolean check, unit u1, unit u2, real time returns nothing
local lightning l = AddLightningEx(m, check, GetUnitX(u1), GetUnitY(u1), GetUnitFlyHeight(u1), GetUnitX(u2), GetUnitY(u2), GetUnitFlyHeight(u2))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningExUUZ takes string m, boolean check, unit u1, real z1, unit u2, real z2, real time returns nothing
local lightning l = AddLightningEx(m, check, GetUnitX(u1), GetUnitY(u1), z1, GetUnitX(u2), GetUnitY(u2), z2)
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningExPP takes string m, boolean check, location l1, location l2, real time returns nothing
local lightning l = AddLightningEx(m, check, GetLocationX(l1), GetLocationY(l1), GetLocationZ(l1), GetLocationX(l2), GetLocationY(l2), GetLocationZ(l2))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningExCoord takes string m, boolean check, real x1, real y1, real z1, real x2, real y2, real z2, real time returns nothing
local lightning l = AddLightningEx(m, check, x1, y1, z1, x2, y2, z2)
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningDownU takes string m, boolean check, unit u, real time returns nothing
local lightning l = AddLightningEx(m, check, GetUnitX(u), GetUnitY(u), 1500., GetUnitX(u), GetUnitY(u), GetUnitFlyHeight(u))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningDownP takes string m, boolean check, location p, real time returns nothing
local lightning l = AddLightningEx(m, check, GetLocationX(p), GetLocationY(p), 1500., GetLocationX(p), GetLocationY(p), GetLocationZ(p))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningDownCoord takes string m, boolean check, real x, real y, real time returns nothing
local lightning l = AddLightningEx(m, check, x, y, 1500., x, y, 0.)
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call TimerStart(t, time, false, function TimerLightning)
set t = null
set l = null
endfunction
function LightningUnit takes string m, boolean check, unit u1, unit u2, real time returns nothing
local lightning l = AddLightning(m, check, GetUnitX(u1), GetUnitY(u1), GetUnitX(u2), GetUnitY(u2))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call SaveUnitHandle(udg_Hash, hid, 1, u1)
call SaveUnitHandle(udg_Hash, hid, 2, u2)
call SaveReal(udg_Hash, hid, 3, time)
call SaveReal(udg_Hash, hid, 4, 0.)
call SaveBoolean(udg_Hash, hid, 5, check)
call TimerStart(t, 0.02, true, function TimerLightningMoveUnit)
set t = null
set l = null
endfunction
function LightningMoveUU takes string m, boolean check, unit u1, unit u2, real r returns nothing
local real ang = Atan2(GetUnitY(u2)-GetUnitY(u1), GetUnitX(u2)-GetUnitX(u1))
local lightning l = AddLightning(m, check, GetUnitX(u1), GetUnitY(u1), GetUnitX(u1), GetUnitY(u1))
local timer t = CreateTimer()
local integer hid = GetHandleId(t)
call SaveLightningHandle(udg_Hash, hid, 0, l)
call SaveUnitHandle(udg_Hash, hid, 1, u1)
call SaveUnitHandle(udg_Hash, hid, 2, u2)
call SaveReal(udg_Hash, hid, 3, r)
call SaveReal(udg_Hash, hid, 4, r)
call SaveBoolean(udg_Hash, hid, 5, check)
call TimerStart(t, 0.02, true, function TimerLightningMoveTo)
set t = null
set l = null
endfunction

Список функций

LigtningUU - создает молнию между двумя юнитами на определенное время, берет равкод молнии, логическую(проверять видимость или нет), первого юнита, второго юнита, время существования молнии, не возвращает ничего.
Пример использования: call LightningUU("CLPB", true, GetTriggerUnit(), GetSpellTargetUnit(), 0.5) - это создаст молнию типа Цепь молнии, от юнита применяющего способность, к юниту - цели на полсекунды.
LightningPP - создает молнию между двумя точками на определенное время, берет равкод молнии, проверку видимости, первую точку, вторую точку, время существования молнии, не возвращает ничего.
LightningCoord - создает временную молнию в указанных координатах, берет равкод, проверку видимости, x1, y1, x2, y2, время молнии, не возвращает ничего.
LightningExUU - создает временную молнию между двумя юнитами, учитывая их высоту, берет равкод, проверку видимости, первого юнита, второго юнита, время молнии. Не возвращает ничего. Молния создается довольно неточно, потому что высота обычных пеших юнитов на самом деле не 0, а примерно 23, поэтому лучше использовать следующую функцию.
LightningExUUZ - создает временную молнию между юнитами, учитывая высоту, берет равкод, проверку видимости, первого юнита, высоту первого юнита, второго юнита, высоту второго юнита, время молнии.
LightningExPP - создает временную молнию между точками, учитывая высоту, берет равкод, проверку видимости, первую точку, вторую точку, время молнии.
LightningExCoord - создает временную молнию между координатами, учитывая высоту, берет равкод, проверку видимости, x1, y1, z1, x2, y2, z2, время молнии. returns nothing.
LightningDownU - создает временную молнию между точкой над юнитом на высоте 1500, и самим юнитом. Берет равкод, проверку видимости, юнита, время молнии. Не возвращает ничего.
LightningDownP - аналогична предыдущей функции, только работает на точки. Берет равкод, проверку видимости, точку, время молнии. Не возвращает ничего.
LightningDownCoord - аналогична предыдущей функции, только работает с координатами. Берет равкод, проверку видимости, x, y, время молнии. Не возвращает ничего.
LightningUnit - связывает 2х юнитов молнией. Берет равкод, проверку видимости, первого юнита, второго юнита, время молнии. Не возвращает ничего
LightningMoveUU - из одного юнита вылетает молния во второго, уничтожаясь, когда долетит. Берет равкод, проверку видимости, первого юнита, второго юнита, скорость полета молнии. Не возвращает ничего.}
Карта с демонстрацией системы ниже.
Спасибо за внимание.
Прикрепленные файлы
Тип файла: w3x LightningSystem.w3x (18.9 Кбайт, 8 просмотров )
Старый 08.04.2014, 16:12
MAMA_YA_DNO

offline
Опыт: 60
Активность:
Система говно и сделана за 15 минут
Такая система понадобиться разве что гуишникам, ибо нормальный джаззер делаёт всё внутри спела, на одном таймере. Тем более она на хэше, если бы на структурах, тогда бы ещё было юзабельно. И да отступы добавь.
Старый 08.04.2014, 16:19
ScorpioT1000
Работаем
offline
Опыт: отключен
зато ты сделал спрайтовые картинки между точками
Старый 08.04.2014, 16:23
Ответ

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

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

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

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



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