Temp Lightning System

Добавлен , не публикуется
Алгоритмы, Наработки и Способности
Способ реализации:
Jass

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

Удобная система молний, написанная на языке 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 - из одного юнита вылетает молния во второго, уничтожаясь, когда долетит. Берет равкод, проверку видимости, первого юнита, второго юнита, скорость полета молнии. Не возвращает ничего.}
Карта с демонстрацией системы - xgm.guru/files/100/120440/LightningSystem.w3x
Спасибо за внимание.
`
ОЖИДАНИЕ РЕКЛАМЫ...
3
11
10 лет назад
Отредактирован Holocauster
3
Запили видяшку, добавь скринов. И тогда в базу. А так - пока что бездна. Как будут скрины - сразу в базу. Если видяшка и скрины - на главную.
1
22
10 лет назад
1
И как же видео или снимки покажут качество кода, который находится за кулисами? Кто-то из картоделов WC3 не знает, как выглядят молнии в игре?
2
28
10 лет назад
2
Holocauster, скрины кода?
а видяшку того как писал или как компилил?

по существу:
единственное что не нравится так это хэш(постоянное удаление таймера,очищение хэша)
как по мне так стек структур был бы куда более оптимальным вариантом
0
28
4 года назад
0
Почему это не публикуется?
0
35
8 месяцев назад
0
PT153, актуально ещё?🤣
Чтобы оставить комментарий, пожалуйста, войдите на сайт.