local loop, xa, ya, xb, yb = 10000000, 1.3, 2.3, 3.3, 4.3
local sum, start = 0, os.clock()
for i = 0, loop do
local dx = xb - xa
local dy = yb - ya
sum = sum + dx * dx + dy * dy
end
print(os.clock() - start, sum) --> ~0.22
sum, start = 0, os.clock()
for i = 0, loop do
sum = sum + (xb - xa) ^ 2 + (yb - ya) ^ 2
end
print(os.clock() - start, sum) --> ~0.56
примерно равны, слева два поиска переменных и операнд, справа одна переменная, константа и использование функции Pow
Написал маленький тест, оказалось степень тяжёлая.
loop = 10000000
xa = 1.3
ya = 2.3
xb = 3.3
yb = 4.3
s = 0
start = os.clock()
for i=0, loop do
local dx = xb-xa
local dy = yb-ya
s = s + dx * dx + dy * dy
end
print(os.clock()-start, s) --> 0.55 - 0.59
s = 0
start = os.clock()
for i=0, loop do
s = s + (xb-xa)^2 + (yb-ya)^2
end
print(os.clock()-start, s) --> 0.9 - 0.95
Объясните для чайников, что значит "Создать локальный аналог переменной"
Это заклинание писалось как только lua появился на PTR и функции, которая превращает равкод в число близы не завезли. Поэтому в локальной области видимости была создана функция AbilityId. На момент последнего патча уже завезли функцию FourCC.
Обновлённый код заклинания
---@author https://xgm.guru/p/wc3/random-lightning
do
local InitGlobalOrigin = InitGlobals
function InitGlobals()
InitGlobalOrigin()
-- Настройки
local ABILITY_ID = FourCC('SRaL')
local RANGE = 200
local DELAY = 1
local COLOR = { 'Blue', 'Nature', 'Orange', 'Red', 'Void' }
local ICON_PATH = 'ReplaceableTextures/CommandButtons/BTNSpellRandomLightning'
-- Заклинание
local GROUP_ENUM_ONCE = CreateGroup()
local COLOR_CURRENT = COLOR[math.random(1, #COLOR)]
BlzSetAbilityIcon(ABILITY_ID, ICON_PATH .. COLOR_CURRENT .. '.blp')
local trigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
TriggerRegisterPlayerUnitEvent(trigger, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT)
end
TriggerAddAction(trigger, function()
if GetSpellAbilityId() ~= ABILITY_ID then return end
local caster = GetTriggerUnit()
local damage = BlzGetUnitBaseDamage(caster, 1) * GetUnitAbilityLevel(caster, ABILITY_ID)
local x, y = GetSpellTargetX(), GetSpellTargetY()
local effect = AddSpecialEffect('Abilities/Spells/Human/MassTeleport/MassTeleportCaster.mdl', x, y)
TimerStart(CreateTimer(), DELAY, false, function()
DestroyEffect(effect)
DestroyEffect(AddSpecialEffect('Effect/Spell/RandomLightning' .. COLOR_CURRENT .. '.mdx', x, y))
GroupEnumUnitsInRange(GROUP_ENUM_ONCE, x, y, RANGE)
while true do
local target = FirstOfGroup(GROUP_ENUM_ONCE)
if target == nil then break end
if UnitAlive(target) and
IsPlayerEnemy(GetOwningPlayer(caster), GetOwningPlayer(target)) and
not IsUnitType(target, UNIT_TYPE_MAGIC_IMMUNE) and
not IsUnitType(target, UNIT_TYPE_FLYING)
then
UnitDamageTarget(caster, target, damage, false, true, ATTACK_TYPE_MAGIC, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
end
GroupRemoveUnit(GROUP_ENUM_ONCE, target)
end
COLOR_CURRENT = COLOR[math.random(1, #COLOR)]
BlzSetAbilityIcon(ABILITY_ID, ICON_PATH .. COLOR_CURRENT .. '.blp')
DestroyTimer(GetExpiredTimer())
end)
end)
end
end
PT153, не забывайте, что когда строишь здание, должна подсвечиваться карта путей.
И поле пилона не распространяется на здания, которые находятся на клифе выше пилона.
Нет, смысл с том, что там именно юнит крепиться к модельке эффекта, а не поднятие в воздух и подсовывания эффекта
Ничто там не крепится ибо у заклинания можно тупо убрать модель эффекта и юнит также будет висеть в воздухе. Притом юнит всегда выделяемый и со всеми аттачами.
Т.е. это еще и парсер нужен который будет парсить wct и wtg на предмет изменений...
Код передаётся через гитхаб и посему парсить ничего не нужно. Но над картой ещё работают люди, которым код какраз не нужен, а нужно чтоб просто карта работала.
привязка к обязательному нормальному сохранению карты из редактора это автоматическая потеря всех плюшек, которые дает возможность обрабатывать карту внешним сборщиком и компилятором
Если нужно открытие карты редактором из-за совместной работы, а плюшки не нужны, то привязка будет в самый раз.
Это адов ад, тогда либо придется эти списки компиляции вручную писать постоянно либо после каждого добавления файла кода лезть в редактор, двигать его там, сохранять карту, парсить wct и wtg и формировать новый список сборки. Очень "удобное" решение.
А шаблоны зачем? Нужно пихать всё подряд, указываешь **/*.lua и не мучаешься, если нужен особый порядок, то это так же можно указать. wct и wtg не нужно парсить, их нужно генерировать в IDE, формировать war3map.lua и засовывать в карту. Чтоб в последстивии карту можно было открыть и изменить поля в РО.
» WarCraft 3 / [lua] Pathable
» WarCraft 3 / [lua] Pathable
» WarCraft 3 / Заклинание: Случайная Молния
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
И поле пилона не распространяется на здания, которые находятся на клифе выше пилона.
Ред. nazarpunk
» WarCraft 3 / Как начать писать код на Lua в WC3 1.31.1 PT
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / Система с Пилонами(Генераторами) как у Протоссов.
» WarCraft 3 / native и constant native
» WarCraft 3 / как сделать чтобы (пасивно) тратилась мана у юнита
Ред. nazarpunk
» WarCraft 3 / Крепление юнита к эффекту
» WarCraft 3 / как сделать чтобы (пасивно) тратилась мана у юнита
» WarCraft 3 / Крепление юнита к эффекту
Ред. nazarpunk
» WarCraft 3 / Крепление юнита к эффекту
» WarCraft 3 / Крепление юнита к эффекту
Ред. nazarpunk
» WarCraft 3 / Получить физ. размер.
Ред. nazarpunk
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
Прохождение 1.2
» WarCraft 3 / Knights & Rogues COMPLETE EDITION
» WarCraft 3 / Оптимальная способность с самонаводящимся снарядом
» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua
» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua
» Эксперименты в Пустоте / Ломаем Warcraft3 1.31 полностью: Кастомный компилятор Lua