0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

NazarPunk:
В JASS нет двумерных массивов, просто препроцессоры zinc,vJass,cJass добавляют синтаксический сахар и используют одномерные.
Нужно почитать будет про то, как встраиваются zinc, vJass, cJass. Потом обязательно посмотрю это, спасибо за совет.
Я скорее вернулся в варик делать карту из ностальгических побуждений и из-за новости о выходе Refordged версии. А так когда-то помню начинал с него.

Уже на сайте не раз обсуждалось, если юнит удалён из карты, триггером или после смерти->разложения, то и событие удаляется.
Честно сказать, не знал. Это упрощает некоторые моменты. На сайте всего месяц от силы.

DracoL1ch:
Вот если у тебя, кроме копипасты доты
Не симпатизирует дота, так что не копирую ее, суть карты в другом. Но в целом мысль понял.

Clamp:
Все верно. Твой метод вполне имеет место быть. Спасибо за наработку.

После целого дня тестов, эмпирическим путем понял, что баг находится в ИИ компа (не в спауне, и не в движении юнитов по точкам)
Буду дальше тестить, позже отпишусь где он находится.
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

NazarPunk:
OrderBackToLineB, OrderBackToLineR
ForceLineBlue1, ForceLineBlue2, ForceLineBlue3
ForceLineRed1, ForceLineRed2, ForceLineRed3
Line1, Line2, Line3
Знал, что возможно об этом упомянешь,
но соль в том, что для
  • "OrderBackToLine*" желательно передавать структуру, чтобы он нормально все обрабатывал, что тут невозможно сделать.
  • "ForceLine*" есть 2 варианта развития, один это сделать поиск необходимого региона по которому он будет выбирать как реагировать на то или иное событие, либо сделать 6 триггеров, каждый из которых отдельно вызывается. Конечно, если бы я понимал, что у меня возможно будет какое-то изменение в будущем в плане количество спаунов, то лучше было бы сделать один триггер обрабатывающий все, тут согласен.
  • "Line*" однозначно нужно разделить на 3 части, поскольку нужно передавать массив, либо писать дикий костыль на определение массивов, что я не люблю делать. Если писать, то сразу основательно. Там логика может отличаться. Поэтому нужно сохранить 3 линии для удобства изменения условий для каждой линии.

По поводу двумерных массивов полностью согласен, что так можно решить проблему. Но я пока писал только на ГУИ, где таковых нет (за исключением хэш таблиц, которыми я начал пользоваться только недавно, когда начал использовать JASS). В глобальных переменных объявить двумерный массив нельзя. А если пытаться объявить глобальные в своем коде, то пишет ошибку, что глобальные должны быть объявлены в самом начале. Поэтому я пока обходился одномерными массивами, что вызвало подобное. Так что тут я с тобой полностью солидарен.
В идеале вообще создавать объект со своим набором полей и методов. Но я пока вначале пути JASS, так что пользуюсь только им. А вообще пишу на С++
Спасибо за рекомендации
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

NazarPunk:
JASS автоматически не делает весь код хорошим, а популярность карты не залог оптимального решения.
Речь была о другом, не о популярности или о JASS, а о том, что там есть подобные конструкции почти везде и это не вызывает проблем, что следовательно не должно быть проблемой у меня.

Порылся я в вашем коде и это ужасно. Копирование триггера, чтобы сделать теже действия, но с другими параметрами повеселило.
Лучше переделать всё пока не позно, а то потом в этой каше ничего не разберёте.
Изначально писал все на триггерах, можно увидеть везде аналоги, еще до сих пор не переписал все на JASS, как раз недавно писал о том сабж, что перехожу с ГУИ на JASS. Конструкции, где используется копирование триггера сведены к минимуму.

Сейчас просмотрел беглым взглядом, не совмещены только Триггеры: SpawnLine* в один триггер и CompSpellBack* в один триггер, больше копированных конструкций нет. А про эти 2 момента знаю, но как уже писал еще не закончил переход с ГУИ на JASS. Если видите что-то еще "ужасное" - поделитесь, я приму во внимание.

