[Help] Custom Shops - добавяне

^TheLast^

Active Member
Joined
Jan 13, 2010
Messages
332
Reaction score
231
Здравейте ! Трябва ми помощ за един проблем, който не мога да реша сам.
Кодвам сървър Season 2 (1.00.18). Искам да увелича броя на магазините ми. Проблема идва от една функция в GameServer писана от WebZen. Там се вика всеки един от магазините поотделно :

Code:
BOOL ShopDataLoad()
{
	ShopC[0].LoadShopItem(11);
	ShopC[1].LoadShopItem(12);
	ShopC[2].LoadShopItem(13);
	ShopC[3].LoadShopItem(14);
	ShopC[4].LoadShopItem(15);
	ShopC[5].LoadShopItem(16);
	ShopC[6].LoadShopItem(17);
	ShopC[7].LoadShopItem(18);
	ShopC[8].LoadShopItem(19);
	ShopC[9].LoadShopItem(20);
	ShopC[10].LoadShopItem(21);
	ShopC[11].LoadShopItem(22);
	ShopC[12].LoadShopItem(23);
	ShopC[13].LoadShopItem(24);
	ShopC[14].LoadShopItem(23);




	LogAdd(lMsg.Get(MSGGET(1, 209)));

	return TRUE;
}

Това е сорс кода на функцията писан от DeathWay. Тъй като сорса който имам не е довършен, използвам длл, който е хуукнат в GS и чрез него си добавям новите команди и функций, който искам да има сървъра ми. Проблема тук идва точно от тази функция. Намерих я през ollybg и там дописах кода на асемблер за новите магазини (за да могат да бъдат извикани и прочетени).

Code:
PUSH EBP
MOV EBP,ESP
SUB ESP,40
PUSH EBX
PUSH ESI
PUSH EDI
PUSH 0B
MOV ECX,9ED67F8
CALL 00401AE6
PUSH 0C
MOV ECX,9EDBEBC
CALL 00401AE6
PUSH 0D
MOV ECX,9EE1580
CALL 00401AE6
PUSH 0E
MOV ECX,9EE6C44
CALL 00401AE6
PUSH 0F
MOV ECX,9EEC308
CALL 00401AE6
PUSH 10
MOV ECX,9EF19CC
CALL 00401AE6
PUSH 11
MOV ECX,9EF7090
CALL 00401AE6
PUSH 12
MOV ECX,9EFC754
CALL 00401AE6
PUSH 13
MOV ECX,9F01E18
CALL 00401AE6
PUSH 14
MOV ECX,9F074DC
CALL 00401AE6
PUSH 15
MOV ECX,9F0CBA0
CALL 00401AE6
PUSH 16
MOV ECX,9F12264
CALL 00401AE6
PUSH 17
MOV ECX,9F17928
CALL 00401AE6
----------------------надолу са нови магазини
PUSH 1E
MOV ECX,9F1CFEC
CALL 00401AE6
PUSH 1F
MOV ECX,9F226B0
CALL 00401AE6
PUSH 20
MOV ECX,9F27D74
CALL 00401AE6
PUSH 21
MOV ECX,9F2D438
CALL 00401AE6
PUSH 22
MOV ECX,9F32AFC
CALL 00401AE6
PUSH 23
MOV ECX,9F381C0
CALL 00401AE6
PUSH 24
MOV ECX,9F3D884
CALL 00401AE6
PUSH 25
MOV ECX,9F42F48
CALL 00401AE6
PUSH 26
MOV ECX,9F4860C
CALL 00401AE6
PUSH 27
MOV ECX,9F4DCD0
CALL 00401AE6
PUSH 28
MOV ECX,9F53394
CALL 00401AE6
PUSH 29
MOV ECX,9F58A58
CALL 00401AE6
-----------------------------край на магазините
PUSH 1D1
MOV ECX,9F57370
CALL DWORD PTR DS:[0C8CC480]
PUSH EAX
CALL DWORD PTR DS:[6359934]
ADD ESP,4
MOV EAX,1
POP EDI
POP ESI
POP EBX
MOV ESP,EBP
POP EBP
RETN

Оказа се, че когато добавям новите магазини и задавам адресно пространство за тях, това адресно простраство е заето от други променливи. Пример : когато добавих 15 магазин макс левела в играта ми се прееба и стана 14. И вече идва ред на въпроса ми : Има ли начин по който да добавя функцията в сорса на длл-а ми за да заместя оригиналната или по някакъв начин да проверявам дали адресното пространство, което заемам е празно .. ?
 
Коя част е забавна, че да се посмея и аз ?
 
Тук само DarkMaster мисля, че ще може да ти помогне.