#1 24-06-2010 09:19

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Значение цвета хелсов VC.

Ребята подскажите где находится в памяти значение цвета хелсов, я пробывал исать не смог найти, в статике нашол вот они:

Цвет 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

#2 24-06-2010 09:49

Alien
Registered: 12-10-2008
Posts: 564

Re: Значение цвета хелсов VC.

Значение цветов захардкожено. В 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

#3 24-06-2010 09:53

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

Так мне нужно в памяти. А это статика.

Offline

#4 24-06-2010 10:04

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Значение цвета хелсов VC.

В статику вместо фиксированного значения цвета можно подставить свой адрес памяти, в котором в любой момент времени можно переписать значение.

Offline

#5 24-06-2010 10:07

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

В статику вместо фиксированного значения цвета можно подставить свой адрес памяти, в котором в любой момент времени можно переписать значение.

Den_spb

А можно по подробний, как это делается.

Offline

#6 24-06-2010 10:11

Alien
Registered: 12-10-2008
Posts: 564

Re: Значение цвета хелсов VC.

Что значит статика/нестатика? Надо патчить код. Например, из 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

#7 24-06-2010 10:16

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

Что значит статика/нестатика?

Но статика когда ты патчиш, статический exe, а Динамически(Не статика) когда патчиш память.

Offline

#8 24-06-2010 10:25

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

Все пацаны!!! я разабрался, спасибо всем за подержку!!!

Offline

#9 24-06-2010 10:26

Alien
Registered: 12-10-2008
Posts: 564

Re: Значение цвета хелсов VC.

Короче, "статика" - это файловый образ программы на диске, а "нестатика" - это программа, загруженная в память. Можно патчить и то, и другое.

Offline

#10 24-06-2010 10:44

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

Пацаны, вот еще проблемка, через арт манию цвет меняется в памяти $00558BBF, а через плагин нет PByte($00558BBF)^ := 55;
Почему?

Offline

#11 24-06-2010 10:56

Alien
Registered: 12-10-2008
Posts: 564

Re: Значение цвета хелсов VC.

Про VirtualProtect забыл:

VirtualProtect($00558BBF, 1, PAGE_EXECUTE_READWRITE, @flOldProtect);
PByte($00558BBF)^ := 55;
VirtualProtect($00558BBF, 1, flOldProtect, @flOldProtect);

Offline

#12 24-06-2010 11:05

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

Большое тебе спасибо!!! +10 тебе!!! good

Offline

#13 24-06-2010 11:42

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

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

#14 25-06-2010 08:27

Alien
Registered: 12-10-2008
Posts: 564

Re: Значение цвета хелсов VC.

Это и не должно менять цвета. Зато должно очень хорошо вылетать.: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

#15 25-06-2010 08:54

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

А вот еще как определить парамметры данной процедуры для дельфи?

Если это под псевдокодом выглядиь вот так:

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

#16 25-06-2010 11:40

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Значение цвета хелсов VC.

Псевдокодом пользоваться можно только от полной безысходности.

void _wstrcpy (WORD * pDst, WORD * pSrc) {
  while (*pSrc)
    *pDst++ = *pSrc++;
  *pDst = 0;
}

Стандартная библитечная функция копирования уникодной строки.
Проще вызвать соответствующую библиотечную функцию.

PS. На дельфи я последний раз писал больше десяти лет назад (году в 98-м, кажется), и основательно его забыл.

Offline

#17 25-06-2010 12:02

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

listener
А как ты параметры правильные узнал?

Offline

#18 25-06-2010 13:13

listener
From: Vice City
Registered: 09-11-2006
Posts: 616
Website

Re: Значение цвета хелсов VC.

Так же, как и название - придумал.
Как правило, стандартные алгоритмы и функции, имеют более-менее общепринятные названия параметров и переменных. Как только стало понятно, что это стандартная функция - остальное стало тривиальным.

Offline

#19 26-06-2010 02:05

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Значение цвета хелсов VC.

void _wstrcpy (WORD * pDst, WORD * pSrc) {
  while (*pSrc)
    *pDst++ = *pSrc++;
  *pDst = 0;
}

А для Delphi это как выглядить будет???

Offline

Board footer

Powered by FluxBB