You are not logged in.
Pages: 1
Ребята подскажите где находится в памяти значение цвета хелсов, я пробывал исать не смог найти, в статике нашол вот они:
Цвет Health Value
-----------------------------------------------------
001587BA - (255)
001587BF - R (225)
001587C4 - G (150)
001587C9 - B (255)
А в памяти не могу найти, очень надо, заранее спасибо. Только для gta-vc.exe 1.1
Last edited by VintProg_Pro (24-06-2010 09:20)
Offline
Значение цветов захардкожено. В 1.1 смотреть лень, поэтому кусок кода для 1.0:
.text:00558B41 520 fld [eax+CPlayerPed.__parent.health] .text:00558B47 520 fnstcw word ptr [esp+520h+var_50C] .text:00558B4B 520 mov eax, [esp+520h+var_50C] .text:00558B4F 520 or byte ptr [esp+520h+var_50C+1], 0Ch .text:00558B54 520 fldcw word ptr [esp+520h+var_50C] .text:00558B58 520 mov [esp+520h+var_50C], eax .text:00558B5C 520 fistp [esp+520h+a] .text:00558B60 520 mov ecx, [esp+520h+a] .text:00558B64 520 fldcw word ptr [esp+520h+var_50C] .text:00558B68 520 movsx eax, cx .text:00558B6B 520 push eax .text:00558B6C 524 lea eax, [esp+524h+src] .text:00558B70 524 push offset HealthArmourTextFormat ; "%03d" .text:00558B75 528 push eax ; Dest .text:00558B76 52C call _sprintf .text:00558B7B 52C lea eax, [esp+52Ch+src] .text:00558B7F 52C add esp, 0Ch .text:00558B82 520 lea edi, [esp+520h+text] .text:00558B89 520 push edi ; dest .text:00558B8A 524 push eax ; src .text:00558B8B 528 call _asccii2unicode .text:00558B90 528 pop ecx .text:00558B91 524 pop ecx .text:00558B92 520 lea ecx, [esp+520h+var_144] ; RwRGBA * .text:00558B99 520 push 0FFh ; a .text:00558B9E 524 push 0E1h ; b .text:00558BA3 528 push 96h ; g .text:00558BA8 52C push 0FFh ; r .text:00558BAD 530 call RwRGBA__constructor .text:00558BB2 520 lea eax, [esp+520h+var_144] .text:00558BB9 520 push eax ; RwRGBA * .text:00558BBA 524 call SetLetterColor .text:00558BBF 524 cmp ds:_menu.HudMode, 0 .text:00558BC6 524 pop ecx .text:00558BC7 520 jz loc_558CFC .text:00558BCD 520 fild ds:rsGlobal.h .text:00558BD3 520 lea eax, [esp+520h+text] .text:00558BDA 520 push eax ; text .text:00558BDB 524 push eax ; y .text:00558BDC 528 fmul heightMultiplier ; 1.0f / 448.0f .text:00558BE2 528 fmul flt_697B88 .text:00558BE8 528 fstp [esp+528h+var_528] .text:00558BEB 528 mov eax, ds:rsGlobal.w .text:00558BF0 528 mov [esp+528h+a], eax .text:00558BF4 528 push eax ; x .text:00558BF5 52C fild [esp+52Ch+a] .text:00558BF9 52C mov [esp+52Ch+a], eax .text:00558BFD 52C fmul widthMultiplier ; 1.0f / 640.0f .text:00558C03 52C fmul flt_697B58 .text:00558C09 52C fisubr [esp+52Ch+a] .text:00558C0D 52C fstp [esp+52Ch+var_52C] .text:00558C10 52C call _drawText
Цвет задается в строках
.text:00558B99 520 push 0FFh ; a .text:00558B9E 524 push 0E1h ; b .text:00558BA3 528 push 96h ; g .text:00558BA8 52C push 0FFh ; r .text:00558BAD 530 call RwRGBA__constructor
ЗЫ: можешь глянуть на базу для VC 1.0.
Offline
Так мне нужно в памяти. А это статика.
Offline
В статику вместо фиксированного значения цвета можно подставить свой адрес памяти, в котором в любой момент времени можно переписать значение.
Den_spb
А можно по подробний, как это делается.
Offline
Что значит статика/нестатика? Надо патчить код. Например, из CLEO-скрипта:
05DF: write_memory 0x558B9A size 4 value 0xFF virtual_protect 1 // alpha 05DF: write_memory 0x558B9F size 4 value 0xE1 virtual_protect 1 // blue 05DF: write_memory 0x558BA4 size 4 value 0x96 virtual_protect 1 // green 05DF: write_memory 0x558BA9 size 4 value 0xFF virtual_protect 1 // red
Last edited by Alien (24-06-2010 10:11)
Offline
Что значит статика/нестатика?
Но статика когда ты патчиш, статический exe, а Динамически(Не статика) когда патчиш память.
Offline
Все пацаны!!! я разабрался, спасибо всем за подержку!!!
Offline
Короче, "статика" - это файловый образ программы на диске, а "нестатика" - это программа, загруженная в память. Можно патчить и то, и другое.
Offline
Пацаны, вот еще проблемка, через арт манию цвет меняется в памяти $00558BBF, а через плагин нет PByte($00558BBF)^ := 55;
Почему?
Offline
Про VirtualProtect забыл:
VirtualProtect($00558BBF, 1, PAGE_EXECUTE_READWRITE, @flOldProtect); PByte($00558BBF)^ := 55; VirtualProtect($00558BBF, 1, flOldProtect, @flOldProtect);
Offline
Большое тебе спасибо!!! +10 тебе!!!
Offline
Set_health_value_color : procedure(a, r, g, b : byte) cdecl;
Set_health_value_color proc near ; CODE XREF: sub_429FE0+12Dp .text:00541590 ; sub_429FE0+1E7p ... .text:00541590 .text:00541590 arg_0 = byte ptr 4 .text:00541590 arg_4 = byte ptr 8 .text:00541590 arg_8 = byte ptr 0Ch .text:00541590 arg_C = byte ptr 10h .text:00541590 .text:00541590 mov eax, ecx .text:00541592 mov cl, [esp+arg_0] .text:00541596 mov [eax], cl .text:00541598 mov dl, [esp+arg_4] .text:0054159C mov [eax+1], dl .text:0054159F mov cl, [esp+arg_8] .text:005415A3 mov [eax+2], cl .text:005415A6 mov dl, [esp+arg_C] .text:005415AA mov [eax+3], dl .text:005415AD retn 10h .text:005415AD Set_health_value_color endp
@Set_health_value_color := Ptr($00541590); Set_health_value_color(Random(254),Random(254),Random(254),Random(254));
Не хочит менять цвета почему???
Offline
Это и не должно менять цвета. Зато должно очень хорошо вылетать.:D
Хотя, если компилятор выполняет проверку на стековый фрейм...
Функция 0x541590 - это конструктор объекта наследованного от RwRGBA.
class RGBA: public RwRGBA { public: RGBA(BYTE r, BYTE g, BYTE b, BYTE a) : red(r), green(g), blue(b), alpha(a) { } }
Далее этот объект передается функции SetLetterColor (0x550170 в версии 1.0). Нужно либо постоянно патчить команды push, как показано выше, либо написать функцию-замену и сынжектить ее на замену конструктору RGBA::RGBA().
Offline
А вот еще как определить парамметры данной процедуры для дельфи?
Если это под псевдокодом выглядиь вот так:
int __cdecl sub_5857E0(int a1, int a2) { int result; // eax@1 int i; // ecx@1 __int16 v4; // dx@3 result = a2; for ( i = a1; ; i += 2 ) { v4 = *(_WORD *)result; if ( !*(_WORD *)result ) break; result += 2; *(_WORD *)i = v4; } *(_WORD *)i = 0; return result; }
Помогите пожалуйста.
Offline
Псевдокодом пользоваться можно только от полной безысходности.
void _wstrcpy (WORD * pDst, WORD * pSrc) { while (*pSrc) *pDst++ = *pSrc++; *pDst = 0; }
Стандартная библитечная функция копирования уникодной строки.
Проще вызвать соответствующую библиотечную функцию.
PS. На дельфи я последний раз писал больше десяти лет назад (году в 98-м, кажется), и основательно его забыл.
Offline
listener
А как ты параметры правильные узнал?
Offline
Так же, как и название - придумал.
Как правило, стандартные алгоритмы и функции, имеют более-менее общепринятные названия параметров и переменных. Как только стало понятно, что это стандартная функция - остальное стало тривиальным.
Offline
void _wstrcpy (WORD * pDst, WORD * pSrc) { while (*pSrc) *pDst++ = *pSrc++; *pDst = 0; }
А для Delphi это как выглядить будет???
Offline
Pages: 1