Возможность передачи массива в функцию очень бы улучшило код, ведь для многих функций полиморфизм бы не помешал. (Знаю про vJass и cJass, но хочу работать только с нативными инструментами)
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

Всех услышал, пойду тестить каждый кейс, отпишусь как найду в чем (хотя бы примерно) причина.

8gabriel8:
pAxsIs, чтобы обнулить события, есть действие, которое приводит триггер в первоначальное состояние. Можно заносить юнитов в виде событий и в группу, триггер на смерть будет удалять из группы, потом, например, каждые 5 минут обновлять триггер до первоначального состояния и сразу добавлять туда события на членов группы.

Запамятовал упомянуть, что игра зависла, когда попытался выйти из неё после 6000-секундного бага.
Спасибо за идею, попробую.
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

Msey:
Самым попсовым вариантом было и является попадание юнита на карту и добавление ему события "получает урон"
Пробовал этот вариант, но это в этом случае будет постоянный рост событий в триггере, как я уже писал. Неужели динамические триггеры могут быть проблемой? И вызывать подобный баг.

Clamp:
Разве у Msey не такие же трудозатраты по количеству событий в итоге? Ведь из комментариев под твоей наработкой:
ScorpioT1000:
это просто штука которая регает "юнит получил урон" на всех юнитов на карте.
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

8gabriel8:
pAxsIs, ты говорил, что у тебя триггеры создаются, но может есть на них какой лимит. Не пробовал проверять их?
Могу, конечно, счетчик завести на триггеры, но мне кажется вряд ли есть лимиты на триггеры. Та же дота написана на JASS и у нее каждая способность создает временный триггер. Попробую во всяком случае.
А вообще почему решил плодить триггеры, может саму систему переделать, чтобы использовать переменные по кругу вместо создания триггеров?
Вот пример, как ты представляешь сделать без временного триггера отлов момента удара юнита без создания временного триггера. В момент замаха юнита, на цель создается временный триггер с событием EVENT_UNIT_DAMAGED. Который отлавливает удар, чтобы нанести доп урон.
Альтернативный вариант:
Можно, конечно, написать уже заранее триггер без события и добавлять событие во время замаха. Тогда количество триггеров не изменится, но будут плодиться события, которые нельзя удалить.
Смотреть код
function StunnedSpellDmg_Actions takes unit attacker, unit target, boolean isStunned returns nothing
    if ( !isStunned ) then
        call UnitDamageTarget( attacker, target, ( ( I2R(GetUnitPointValueByType(GetUnitTypeId(attacker))) ) + 1 ), true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_POISON, WEAPON_TYPE_WHOKNOWS )
    else
        call UnitDamageTarget( attacker, target, ( ( 4.00 * I2R(GetUnitPointValueByType(GetUnitTypeId(attacker))) ) + 1 ), true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_POISON, WEAPON_TYPE_WHOKNOWS )
    endif
endfunction

function StunnedSpellDmg_Conditions takes nothing returns boolean
    local trigger trg      = GetTriggeringTrigger()
    local integer trgH     = GetHandleId( trg )
    local unit    attacker = LoadUnitHandle( udg_kiwHash, trgH, StringHash("attacker") )
    local unit    target   = LoadUnitHandle( udg_kiwHash, trgH, StringHash("target") )
    local boolean isBuffed = LoadBoolean( udg_kiwHash, trgH, StringHash("isStunned") )
    
    if GetTriggerEventId() == EVENT_UNIT_DAMAGED then
        if GetEventDamageSource() == attacker then
            call DisableTrigger( trg )
            call StunnedSpellDmg_Actions( attacker, target, isBuffed )
            
            call FlushChildHashtable( udg_kiwHash, trgH )
            call DestroyTriggerEx( trg )
        endif
    else
        call FlushChildHashtable( udg_kiwHash, trgH )
        call DestroyTriggerEx( trg )
    endif
    
    set trg      = null
    set attacker = null
    set target   = null
    
    return false
endfunction

