• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • 🏆 Hive's 6th HD Modeling Contest: Mechanical is now open! Design and model a mechanical creature, mechanized animal, a futuristic robotic being, or anything else your imagination can tinker with! 📅 Submissions close on June 30, 2024. Don't miss this opportunity to let your creativity shine! Enter now and show us your mechanical masterpiece! 🔗 Click here to enter!

Memory hack

Level 13
Joined
Oct 18, 2013
Messages
694
Neat. Even with 7 char limit, atleast we can still change color.

Could you post script you used to change it?
 
Level 19
Joined
Dec 12, 2010
Messages
2,070
there are also various fields, including offset to draw on. basically you're able to move any frame anywhere, whatever you like.
speaking of changing HUD, minimap is also fully customizable with tons (100+) fields to play with
u6EZXKt.png
bnzYGv2.png
ffJuVEb.png
8zI4ABJ.png
Hab7hJ6.png
 
Last edited:
  • Like
Reactions: pyf
Level 9
Joined
Jun 21, 2012
Messages
432
7 symbols limit kinda too low for full kda which is 2+1+2+1+2
00/00/00 == 8 symbols damn it!.... or 000000 but it doesn't look good i think.

there are also various fields, including offset to draw on. basically you're able to move any frame anywhere, whatever you like.
speaking of changing HUD, minimap is also fully customizable with tons (100+) fields to play with
u6EZXKt.png
bnzYGv2.png
ffJuVEb.png
8zI4ABJ.png
Hab7hJ6.png

Then for minimap is GetFrameTextAddress("MinimapFrame or something??? T_T",0)
 
Last edited:
Level 9
Joined
Jun 21, 2012
Messages
432
Well I want to make my own resources but I try to understand about this and I can not, sorry...

You can provide more information about how to use. Some kind of short tutorial or something?, anything is appreciated.
  • pDrawTextAtResourcePanel=GameDLL+0x60CA10 I see that you using variables with different addresses for each thing, but the question is: where do you get the initial values, how can be search them directly with my cheat engine?
  • Functions that change texts: some times WriteNullTerminatedString and others CallThisCallWith2Args... At what point should be used each?
  • About DotAAllstarsHelper688c.dll: Can be used publicly or is for private use only?
Well for now that's it. And again thanks for your attention Draco!
 
Level 4
Joined
Dec 24, 2010
Messages
67
Hey Draco! Is there a way to bypass the cancel menu when you toggle a spell or an order (while choosing a target). If possible, I want to cast smart order or an instant spell while on that state.
untitled2-png.258164


As you can see, the other buttons except cancel are hidden. It sucks.
 
Level 19
Joined
Dec 12, 2010
Messages
2,070
Well I want to make my own resources but I try to understand about this and I can not, sorry...

You can provide more information about how to use. Some kind of short tutorial or something?, anything is appreciated.
  • pDrawTextAtResourcePanel=GameDLL+0x60CA10 I see that you using variables with different addresses for each thing, but the question is: where do you get the initial values, how can be search them directly with my cheat engine?
  • Functions that change texts: some times WriteNullTerminatedString and others CallThisCallWith2Args... At what point should be used each?
  • About DotAAllstarsHelper688c.dll: Can be used publicly or is for private use only?
Well for now that's it. And again thanks for your attention Draco!
its hard to explain, ill try later with another article
WriteNullTerminatedString is an alias to automatically insert GetStringAddress() into desired address. Call*callWith*Args is an API to call ingame functions and have nothing to do with strings. Imagine it as calling Func0303 from JASS but from WC3 itself. You need to know which arguments to pass, which kind of function of that (this/fast/cdecl funcs, google whats the diff), and know the address of function you want to call (that's function's name)
it have public available sources but I won't recommend to use it as standalone part - there's way too many functions you probably won't use at all. everything it does can be achieved via jass but Im afraid it won't be that fast at all. think twice before making use of natives it provides.

