а зачем он вообще -4000? у тебя же высота юнита задается на это значение, как у юнита может быть высота минус четыре тыщи? уровень земли ноль плюс-минус 256
а зачем он вообще -4000? у тебя же высота юнита задается на это значение, как у юнита может быть высота минус четыре тыщи? уровень земли ноль плюс-минус 256
кстати у тебя какой патч? если скину карту сделаешь фастом?
вобщем извращение какое-то получается
все надо переписывать по-человечески
а то только костыль на костыле
сделай нормальные имена переменных и массивы с заменой
потом добавь вывод сообщений что там происходит у дио и у флайДи
у флайди когда он меньше -4000 то высота багается
а если больше доходит больше -4000 то норм
Ельнур, вот, сделай чтобы подмена была
тип перед уменьшением
FlyD[умирающего] = FlyD[DI[0]]
и тд
а то ты дио уменьшил например с 3 до 2, а юнит который записан на номер три остается висеть в воздухе тк до него цикл больше не будет доходить, ведь он теперь проходит не от 1 до 3, а от 1 до 2я я
ну я специально при приземлении поставил даммика с 0.50 сек чтобы за эти секунд все прыгнувшие(0.01 сек) скорость 3500 успели за эти 0.50 сек прыгнуть до точки каста и когда умирает даммик делать счетчик - 1
ну
там в этих японских названиях триггеров и дио с джотаро черт ногу сломит
У тебя там где счетчик уменьшается, все переменные умирающего заменяются на последний юнит в массиве или нет?
Если нет то до них счетчик просто не будет доходить тк они идут после уменьшившегося максимального значения для цикла.
Ельнур, я думаю записи из массива не убираются, их становится слишком много и движок не справляется
просто увеличивать счетчик недостаточно, надо при гибели/приземлении юнита заменять его на последний в массиве (и все его данные тоже) и уменьшать счетчик на 1
при приземлении когда я выставлял счетчик -1 из за быстрости(0.01 сек) он багался поэтому при приземлении создал даммика который имеет таймер 0.50 сек и когда этот даммик умирает то счетчик становится -1
Ельнур, Да, поставь ноль, иначе прибавлять 7 не к чему
если юниты должны лететь по параболе, то поставь число вроде 2000 и не прибавляй, а вычитай 7 (пока скорость больше нуля юнит набирает высоту, затем падает)
поставил ноль все правильно работает но потом оно багается и высота вообще для всех не поднимается
вобщем ятп триггер который запускает юнитов называется GrimjowMui
FlyD[DI[0]] значение задается в нем? если нет то выполнение цикла который по таймеру будет обрываться
сори у меня инет 10кб/с
дай норм скрин триггера который добавляет записи юнитов и пр в массив и увеличивает счетчик записей, ятп это DI[0]
все равно всегда стоит сперва использовать дебаг - выводить текстом сообщения во время игры, например того же Дио
названия переменных для роботов что-ли, что за жесть?
выводи дебагом значение счетчика мб, по одному скрину не понятно
последние 3 строки в цикле вообще какой-то бред, зачем по сто раз их перезаписывать?
код нормально работает но проблема в высоте когда два или три юнита применяют способность высота для двоих не поднимается а только для одного поднимается
названия переменных для роботов что-ли, что за жесть?
выводи дебагом значение счетчика мб, по одному скрину не понятно
последние 3 строки в цикле вообще какой-то бред, зачем по сто раз их перезаписывать?
посмотри видео и там поймешь в чем баг наверное у каждого оно было
Попытаюсь объяснить картинками, если так не доходит
Например:
Нам нужно создать одного юнита - мы это делаем на триггерах с помощью специальной функции - CreateNUnitsAtLoc:
function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
call GroupClear(bj_lastCreatedGroup)
loop
set count = count - 1
exitwhen count < 0
call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
endloop
return bj_lastCreatedGroup
endfunction
Обратите внимание, что там все происходит через цикл, в котором используется сама функция создающая юнита, а именно CreateUnitAtLocSaveLast:
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
if (unitid == 'ugol') then
set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
else
set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
endif
return bj_lastCreatedUnit
endfunction
В ней уже используются if-ы, нормальное создание юнитов уже выполняется с помощью нормальной native функции - CreateUnitAtLoc:
native CreateUnitAtLoc takes player id, integer unitid, location whichLocation, real face returns unit
И что получается? В триггерах мы пользовались функцией для создания юнита, которая через 2 функции, через цикл, и через if и создавала юнита, а все можно было сделать сразу с помощью одной native функции!
вот я создал с помощью нативки но переменная last created unit - не читает его собственнно этот созданный юнит не двигается и триггер ломается
замечание и 1 час тишины от NazarPunk: Научитесь уже пользоваться форматированием кода
---@param id player
---@param unitid integer
---@param whichLocation location
---@param face real
---@return unit
function CreateUnitAtLoc(id, unitid, whichLocation, face) end -- (native)
---@param count integer
---@param unitId integer
---@param whichPlayer player
---@param loc location
---@param face real
---@return group
function CreateNUnitsAtLoc(count, unitId, whichPlayer, loc, face)
GroupClear(bj_lastCreatedGroup)
while true do
count = count - 1
if count < 0 then break end
CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
end
return bj_lastCreatedGroup
end
local group G = CreateGroup() //группа
local unit u = null //временный юнит
call GroupEnumUnitsInRange(G,x,y,300,null) //добавить всех юнитов в радиусе 300 от точки x/y в эту группу
// перебор группы
loop //стартуем цикл
set u = FirstOfGroup(G) //берём рандомного юнита из группы
exitwhen u==null //если юниты закончились, заканчивает цикл
//наши действия
call GroupRemoveUnit(G,u)// убираем юнита из группы
endloop //заканчиваем цикл
call DestroyGroup(G) //чистим за собой
set G = null //и это тоже
local group G = CreateGroup() //группа
local unit u = null //временный юнит
call GroupEnumUnitsInRange(G,x,y,300,null) //добавить всех юнитов в радиусе 300 от точки x/y в эту группу
// перебор группы
loop //стартуем цикл
set u = FirstOfGroup(G) //берём рандомного юнита из группы
exitwhen u==null //если юниты закончились, заканчивает цикл
//наши действия
call GroupRemoveUnit(G,u)// убираем юнита из группы
endloop //заканчиваем цикл
call DestroyGroup(G) //чистим за собой
set G = null //и это тоже
блин я пишу на полу джассовом кастом скрипте чтобы потом ее легко менять и заменил все бж осталось только отряд бж не знаю что с ним делать...(
Это точно такие же полярные координаты, ты просто развернул функцию в непосредственный код.
В коде примера ни работа с углами, ни тригонометрия, ни degtorad не нужны вообще.
я знаю что я просто разверзнул код, я просто знаю что polarprojectionbj сколько ее не обнуляй она лагает и из за этого заменил на x,y она быстрее и не лагает
Ельнур, только надо точки удалять не забывать. многие советовали использовать вместо точек координаты.
point with offset point (x,y) и OffsetLocation(udg_SpellPoint, udg_X, udg_Y) - новые функции?
вот я имел вииду это она на 1 этаж выше поляркибж
кстати мы заменили PolarProjectionBj но остается bj_Degtorad хехе) что делать тут)
и еще я хотел добавить тот код который выше он в 2 раза дистанцию увеличивает получается полярка точки
и точка ( полярка точки) из за этого пишем так и все будет нормально работать) Боевая единица - Order Caster to Двигаться (SpellPoint offset by ((X / 2.00), (Y / 2.00)))
непотребство сморозил выше
нашел функцию которая не багается это
спасибо всем тему можно закрывать через год буду в отрядах джассеров) главное запомнить эти все кастом скрипты
так я понял есть просто point with offset point (x,y) оно не бж :D спасибо всем разобрался
так я понял есть просто point with offset point (x,y) оно не бж :D спасибо всем разобрался call IssuePointOrderLoc( udg_Caster, "move", OffsetLocation(udg_SpellPoint, udg_X, udg_Y) )
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
а если больше доходит больше -4000 то норм
» WarCraft 3 / высота юнита mui
ну
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
Ред. Ельнур
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
Ред. Ельнур
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
» WarCraft 3 / высота юнита mui
Ред. nazarpunk
» WarCraft 3 / createunit at loc custom script
Нам нужно создать одного юнита - мы это делаем на триггерах с помощью специальной функции - CreateNUnitsAtLoc:
native CreateUnitAtLoc takes player id, integer unitid, location whichLocation, real face returns unit
И что получается? В триггерах мы пользовались функцией для создания юнита, которая через 2 функции, через цикл, и через if и создавала юнита, а все можно было сделать сразу с помощью одной native функции!
вот я создал с помощью нативки но переменная last created unit - не читает его собственнно этот созданный юнит не двигается и триггер ломается
» WarCraft 3 / createunit at loc custom script
» WarCraft 3 / [lua] Предотвращаем создание утечек GUI
Ред. Ельнур
» WarCraft 3 / урон от ловкости
» WarCraft 3 / урон от ловкости
» WarCraft 3 / урон от ловкости
Ред. Ельнур
» WarCraft 3 / урон от ловкости
» WarCraft 3 / урон от ловкости
» WarCraft 3 / заменить бж отряд, custom script
» WarCraft 3 / заменить бж отряд, custom script
» WarCraft 3 / unitdamagetargetbj стер bj
» WarCraft 3 / x y?
Ред. nazarpunk
» WarCraft 3 / x y?
и точка ( полярка точки) из за этого пишем так и все будет нормально работать) Боевая единица - Order Caster to Двигаться (SpellPoint offset by ((X / 2.00), (Y / 2.00)))
» WarCraft 3 / x y?