ENAleksey #1 - 2 дня назад (отредактировано ) 8

» RenderEdge / [RenderEdge] Основная версия

AlakFrost, вряд ли. Сейчас я потихоньку добавляю новые пост-эффекты и дорабатываю старые. Недавно обновил перехватчик вызовов функций d3d8: общая оптимизация, и теперь точно не должно быть вылетов игры (например, при переключении режима V-Sync), но вместе с этим запорол тени: после сворачивания игры они перестают работать. Также, починил Dithering, оказывается, до этого он работал совсем не так, как нужно. Улучшил эффект Bloom. Сейчас пытаюсь внедрить Temporal Anti-Aliasing, очень уж он мне понравился.
Вот просто несколько новых скриншотов:
Temporal Anti-Aliasing в Unreal Engine 4:
прикреплены файлы
ENAleksey #2 - 2 дня назад 2

» Проклятие судьбы - Curse of Fate / Все по проекту CoF

А какие планы насчёт боевой системы?
ENAleksey #3 - 2 дня назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Основная версия

AlakFrost, вы темой ошиблись. Я не отрицаю наличие проблемы, но она присутствует только в экспериментальной версии.
Эта версия крайне нестабильна. Я уже давно не выкладывал обновлений, так как толком ничего нового не сделал. Насчёт ФПС я уже высказывался в данном комментарии, с тех пор ничего не изменилось.
ENAleksey #4 - 3 дня назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Основная версия

AlakFrost, проблемы с фпс никогда и не было.
ENAleksey #5 - 2 недели назад 0

» RenderEdge / [RenderEdge] Memory Hack

не будет ли барахлить если я возму библиотеку у основного вызов функции??
Вы хотите получать адреса функций из основной версии RenderEdge при помощи GetModuleProcAddress? Так сделать не получится, так как в основной версии используется совершенно другой способ вызова функций.
ENAleksey #6 - 3 недели назад (отредактировано ) 14

» RenderEdge / [RenderEdge] Основная версия

Tiodor:
а добавлять кнопки дополнительные на интерфейс таким способом нельзя?
ну кроме всяких юнитов и т.д, чисто кнопка на интерфейс
local CButton button = GUI.Button(x, y, width, height)
call button.SetTexture("Texture.blp")
call button.SetCallback(function CallbackFunction)

Убран лимит на размер 512p в .blp тексурах

Blp текстура 4096x4096:

CtrlSetZOrder

native CtrlSetZOrder takes integer id, integer iZOrder returns nothing
Элементы интерфейса с большими значениями ZOrder будут рисовать над элементами с меньшими значениями ZOrder. Элементы с тем же ZOrder будут просто рисовать в том порядке, в котором они были добавлены.

EnableAnisoFiltering

native EnableAnisoFiltering takes boolean bEnable, integer maxAnisotropy returns nothing
Устанавливает анизотропную фильтрацию текстур с уровнем анизотропии между 2 и 16.

War3GUI API

Введены новые native функции для редактирования стандартного интерфейса:
native HideInterface takes nothing returns nothing
native EditBlackBorders takes integer upperHeight, integer bottomHeight returns nothing
native EditPortrait takes integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditMinimap takes integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditCommandBarButton takes integer row, integer column, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditHeroBarButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditItemBarButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditMinimapButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditUpperButtonBarButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
прикреплены файлы
ENAleksey #7 - 3 недели назад 3

» RenderEdge / [RenderEdge] Основная версия

