Вложил в карту Арену наработку, где генерируется 500 рандомных волн, с рандомными характеристиками и размерами юнитов, случайные магазины, и случайно удаляются с карты определенные декорации, случайно появляются в магазинах скиллы на изучение и почти все на GUI. полезно для вариации рандома и как его можно использовать.
//Плохой пример
if GetRandomInt(1,3)==1 then
call CreateUnit
elseif GetRandomInt(2,3)==2 then
call CreateUnit
else
call CreateUnit
elseif
endif
ИЛИ
local integer random = GetRandomInt (1,3)
if random == 1 then
call CreateUnit
elseif random == 2 then
call CreateUnit
else
call CreateUnit
endif
Ну мы же можем сравнить угол поворота атакующего и атакованного
Пример:
У атакующего угол 90 градусов, у атакованного 70 градусов, получаем, что он стоит спиной и ему нанесём бонусом 250 урона
А вот пример функции на определения сзади ли юнит
function IsUnitBack takes unit uF, unit uWhichBack returns boolean
real r1 = bj_RADTODEG * Atan2(GetUnitY(uWhichBack) - GetUnitY(uF), GetUnitX(uWhichBack) - GetUnitX(uF)) + 360.
real r2 = GetUnitFacing(uWhichBack) + 360.
if GetUnitY(uWhichBack) < GetUnitY(uF) then
set r1 = r1 + 360.
endif
return (r1<=(r2+45.) and r1>=(r2-45.))
endfunction
Итого: Правильно ли я понимаю ситуацию:
Есть карта. Её можно открыть в jngp 1.26 и в какой-то новой версии редактора для рефа.
Если запускать карту, собранную в jngp, что в рефорже что в 1.26 десинк не происходит.
Если запускать карту, собранную в рефовом редакторе, то в рефе десинкает?
Спасибо, действительно, по невнимательности добавил в карту scr и в этом оказалась проблема+ потому что она была пустая, добавил пустой файл с форматом .lua и стал запускаться редактор и игра.
Остался один вопросик, у меня почему то карта сразу не запускается с пустым кодом?
Но а если я запущу редактор, нажму ctr+s то тогда она с редактора сразу запустит карту
Smeto, смотри, на хэндл юнита A вещаем хэндл юнита B. На хэндл юнита B вешаем хэндл юнита A.
При смерти одного из них убиваем второго.
Ты же на хэндл юнита A вешаеш хэндл юнита A. Зачем? Его же можно получить через GetUnitHandle().
Другой момент, что таким образом к одному юниту можно привязать только одного юнита. Для более сложных взаимодействий и цепочек связей придётся что-то похитрее городить.
Делаем триггер на него вешаем бойцов и смерть бойцов по хэндлу триггера.
Один из них умер - убиваем второго (или двоих). Ну, и не забываем очищать всё. Дабы утечек небыло.
Профит
Не вижу смысла в динамических триггерах, ибо всёравно с хэндлами возиться, а задача спокойно и с одним триггером решается.
Спасибо за разбор )
Ты прав делал лишние действие)
😎Зацени😎:
Если больше юнитов допустим, трое связанных, то работать с параметром *set custom value*)
Пришла идея в голову:)
Целочисленная переменная Index, для того что избежать повторов пар из трёх юнитов)
Set custom value Unit1,Unit2,Unit 3=Index
SaveUnitHandle(HASH_TABLE,Index,1,U1)
SaveUnitHandle(HASH_TABLE,Index,2,U2)
SaveUnitHandle(HASH_TABLE,Index,3,U3)
Set Index++
…
Юнит умер:
local unit u
set bj_forLoopAIndex=1
loop
exitwhen bj_forLoopAIndex>3
set u=LoadUnitHandle(HASH_TABLE,GetUnitPointValue(GetDyingUnit()), bj_forLoopAIndex)
If u=Живой then
call KillUnit(u)
Endif
bj_forLoopAIndex++
endloop
...
Делаем триггер на него вешаем бойцов и смерть бойцов по хэндлу триггера.
Один из них умер - убиваем второго (или двоих). Ну, и не забываем очищать всё. Дабы утечек небыло.
Профит
Допустим, одновременно 50 пар на карте, профит будет в создании 50 триггеров и удалении их? Мне вот не понятно, если это один триггер, как отличить допустим первую пару от второй и так далее?)
Smeto, зачем на юнита сохранять хэндл этого же юнита? Да и условие можно убрать, а поиск второй половинки засунуть в триггер смерти юнита.
Не совсем понял тебя, если ты про GetHandleId(UNIT_Х), нам же нужен уникальный ключ, который не будет повторяться и по которому мы будем находить второго юнита, поэтому у двух разных Юнитов ключ первого и так же наоборот. Грубо говоря, два ключа)
Я же сохраняю первого юнита под его же id и второго же под id первого и так же наоборот для того чтоб отследить по id умирающего второго юнита, потому что если умрет первый, а у второго будет другой хэндл в ключе, то мы второго не найдём.
А условие я прописал для того чтоб не всех подряд проверял, автор же не уточнял каких крипов проверять
Может я что то не понимаю, то подправь меня пожалуйста)
msproper, ну можно при спавне/инициализации юнитов, сохранить в них позицию. Сделать простую систему отлова нахождения в бою и возвращать обратно на свои посты юнитов
Можно микроскрин тригера позязя?) или на словах
Попробуй устанвливать им позицию через SetUnitPosition
Extremator, эмм, перебирать всех юнитов это тупо. Есть же хэш-таблица.
А как сделать хэш-таблицей?
Могу предположить, что это будет работать так, на примере созданных юнитов: Так то любых можно добавить, наступивших в область, убивших и так далее
...
local unit UNIT_1=CreateUnitAtLoc(Player(0),'hfoo',REGION, bj_UNIT_FACING)
local unit UNIT_2=CreateUnitAtLoc(Player(0),'hfoo',REGION2, bj_UNIT_FACING)
...
//Сохраняем пару по уникальному id первого Объекта
call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),1,UNIT_1)
call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_1),2,UNIT_2)
//Сохраняем пару по уникальному id второго Объекта
call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),1,UNIT_2)
call SaveUnitHandle(HASH_TABLE,GetHandleId(UNIT_2),2,UNIT_1)
...
//Условие
if GetDyingUnit()=='hfoo' or (GetOwningPlayer(GetDyingUnit()) == Player(PLAYER_NEUTRAL_AGGRESSIVE)) then
//Загружаем по уникальному ID умирающего юнита его вторую половинку)
call KillUnit(LoadUnitHandle(HASH_TABLE, GetHandleId(GetDyingUnit()), 2)
endif
...
Unryze, отличная идея у тебя на реализацию))
А что если как-нибудь отмечать нативки, которых нет в рефордже? (Другой цвет или префикс добавлять, который можно включать/отключать в настройках редактора?)
» WarCraft 3 / Как сделать простой рандом?
Ред. Smeto
» WarCraft 3 / Способность Бристола
Пример:
У атакующего угол 90 градусов, у атакованного 70 градусов, получаем, что он стоит спиной и ему нанесём бонусом 250 урона
» WarCraft 3 / Подскажите, как работает функция AddLightningLoc, почему если цель не видно, то создать молнию не получится?
Ты совершенно прав, это работает
» Unryze Jass API / UjAPI - О Проекте
Если я с компилирую карту в версии 1.26 UjApi могу ли я её запустить на 1.36 версии ?
» WarCraft 3 / Всем привет. Как найти путь до модели *mdx ?
» WarCraft 3 / Недостаточно ресурсов памяти для обработки этой команды...
xDeprotect в помощь
» WarCraft 3 / Найти/Узнать id Тайла: Бездна (не строить)
» WarCraft 3 / Сохранение карты в Reforged и Автозагрузка героев. Десинхрон???
Ред. Smeto
» WarCraft 3 / Сохранение карты в Reforged и Автозагрузка героев. Десинхрон???
Ред. Smeto
» WarCraft 3 / [Lua] Поток прекращается после 5 раз вызова функции
Ред. Smeto
» WarCraft 3 / [lua]Не получается запустить редактор и игру,Lua+VScode|cheapack
" require 'build' {
game = [[D:\Games\Warcraft III\retail\x86_64\]],Warcraft III.exe--project = "D:\\Games\\Warcraft 3 1.26\\Maps\\LotAS\\Evolition\\",
project = arg[1],
map = 'Evolition0.02_Reforged.w3x',
--src = 'src',
run = arg[2],
--syntaxCheck = true,
options = {
language = "en",
consoleColor = true,
}
}
"
Но а если я запущу редактор, нажму ctr+s то тогда она с редактора сразу запустит карту
Ред. Smeto
» WarCraft 3 / Инструкция по настройке запуска cheapack в VSCode
Подскажите, что такое папка или где её найти "папку src" ?
» WarCraft 3 / Связанные юниты
Ты прав делал лишние действие)
Если больше юнитов допустим, трое связанных, то работать с параметром *set custom value*)
Пришла идея в голову:)
Целочисленная переменная Index, для того что избежать повторов пар из трёх юнитов)
» WarCraft 3 / Связанные юниты
Ред. Smeto
» WarCraft 3 / Связанные юниты
» WarCraft 3 / Приказ оставаться на месте
» WarCraft 3 / Проблема с ботом
Как пытаешь запустить второй?
» WarCraft 3 / Связанные юниты
Ред. Smeto
» WarCraft 3 / (Патч 1.32.10) Внешние файлы .mix и так.далее. Как быть?
» WarCraft 3 / Warcraft 3 Фильм Часть 4 ЖИР БЕСКОНЕЧНОСТИ - Болотный сын
» WarCraft 3 / (Патч 1.32.10) Внешние файлы .mix и так.далее. Как быть?
Прикладываю карту, .mix.
Прикладываю модельку, которая в mix файле.
У меня не получается, что я делаю не то видимо. Попробуй ка ты с рабочим примером в идеале
» WarCraft 3 / (Патч 1.32.10) Внешние файлы .mix и так.далее. Как быть?
» WarCraft 3 / Как отредактировать Лорды Европы
» WarCraft 3 / Как в Warcraft писать на С#?
» Warcraft III - Lua / Warcraft III - Lua
А что если как-нибудь отмечать нативки, которых нет в рефордже? (Другой цвет или префикс добавлять, который можно включать/отключать в настройках редактора?)