27

» WarCraft 3 / Вопрос о потоках

нет. там однопоточное и последовательное. этот как призыв юнитов, пример с событием призыва юнитов. когда вы одновременно двух призываете абилкой, но на самом деле тут последовательно обрабатывает триггер. Сначала триггер обрабатывает действием с первым призванным, а потом и со вторым. Короче, триггер два раза сработал.
Или возьмем пример урона:
вы ловите каст, и в триггере наносите триггерный урон и вешаете эффект. А еще у вас есть система урона. Когда вы наносите урон, поток паузится и начинает обрабатывает триггер урона. А потом возвращаемся к триггеру каста, и вещаем эффект, короче доделываем действия триггера до конца. В триггерах урона нельзя делать урон, тк мб зацикливания само на себя, поэтому триггер отключают, чтобы не сработало.
Или возьмем, обработку группы юнитов. Здесь тоже самое как и с уроном. Когда вы выделяете несколько юнитов в группу и что-то делаете. Там ForGroup то там создается на каждого юнита отдельный поток, и обрабатываем каждого EnumUnit. Сначала одного обработали, потом запустили слде поток и обработали след юнита, и так до конца со всеми. Внутри обычно нельзя юзать вэйты, тк вэйты паузят Action триггера - будет обрыв потока
событие триггера запускает триггер, поток создает. многие константы вроде TriggerUnit и др наследуют данные триггера
таймер вроде создает отдельный поток
создать еще можно ExecuteFunc
если у вас каким то образом еще и указано на триггер событие завершения таймера. Это все равно разные участки кода. Таймер вызывает функцию, событие вызывает триггер. Если у вас несколько таймеров, они все равно никак не могут помешать друг другу.
проверить можно дебагом, что за чем следует. нам нужно знать начало и завершения.
для чего такие вопросы?
27

» Прочее / Generals 2 ждали? Получайте

build, не я про то, что в рд3 убрали классную систему добычи ресов харвестерами. Из этого была тактика мешать врагу добычи, защищать харвестеров своих итд. Настроил 15 харвестеров, они вам миллионы по всей карте собирают. рд3 вышел слишком мультяжным, анимированным, чего стоят ужасные ролики кампании. И много чего переделали. а в Япония как противник, это уже странно: аниме-девочки, роботы, самураи. В свое время когда я купил игру, там в кампании за советов дредноут был приближен к реализму, он такой огромный, медленный - зачем они такое сделали не понятно. Или странный десант в Санкт-Петербурге, сажаем в машину пехоту, и они как патроны вылетают из машины.
27

» WarCraft 3 / Реалистичный снаряд

rsfghd, а он реал работает? а то мне кажется что-то не правльно. легче чужоф код посмотреть
27

» WarCraft 3 / Как систему мутов сделать?

типа чтобы не видно было вам пишут?
можно фрейм спрятать, если про рефорджет. ну тогда и полезную инфу будет скрывать.

станд способами не знаю
если только фреймы мучить
Можно окно чата выкл, Chat Input box (окно чата). Это тогда вы выключаете окно ввода текста через Enter. Но точно не знаю, как этот box работает, не тестил. Тогда вы совсем никому писать не сможете.
Еще можно написать в чат-диалог в мультиплеере. Можно отключить кнопку чата/журнала, и тогда вы никогда этот журнал сообщении не откроете. Можно заменить своим.
И третий вариант. это спрятать ORIGIN_FRAME_CHAT_MSG и ORIGIN_FRAME_UNIT_MSG. Это когда вам пишут или выводятся сообщения дисплея игры / DisplayTextToPlayer. Но нужно будет затестить. Короче, не видно будет полезной инфы. можно фрейм спрятать, если про рефорджет. ну тогда и полезную инфу будет скрывать.
ORIGIN_FRAME_CHAT_MSG - сообщения чата
ORIGIN_FRAME_UNIT_MSG - системные сообщения, сообщения дисплея, смерти гг DisplayTextToPlayer
27

» WarCraft 3 / Реалистичный снаряд

