N7 Molot, не тот сандбокс. Сандбокс с точки зрения кода - когда код внутри сандбокса имеет доступ только к строго заданому API и не имеет легких способов из сандбокса выбраться и сделать что-то не разрешенное разработчиком. Причем желательно чтобы еще и не нужно было заново ничего компилировать после каждого изменения пользовательского кода и/или распространять компилятор вместе с продуктом.
N7 Molot, делал когда-нибудь сандбокс на джаве или шарпах? Я делал. В реальном коммерческом проекте. В итоге перешли на Lua и питон. При этом бекэнд на джаве.
N7 Molot, ни шарпы ни джава не являются скриптовыми языками, в отличии от Lua - раз. У близов куча опыта работы с Lua - два. Организовать ограниченную по доступу песочницу в Lua намного проще, чем в джаве и шарпах - три. Аудитории основаной на WoW как-то ближе и понятней Lua, хотя я и сомневаюсь что многие авторы плагинов к интерфейсу ринутся делать карты для рефоржа, но всеравно - четыре.
iliamakar, и каким боком сторонний кастомный интерфейс для WoW, запиленый между прочим на Lua, имеет отношение к ремастеру варкрафта? 99% что это просто ошибка в сабах и речь все-же о Lua.
Doc, да, я тоже это услышал...
Я даже догадываюсь откуда ноги - китайцы, насколько я знаю, давно юзают Lua подгружая его через мемхак - близы, скорее всего, сделали финт ушами и ради этой части комьюнити решили добавить Lua нативно, тем более что мемхак 99% перестанет работать в каком бы то ни было виде.
Второй вариант который мне приходит в голову - они могли слизать из WoW использование Lua для интерфейса - возможно речь об этом, тем более что проскакивала инфа о возможности кастомизации интерфейса.
А еще можно попробовать по играться с параметрами союза и общими магазинами работающими только на союзников - возможно параметр союза "заклинания действуют на союзников" и способность выбирающая только союзных юнитов для управления таверной умеют работать вместе. Тогда меняем параметры союзов на время выбора героя по мере необходимости и перед началом боя приводим их в исходное состояние. Ну и после выбора убираем принадлежащего игроку даммика получающего доступ к таверне.
Bergi_Bear, Тогда я не понимаю в чем проблема добавить еще один вид триггерного движения, если все вычисления в одном месте, в худшем случае нужно будет добавить хранение информации о том, в каком режиме передвижения юнит сейчас находится и на основе этой информации игнорировать часть вычислений.
При желании, близы могли бы перенести jass на виртуалку от старкрафтового галакси скрипта, она чуть менее дырявая, но это опять море работы чтобы сохранить синтаксис и особенности поведения.
Или триггерный полет или морф в летающего, других вменяемых вариантов не вижу.
Но если делать триггерный полет, то лучше сразу объединять все системы триггерного движения в одну, чтобы один таймер двигал всех триггерно двигаемых на основе данных из массива, а данные чтобы заполнялись по разному в зависимости от текущих условий.
Отлично, значит мы можем однозначно соотнести номер игрока с юнитом в массиве?
переключившихся в летающий режим героев добавляем в глобальную группу
запускаем таймер на малом периоде, что-то около 0.04, который перебирает всех в группе и выполняет смещение к взятой из массива точке со скоростью движения героя (тут можно экспериментировать с разными алгоритмами движения, главное что все данные мы можем легко получить из массива по номеру игрока которому принадлежит юнит)
отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
при отключении полета убираем героя из группы и перестаем отслеживать его приказы
А, т.е. в карте уже есть системы триггерного движения? Значит самое время унифицировать их в одну, чтобы одна и та же система управляла и полетом и физикой и другими видами триггерного движения.
А отдельных юнитов которые должны получать этот псевдополет много одновременно на карте?
Если юнитов не слишком много, то вполне реально реализовать полностью триггерное движение в режиме псевдополета, особенно если это один герой на каждого игрока.
Если программа не разрабатывалась изначально с учетом многопоточности, то переделывать её под многопоточность это задача не из простых. Даже вычленение отдельных задач поддающихся распараллеливанию может оказаться неподъемным в разумные сроки, если код слишком связаный.
Триггеры рассчитаны на вызов при срабатывании событий и, соответственно, не принимают параметров, поскольку события не передают параметров.
Кроме того, значение локальной переменной, как и параметров, хранится только в пределах текущего вызова функции - даже если поставить мемхак и вызывать триггер с параметром, триггер никаким магическим образом не запомнит значение параметра для следующих вызовов.
Я бы на твоем месте начал с более простого спела - реализовал бы огоньки юнитами со способностью 'Aloc' (тогда их нельзя будет выделить и атаковать) и с пассивным адским пламенем или пламенем феникса, без дополнительного урона от длительности горения, но зато и без необходимости самостоятельно реализовывать поиск целей и нанесение урона.
Ну и да, локальные переменные типа точки мало обнулять, их перед этим нужно еще удалять соответствующей функцией.
VVelikolepniy,
глобальная переменная - доступна в любом месте
локальная - доступна только в той ФУНКЦИИ в которой объявлена
функция - в рамках jass это самодостаточный фрагмент кода, могущий принимать параметры, содержать локальные переменные и возвращать значение
триггер - конструкция, которая при срабатывании события проверяет условия и вызывает действие если условие выполнено, условия и действия триггера выполнены в виде функций
VVelikolepniy, просто сформулируй ответы на эти вопросы - я не смогу помочь не разобравшись в том, что именно ты пропустил из основ. А попытки получить доступ к локальной переменной - явно говорят о том что что-то пропущено.
Я просто не понимаю почему я в функцию не могу взять ПЕРЕМЕННУЮ, как мне создать триггер, использующий локальную переменную из другого триггера? засовывать в глобальную переменную массив это костыли, наверняка есть способ это сделать
Начнем с простого - что такое переменная? Что такое глобальная переменная? Что такое локальная переменная? Что такое триггер? Что такое функция? Без понимания этого тебе не продвинуться дальше.
Потому что у меня будет 3 разных спелла которые будут по разному вызывать огоньки, мне кажется было бы оптимальнее сделать функцию и просто во всех моих заклинаниях вызывать ее и спокойно работать дальше
Замечательно, три спела создающих огоньки, но зачем триггер при этом? Что не так с вызовом функции которая просто создает огоньки без вызова триггера?
Ред. prog
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
скриптовыми
Ред. prog
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
Я даже догадываюсь откуда ноги - китайцы, насколько я знаю, давно юзают Lua подгружая его через мемхак - близы, скорее всего, сделали финт ушами и ради этой части комьюнити решили добавить Lua нативно, тем более что мемхак 99% перестанет работать в каком бы то ни было виде.
Второй вариант который мне приходит в голову - они могли слизать из WoW использование Lua для интерфейса - возможно речь об этом, тем более что проскакивала инфа о возможности кастомизации интерфейса.
» WarCraft 3 / Десинхронизация при выборе персонажа
Ред. prog
» WarCraft 3 / Десинхронизация при выборе персонажа
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
Ред. prog
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
Но если делать триггерный полет, то лучше сразу объединять все системы триггерного движения в одну, чтобы один таймер двигал всех триггерно двигаемых на основе данных из массива, а данные чтобы заполнялись по разному в зависимости от текущих условий.
Ред. prog
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
Ред. prog
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
Если юнитов не слишком много, то вполне реально реализовать полностью триггерное движение в режиме псевдополета, особенно если это один герой на каждого игрока.
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
» WarCraft 3 / Сделать юнита по настоящему летающим или придумать костыли
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Идеальный дамми скил для вызова триггероно заклинания
» WarCraft 3 / Отключение глобального освещения
» WarCraft 3 / Модернизация триггеров из 5 урока по джазу
Кроме того, значение локальной переменной, как и параметров, хранится только в пределах текущего вызова функции - даже если поставить мемхак и вызывать триггер с параметром, триггер никаким магическим образом не запомнит значение параметра для следующих вызовов.
Я бы на твоем месте начал с более простого спела - реализовал бы огоньки юнитами со способностью 'Aloc' (тогда их нельзя будет выделить и атаковать) и с пассивным адским пламенем или пламенем феникса, без дополнительного урона от длительности горения, но зато и без необходимости самостоятельно реализовывать поиск целей и нанесение урона.
Ну и да, локальные переменные типа точки мало обнулять, их перед этим нужно еще удалять соответствующей функцией.
» WarCraft 3 / Модернизация триггеров из 5 урока по джазу
глобальная переменная - доступна в любом месте
локальная - доступна только в той ФУНКЦИИ в которой объявлена
функция - в рамках jass это самодостаточный фрагмент кода, могущий принимать параметры, содержать локальные переменные и возвращать значение
триггер - конструкция, которая при срабатывании события проверяет условия и вызывает действие если условие выполнено, условия и действия триггера выполнены в виде функций
» WarCraft 3 / Модернизация триггеров из 5 урока по джазу
Ред. prog
» WarCraft 3 / Модернизация триггеров из 5 урока по джазу
» WarCraft 3 / Модернизация триггеров из 5 урока по джазу