Не отображается по двум причинам: ошибка в написании кода, может быть опечатка или отсутствует что-нибудь, скажем endif; функция, которую вы вызываете в blizzard.j, не существует в common.j, то есть она не зарегистрирована, как другие нативные функции.
Тут есть 2 проблемы. Если у вас разная раса, то твои войска врятли будут управляться ИИ, только если, как пушечное мясо, также у ИИ каждая пища просчитана, и если появятся лишние расходы, он начнёт тупить.
Нужен был протект, вот он. Перехват функции можно взять из JNGP, т.к там производится перехват SetMenu, и вы можете наглядно это увидеть, т.к в самом JNGP есть новые кнопки на панели инструментов, по типу Griamore, About и что-то еще.
Можно создать свой mix с моделями, чтобы приоритет был выше, или вообще осуществить перехват функции #266, чтобы другие миксы не подгружались. Кто не знает, сначала mix грузится как DLL, а после в DLL вызывается функция #266 из stom.dll, которая в свою очередь подгружает mix как mpq.
JackFastGame, я уже всё забыл, но всё возможно - нужен мемхак 1 версии, там есть функции, которые ссылаются на ту самую ExtraGameDll, и всё работает
Если собираетесь писать свой мемхак, использующий ту библиотеку, то с помощью IDA смотрите название функций, её параметры и тип данных для возврата, а потом в коде своего мемхака выполняете примерно такие действия:
// Если библиотека уже подгружена, то используйте это:
uintptr_t MemHackFunction = (uintptr_t)GetProcAddress(GetModuleHandle("Название DLL, содержащего функцию"), "Название функции");
// а иначе:
uintptr_t MemHackFunction = (uintptr_t)GetProcAddress(LoadLibraryA("Название DLL, содержащего функцию"), "Название функции");
(reinterpret_cast<Тип возвращаемых данных(CALLBACK*)(Типы данных параметров, если параметры есть)>(MemHackFunction))(Параметры);
Делается записью в определенные адресса памяти значений, но нужно сделать change offset protection, адресса и значения можите посмотреть в новом антихаке unryze'a как и код который это делает.
Если нужно просто прочитать память, достаточно и обычной уккзателя:
Нужный тип данных x = *(Нужный тип данных&)(GetModuleHandleA("Game.dll") + смещение);
Ну а если так надо изменить память, то можно использовать свзяку VirtualProtect для изменения защиты и memcpy/memset для записи, конечно, можно обойтись теми же указателями.
Как-то так, в вызове указываешь игрока, а она возвращает цвет в виде строки:
function GetColor takes player whichplayer returns string
local playercolor color = GetPlayerColor(whichplayer)
if (color == PLAYER_COLOR_RED) then return "FF0303" endif
if (color == PLAYER_COLOR_BLUE) then return "0042FF" endif
if (color == PLAYER_COLOR_CYAN) then return "1CE6B9" endif
if (color == PLAYER_COLOR_PURPLE) then return "540081" endif
if (color == PLAYER_COLOR_YELLOW) then return "FFFC01" endif
if (color == PLAYER_COLOR_ORANGE) then return "FEBA0E" endif
if (color == PLAYER_COLOR_GREEN) then return "20C000" endif
if (color == PLAYER_COLOR_PINK) then return "E55BB0" endif
if (color == PLAYER_COLOR_LIGHT_GRAY) then return "959697" endif
if (color == PLAYER_COLOR_LIGHT_BLUE) then return "7EBFF1" endif
if (color == PLAYER_COLOR_AQUA) then return "106246" endif
if (color == PLAYER_COLOR_BROWN) then return "4E2A04" endif
return ""
endfunction
Это HEX коды цветов, увы, так их не получить, т.к TeamColor - это blp текстура, но есть вариант забить их(то, что я написал выше) по переменным и выбирать через if/else.
Вот так я использовал это в ассемблере:
mov eax, [esp + 0x04]
push esi
add esi, 0x24
mov esi, dword ptr [esi]
cmp esi, 15
ja HPBarContinueAsm
//Red:
cmp esi, 0
jne Blue
mov esi, 0xFFFF0303
Blue:
cmp esi, 1
jne SkyBlue
mov esi, 0xFF0042FF
SkyBlue:
cmp esi, 2
jne Purple
mov esi, 0xFF1CE6B9
Purple:
cmp esi, 3
jne Yellow
mov esi, 0xFF540081
Yellow:
cmp esi, 4
jne Orange
mov esi, 0xFFFFFC01
Orange:
cmp esi, 5
jne Green
mov esi, 0xFFFEBA0E
Green:
cmp esi, 6
jne Pink
mov esi, 0xFF20C000
Pink:
cmp esi, 7
jne Grey
mov esi, 0xFFE55BB0
Grey:
cmp esi, 8
jne Silver
mov esi, 0xFF959697
Silver:
cmp esi, 9
jne DarkGreen
mov esi, 0xFF7EBFF1
DarkGreen:
cmp esi, 10
jne Brown
mov esi, 0xFF106246
Brown:
cmp esi, 11
jne NeutralAggresive
mov esi, 0xFF4E2A04
NeutralAggresive:
cmp esi, 12
jne NeutralPassive
mov esi, 0xFF474747
NeutralPassive:
cmp esi, 15
jne SetColor
mov esi, 0xFF909412
SetColor:
mov dword ptr[eax], esi
jmp HPBarContinueAsm
Vampirrr, всё это прописано в slk, там же находятся и пути к моделям. Всё, что нужно, это открыть, найти и изменить нужного юнита. Вроде бы модели хранятся в unitsui.slk или как-то так.
Раз адрес 0x06D77C50, запусти WC3, подключи к нему CheatEngine, открой редактор памяти, нажми CTRL+G и вбей туда Game.dll + 2D77C50 (или 2B77C50), там-то и будет находится функция, которая, пытаясь получить доступ к памяти, фаталит. Скорее всего та память, к которой она пытается получить доступ, равна нулю, т.к написано: "...referenced memory at '0x000000F4'.
The memory could not be 'read'".
Ах да, заметил, что она ссылается к адресу 0x000000F4, который не пренадлежит процессу WC3, т.к у WC3 адресное пространство начинается либо от 0x00400000 либо от 0x6F000000, а иногда от 0x04200000.
» Администрация XGM / XGM съел 20 единиц "АКТИВНЫЕ ЗА МЕСЯЦ"... это как?
» WarCraft 3 / На что ссылается GetTriggerKey в кастомной dll библиотеке?
» WarCraft 3 / SetUnitName мемхак
Ред. Ev3nt
» WarCraft 3 / Общие войска с ИИ. Как сделать тригерно?
» Кароче ходор / Чит-модификация для MWS Hardcore
Ред. Ev3nt
» Кароче ходор / Чит-модификация для MWS Hardcore
» Кароче ходор / Чит-модификация для MWS Hardcore
Ред. Ev3nt
» Кароче ходор / Чит-модификация для MWS Hardcore
Ред. Ev3nt
» WarCraft 3 / Отображение способностей при помощи мемхака
» MM Engine / MM Engine: Example Mod (Custom Campaign)
» WarCraft 3 / Инструкция по созданию UI
Ред. Ev3nt
» WarCraft 3 / Конвертировать playercolor в строку типа |cffffffff
Ред. Ev3nt
» WarCraft 3 / Конвертировать playercolor в строку типа |cffffffff
» WarCraft 3 / Конвертировать playercolor в строку типа |cffffffff
Ред. Ev3nt
» WarCraft 3 / Конвертировать playercolor в строку типа |cffffffff
Blue: 0042FF
SkyBlue: 1CE6B9
Purple: 540081
Yellow: FFFC01
Orange: FEBA0E
Green: 20C000
Pink: E55BB0
Grey: 959697
Silver: 7EBFF1
DarkGreen: 106246
Brown: 4E2A04
» WarCraft 3 / Где играть в пиратский (осуждаю) варик?
» WarCraft 3 / Изменить путь модели юнита напрямую через MPQ
Ред. Ev3nt
» WarCraft 3 / Какие подводные камни у использования "хакков" на юнит стейт
» WarCraft 3 / Какие подводные камни у использования "хакков" на юнит стейт
» WarCraft 3 / Алтарь Королей из Reforged
» MM Engine / MM Engine: Addons
» Программирование / Как работают знаки сравнения, больше, меньше?
» WarCraft 3 / Подскажите, на что ссылается этот адрес в памяти?
Ред. Ev3nt
» WarCraft 3 / Подскажите, на что ссылается этот адрес в памяти?
The memory could not be 'read'".
» IrInA Host Bot / Борьба с читерами