Hey Draco! Is there a way to bypass the cancel menu when you toggle a spell or an order (while choosing a target). If possible, I want to cast smart order or an instant spell while on that state.
possilble, but there were some issues I cant remember (been long ago), so we never used it. you may force to display normal panel, but its worthless due to buggy behavior
 
Level 9
Joined
Jun 21, 2012
Messages
432
then, you can use these to write all over the screen?
Yes:

JASS:
globals
//26
set pDrawTextAtResourcePanel=GameDLL+0x60CA10

//27
set pDrawTextAtResourcePanel=GameDLL+0x0C1020
endglobals

function DrawTextAtResourcePanel takes integer panelAddress, string s returns nothing
    local integer a=GetStringAddress(s)
    if a>0 and panelAddress>0 then
        call CallThisCallWith2Args(pDrawTextAtResourcePanel,panelAddress,a)
    endif
endfunction

//where panelAddress can be anything, but you gonna use
    local integer panelAddress=GetFrameTextAddress("ResourceBarGoldText",0)
    set panelAddress=GetFrameTextAddress("ResourceBarLumberText",0)
    set panelAddress=GetFrameTextAddress("ResourceBarUpkeepText",0)
    set panelAddress=GetFrameTextAddress("ResourceBarSupplyText",0)
 
Level 19
Joined
Dec 12, 2010
Messages
2,070
I was wrong, smh
5c0vrui.png

offsets seems to be related to default position and measured idk, maybe %%
actually it doesnt really chage frame's position but have something to do with other stuff. for now I can't say what exactly but I just broke my wc3, making it think like my window is about half of the screen, and it didnt allow me to move mouse off. I changed different fields to achieve that, although changing mentioned offsets didn't help at all and gold's frame stood still all along. So it have to be reversed, and Im out of time
 
Could I use these memory hacks to replace the Console UI textures on the screen?

For example, let's say I had the Night Elf UI textures on my screen like in the screenshot in the previous post.
Then, the player pushes ESC or some other trigger event, and then the Console UI becomes the Human UI textures instead.

I'm currently participating in the Advanced Techtree Contest and was interested in making a race that could do one of multiple one-way upgrades which would permanently change the race, and hopefully the Console UI colors, to add a specific flavor to the race design.
 
Level 9
Joined
Jun 21, 2012
Messages
432
Could I use these memory hacks to replace the Console UI textures on the screen?
Yes you can :D

As you can read in the conversations above, you can change everything in HUD.
except command panel

offsets seems to be related to default position and measured idk, maybe %%
actually it doesnt really chage frame's position but have something to do with other stuff. for now I can't say what exactly but I just broke my wc3, making it think like my window is about half of the screen, and it didnt allow me to move mouse off. I changed different fields to achieve that, although changing mentioned offsets didn't help at all and gold's frame stood still all along. So it have to be reversed, and Im out of time
Take your time man :ogre_haosis:
 
Level 13
Joined
Oct 18, 2013
Messages
694
Maybe we could look for what happens when you go to Cinematic Mode and come back from it, since it changes the Console UI Hud on and off.
This. Cinematic Mode also causes problems with Modified Resource Strings, setting their color to black.
 
Last edited:
So I went ahead and read through this whole thread finally. Sounds like memory writing is disabled in 1.27b so I probably can't use it in the contest. It's still an interesting thought, though, to have in case somebody re-discovered some obscure nonsensical new way to perform memory writing later on.

But, then hopefully it would be patched, too. Don't really want viruses on battle.net!
 
Level 13
Joined
Oct 18, 2013
Messages
694
Isn't Preload exploit still a thing, too? Not enabling viruses, just crashing your PC. Pretty much as bad xD
 
Last edited:
Level 9
Joined
Jun 21, 2012
Messages
432
I was wrong, smh
5c0vrui.png

offsets seems to be related to default position and measured idk, maybe %%
actually it doesnt really chage frame's position but have something to do with other stuff. for now I can't say what exactly but I just broke my wc3, making it think like my window is about half of the screen, and it didnt allow me to move mouse off. I changed different fields to achieve that, although changing mentioned offsets didn't help at all and gold's frame stood still all along. So it have to be reversed, and Im out of time
Hi Draco ^^. How are you going with this?
 