продолжение
углы надо найти, чтобы направление векторам задавать. Для этого нужно просчитать вектор движения dx,dy,dz
Ux,Uy,Uz - тек точка
Tx,Ty,Tz - конечная точка, куда должен прилететь снаряд
dx = Ux-Tx
dy = Uy-Ty
dz = Uz-Tz
theta = Atan2(SquareRoot(dx*dx + dy*dy), dz)
phi = Atan2(dy/dx)
rsfghd, ну вы должны сами понимать наскока она увеличивает/понижает скорость. Тут еще как бы есть время t, помноженное на ускорение a. t счетчик времени у вас растет? Очень сильно увеличивает вперед из-за времени. А еще как сильно понижаться будет?

Есть мысль, что половину пути L/2 приравнять - 100% или к max_a =1.00
R - расстояние между тек точкой снаряда и серединой маршрута
L - это расстояние от начала движения до конечного
a = R/(L/2) - вот процент ускорения (от 1 до 0). чем ближе ваша точка находится к центру дуги или середины маршрута, тем ниже процент a. В центре дуги ускорения не останется (a=0). и она начнет убывать (a<0 - типа под гравитацией). когда долетает до середины дуги. мы меняем знак наверное? и надо делать со счетчиком времени t, типа убывать, а то обратно будет удвоенно понижать.
Вопрос: что делать дальше? после центра дуги параболы? Ведь нужно, чтобы скорость понижалась, ведь в центре дуги достигла макс скорости. Теперь она должна понижаться по формуле: U = U0 - at
Вторая проблема - это счетчик времени t, если продолжит дальше увеличиваться, то это сильно повлияет на скорость. Я не знаю точного ответа, надо тестить. надо простенький пример какой-то провести, чтоб проверить. Ведь счетчик времени является множителем, очень сильно торможение будет, так и не долетит до цели. Возможно стоит убавлять счетчик или обнулить.
пример
a - коэф сильно зависит от расстояния.
в итоге это мб не то что нужно. дело в том, что до цели долетает совсем ослабленный снаряд. он долетит до цели со скоростью U=1. мб надо вначале придать ускорение увеличивать в 2 раза, чтобы не казался слабысм

1
Загруженные файлы
27

» WarCraft 3 / Реалистичный снаряд

На скорую руку составил. Точно не могу сказать, что правильно. Но логически должно быть верным. Хочется на сие творение посмотреть)
Раскладываем скорость на векторы:
Vx=1,Vy=1,Vz=1 - изначально скорость нулевая, тк ракета еще не вылетела. Когда мы запустим, наша скорость будет равна 1. Скорости придает ускорение.
a=0 - ускорение. Изначально оно равно нулю, таймером каждую секунду увеличиваем наше ускорение. Когда снаряд достигнет середины дуги, или половины пройденного пути, тогда уже наше ускорение превращается в понижение. Будет постепенно понижаться до нуля.
Ux,Uy,Uz - тек положение нашего снаряда
каждую секунду тикаем таймером:
изменяем нашу скорость. Вот здесь я не уверен. Надо самому потестить, устал. Но взял из учебников физики. av-physics.narod.ru/mechanics/acceleration.htm простенькая формула.
Vx = Vx + at
Vy = Vy + at
Vz = Vz + at
изменяем наше положение снаряда. черт, забыл углы. ведь координаты, а тут углы. забыл относительно чего углы брать. Углы надеюсь сможешь понять как, а то лень через арккосинус
раскрыть
Ux = Ux + Vx * Sin(theta) * Cos(phi)
Uy = Uy + Vy * Sin(theta) * Sin(phi)
Uz = достаем нужную высоту из параболы (Uz + Vz * Cos(theta) )
//увеличиваем скорость
a = a + 1 - какую вам надо
Загруженные файлы
27

» WarCraft 3 / Как сделать "динамичный" магазин?

