0
9
4 месяца назад
0

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

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

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

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

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

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

Отдельно перегенерю и выложу последним файлом.
0
9
5 месяцев назад
0

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

То есть основная база данных должна быть на JASS'e?
0
9
6 месяцев назад
0

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

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

» 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?
0
9
6 месяцев назад
0

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

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

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

nazarpunk, чувствую, что нужно заливать в карту свою dll.
0
9
6 месяцев назад
0

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

Как играть по сети со своими нативными функциями?
0
9
6 месяцев назад
0

» WarCraft 3 / Ускоренная виртуальная машина

Я сделал небольшой мод (исходники), исправляющий эту ошибку.
Обе ссылки выдают 404 ошибку.
0
9
10 месяцев назад
0

» WarCraft 3 / Своя нативка на С++

Unryze, а если я память не освобожу в функции, то это будет утечка при __cdecl, когда я выйду из варкрафта?
0
9
10 месяцев назад
0

» WarCraft 3 / Своя нативка на С++

Да ты прав GetJassNative, используют соглашение cdecl. Но RegisterJassNative я использую c stdcall.
// Natives variable
HRACE (__cdecl *_ConvertRace) (Integer i);
bool fRegistrNatives()
{
	*((int*)&_ConvertRace) = (int)GetJassNative("ConvertRace");
}

HRACE ConvertRace(Integer i)
{
	return _ConvertRace(i);
}
Могу опубликовать все нативные функции на с++.
0
9
10 месяцев назад
0

» WarCraft 3 / Своя нативка на С++

IceFog, всё равно будет работать. Я проверял.
0
9
10 месяцев назад
Отредактирован Vampir_kolik
0

» WarCraft 3 / Своя нативка на С++

IceFog,
cdecl (C calling convention)
Стандартное соглашение о вызовах для программ на C/C++.
В данном соглашение аргументы передаются справа налево и кладутся на стек, как и в [[#STDCALL Standart Calling Convention|stdcall]], возвращаемое значение кладется в регистр EAX. Но вот стек уже очищается функцией, которая вызывает. Имена функций начинаются с символа нижнего подчеркивания, без указания количества байт для аргументов к конце.
stdcall (Standart Calling Convention)
STDCALL это стандартное соглашение для Win32 API. В данном соглашение, аргументы передаются справа налево и очистка стека ложится на вызываемую функцию. Для передачи аргументов используется стек, т.е. перед вызовом нужно положить аргументы на стек. Возвращаемое значение записывается в регистр eax.
КОРОЧЕ, РАЗНИЦА:
__cdecl - очистку стека производит вызывающая программа (*). Основной способ вызова для Си. Это основной способ вызова функций с переменным числом аргументов.
__stdcall (он же winapi) - очистку стека производит вызываемая подпрограмма. (**). Применяется при вызове функций WinAPI.
Даже в твоём коде файла moduleutils.pas используется stdcall:
unit ModuleUtils;

interface

const
	JASS_API_DLL_NAME = 'JassApi.dll';

type
	PJassString = Pointer;
	
	TJassStringHandle = longword;
	TJassFunctionHandle = longword;
	TJassHandle = longword;

	TSingle = record Value: Single end;

function GetJassNative(Name: PChar): Pointer; stdcall; external JASS_API_DLL_NAME;
function GetStringHandle(Value: PChar): TJassStringHandle; stdcall; external JASS_API_DLL_NAME;
function GetStringFromHandle(StringHandle: TJassStringHandle): PChar; stdcall; external JASS_API_DLL_NAME;
function GetJassString(Value: PChar): PJassString; stdcall; external JASS_API_DLL_NAME;
function GetJassStringContent(JassString: PJassString): PChar; stdcall; external JASS_API_DLL_NAME;
implementation
end.
0
9
11 месяцев назад
0

» WarCraft 3 / Вызов функций вк 3, через mix (dll)

Ev3nt,
*(BYTE*) (GameDll + 0x2de2a0+ 0x0) = 0xE8;
*(DWORD*) (GameDll + 0x2de2a0+ 0x1) = (DWORD)hookCHS - (dwGameBaseAddress + 0x2de2a0+ 0x5);
*(BYTE*) (GameDll + 0x2de2a0+ 0x5) = 0xC3;
Тут что два одинаковых адреса в разных переменных? В GameDll и в dwGameBaseAddress?