13

» 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
Первое сообщение появляется сразу по выбору пехотинца. Второе через секунду как придёт синхронизация данных в кэше.
Прикрепляю тестовую карту.
Загруженные файлы
13

» Unryze Jass API / UjAPI - AngelScript

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

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

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

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

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

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

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

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

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

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

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

» 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. Никакого толку. Если кто разберётся, как воскрешать слаера в данной карте сообщите.
13

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А в .ai скрипте я могу вызвать функцию из погруженной библиотеки, если она упакована в карту?
13

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

Т.е. если писать бота, то только через чат обмениваться данными между ботами?
13

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

А, как работать с общими данными для всех машин на одной машине?
13

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

IceFog, можешь объяснить, как запустить только один экземпляр библиотеки при загрузке карты, как у тебя в Example.dll, чтобы не было дизсинхронизации, только на С++. Аналог твоего запуска библиотеки на паскале:
begin
	InitCamera;
	InitSpell;
	CreateAngryWorker;
	CreateMeat;
end.
Пробывал следующий код:
BOOL APIENTRY DllMain(HMODULE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
{	
	if (ul_reason_for_call != DLL_PROCESS_ATTACH) return TRUE;
	DisableThreadLibraryCalls(hModule);

	if (fRegistrJassApi() == FALSE) return TRUE;
	if (fRegistrNatives() == FALSE) return TRUE;
	HUNIT u;
	u = CreateUnit(GetLocalPlayer(),ID_UNIT_MAIN_HUMAN1,0,0,0);
	IssuePointOrder(u,"move",1000,1000);
	return TRUE;
}
Он запускается на обоих машинах. Как перевести с паскаля на С++ твой Example.dll?
13

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

Unryze, у меня получилось с помощью в этой статьи xgm.guru/p/wc3/anyscript (Сценарий на любом языке) поиграть по сети со своей dll'кой. Это и есть мемхак?