можно даже сделать динамичный склад. Как вам угодно. Но без jass вам будет сложно. как и сказал build
Обновить список можно, можно список страниц создавать
можно еще заменить на фреймы. Здесь вы еще цены регулируете, число и прочее. Надо понять как делается, особенно с ценами ресов. Надо в fdf или где нибудь пример найти всплывающего окна при наводке мыши с ценником tooltip вроде называют.
27

» WarCraft 3 / Перемещение Иллюзий

Verschlinger,
вроде все правильно. но без карты сложно понять. Догадка: мне кажется, просто нужно точки запоминать. Задача: Вот ты сделаешь подмену кастера и иллюзии местами. Проблема: Вот кастер меняется с иллюзией, беря ее тек координаты, а иллюзия ваша не меняется,из-за того что ваша точка кастера сместилась к координатам иллюзии, ваша иллюзия поэтому и не поменялась местами. так ли оно у вас работает?

а US это какой спецэффект?

там есть условие на определение иллюзии.
27

» WarCraft 3 / Перемещение Иллюзий

По какой причине я не могу переместить иллюзию?
В моём триггере она цель способности...
странно объясняешь, что вы хотите сделать?
каким образом создаются иллюзии? создаются ли они? зачем перемещать? когда я прочитал, подумал про то, что парень пытается создать абилу для перемещения. очень странное.
берете условие "Юнит является иллюзии = да". можете найди группу или каким образом выделить юнита. и перемещаете куда надо. надо больше инфы. каким образом оно у вас перемещается? куда переместить? вы хотите сделать целевую кастомную абилку на триггерах для перемещения иллюзии? или у вас определенное событие (вместе с героями в зону покупки перемещаем и иллюзии, или наоборот, из иллюзии)
Не получается.
что у вас не получается? карту или скриншот. или просто хотите примеров?

Есть действия перемещения в точку. хоп и иллюзия там уже
27

» WarCraft 3 / Wait until

TriggerSleepAction используется только в функции действия триггера, когда триггер создает один поток. Вэйт паузит поток. К примеру,, если вейт использовать в ForGroup, где используется функция, и на каждого выбранного юнита GetEnumUnit() создается отдельно поток, и короче бывает там не работают вэйты. возможно вы где то в аналогичны ситуациях в узких местах используете, где обрывается поток.
замечал такое не раз.
можно продебажить, работает ли она у вас. лучше таймеры научиться использовать
27

» WarCraft 3 / Иконка атаки, защиты.

ScopteRectuS,
Это кто такую годноту написал? Целых 118 страниц про фреймы!
это я)) не думал что так выйдет) зато все разобрали еще до меня, я на русский перевел и скрины, и мнение свое. все что там пишешь иностранец не все бывает понятно. Самому надо пощупать
27

» WarCraft 3 / Иконка атаки, защиты.

думаю нужно поискать в импорте.
хотел скинуть статью на фреймы, но думаю оно вам не поможет. вам нужно что-то конкретное, а именно иконки.

ищи папку UI

программа для рефорджа CASC Viewer
папка UI/widgets/console/раса/
думаю наверн и в старом MPQ-архиваторе похожее
27

» WarCraft 3 / Регистр после запуска рефорджет

скачай файл регистра. засунь куда-нибудь. И потом после работы в рефордже, когда захотите обратно вернуться в 1.26, вам нужно нажать на файл регистра, и оно само сбросит настройки (спец файл регистра для этого и создан). или самому удалить в регистре вручную.

в рефорджете просто:
  • больше функции. хотя не все могут работать. но многие фиксятся костылями
  • фреймы есть. можно какую нибудь техничную карту сделать
  • гибкий lua. очень понравилось, что код можно как угодно писать. мат функции и др функции просматриваются
минусы:
  • долгая прогрузка. закаляет ваше терпение. раньше было не так.
  • а еще бывает комп нагревает.

Загруженные файлы
27

» Прочее / Generals 2 ждали? Получайте

как игра в генералов, старички? я к сожалению, даже первых не видел, тк в первых не играл, кроме рд2. добыча ресов напоминает как в рд3, ну и понятно что на платформе рд3
27