Level 9
Joined
Jun 21, 2012
Messages
432
nohow, no time for researches. just released new version last day.
this feature seems to be harder, as it defined at loading, means tests takes 4x more time to catch things
I will try wait haha :ogre_frown:

JASS:
function SetHPCustomHPBarUnit takes integer PlayerID, integer UnitID, integer Color, real ScaleX, real ScaleY returns nothing
function SetHPBarColorForPlayer takes   integer PlayerID, integer HeroColor, integer UnitColor, integer TowerColor returns nothing
function SetMPBarXScaleForPlayer takes   integer PlayerID, real HeroXscale, real UnitXscale, real TowerXscale returns nothing
function SetMPBarYScaleForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
function SetMPBarYOffsetForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
function SetHPBarXScaleForPlayer takes   integer PlayerID, real HeroXscale, real UnitXscale, real TowerXscale returns nothing
function SetHPBarYScaleForPlayer takes  integer PlayerID, real HeroYscale, real UnitYscale, real TowerYscale returns nothing
In your thread mh API description you mention that those functions require the external dll, so I assume they do not work without the dotadllhelper?

Then how can I activate the MP bars on units?
 
Level 19
Joined
Dec 12, 2010
Messages
2,070
JASS:
globals
integer pDisableFeatures=0
constant integer LIB_Feature_AttackSpeed=0x1
 constant integer LIB_Feature_MoveSpeed=0x2
 constant integer LIB_Feature_ItemText=0x4
 constant integer LIB_Feature_UnitHP_MP=0x8
 constant integer LIB_Feature_CUSTOM_FPS_INFO=0x10
 constant integer LIB_Feature_COOLDOWNFIX=0x20
 constant integer LIB_Feature_MANABAR=0x40
 constant integer LIB_Feature_HPBAR=0x80
 constant integer LIB_Feature_FileHelper=0x100
 constant integer LIB_Feature_Widescreen=0x200
 constant integer LIB_Feature_MutePlayer=0x400
 constant integer LIB_Feature_AllySkillViewer=0x800
 constant integer LIB_Feature_ClickHelper=0x1000
endglobals

function ToggleLibFeatures takes integer flags returns nothing
 if pDisableFeatures == 0 then 
  set pDisableFeatures = GetModuleProcAddress(EXTRADLLNAME, "DisableFeatures")
 endif
 if pDisableFeatures != 0 then
  call CallStdcallWith1Args(pDisableFeatures,flags)
 endif
endfunction
for those who want to use latest dota dll (version 88g+) but only need few features of it - you can disable unneeded
 
Level 9
Joined
Jun 21, 2012
Messages
432
These functions look to be useful for moving frames, or am I wrong?
Code:
void ShowFrameWithPos( int FrameAddr, float left, float bottom, BOOL unk = TRUE )
void ShowFrameItemWithPos( int FrameAddr, float left, float bottom, BOOL unk = TRUE )
void ShowFrameWithPosAligned( int FrameAddr, float left, float bottom, int align, BOOL unk = TRUE )void ShowFrameWithPosAlternativeAligned( int FrameAddr, float left, float bottom, int alignFirst, int alignTwo, BOOL unk = TRUE )
void ShowFrameWithPosAlternative( int FrameAddr, float left, float bottom )
 
Level 19
Joined
Dec 12, 2010
Messages
2,070
file: glyphbutton.fdf
// -- INCLUDE FILES ---------------------------------------------------------
IncludeFile "UI\FrameDef\Glue\StandardTemplates.fdf",

// -- LOCAL TEMPLATES -------------------------------------------------------