Обновление v0.2.6a

  • Убран лимит на размер 512p в .blp тексурах (спасибо Karaulov'у);
  • Добавлена новая native функция CtrlSetZOrder (порядок отрисовки элементов интерфейса);
  • Добавлена новая native функция EnableAnisoFiltering (возможность установить анизотропную фильтрацию текстур);
  • Добавлена новая native функция HideInterface;
  • Добавлены новые native функции: EditMinimap, EditCommandBarButton, EditHeroBarButton, EditItemBarButton, EditMinimapButton и EditUpperButtonBarButton;
  • Изменено название функций SetPortrait и SetBlackBorders на EditPortrait и EditBlackBorders;
  • Исправлено большое количество багов в RenderEdge_loader.dll и RenderEdge.exe;
  • Исправлен некорректный перенос строки при использовании символа "|n" во wrapped тексте;
  • Исправлено большое количество багов в GUI-системе (например, баг с функцией CtrlSetTexture при перезапуске карты);
  • Оптимизирована GUI-система. Некоторые функции переписаны с нуля;
  • Оптимизированы менеджеры шрифтов и текстур;
  • Обновлены detours.lib и libjpeg.lib до последней версии;
  • Улучшен и оптимизирован debug log.
прикреплены файлы
ENAleksey #8 - 4 недели назад 0

» RenderEdge / [RenderEdge] Memory Hack

Tumart, разрядность никак не влияет на запуск.
ENAleksey:
Попробуй ещё установить пакет Visual C++.
А Widescreen Fix у тебя работает?
ENAleksey #9 - 4 недели назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

МБ из за XP?
Скорее всего из-за этого, хотя и не должно: я собирал библиотеку в режиме совместимости с XP. Попробуй ещё установить пакет Visual C++.
А Widescreen Fix у тебя работает?

Может ещё кто-нибудь с Windows XP протестировать карту?
ENAleksey #10 - 4 недели назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

Tumart, какая версия вара (работает только на 1.26a)? После запуска карты в папке с варом появился файл RenderEdge_mini.dll? Нет ли в папке с варкрафтом .mix файлов или библиотека d3d8.dll? Если есть, то попробуй убрать все .mix`ы оттуда.
ENAleksey #11 - 4 недели назад 0

» RenderEdge / [RenderEdge] Memory Hack

Obelick, писать свою систему сохранений, как картах типа Gaias Retaliation ORPG.
ENAleksey #12 - 4 недели назад (отредактировано ) 5

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.4c

  • Исправлены вылеты при загрузке сохранённой карты и перезапуске карты из игры;
  • Исправлена повторное внедрение динамической библиотеки функцией ExportAndInjectDLL, если она уже загружена.
Вылеты при сохранении карты исправить не получилось, и, возможно, уже не получится. Игра вылетает при выполнении следующего кода в функции UnlockMemory:
call ForForce(bj_FORCE_PLAYER[0], I2C(stand[GetBytecodeAddress()/4 + 3]))

FTFire, вылетает, скорее всего, из-за вызова функций из библиотеки RenderEdge, так как она либо не загружается корректно, либо ей не удаётся перехватить окно варкрафта. Попробуй последнее обновление, если будет так же вылетать, то попробуй в триггере GUI заменить функцию Init на эту, и напиши, вылетает ли игра:
private function Init takes nothing returns nothing
    call GetMouseX()
endfunction

FrigatPlay:
Так и не понял где настроить привязку к юниту полосы жизни.
С помощью этих функций ты не сможешь привязать полоски здоровья и маны к юниту, только к герою.
call EditHeroBarHealthBarPixel(0, ANCHOR_BOTTOM, healthBarStartX, healthBarStartY, healthBarWidth, healthBarHeight)
call EditHeroBarManaBarPixel(0, ANCHOR_BOTTOM, healthBarStartX, healthBarStartY + healthBarHeight + 4, healthBarWidth, healthBarHeight)
Вместо нуля пишешь номер иконки героя (от 0 до 6).
ENAleksey #13 - 1 месяц назад 0

» RenderEdge / [RenderEdge] Memory Hack

ledoed:
Можно под мультиплейр правда придётся некоторые штуки подрезать и будет норм
Да, в мультиплеере всё отлично работает, нужно только удалить триггер RenderEdge и все функции из данной библиотеки, которые используются в других триггерах.
ENAleksey #14 - 1 месяц назад 13

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.4b

  • Добавлены функции GetMouseTerrainX/Y/Z.
ENAleksey #15 - 1 месяц назад 0

» RenderEdge / [RenderEdge] Memory Hack

Daniil18, про синхронизацию ничего сказать не могу, так как ни разу её не делал из-за ненадобности.
ENAleksey #16 - 1 месяц назад (отредактировано ) 3

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.4a

  • Добавлена демонстрация продвинутого управления камерой (Ctrl + перемещение мыши с зажатой ПКМ - вращение камеры; Ctrl + вращение колёсика мыши - изменение расстояния камеры до цели);
  • Изменено название библиотеки Demo на GUI.
ENAleksey #17 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

Vitalik8, какое отношение этот функционал имеет к моей библиотеке? RenderEdge - это библиотека, нацеленная в первую очередь на модификацию графической составляющей игры.
ENAleksey #18 - 2 месяца назад (отредактировано ) 5

» RenderEdge / [RenderEdge] Memory Hack

FrigatPlay, можно, но я не знаю как.

Обновление v1.0.3b

  • Изменены названия переменных в библиотеке InjectDLL;
  • Изменено название библиотеки InjectDLL на FileSystem;
  • Изменено название функции ExportDllFromMpqAndInjectToWarcraft на ExportAndInjectDLL.
ENAleksey #19 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Memory Hack

FrigatPlay, использование функций редактирования интерфейса происходит в триггере Demo в функции EditStandardInterface.
Отображение подсказок обязательно будет, как только я пойму, как это сделать.
ENAleksey #20 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Memory Hack

Андреич, так в этой версии есть все нужные функции для редактирования стандартного интерфейса, а в основной версии эти же функции плюс возможность создать полностью свой интерфейс. Напиши поподробнее, что именно хочешь сделать с интерфейсом?
ENAleksey #21 - 2 месяца назад (отредактировано ) 6

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.3a

  • Добавлены функции для конвертации переменных типа trigger в integer и обратно;
  • Добавлены функции GetFrameTextAddress, GetFrameItemAddress, GetFrameSkinAddress, GetFrameTextString и SetFrameTextAddress;
  • Обновлены функции GetCommandBarButton и GetItemBarButton, добавлена функция GetHeroBarButton;
  • Функция EditBlackBorders теперь принимает высоту верхней и нижней полоски вместо координат;
  • Функция EditCommandBarButton теперь принимает колонку и столбец кнопки вместо buttonId;
  • Добавлены функции EditHeroBarButton, EditHeroBarHealthBar и EditHeroBarManaBar;
  • Добавлены новые функции в RenderEdge_mini.dll;
  • Добавлен фикс растянутых полосок здоровья;
  • Изменён способ получения окна варкрафта, что должно исправить некоторые проблемы с функциями типа GetWindowX, GetWindowWidth и т.п.;
  • Теперь код должен компилироваться при включённом cJass.
Новые функции в RenderEdge API:
function GetWheelDelta takes nothing returns integer
function GetTriggerKey takes nothing returns integer
function IsKeyDown takes integer iKey returns boolean
function BlockMouse takes boolean bBlock returns nothing
function SetMousePos takes integer x, integer y returns nothing
function TriggerRegisterMouseMoveEvent takes trigger trig returns nothing
function TriggerRegisterMouseWheelEvent takes trigger trig returns nothing
function TriggerRegisterMouseEvent takes trigger trig, integer iKey, integer state returns nothing
function TriggerRegisterKeyEvent takes trigger trig, integer iKey, integer state returns nothing

FTFire, теперь можно:
function OnKeyDown takes nothing returns nothing
	local integer getKey = GetTriggerKey()
	if (getKey == 'W') then
		// - - -
	elseif (getKey == 'S') then
		// - - -
	endif
endfunction

function Init takes nothing returns nothing
	local trigger temp = CreateTrigger()
	call TriggerRegisterKeyEvent(temp, KEY_Any, EVENT_Down)
	call TriggerAddAction(temp, function OnKeyDown)
endfunction

Андреич, зачем использовать Memory Hack и основную версию RenderEdge вместе? Нужно использовать только что-то одно.
прикреплены файлы
ENAleksey #22 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Memory Hack

FrigatPlay, перед запуском сохраняли карту? Нужно обязательно сохранять перед тем, как нажать на кнопку проверки карты.
ENAleksey #23 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

ввести заморозку курсора в мемхак
Добавлю функцию SetMousePos(x, y).
ledoed:
в мультиплеере работает не на всех компах, а точнее они вылетают
Можешь попробовать полностью удалить функции RenderEdge из карты и ещё раз протестировать в мультиплеере? Если не поможет, то можно попробовать удалить из карты RenderEdge_mini.dll.
Скорее всего это из-за того, как я отлавливаю экземпляр окна в RenderEdge_mini.dll. С эти также связаны проблемы, при которых функции из .dll возвращают 0, если во время загрузки карты свернуть игру или переключиться на другое окно. Уже исправил, в следующей версии подобных проблем не будет.
JaBeN_Симфер:
Было бы полезно отображать аттачи на портрете.
Это вряд ли это можно реализовать с помощью мемхака.
FrigatPlay:
Описание кнопок никак нельзя вернуть?
И я так понял что после установки библиотеки уже пользоватся GUI невозможно.
Я пока не нашёл адрес фрейма, отвечающего за всплывающие подсказки. В каком смысле невозможно пользоваться GUI, что вы имеете ввиду под этой аббревиатурой? Графические триггеры? Если да, то можно.
mishanka122:
чет на новой версии выскакивает такое
На предыдущей ошибки не было? Это ошибка компилятора PJass, вы точно скачали экспериментальную версию из поста? Выключен ли cJass?
Owain:
Версии новее 1.26а поддерживаются?
Только 1.26a.
Owain:
А расположение текста и портрета в cinematic mode возможно изменить?
Портрет изменяется той же функцией, что и в игровом режиме. А вот фрейм текста нужно сначала найти.
ENAleksey #24 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

Ige, добавлю в следующую версию.
set address_GetFrameTextAddress = address_GameBase + 0x61C7B0

function GetFrameTextAddress takes string name, integer id returns integer
	return fast_call2(address_GetFrameTextAddress, GetStringAddress(name), id)
endfunction
Deleted.
Что-то я сглупил: написал функцию для скрытия курсора, а оказалось, что она полностью идентична стандартной функции EnableUserControl.
ENAleksey #25 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

function GetHeroBarButton takes integer id returns integer
Да, позже добавлю.
Ige:
function GetUpperButtonBarText takes integer id returns integer
function GetResourceBarText takes integer id returns integer
function GetResourceBarIcon takes integer id returns integer
function GetInfoBarText takes integer id returns integer
function GetInfoBarIcon takes integer id returns integer
А вот эти фреймы я пока не искал.
Кстати, могу выложить .idb файл game.dll для IDA Pro, вдруг кто-нибудь захочет помочь искать новые адреса. Я уже восстановил некоторые имена функций, переменных, структуры.
Построение основного интерфейса происходит в функции BuildUI.
ENAleksey #26 - 2 месяца назад (отредактировано ) 1

» RenderEdge / [RenderEdge] Memory Hack

Следующим шагом будет добавление следующих функций в RenderEdge_mini.dll:
» раскрыть
function GetMouseTerrainX takes nothing returns real
function GetMouseTerrainY takes nothing returns real
function GetMouseTerrainZ takes nothing returns real
function IsMouseOverUI takes nothing returns boolean
function BlockMouse takes boolean bBlock returns nothing
function GetWheelDelta takes nothing returns integer
function SetMousePos takes integer x, integer y returns nothing
function TriggerRegisterMouseWheelEvent takes trigger trig returns nothing
function TriggerRegisterMouseMoveEvent takes trigger trig returns nothing
function TriggerRegisterMouseEvent takes trigger trig, integer iButton, integer state returns nothing

function GetTriggerKey takes nothing returns integer
function IsKeyDown takes integer iKey returns boolean
function TriggerRegisterKeyEvent takes trigger trig, integer iKey, integer state returns nothing

function TriggerRegisterWindowResizeEvent takes trigger trig returns nothing
ENAleksey #27 - 2 месяца назад (отредактировано ) 10

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.2a

  • Добавлены функции для получения данных о фрейме;
  • Добавлена функция для полного скрытия интерфейса;
  • Добавлены функции для редактирования кнопок приказов, предметов, миникарты и др.;
  • Улучшены функции для редактирования миникарты, портрета и границ игрового поля;
  • Добавлены названия фреймов для использования функцией ReadGameUIStruct;
  • Изменены названия переменных и функций на более понятные;
  • Все переменные-адреса теперь инициализируются в функции Init.
прикреплены файлы
ENAleksey #28 - 2 месяца назад (отредактировано ) 5

» RenderEdge / [RenderEdge] Memory Hack

Ige, нет, сделать произвольную форму нельзя, только прямоугольник.
А вот и функции для чтения данных о фрейме:
» раскрыть
function GetFrameWidth takes integer pFrame returns real
    return GetRealFromMemory(Memory[pFrame/4 + 22])
endfunction
    
function GetFrameHeight takes integer pFrame returns real
    return GetRealFromMemory(Memory[pFrame/4 + 23])
endfunction
    
function GetFramePointParent takes integer pFrame, integer point returns integer
    return Memory[Memory[pFrame/4 + point + 2]/4 + 1]
endfunction
    
function GetFramePointRelativePoint takes integer pFrame, integer point returns integer
    return Memory[Memory[pFrame/4 + point + 2]/4 + 2]
endfunction
    
function GetFramePointX takes integer pFrame, integer point returns real
    return GetRealFromMemory(Memory[Memory[pFrame/4 + point + 2]/4 + 3])
endfunction
    
function GetFramePointY takes integer pFrame, integer point returns real
    return GetRealFromMemory(Memory[Memory[pFrame/4 + point + 2]/4 + 4])
endfunction
function GetRealFromMemory takes integer i returns real
    return cleanReal(indexToReal(i))
endfunction
    
function SetRealIntoMemory takes real r returns integer
    return cleanInt(realToIndex(r))
endfunction
ENAleksey #29 - 2 месяца назад 6

» RenderEdge / [RenderEdge] Memory Hack

Ige, скоро добавлю новые функции, включая GetFrameWidth/Height, остальные тоже попробую добавить.
А вот этого пока в планах нет:
Ige:
function SetFrameFont takes string font returns nothing
function SetFrameFontColor takes integer rgba returns nothing 0xRRGGBBAA - ну вы поняли)
function SetFrameFontColor takes integer red, integer green, integer blue, integer alpha returns nothing
function SetFrameTextLength takes integer returns nothing длина текста во фрейме
Сейчас я работаю над основной версией RenderEdge, добавляю функции для редактирования стандартного интерфейса, уже готовы следующие функции:
native HideInterface takes nothing returns nothing
native EditBlackBorders takes real upper, real bottom returns nothing
native EditPortrait takes integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditMinimap takes integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditCommandPanelButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditItemPanelButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditMinimapButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
native EditUpperButtonBarButton takes integer buttonId, integer anchor, integer x, integer y, integer width, integer height returns nothing
А вот результат их использования:
В Memory Hack функционал будет намного гибче.
прикреплены файлы
ENAleksey #30 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Экспериментальная версия

ledoed, нет, можно посмотреть лишь, сколько всего мешей на сцене.
Кристофер, тени пока работают очень плохо. Их лучше не включать, так как они используют очень много оперативной памяти, и при достижении определённого лимита игра вылетает.
Тени можно сделать менее тёмные, путём редактирования Ambient освещения на вкладке Sky Light.
ENAleksey #31 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

Возможно, проблема может быть вызвана .mix файлам в папке с варкрафтом, попробуй убрать их оттуда.
ENAleksey #32 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

Vitalik8, после переноса файлов в одну папку чёрный экран так же появляется?
ENAleksey #33 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

Vitalik8, а где RenderEdge.exe? Лучше все файлы RenderEdge поместить в отдельную папку. И ещё, скинь, пожалуйста, RenderEdge.log.
ENAleksey #34 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

Vitalik8, покажи, пожалуйста, скрин папки с варкрафтом.
ENAleksey #35 - 2 месяца назад (отредактировано ) 2

» RenderEdge / [RenderEdge] Основная версия

Nelloy:
Возможно ли встроить весь GUI API внутрь карты? То есть без отдельной библиотеки или с распаковкой из самой карты
Караулов уже сделал это в своей библиотеке, нужно просто скачать её, импортировать себе в карту, а затем извлечь и загрузить её с помощью Memory Hack:
Как вариант выгружать библиотеку средствами мемхака, а нативки вызывать неявно через ExecuteFunc.
Можно в динамической библиотеке экспортировать нужные функции, а потом выполнять их как-то так:
address_GetWindowX = GetModuleProcAddress("RenderEdge_mini.dll", "GetWindowX")

function GetWindowX takes nothing returns integer
    return std_call1(address_GetWindowX, 0)
endfunction
ENAleksey #36 - 2 месяца назад (отредактировано ) 6

» RenderEdge / [RenderEdge] Memory Hack

Обновление v1.0.1a

  • Добавлено внедрение динамической библиотеки RenderEdge_mini.dll (извлекается из карты в папку с варкрафтом);
  • Widescreen Fix;
  • Добавлена функция для редактирования миникарты.
Функции из RenderEdge_mini.dll:
function GetWindowX takes nothing returns integer
function GetWindowY takes nothing returns integer
function GetWindowWidth takes nothing returns integer
function GetWindowHeight takes nothing returns integer
function GetMouseX takes nothing returns integer
function GetMouseY takes nothing returns integer
А вот некоторые фреймы, которые я нашёл:
ReadGameUIArray(239) + 180 // Black Borders
ReadGameUIArray(240) + 180 // Minimap
ReadGameUIArray(241)       // Unit InfoPanel
ReadGameUIArray(243)       // ResourceBarFrame
ReadGameUIArray(244)       // UpperButtonBarFrame
ReadGameUIArray(247)       // ?
ReadGameUIArray(248)       // IdlePeon
ReadGameUIArray(253) + 180 // Portrait
ReadGameUIArray(255) + 180 // ?
ReadGameUIArray(251)       // WorldFrameChatMessage

ReadGameUIArray(258)       // Minimap button 1
ReadGameUIArray(259)       // Minimap button 2
ReadGameUIArray(260)       // Minimap button 3
ReadGameUIArray(261)       // Minimap button 4
ReadGameUIArray(262)       // Minimap button 5
прикреплены файлы
ENAleksey #37 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

FTFire, кода нет, как я уже писал, нужно искать первый аргумент функции SetFramePoint либо в IDA Pro, либо методом перебора значений в функции ReadGameUIArray.
ENAleksey #38 - 2 месяца назад (отредактировано ) 1

» RenderEdge / [RenderEdge] Memory Hack

Редактирование миникарты:
function SetMinimap takes real x, real y, real size returns nothing
    local integer pMinimapFrame = ReadGameUIArray(240) + 180
    local integer pParentFrame = ReadGameUIArray(263) + 180

    call SetFramePoint(pMinimapFrame, FRAME_BOTTOMLEFT, pParentFrame, FRAME_BOTTOMLEFT, x, 0.6 - y - size)
    call SetFramePoint(pMinimapFrame, FRAME_TOPRIGHT, pParentFrame, FRAME_BOTTOMLEFT, x + size, 0.6 - y)
endfunction
Карту обновлю позже, после того, как добавлю демонстрацию внедрения сторонних динамических библиотек.
прикреплены файлы
ENAleksey #39 - 2 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

FTFire, лучше задавать вопросы относительно MemoryHack в соответствующей теме.
Вот код для миникарты:
function SetMinimap takes real x, real y, real size returns nothing
    local integer pMinimapFrame = ReadGameUIArray(240) + 180
    local integer pParentFrame = ReadGameUIArray(263) + 180

    call SetFramePoint(pMinimapFrame, FRAME_BOTTOMLEFT, pParentFrame, FRAME_BOTTOMLEFT, x, 0.6 - y - size)
    call SetFramePoint(pMinimapFrame, FRAME_TOPRIGHT, pParentFrame, FRAME_BOTTOMLEFT, x + size, 0.6 - y)
endfunction
Про инвентарь не знаю, нужно искать либо в IDA Pro, либо методом подбора значения в функции ReadGameUIArray.
ENAleksey #40 - 2 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

FTFire, для компиляции кода нужно использовать экспериментальную версию PJass: Скачать
ENAleksey #42 - 2 месяца назад (отредактировано ) 3

» RenderEdge / [RenderEdge] Основная версия

NanO, Clamp, готово. Работает только на версии 1.26a:
ENAleksey #43 - 3 месяца назад (отредактировано ) 1

» RenderEdge / [RenderEdge] Основная версия

NanO, отдельным ресурсом выкладывать не буду, я только обновлю код из моего комментария выше (а тебе уже помогу доработать код и добавить ещё несколько нужных фич). И этот код не убирает интерфейс полностью, а только скрывает чёрные полосы, хотя скрыть весь интерфейс тоже можно (посмотрите видео в начале темы).
Но у метода, который я сейчас использую, есть недостаток - скрывается абсолютно весь интерфейс, даже меню. Потом я его доработаю и добавлю функцию для частичного скрытия интерфейса в основную версию RenderEdge. Кстати любой элемент можно переместить или скрыть с помощью функции SetFramePoint (код выше), главное - знать его адрес. Вот результат использования этой функции:
ENAleksey #44 - 3 месяца назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Основная версия

Clamp, карта просто не запустится, будет вылетать в меню, если в ней используются кастомные нативки, которые ещё не добавлены в варкрафт, а с помощью мемхака их можно добавить только после загрузки карты.
ENAleksey #45 - 3 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

NanO, ок.
Кет, вряд ли, так как jass код начинает выполняться только при инициализации карты, следовательно dll с нативками подгрузится ещё позже, а добавлять их можно только до инициализации.
ENAleksey #46 - 3 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

NanO, если не к спеху, то я могу сделать dll, которая будет содержать widescreen fix и убранные полоски. Эту библиотеку можно будет просто импортировать в карту, а с помощью мемхака подгружать её в игру. Но домой приеду только 10 августа.
Я такое уже делал, правда без удаления полосок. Посмотри 157 комментарий из этой темы, там есть карта для загрузки под спойлером.
ENAleksey #47 - 3 месяца назад (отредактировано ) 3

» RenderEdge / [RenderEdge] Основная версия

Дополнительное ПО не нужно распространять вместе с картой (но можно). Просто копируем нужный код в карту и сохраняем.
ENAleksey #48 - 3 месяца назад (отредактировано ) 3

» RenderEdge / [RenderEdge] Основная версия

Я уже написал Караулову, может быть ответить.
В результате пропадут чёрные полосы сверху и снизу экрана, будет выглядеть примерно так:
ENAleksey #49 - 3 месяца назад 0

» RenderEdge / [RenderEdge] Основная версия

NanO, нужно как-то переписать эту строку на jass с помощью массива Memory, там вроде где-то нужно делить на 4, где-то умножать, чтобы получить указатель или разыменовать его:
local integer pBordersFrame = *((int*)GetGameUI(0, 0) + 239) + 180
Можно спросить у Лича или Караулова.
ENAleksey #50 - 3 месяца назад (отредактировано ) 6

» RenderEdge / [RenderEdge] Основная версия

Clamp, NanO, доступа к компьютеру сейчас нет, когда приеду домой (10 числа), смогу точнее написать код:
» раскрыть
constant integer ANCHOR_TOPLEFT = 0
constant integer ANCHOR_TOP = 1
constant integer ANCHOR_TOPRIGHT = 2
constant integer ANCHOR_LEFT = 3
constant integer ANCHOR_CENTER = 4
constant integer ANCHOR_RIGHT = 5
constant integer ANCHOR_BOTTOMLEFT = 6
constant integer ANCHOR_BOTTOM = 7
constant integer ANCHOR_BOTTOMRIGHT = 8


integer address_SetFramePoint = GameBase + 0x606770 // 1.26a
integer address_GetGameUI = GameBase + ? // Нужно будет поискать адрес через IDA Pro


function SetFramePoint takes integer pFrame, integer point, integer pParentFrame, integer relativePoint, real offsetX, real offsetY returns nothing
	call CallThisCallWith6Args(address_SetFramePoint, pFrame, point, pParentFrame, relativePoint, cleanInt(realToIndex(offsetX)), cleanInt(realToIndex(offsetY)), 1)
endfunction

function GetGameUI takes integer a1, integer a2 returns nothing
    call CallFastCallWith2Args(address_GetGameUI, a1, a2)
endfunction


function HideBlackBorders takes nothing returns nothing
    // точно не помню, как в мемхаке работать с указателями, вроде бы, через массив Memory
	local integer pBordersFrame = Memory[Memory[GetGameUI(0, 0)/4]/4 + 239] + 180 // *((int*)GetGameUI(0, 0) + 239) + 180
	local integer pWindowFrame = GetGameUI(0, 0) + 180

	call SetFramePoint(pBordersFrame, ANCHOR_TOPRIGHT, pWindowFrame, ANCHOR_TOPRIGHT, 0.0, 0.0) // верхняя граница
	call SetFramePoint(pBordersFrame, ANCHOR_BOTTOMLEFT, pWindowFrame, ANCHOR_BOTTOMLEFT, 0.0, 0.0) // нижняя граница
endfunction