function StunnedSpellDmg_EventReg takes nothing returns nothing
    local trigger trg      = CreateTrigger()
    local unit    target   = GetTriggerUnit()
    local unit    attacker = GetAttacker()
    local integer trgH     = GetHandleId( trg )
    local boolean isBuffed = false
    
    if ( GetUnitAbilityLevel( target, 'BPSE') > 0 ) then
        set isBuffed = true
    endif
    
    
    call TriggerRegisterUnitEvent( trg, target, EVENT_UNIT_DAMAGED )
    call TriggerRegisterTimerEvent( trg, 1, false )
    call TriggerAddCondition( trg, Condition( function StunnedSpellDmg_Conditions ) )
    call SaveUnitHandle( udg_kiwHash, trgH, StringHash("attacker"), attacker )
    call SaveUnitHandle( udg_kiwHash, trgH, StringHash("target"), target )
    call SaveBoolean( udg_kiwHash, trgH, StringHash("isStunned"), isBuffed )
    
    set target   = null
    set attacker = null
    set trg      = null
endfunction

function Trig_Stunned_Conditions takes nothing returns boolean
    return ( ( GetUnitTypeId(GetAttacker()) == udg_arrBTypes_Warriors[1] ) or \\
    ( GetUnitTypeId(GetAttacker()) == udg_arrBTypes_Warriors[2] ) or \\
    ( GetUnitTypeId(GetAttacker()) == udg_arrBTypes_Warriors[3] ) or \\
    ( GetUnitTypeId(GetAttacker()) == udg_arrBTypes_Warriors[4] ) or \\
    ( GetUnitTypeId(GetAttacker()) == udg_arrBTypes_Warriors[5] ) )
endfunction

function Trig_Stunned_Actions takes nothing returns nothing
    call StunnedSpellDmg_EventReg()
endfunction

//===========================================================================
function InitTrig_Stunned takes nothing returns nothing
    set gg_trg_Stunned = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Stunned, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddCondition( gg_trg_Stunned, Condition( function Trig_Stunned_Conditions ) )
    call TriggerAddAction( gg_trg_Stunned, function Trig_Stunned_Actions )
endfunction
NazarPunk:
А там насколько помню были баги в TriggerAddAction, из-за чего я досих пор в условиях действия пишу.
Поподробнее пожалуйста. Что за баги?
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Как работают тулзы типа "Депротекторов" ?

Вы хорошо разбираетесь в тонкостях world editor'a, я не буду с вами спорить в этом предмете, я не претендую на того, кто все знает тут, но будьте повнимательнее пожалуйста

quq_CCCP:
pAxsIs, эмм а ниче что Jass скриптовый язык, который ни компилируется а интерпретируется?
Я и не писал, что он компилируется.
pAxsIs:
с автоматической оптимизацией (что и делает ваш протектор).

quq_CCCP:
Скрипт карты не шифруется
pAxsIs:
Иногда для защиты игр (карт варкрафта) возможно ... шифрование, ... это уже более сложные механизмы защиты, и вряд ли они существуют для Warcraft 3.

Попросили описать принцип работы программ
типа "Дептротекторов"
Я описал принцип, без подробностей реализации.
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

NazarPunk:
А какая версия warcraft'a нужна? У меня на 1.26a даже не запускается.
pAxsIs:
Прикрепляю карту (Версия 1.2.4e):
Да и в названии файла написал 1.2.4e, будьте внимательнее ;)
2
8
5 лет назад
Отредактирован pAxsIs
2

» Мир безумного / WarCraft III Reforged - WE (что хотите увидеть?)

