11

» WarCraft 3 / ExecuteFunc и параметры

ScorpioT1000, мне таймер останавливать не надо. Он у меня каждую 0.1 секунду запускается. Если процесс не выполнен он проверит данные в хеш таблице и пойдёт дальше обрабатываться в зависимости от результатов.
11

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

Каждую 0.1 секунду проверяй стремительность на юните.)

Запусти таймер игрового времени. При уходе в стремительность засеки время. Если юнит атакован и получает дамаг я не знаю, что там по бафам. Если юнит каким то образом вышел из стремительность можно проверить по таймеру. И если время ухода в стремительность плюс время до выхода из стремительности меньше текущего времени, то кради золото.
11

» WarCraft 3 / Название команды

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

» WarCraft 3 / ExecuteFunc и параметры

Моя задача. Пока выполняется триггер по времени. В нем обрабатывать другой поток для анализа проходимости юнитов. Я так понимаю потребуется хеш-таблица глобальная куда хендл от таймера помещю. Забью параметры. А в потоке возьму текущий таймер и заберу параметры.
11

» WarCraft 3 / Как отследить какой игрок нажал кнопку?

Создаёшь глобалку SyncCache тип буфер игры.
Инициализируешь кэш
set udg_SyncCache = InitGameCacheBJ("Sync")
Пишешь первый триггер на отправку числа в кэш и синхронизацию значения в кэше. Который реагирует на событие выбор пехотинца в центре карты.
    local string vKeyLocalPlayer
    set vKeyLocalPlayer = I2S(GetPlayerId(GetLocalPlayer()))
    call StoreInteger(udg_SyncCache ,"Select",vKeyLocalPlayer,1)
    call SyncStoredInteger(udg_SyncCache ,"Select",vKeyLocalPlayer)
    call DisplayTextToForce( GetPlayersAll(), vKeyLocalPlayer)
Пишешь второй триггер на перебор всех игроков в кэше и если значение получено по выводишь сообщение. Триггер реагирует на событие таймер каждую секунду.
    local integer vvi = 0
    local integer MAX_PLAYERS = 2
    local string vKeyLocalPlayer
    loop
        exitwhen vvi>=MAX_PLAYERS
        set vKeyLocalPlayer = I2S(vvi)
        if (GetStoredInteger(udg_SyncCache,"Select",vKeyLocalPlayer ) == 1) then
	    call DisplayTextToForce( GetPlayersAll(), "NPlayer = " + vKeyLocalPlayer )
            call StoreInteger(udg_SyncCache ,"Select",vKeyLocalPlayer,0)
	    endif
        set vvi = vvi + 1
    endloop
Первое сообщение появляется сразу по выбору пехотинца. Второе через секунду как придёт синхронизация данных в кэше.
Прикрепляю тестовую карту.
Загруженные файлы
11

» Unryze Jass API / UjAPI - AngelScript

Когда появятся указатели на объект?) И ещё вопрос. Как реализованы потоки в Ангел скрипте?
11

» WarCraft 3 / Открытая виртуальная машина

IceFog, я доделываю перевод твоего JassAccelerator'a с Pascal на с++. Скоро выложу здесь в комментах проект. Посмотришь на него с другой стороны.)
11

» WarCraft 3 / Пятиминутка в вампов

Наверное только Шелдан сможет найти ошибки по рассинхронизации в этой карте. Самый умный парень на земле, как он говорит.) Обновил ещё раз проект. Одиночка работает нормально. Исправил зависание при убийстве рабочих. Убрал спящий режим в начале игры. Начало хорошее. Но потом, где-то в коде есть нюанс, который мне мешает синхронизировать сетевую игру. Блинки исправил на таймер. Был триггер. Теперь вроде меньше рассинхронов стало. Из-за этих блинков мейн хуманов. Выкладываю новый архив с теме же программами для тестирования. Но плюс одна для сверки логов для игроков. Тестил через программу 2 окна. Добавил в папку с картой JassApi.dll файл для тестирования через два окна. Потому что не всегда подхватывает эту dll'ку другая dll'кa Vampirism_fire.dll, когда тестируешь через два окна. И приходится из корня Warcraft'a доставать эту dll.
Вот новый архив:
Загруженные файлы
11

» WarCraft 3 / Пятиминутка в вампов

Модернизировал проект. Одиночка работает нормально. Прошу поискать ошибку в проекте по рассинхронизации в сетевой игре. А, то двигаться дальше пока не хочется пока не исправлю эту ошибку. Выкладываю проект для создания dll'ки Vampirism_fire.dll, программу 2 окна для Warcraft'a, что бы потестить сетевую игру, программу winmpq для внедрения dll'ки в карту, карту и dll'ки для Visual Studio 2010, которые нужно разместить в корне папки с Warcraft'ом. Версия Warcraft'a таже (1.26a).
Архив:
Загруженные файлы
11