» WarCraft 3 / Таймер вместо вейт

есть счетчики триггера. сколько раз они запускались. вот их можно использовать
27

» WarCraft 3 / Таймер вместо вейт

SсRealm, все что щас делаешь немного глупо. Лишняя работа.
вэйт не глючный, немного дольше работает, чем таймер. Пример, таймер в 0.00 сек моментально срабатывает, а вэйт в 0.00 сек заметно дольше кажется 1 сек ушла у него. Может эти вещи не очевидны, но в некоторые моментах заметно. Не могу просто вспомнить хорошие примеры. Только с приказом, и то дурацкий метод. Пример, когда нужно было отменить приказ:
  • с вэйтом в 0.00 сек от полученного юнит успевает повернуться.
  • с таймером в 0.00 сек юнит уже стоит, будто и не получал приказ.
А вспомнил, короче нужно спрятать иконку сразу же, но при событии он не сразу создается. Пример юнит начал строительство, здания еще как бы не существует. Поэтому делаем задержку. Вообще во многих событиях происходят так: нас уведомляют что произойдет. Ну вот мне нужно спрятать иконку:
  • вэйт с 0.00 сек - видно на на доле секунд иконку прежде чем исчезает. это как-то не красиво.
  • с таймером 0.00 сек - я вообще ничего не вижу. что вообще то хорошо
видна же разница.
Но не хочу говорить что вэйт плохой. И прочее. Он может быть и полезным. К примеру задержку между приказами. Пример продажа всех итемов с инвентаря в магазин. Там можно замутить авто-продажу. Продажа происходит мгновенная, но чтобы выполнить все приказы нужна задержка. Можно было и на таймер, но код длиннее был бы
27

» WarCraft 3 / Нужна помощь или объяснение по локальным мультибордам

можно в одном мультиборде разным игрокам показывать разные тексты с помощью GetLocalPlayer
Ты не сможешь показать три разных мультиборда. Только один на экране будет отображен. Пример у тебя 1-ый и 2-ой мультиборды. У игрока локально отображен какой то один. Пусть будет 1-ый. Есть спец нативки показа мультиборда. Когда ты показываешь этому игроку 2-ой мульт, 1-ый прячется. Хочешь снова 1-ый показать, показываем его.
Тебе надо как то запоминать тек номер. Пример хочешь показать диалог, прячем мульт.
Можно поизучать фреймы, и создать что то похожее. Если вы знаете как делать. Есть фреймы и тут.

Есть функции, которые показывают свернут или отображен мульт:
native IsMultiboardDisplayed takes multiboard lb returns boolean
native IsMultiboardMinimized takes multiboard lb returns boolean
и нативка которая скрывает или наоборот показывает:
native MultiboardDisplay takes multiboard lb, boolean show returns nothing
27

» WarCraft 3 / Борьба с таймером продолжается

вы такие вопросы странные задаете. это переменные.
истекший таймер - константа (короче нативка вернет вам таймер), обращаемся к таймеру, который истек. К примеру при вызове функции, триггера (у триггера есть событие "таймер истек") вы можете обратиться к таймеру. Обычно в jass мы таймером вызываем функцию, а не триггер. При вызове функции сразу делаем что-то с таймером, часто на таймер записаны данные.
последний созданный таймер - это глобалка, используется в гуи в качестве ссылки, чтобы обратиться к таймеру. При создании таймера записывают его в глобалку. В гуи нет норм обращения или видать не додумались разработчики через присваивание переменных делать это. Поэтому и решили пихать везде последних созданных таймеров/мультибордов/хэшей при их же создании итд. Ты сам подумал как бы ты обратился к таймеру, если нет ссылки.
27

» WarCraft 3 / Следы хочу а их нету, как решить ?

мб создать систему спецэффектов, которая оставляет на карте следы. Прошел юнит, и он оставил следы - следы ног/ботинок. Ну чтобы сильно не плодить утечки, надо бы создать ограничение, там 1000 эффектов, и заменять последний

У вас эти следы на скрине откуда?