Недоработанные наработки я как-бы не публикую и настройки всегда вынесены для удобства. За комментариями в них я слежу и исправляю ошибки, если таковые имеются. Но что-то никто не спрашивал о том, как привязать их к GUI, значит как-то сами разобрались и делать лишнюю работу мне не нужно.
Но ты ведь сделал упор на какую-то "особенную одаренность", то есть выделил отдельную категорию посетителей ресурса по какому-то признаку как недостойных твоего внимания.
Не делал я никакого упора, это вы на этой фразе внимание акцентируете.
Кто-то помоложе и поглупее, посмотрев на твою позицию и взяв с тебя пример, придумает свой повод отделиться в отдельную группу, но уже, скажем, по национальности.
Сначала ты для GUI не пишешь, а потом Родину продашь?))
Как минимум странное отношение для ресурса, который вроде позиционирует себя как точку сбора и взаимопомощи, где технари, например, могут помочь гуманитариям.
Судя по Q\A помогают тут всем. Но мне например лень возиться с GUI ради тех, кому лень подправить под свои нужды несколько строчек в коде.
do
local DamageTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- До вычета брони
--TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- После вычета брони
end
TriggerAddAction(DamageTrigger, function()
local damage = GetEventDamage() -- число урона
if damage < 1 then return end
local target = GetTriggerUnit() -- тот кто получил урон
local caster = GetEventDamageSource() -- тот кто нанёс урон
if GetHandleId(target) == FourCC('Глыба') then
-- Что-то делаем
end
end)
end
было бы прикольно сделать систему атаки с снарядом для ренжей, и чтобы от атаки можно было уклонятся (можно было подвинуть триггером на чуть-чуть вбок или проиграть анимацию уклонения. это уклонение не только в дальнем, но и ближнем бою) или блокировать щитами (взрыв об щит). и конусную систему снарядов по нескольким целям.
Мне такие недосистемы предлагают писать каждую неделю. Вот как оформите к такой системе полноценное ТЗ, так вот сразу напишу.
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, не забывайте, что когда строишь здание, должна подсвечиваться карта путей.
И поле пилона не распространяется на здания, которые находятся на клифе выше пилона.
» WarCraft 3 / Изменение количества урона
» WarCraft 3 / math.ease
» WarCraft 3 / Заклинание: Волна Воды
» WarCraft 3 / math.ease
» WarCraft 3 / math.ease
» WarCraft 3 / Изменение количества урона
» WarCraft 3 / math.ease
Ред. nazarpunk
» WarCraft 3 / math.ease
» Эфирия / Заготовка нескольких нестандартных способностей
Ред. nazarpunk
» WarCraft 3 / math.ease
» WarCraft 3 / math.ease
» WarCraft 3 / Кампания: Другая Сторона (Альянс)
» WarCraft 3 / Хэш на Lua ?
Ред. nazarpunk
» WarCraft 3 / Хэш на Lua ?
На 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 / Система с Пилонами(Генераторами) как у Протоссов.