» WarCraft 3 / Генератор карт VF

Cancel, мемхак может всё!
Как ты будешь внедрять в запущенную карту, карту путей? А капаться в памяти вряд ли кто будет.
11

» WarCraft 3 / Генератор карт VF

Считаю проект довольно таки сырым, так как в путях которые я создаю для карты есть недочёты, какие как этот:
Открыть
Кто хочет править правте, мне уже не до проекта.
Загруженные файлы
11

» WarCraft 3 / Пятиминутка в вампов

Не вижу развития проекта дальше, т.к. не могу воскресить слаеров. Что только не перепробовал. А функции IssueTrainOrderByIdBJ нету в нативных функциях, которые достаю с помощью JassApi.dll. Есть аналоги IssueImmediateOrderById и IssueNeutralImmediateOrderById, но в данной карте срабатывает только 2 приказа на слерку вообще, которые не воскрешают слаера это 851980, 851978 другие отсеиваю такие как: ID_ORDER_STOP, ID_ORDER_HOLDPOSITION, ID_ORDER_PATROL, ID_ORDER_ATTACK, ID_ORDER_SMART, ID_ORDER_MOVE, ID_ORDER_CANCEL, и стан 851973, которые тоже срабатывают на слерку, но от них нет ни какого толку для воскрешения слаера. По Id юнита тоже побывал воскрешать слаера, как в массиве так и без, и по TypeId. Никакого толку. Если кто разберётся, как воскрешать слаера в данной карте сообщите.
11

» WarCraft 3 / Пятиминутка в вампов

Выложу ещё две статьи:
  1. Как правильно присоединиться к процессу Warcraft'a 3'его и как отлаживать свою библиотеку. Через Visual Studio.
  2. Как пользоваться генератором карт VF.
11

» XGM — Премия года / Премия 2023 года

Работа для номинации: Лучший Разработчик
  • Пятиминутка в вампов
  • 27.5.2023г/09-12 месяц 2023г
  • __Ссылка__
  • До номинации лучшей игры я не дотягиваю, а вот до номинации лучший разработчик думаю дотяну.=)
11

» WarCraft 3 / Сценарий на любом языке

IceFog, а ты сможешь сделать перед запуском файла .json определитель ОС и разрядности архитектуры, чтобы запустить разные файлы .json. Это нужно для загрузки на машинах x86 библиотек x86 и x64 соответственно для функций <boost>.
Варкрафт 3 всегда х86 (не считая рефу), какой толк от х64, если его х86 приложения всё-равно не поймут?
Это нужно для своей dll а не для варкрафта.
11

» WarCraft 3 / Сценарий на любом языке

IceFog, а ты сможешь сделать перед запуском файла .json определитель ОС и разрядности архитектуры, чтобы запустить разные файлы .json. Это нужно для загрузки на машинах x86 библиотек x86 и x64 соответственно для функций <boost>.
11

» WarCraft 3 / Сценарий на любом языке

Проблема с синхронизацией была в сишных потоках и __stdcall освобождал память после завершения функции.
11

» WarCraft 3 / Работа с нативными функциями

Если нативка зарегистрирована, то виртуальная машина JASS'а сможет её использовать.
Учитывая, что и обычный и ИИ скрипты исполняются ею, то почему бы и нет?
Единственная проблема — регистрация должна произойти до компиляции, а иначе компилятор откажется работать, сетуя на несуществующую нативку.
Буду благодарен за пример.
Я добавляю свою нативку в common.ai
native fBeginGameProcessAI takes nothing returns integer
Запускаю её у человека human,ai
call fBeginGameProcessAI()
Инициализирую библиотеку до:
call InitBlizzard()
call MeleeStartingAI()
И скрипт ИИ не работает.
Или её надо редеректом вызывать?

Просто на некоторых машинах у меня не получается запустить .mix файл где установлен лицензионный Windows 10. А если подгружать через карту, то работает на этой машине.
11

» WarCraft 3 / Сценарий на любом языке

Какими данными? Зачем?
Складывается такое впечатление, будто ты не писал прежде на JASS'е, а иначе почему даже простое создание юнита вызывает у тебя проблемы?
Попробуй сначала почитать статьи и сделать простенькую карту на нём или изучить уже существующие, а уже потом на C++ перейти как окрепнешь.
Переслать команду от одного ИИ другому ИИ помоги в таких то координатах и 4 точки переслать которые прописаны в DLL. Я так думаю только с помощью сообщений можно это сделать. Мне чистый бот на JASS'e не нужен.