// -- FRAMES ----------------------------------------------------------------
Frame "FRAME" "GlyphButton" {
Height 0.02,
Width 0.02,

Frame "GLUEBUTTON" "GlyphItemButton" {
SetAllPoints,

ControlDisabledBackdrop "GlyphItemButtonIconDisabled",
Frame "BACKDROP" "GlyphItemButtonIconDisabled" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtonsDisabled\DISBTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}

ControlBackdrop "GlyphItemButtonIcon",
Frame "BACKDROP" "GlyphItemButtonIcon" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtons\BTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}
}

}
functions
JASS:
function CallBackTestX takes nothing returns nothing
    call BJDebugMsg("HELLO WORLD")
endfunction

function SetGlyphButtonEnabledF takes boolean enabled returns nothing
    if pSetGlyphButtonEnabled == 0 then
        set pSetGlyphButtonEnabled = GetModuleProcAddress(EXTRADLLNAME, "SetGlyphButtonEnabled")
    endif
    if pSetGlyphButtonEnabled != 0 then 
        call CallStdcallWith1Args(pSetGlyphButtonEnabled,B2I(enabled))
    endif
endfunction

function CreateGlyphButtonF takes string cbFuncName, boolean enabled returns nothing
    if pCreateGlyphButton == 0 then
        set pCreateGlyphButton = GetModuleProcAddress(EXTRADLLNAME, "CreateGlyphButton")
    endif
    if pCreateGlyphButton != 0 then 
        call CallStdcallWith2Args(pCreateGlyphButton,GetStringAddress(cbFuncName),B2I(enabled))
    endif
endfunction

function ShowGlyphWindowWrap takes nothing returns nothing

        if GlyphButtonCreated == false then
            set GlyphButtonCreated = true
            call CreateGlyphButtonF("CallBackTestX",true)
        else 
            if GlyphButtonEnabled then
                set GlyphButtonEnabled = false
            else
                set GlyphButtonEnabled = true
            endif
            call SetGlyphButtonEnabledF(GlyphButtonEnabled)
        endif
endfunction
 
Level 9
Joined
Jun 21, 2012
Messages
432
file: glyphbutton.fdf
// -- INCLUDE FILES ---------------------------------------------------------
IncludeFile "UI\FrameDef\Glue\StandardTemplates.fdf",

// -- LOCAL TEMPLATES -------------------------------------------------------

// -- FRAMES ----------------------------------------------------------------
Frame "FRAME" "GlyphButton" {
Height 0.02,
Width 0.02,

Frame "GLUEBUTTON" "GlyphItemButton" {
SetAllPoints,

ControlDisabledBackdrop "GlyphItemButtonIconDisabled",
Frame "BACKDROP" "GlyphItemButtonIconDisabled" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtonsDisabled\DISBTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}

ControlBackdrop "GlyphItemButtonIcon",
Frame "BACKDROP" "GlyphItemButtonIcon" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtons\BTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}
}

}
functions
JASS:
function CallBackTestX takes nothing returns nothing
    call BJDebugMsg("HELLO WORLD")
endfunction

function SetGlyphButtonEnabledF takes boolean enabled returns nothing
    if pSetGlyphButtonEnabled == 0 then
        set pSetGlyphButtonEnabled = GetModuleProcAddress(EXTRADLLNAME, "SetGlyphButtonEnabled")
    endif
    if pSetGlyphButtonEnabled != 0 then
        call CallStdcallWith1Args(pSetGlyphButtonEnabled,B2I(enabled))
    endif
endfunction

function CreateGlyphButtonF takes string cbFuncName, boolean enabled returns nothing
    if pCreateGlyphButton == 0 then
        set pCreateGlyphButton = GetModuleProcAddress(EXTRADLLNAME, "CreateGlyphButton")
    endif
    if pCreateGlyphButton != 0 then
        call CallStdcallWith2Args(pCreateGlyphButton,GetStringAddress(cbFuncName),B2I(enabled))
    endif
endfunction

function ShowGlyphWindowWrap takes nothing returns nothing

        if GlyphButtonCreated == false then
            set GlyphButtonCreated = true
            call CreateGlyphButtonF("CallBackTestX",true)
        else
            if GlyphButtonEnabled then
                set GlyphButtonEnabled = false
            else
                set GlyphButtonEnabled = true
            endif
            call SetGlyphButtonEnabledF(GlyphButtonEnabled)
        endif