Clamp:
Добавить возможность передачи массива в функцию
Оберни массив методом и вуаля. Доступно в vJass.
Тут же речь идет о стандартном редакторе от Blizzard. (Native)
Clamp:
"Юнит выходит из ренджа другого юнита"
Технически очень сложно реализуемо, любым из известных мне способов, не стоит того.
Ну смотри, событие: "Юнит входит в радиус" - есть, оба события: "Юнит входит\выходит из региона" тоже есть. Следовательно отлов выхода из определенной области это не проблема.
В данном случае "Юнит выходит из радиуса" это отлов изменения растояния и только, его можно на уровне движка отлавливать по проинципу (юнит находится в радиусе другого юнита и если "скорость A unit минус скорость юнита (от которого радиус считается) + текущий радиус > текущего радиуса", то он после следующего обновления кадров будет за радиусом (вот и отлов). Это же принцип collider-ов в играх. Не вижу сложностей.
Clamp:
"Юнит игрока наносит урон"
Тут же речь идет о стандартном редакторе от Blizzard. (Native)
Clamp:
Иметь больше информации о приказе юнита, то есть куда он направлен и тд
Это и так есть в нативках.
Есть возможность получить данные о приказе юнита в момент приказа, а не в любую секунду игры.
Допустим юнит уже выполняет приказ, а я хочу узнать какой у него приказ сейчас.
Все что есть это узнать GetUnitCurrentOrder() без какой-либо информации.
0
8
5 лет назад
0

» WarCraft 3 / Как работают тулзы типа "Депротекторов" ?

Не знаю, чем не устроило тех, кто мне влепил "-", но прикол в том, что такой принцип у всего подобного. Возьмите игры, которые собирают после написания кода с автоматической оптимизацией (что и делает ваш протектор). Иногда для защиты игр (карт варкрафта) возможно применение технологии чтения кода с помощью шифрования, тем самым весь написанный код шифруется, а чтение происходит через отдельную программу, которая дешифрует отдельные куски кода, которые уже скомпилированы для чтения их (это уже более сложные механизмы защиты, и вряд ли они существуют для Warcraft 3). Однако подобное распространено для всего, что имеет защиту в сфере IT, поэтому и написал, что депротектор работает по той же схеме, если не вдаваться в детали его работы.
Почитайте: Декомпиляция
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Как работают тулзы типа "Депротекторов" ?

Я, конечно, не знаю как он точно устроен, но могу предположить, что работает по принципу.
Защищенная карта, это "скомпилированная карта", которая готова только для запуска из игры.
А "депротектор" он же "декомпилятор", получает код и объекты которые остались после компиляции, а другие объекты, которых не хватает, восстанавливает из стандартного набора.
7
8
5 лет назад
7

» Мир безумного / WarCraft III Reforged - WE (что хотите увидеть?)

Предлагаю

  • Добавить возможность передачи массива в функцию
  • Добавить такие события как:
    • "Юнит выходит из ренджа другого юнита"
    • "Юнит игрока наносит урон" (Сейчас только на определенного юнита есть такое событие)
  • Во время нанесения урона также иметь возможность все данные об этом уроне получать: тип, что вызвало урон (автоатака\заклинание\баф и тд
  • Изменять параметры РО юнитов\способностей\предметов триггерно
  • Возможность отслеживать, кто отдал приказ "Общему для нескольких игроков" юниту
  • Возможность работы с цепочкой приказов (копировать и тд)
  • Возможность триггерно создавать цепочку приказов для юнита (последовательность действий)
  • Иметь больше информации о приказе юнита, то есть куда он направлен и тд
  • Улучшить редактор AI (часто жалуются на это)
  • Возможность превью для импортированных файлов
  • Возможность ставить эффекты на карту вручную
4
8
5 лет назад
4

» WarCraft 3 / Рандомные герои

Steal nerves:
когда будете приобретать рандом героя, перезапись списка
set r = GetRandomInteger(0,MaxHero)
Создать героя TypeHero2[r]

set i = 0 //счетчик цикла
set a = 0 //счетчик свободных героев
loop
	exitwhen i > 2 //у меня макс число героев в станд списке = 2 (0,1,2)
	if TypeHero2[r] == TypeHero[i] then //надо найти номер типа i из станд списка
		set b[i] = true //записываем что занят
	endif
	if not b[i] then //если не занят
		set TypeHero2[a] = TypeHero[i] //перезапись типа
		set a = a + 1
	endif
	set i =i+1
endif
set MaxHero = a
Зачем делать эти лишние действия с подсчетом занятых и не занятых юнитов перезаписывая весь массив каждый раз заново, если можно сделать так:
set r = GetRandomInteger(0,MaxHero)
Создать героя TypeHero2[r]

set TypeHero2[r] = TypeHero2[MaxHero]
set TypeHero2[MaxHero] = null
set MaxHero = MaxHero - 1
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

GetLocalPlayer:
Надеюсь это не в моей карте проблема.
Я бы надеялся на обртаное, ибо свою карту можно исправить, а с багом движка придется жить. Ждем результатов, мне тоже стало интересно.
В общем другие карты не вызывают таких проблем. Отыграл на карте (из XGM - Королевства 2.0) 14 500 сек и ничего подобного не случилось. Хотя на той карте нет динамических юнитов. Все юниты созданы еще в редакторе карт. Динамических триггеров тоже нет. Таймеры не уверен.
У меня есть все динамическое (кроме зданий и боссов). Карта еще далека до выхода, так что не обращайте внимания на всякие погрешности.
Прикрепляю карту (Версия 1.2.4e):

Если кто скачал, отписывайтесь здесь, пожалуйста, чтобы понимать, кто в деле.

Возможно кто-то тоже может оставить карту включенной на 6000 - 12000+ сек на тест, и сказать после о результатах, буду благодарен. Ну или подскажет в чем может быть дело.

UPD: Закинул карту в шапку
Загруженные файлы
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

UrsaBoss:
Вроде помню что говорилось: типа можно отключать запись реплея и нагрузка на карту/варкрафт уменьшится
Всегда отключаю реплей пока делаю карту, только после того, как закончу проверяю работу карты с включенным реплеем. (Сейчас отключен)

Сегодня на ночь ставил и зависло через 12 000 сек. Буду тестить другую карту на подобный баг. Надеюсь это не в моей карте проблема.
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

8gabriel8:
А были случаи, что и через 6000 секунд всё нормально было с картой?
Только 2 раза доходил до такой отметки. Обычно не провожу таких долгих тестов, ибо уже через 5-10 минут понятно есть ли утечки или нет. (По счетчику)
0
8
5 лет назад
0

» WarCraft 3 / Баг через 6000 сек

8gabriel8:
А ты наблюдал баг тоже через 6000 секунд?
Да, оба раза именно через этот промежуток времени. На ноуте стоит при работе от сети не уходить в ждущий режим и вообще куда-либо. Хотя при включенном warcraft 3 вообще не вырубается сам.
Просто ведь по сути зависает же не через 6000 сек после включения warcaft 3, а именно на карте. Хотя игра отвечает, то есть нет надписи (Не отвечает). Могу переключать окна на Windows.

Сейчас пока запустил карту в фоновом режиме. 500 секунд никаких подозрений.
(Кстати я был во второй раз за пару минут до 6000 сек и тоже никаких подозрений на лаги.)
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

PyCCKuu_4eJl:
Возможно какой-либо переодический таймер на +- 0.7 сек, заполняющий массивы.
Массив в 8192 закончился, и при подборе свободных ячеек каждый раз уходит в бесконечный луп, который выдаёт лаг в 3 сек и обрывается на оп лимите.
Единственная идея, ибо сам сталкивался с этим
Идея хорошая, но у меня стоит круговой счетчик записи на массивах (их всего парочка), при этом если оставлять карту на произвол (без взаимодействия с игроком), то в них ничего не записывается.
Есть Хэш таблица, с которой работаю относительно недавно, но все FlushChildHashtable() - производятся своевременно в порядке. Счетчик Handler-ов всегда на экране и колеблется от 5000 до 5200 выше и ниже не изменяется.

Золото растет, может это? Сейчас буду тестировать на предел золота.
Есть способности, которые создают триггеры и таймеры, но все это самоуничтожается (имеет таймаут после чего уничтожается), утечек тоже не вызывает, поскольку счетчик Handler-ов всегда колеблется в одном диапазоне. Триггеры удаляю правильно (читал как это делать и смотрел как сделаны в других картах, так что алгоритм верный).
Возможно ли, что даже при том, что триггеры уничтожаются и не висят, есть определенный лимит на создание триггеров на одну карту, даже с учетом уже уничтоженных, которых уже нет.

Золото дошло до 10^6 и все, оно тоже не вызвало такие проблемы (это было очевидно).
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Баг через 6000 сек

BrEd Pitt:
Мб наслоились где-то таймеры, запускающие события. ИИ есть? И вообще, телепаты в отпуске
Написал же, что утечек нет (таймеры\триггеры не плодятся и не висят). ИИ допотопный в духе беги и сражайся, когда появился. Войска обновляются каждые 30 сек сами, но и умирают в бою. (Можно бесконечно смотреть на эту битву). Юнитов не бывает на карте больше 60 для всех игроков +-100 нейтральные.
2
8
5 лет назад
Отредактирован pAxsIs
2

» WarCraft 3 / Создание нейтральной стороны

Сделать 3-ий клан из ботов и настроить в редакторе альянсы.
0
8
5 лет назад
0

» WarCraft 3 / Как выбрать в триггере всех игроков?

Очень зависит от целей.
Для некоторых подойдет:
+ GetLocalPlayer(), для других через:
+ события в триггере, а для третьих можно и через:
+ итераттор в цикле по каждому игроку
+ а можно использовать и группу игроков
Напиши хотя бы примерно абстрактную цель твоего вопроса.
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Введение в JASS новичка (меня)

Raised:
JassHelper? Встроен в последние сборки нестандартных редакторов как наших, так и с Hive.
Не судите строго, я в JASS недавно (также как и недавно ушел со стандартного редактора карт на JNGP), но пока увидел работу JassHelper только в проверке на ошибки в коде, во время сохранения (хотя часто указывает не на то место).
Поскольку пишу под версию 1.24e, то выбрал такой JNGP, это к вопросу о работе моего JassHelper. Пробовал новее версии, но потом карту открыть невозможно.
По поводу vJass и JASS сложилось впечатление, что это одно и тоже, потому что во многих местах видел код vJass не использующий никаких реализаций ООП. Сейчас понял примерную разницу.
По поводу массива почему такой интерес, хотел бы реализовать что-то такое (напишу на С++, надеюсь понятно будет):
void Foo (vector<int> &v)
{
	for (auto e : v) {
		cout << e << endl;
	}
}
Суть в том, что может передатся любой массив определенного типа в функцию, а функция уже сделает определенные действия используя этот массив.
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Введение в JASS новичка (меня)

Hate:
Нужно.
KillUnit(GetTriggerUnit())
что ты здесь собрался обнулять?
Я говорил про такой пример:
function foo takes nothing returns string
	local string s = "This is a string"
	
	return s
endfunction
Вместо string можно любой другой тип данных подставить для примера
0
8
5 лет назад
Отредактирован pAxsIs
0

» WarCraft 3 / Введение в JASS новичка (меня)

Итак объединю все ответы:
  1. Передача происходит по ссылке
  2. см. в п.1.
  3. Обнулять можно только до возвращения, а возвращать лучше через глобальную переменную
  4. Такой возможности - нет
  5. В обычном JASS объявление:
	local real array nameArray
Определение не требуется, поэтому Обращение:
	set nameArray[0] = 1.0
Передача в функцию просто по имени? Происходит передача по ссылке для Handle, остальные по значению.
  1. Возможно есть структуры в vJASS (структура по сути от класса ничем не отличается, кроме public -> private).
  2. Вот пример, который я не смог понять, для меня это не самоговорящее название:
	call AnyUnitEvent( gg_trg_TrigName, EVENT_PLAYER_HERO_SKILL )
Могу кучу версий подобрать что будет означать этот ивент. Поэтому некоторые нативки довольно непонятны.

Еще один доп вопрос: Разве vJASS и JASS не одно и тоже? Раньше когда читал так и думал.
Правильно все ответы разобрал?
0
8
5 лет назад
0

» WarCraft 3 / Нужна наработка триггерного морфа (GUI)

Самый банальный способ: Перед морфом можно предметы сохранить в массив из 6 ячеек (по слотам к ячейкам), а после морфа дать герою из массива в те же ячейки предметы.