ScorpioT1000, ещё проще купить пару компов с барахолки, соединить их и запускать варики на них, через хамачи или радмин какой нибудь ) минимум кодинга и мозголома ))
Утилита хороша, бесспорно, но есть нарекание к удобству использования.
Предположим, что я обычный картодел, просто сделал карту, даже гуи знаю едва-едва, на уровне "триггер - инициализация карты - действия - приказать юниту Пехотинец 0001 <gen> двигаться в центр карты", и я решил добавить утилиту в комплект к своей карте, естественно, не проверив её работу, и загрузить всё это дело на ХГМ. Юзер, скачавший карту и файлы, офигеет от количества непонятного чего-то там и удалит карту и файлы нафиг. Разбираться он не будет, слишком сложно. И не он один, скорее всего, так поступит. Зачем челу, чтоб поиграть, лезть в технические дебри?
Поэтому возможно ли сделать исполнение утилиты в виде 1 mix файла (по аналогии с FPS Unlocker или Widescreen Fix) и 1 txt файла - сделанного по аналогии со стандартным варовским Custom Keys.txt, чтобы установка/удаление было по типу "копировать - вставить", а правка была возможна тупо в блокноте?
П. С. Лично я бы разобрался как поставить это в текущем виде, но ведь мапмейкеры не для себя карты делают, а для юзеров.
Под массивом или под индексом одного массива?
Если индекс, то по циклу, как выше написали.
Или под каждого игрока свой отдельный массив и они записаны под одинаковые индексы?
AMark, В статье забыли очень важную вещь написать - "Также вы обязательно должны выучить всё, что связано с графикой игры, как минимум с моделями, а также научиться делать модели, освоить работу с анимациями, а в идеале ещё и освоить фотошоп и научиться рисовать текстуры. Ведь карта должна отличаться от остальных!"
ScorpioT1000, У меня тогда возник вопрос, не связанный с jass. А Вар сам по себе многопоточен? Например, рендеринг моделей, обработка анимаций, свет, обработка звуков, поиск данных по slk итд - идут в том же потоке, что и обработка игрой jass скрипта, или в других?
Функции ExecuteFunc, Preload и .ai скрипты стартуют свои потоки и их выполнение происходит в отдельном стеке. В случае с preload и .ai даже в отдельном глобальном контексте.
И не jass, а Вар, но это выходит за рамки обсуждения, на чём можно и поставить точку
Неважно какой поток и где, все они обрабатываются как один, по порядку
Если бы так было, тогда бы оно работало так, как нарисовано на картинке справа. И каждый TriggerSleepAction задерживал бы всё последующее исполнение кода. Но подобного не происходит.
А вообще, неплохо было бы получить от тебя ссылку на статью, где доказано, что Вар однопоточный.
Был такой миф / предмет спора - что происходит с событием, утекает ли оно при удалении триггера или удаляется?
Вот Q/A с Unryze по этому вопросу (из переписки в ЛС):
Q: ...при смерти и удалении юнита из игры удаляется ли привязанное к нему событие на отлов урона итд? Так же попутно вопрос - если все такие события будут завязаны на 1 триггер, будут ли они удаляться в этом случае? Или нужно непременно под каждый юнит делать отдельный триггер?
A: Ничего не удаляется, удаляется лишь юнит и именно всё идущее от него, абилки атаки и т.д. Триггеры никак не учитываются.
Q: ...Если мы удаляем триггер из игры через destroy trigger, и если на триггере висит событие, оно удалится при удалении триггера или останется висеть в памяти как отдельный handle?
A: На ужапи - да, на ванилле/рефе нет, ибо у них в коде косяк, который не очищает/удаляет Action'ы, а вот Event - удалятся. Вопрос в общем ты задал не совсем корректно, ибо кроме событий есть более важные - действия, которые вот не удаляются.
rsfghd, а, ну да, кстати, забыл про него ) спасибо)
Правда, у него есть недостаток - если имеется в виду время суток - оно может течь по разному, если в игровых константах настроить другую длительность суток.
rsfghd, Да не говорил я, что они прямо зло. Просто их не надо использовать, где они могут вызвать проблемы и наложение данных. Например, в гуи вместо локалок или для работы с вейтами и таймерами. (Исключая ситуации, где под каждый вейт или таймер своя глобалка)
Для частого переноса данных или использования вместо локалок - глобалки зло, да. )
А не вообще. Частый перенос данных - имелась ввиду ситуация, к примеру, когда триггер реагирует на событие смерти юнита, и в его коде в глобалку сохраняются данные, а потом через вейт используются. Тогда будет наложение, ведь триггер сработает много раз.
П. С. Не знаю других способов, как без вейта или таймера сделать отложенные действия, когда это нужно. Не писать же мозголомные системы
nazarpunk, конечно, могу. К примеру, тот же таймер, где в каллбек подаются данные из глобалки, и притом таймер не один, а глобалка одна. Очевидно, что данные могут быть туда перезаписаны не 1 раз и будет подано не то значение.
Пример 2 - get trigger unit записывается в глобалку, а потом глобалка используется после вейта, триггер срабатывает не 1 раз. Очевидно, что данные..., ну ты понял.
будешь провоцировать и хамить - буду на тебя сразу жалобы в админку кидать, без лишних слов
Думаю, если есть возможность перейти на луа по дефолту, хуже не будет, и пункты 1 и 2 уйдут сами собой )
По п 3 - глобалки разве что для удобства нужны, как константы, чтобы избежать "магических чисел", например, и для переноса каких либо общих данных между функциями, вроде каллбека таймера итп. И массивы для бд подойдут, в сочетании с циклами. Для частого переноса данных или использования вместо локалок - глобалки зло, да. )
Механика хороша, почти Скайрим получился. П. С. Так ведь южапи может ловить координаты мышки и кнопок, можно в теории 1 в 1 реализовать замки, как в скайриме...
LastUchiha, короче говоря, вот такую я функцию использую у себя для тэгов. Утечек не было, судя по Handle counter. Видно или только локальному игроку, или всем, в зависимости от параметра localPlayer
function SetTextTagSett takes unit U, string Str, integer Red, integer Green, integer Blue, boolean localPlayer returns nothing
local texttag TT = CreateTextTag()
call SetTextTagLifespan(TT, 2.00)
call SetTextTagText(TT, Str, 0.03)
if localPlayer then
call SetTextTagPosUnit(TT, U, 0.00)
call SetTextTagColor(TT, Red, Green, Blue, 255)
call SetTextTagPermanent(TT, false)
call SetTextTagFadepoint(TT, 0.10)
endif
set TT = null
endfunction
Попробуй примерно по такому же принципу сделать, только без входных данных типа юнита и цвета.
» WarCraft 3 / TFTLocal
» WarCraft 3 / TFTLocal
» WarCraft 3 / Как найти максимальное число в массиве
Если индекс, то по циклу, как выше написали.
Или под каждого игрока свой отдельный массив и они записаны под одинаковые индексы?
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Правда, у него есть недостаток - если имеется в виду время суток - оно может течь по разному, если в игровых константах настроить другую длительность суток.
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
П. С. Не знаю других способов, как без вейта или таймера сделать отложенные действия, когда это нужно. Не писать же мозголомные системы
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
Пример 2 - get trigger unit записывается в глобалку, а потом глобалка используется после вейта, триггер срабатывает не 1 раз. Очевидно, что данные..., ну ты понял.
Ред. EugeAl
» WarCraft 3 / Рассинхрон в мультиплеере, оптимизация кода
По п 3 - глобалки разве что для удобства нужны, как константы, чтобы избежать "магических чисел", например, и для переноса каких либо общих данных между функциями, вроде каллбека таймера итп. И массивы для бд подойдут, в сочетании с циклами. Для частого переноса данных или использования вместо локалок - глобалки зло, да. )
» WarCraft 3 / [UjAPI] Chest Puzzle
» WarCraft 3 / [UjAPI] Chest Puzzle
» Гейминг / Cyberia Nova выпустили DLC Смута про Нижний Новгород
» WarCraft 3 / Что делать если Fatal Error при запуске карты? Warcraft 3.
Ред. EugeAl
» WarCraft 3 / Что делать если Fatal Error при запуске карты? Warcraft 3.