endfunction
Hi Draco! Apparently does not work for me: /

How do you go with the update?

I have been free for a few days, today I will resume work in the editor.

EDIT: Sorry for triple post, I deleted the messages.
 
Last edited:
Level 9
Joined
Jun 21, 2012
Messages
432
file: glyphbutton.fdf
// -- INCLUDE FILES ---------------------------------------------------------
IncludeFile "UI\FrameDef\Glue\StandardTemplates.fdf",

// -- LOCAL TEMPLATES -------------------------------------------------------

// -- FRAMES ----------------------------------------------------------------
Frame "FRAME" "GlyphButton" {
Height 0.02,
Width 0.02,

Frame "GLUEBUTTON" "GlyphItemButton" {
SetAllPoints,

ControlDisabledBackdrop "GlyphItemButtonIconDisabled",
Frame "BACKDROP" "GlyphItemButtonIconDisabled" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtonsDisabled\DISBTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}

ControlBackdrop "GlyphItemButtonIcon",
Frame "BACKDROP" "GlyphItemButtonIcon" {
BackdropBlendAll,
BackdropBackground "ReplaceableTextures\CommandButtons\BTNGlyph.blp",
SetAllPoints,
Height 0.02,
Width 0.02,
}
}

}
functions
JASS:
function CallBackTestX takes nothing returns nothing
    call BJDebugMsg("HELLO WORLD")
endfunction

function SetGlyphButtonEnabledF takes boolean enabled returns nothing
    if pSetGlyphButtonEnabled == 0 then
        set pSetGlyphButtonEnabled = GetModuleProcAddress(EXTRADLLNAME, "SetGlyphButtonEnabled")
    endif
    if pSetGlyphButtonEnabled != 0 then
        call CallStdcallWith1Args(pSetGlyphButtonEnabled,B2I(enabled))
    endif
endfunction

function CreateGlyphButtonF takes string cbFuncName, boolean enabled returns nothing
    if pCreateGlyphButton == 0 then
        set pCreateGlyphButton = GetModuleProcAddress(EXTRADLLNAME, "CreateGlyphButton")
    endif
    if pCreateGlyphButton != 0 then
        call CallStdcallWith2Args(pCreateGlyphButton,GetStringAddress(cbFuncName),B2I(enabled))
    endif
endfunction

function ShowGlyphWindowWrap takes nothing returns nothing

        if GlyphButtonCreated == false then
            set GlyphButtonCreated = true
            call CreateGlyphButtonF("CallBackTestX",true)
        else
            if GlyphButtonEnabled then
                set GlyphButtonEnabled = false
            else
                set GlyphButtonEnabled = true
            endif
            call SetGlyphButtonEnabledF(GlyphButtonEnabled)
        endif
endfunction
Hi Draco! Apparently does not work for me: /

How do you go with the update?

I have been free for a few days, today I will resume work in the editor.
 
Level 13
Joined
Oct 18, 2013
Messages
694
  • onGoldChange
    • Events
      • Player - Player 1 (Red)'s Current gold becomes Not equal to 0.00
    • Conditions
    • Actions
      • Custom script: local integer i = GetPlayerId(GetTriggerPlayer())
      • Custom script: local integer i2 = GetPlayerState(Player(i), PLAYER_STATE_RESOURCE_GOLD)
      • Custom script: call WriteMemory(GetFrameTextAddress("ResourceBarGoldText",0)+0x68,0xffD20915)
      • Custom script: if GetLocalPlayer()==Player(i) then
      • Custom script: call DrawTextAtResourcePanel(1,( I2S(i2) + " ¥" ))
      • Custom script: endif
Initially, I just did the WriteMemory call on init. However, cutscenes mess with this. Adding the writememory to this function and calling this function after cutscenes doesn't seem to do the trick. Any help?
 
Level 2
Joined
Oct 4, 2008
Messages
19
This is just wrong...
Why would any user want to run this shit?
I hope blizzard patches this.
 
Top