[tc]ħ3 ڴ޸ v7 Աֲ
       [tc]  2008.11.5

һѡеλбõλESI
0Ҳ".?AUCUnitListNode@@"û
1[6FAA2FFC]οsub_6F416AE0
2[+58+4*a2]ο6f3a0564
   a2=word ptr[+28]ο6F042B76
3[+34]Ϊַο6f2cc0a8
ַһֻ÷.\CPlayerWar3.cppڵĶ+90Ҳ֪Ƿ׼ȷ
4ַĽṹ
[ַ+1F0]ͷ
[ַ+1F4]β
[ַ+1F8]
οsub_6F415B70: 6f415b95	mov eax, [ebx+1f4]
5չǰַһʼڱͷ
[ͷ]ṹΪ
[ڵ+0]һڵ
[ڵ+4]not һڵ㣨Ϊnotϵ֪ΪʲôҪ
[ڵ+8]λESI
ο6F412504 mov eax, [edi+0c](eaxΪڵλ)
ο6f412518 mov edi, [esi+08](ediΪѡеĵλĵλESI)

Ҫ˵
1ESIʹ
 ESIΪThisUnit
 [ThisUnit + 1E4]ΪUnitAttributes
 [ThisUnit + 1EC]ΪHeroAttributes
[08220320 + 1E4] = 07B60424
    [08220320 + 1EC] = 05AA0094

2Ҫڴȡ㷨
㷨06F03F180GameMemoryȡݣҪIndex1һοReferenceNumber1עIndex1λΪ1Ȼ㷨һ
1[6FAA4178]ΪThisGame
[6FAA4178] = 02AE00B8
2[ThisGame + 0xC]ΪThisGameMemory
[02AE00B8 + C] = 0F060088
3[ThisGameMemory + Index1 * 8 + 4]ΪAddress1֮
4[Address1 + 0x18]ӦReferenceNumber1Ϸ쳣ʵַ0޸ÿ

㷨16F4634E0ҲҪIndex1
1㷨0
2Address1 + 0x78Ϊַ

㷨26F468A20ҲҪIndex1
1[ThisGameMemory + Index1 * 8 + 4]ΪAddress3
2[Address3 + 20]Ϊǰ·[Address + 54]

λ޸
1HP float
[HPMaxַ-C]

2HPMax float
1ThisUnit + 98		// οsub_6F28A760
08220320 + 98
2[ + 8]			// οsub_6F467710
[82203C0] = 06BC
3㷨0⿪
093E0AFC
4⿪[ + 84]	// ο6F46752F: fcompp, EDX

3MP float
[MPMaxַ-C]

4MPMax float
1ThisUnit + 98		// οsub_6F28A760
08220320 + 98
2[ + 28]		// οsub_6F467750
[^+28] = 06BD
3㷨0⿪
4⿪[ + 84]	// οsub_6F467750

5ֵ[HeroAttributes + 8C]	int
Դ룺6F26DFF0
getHeroExp()

6ֵ[HeroAttributes + 94]	int
Դ룺3F353D06
int __thiscall DrawHeroProperty(int *GameContext, int **HeroAttributes, int *AttributeBias, unsigned int *GBuffer)

7ݳֵ[HeroAttributes + A8]	int
Դ룺ͬ

8ֵint
Դ룺6F0DA9D0
int __fastcall getHeroIntellect_NotSure(int pAttribute1)
[HeroAttributes + 7C + 2 * 4] ΪIndex1
[HeroAttributes + 7C + 3 * 4] ΪReferenceNumber1
㷨1õַ

9Ƶʣ[UnitAttributes + 1B0]	float
Դ룺6F0C64E0
int __thiscall getHeroROF_NotSure(int *this, int a2, int a3, int a4)

10-13أint
ο(Ƶ/UnitAttributes)	0	1B0	
 - 			-110	 A0
 - 			-11C	 94
 - 			-128	 88
 - 			-BC	 F4

14ƶٶȣ[ + 70h] float λƶ[ + 78h] float ǰƶٶ
Դ룺6F201190
void __thiscall sub_6F201190(int this, int a2, int a3)

Ļãsub_6F077550:6F077693ʼ
ο16f2011a1: mov eax, [ecx+70]	ecx=07c50094
< sub_6F201190(a1+0x70)
< 6F077758(arg0 = 0012F874)
ο2ϵ6F0776F6
> [ThisUnit + 1D8]ΪMoveAbilityIndex
06CE
㷨2(^)=07e23cd4ΪI
[I]=6F8BDBCC

Indexεڣ(This+1D8=)6CE       6CD       6C6     6C5       6C4
Ӧ㷨2      07E23CD405AA009405A9009407B5042407B5044807C50094
Next         

while [I + 24] & [I + 28] != -1
{
	if [[I] + 2D4] == 6F2011906F052080ǿյģ
	{
		[I + 70]Ϊƶٶȣ[I + 78]
		exit
	}

	I = 㷨2([I + 24]) = 05AA009405A90094...07C50094
}

> [+2D4] != 6F201190
{
> [^ + 24]ΪIndex
06CD
> index
[ED236F4]=084BEEC4
[^+54]= 05aa0094
}

15[ThisUnit + E0]	float
Դ룺6F353250
6F3532A2: mov eax, dword ptr [ebx+e0]
void __thiscall sub_6F353250(int this, int a2, int a3, int a4)

16ͣ[ThisUnit + E4]	int

17X
[ThisUnit + 164]ο6F2776C4
[+8]Ϊindex[+C]ΪRefrence㷨0ο6F464685
[+78]ο6F38A52C
[]ΪXο6f6de775

18[Y] = [Xĵַ + 4]

ġǮ޸
ο6F407220һ
signed int __thiscall sub_6F407220(int this, signed int a2, unsigned int a3, int a4, int a5, int a6)

116λ
1[ThisGameMemory + 1 * 8 + 4]ΪAddress2
2Address216λ16λһ

216λ
1P	0190
2P	1410
3P	26a0
4P	3920
5P	4bb0
6P	5e30
7P	70c0
8P	8350
9P	95d0
10P	a860

3ÿ
Ǯ	    0	int x10
ľͷ	 + 80	int x10
˿ +180	int
ǰ˿ +200	int


