[Ferramentas Necessarias]
[URL="http://www.ollydbg.de/odbg110.zip"]OllyDbg[/URL]
GameServer versão 97d (ou semelhantes) unpacked
Compilador
[Tutorial]
1° Abra o OllyDbg, clique no menu, Open > File e selecione o GameServer.
2° Mudando o limite dos mapas:
Procure:
Troque todos os valores [color:cb6e="Yellow"]11, dos codigos citados acima, para [color:cb6e="Yellow"]19, e o limite ficara [color:cb6e="Yellow"]25, pois no Hex 19 = 25.
3° Mudando o limite dos mapas II:
Troque todos os valores [color:cb6e="Yellow"]10, dos codigos citados acima, para [color:cb6e="Yellow"]18.
CMP [ARG.1],[color:cb6e="Yellow"]10 || CMP EAX,[color:cb6e="Yellow"]10 || CMP [ARG.2],[color:cb6e="Yellow"]10
4° O mapa não tem drops, por isso agora precisa remover o limite dos drops.
Mude todos para JMP.
5° Agora vamos adicionar o respawn nos novos mapas, se um monstro morrer ele renasce novamente.
Mude para JMP.
6° No offset 00473371 escreva:
[URL="https://2img.net/r/ihimizer/img530/1919/45389979gx3.gif"]Imagem de exemplo[/URL]
7° Agora vamos fazer uma dll para ler os novos mapas:
mapas.cpp
7° Agora e só você colocar o terrain do mapa na pasta data , lembrando que se vc colocou o limite 25 , você não poderá colocar terrains mais q 25 ex: Terrain26 , e etc.
9° Não se esqueça de colocar o arquivo do mapa no patch do seu servidor.
10º Lembrando que quando for adicionar pule 6 terrains do 12 , porque ambos são do BloodCastle =) , então vc pode começar pelo 18 , para garantir eu comecei do 19 ^^
10º Se você adicionou Terrain19 , o número pra colocar spots e no gate será 18 , e o World no client será 19.
[Creditos]
Cahir (Tutorial Original da versão 1.00.18)
Disconnect (Tutorial Inglês na CZF)
Motto(LighT Team) (Modificações e achar offsets da dll para 97)
[URL="http://www.ollydbg.de/odbg110.zip"]OllyDbg[/URL]
GameServer versão 97d (ou semelhantes) unpacked
Compilador
[Tutorial]
1° Abra o OllyDbg, clique no menu, Open > File e selecione o GameServer.
2° Mudando o limite dos mapas:
Procure:
00489489 |. 68 711C4000 PUSH GameServ.00401C71 ; Entry address
0048948E |. 6A 11 PUSH 11
00489490 |. 68 68DB0400 PUSH 4DB68
0047C7CF |. /7C 06 JL SHORT GameServ.0047C7D7
0047C7D1 |. |837D FC 11 CMP [LOCAL.1],11
0047C7D5 |. |7C 0A JL SHORT GameServ.0047C7E1
0047C7F9 |. /7C 06 JL SHORT GameServ.0047C801
0047C7FB |. |837D F8 11 CMP [LOCAL.2],11
0047C7FF |. |7C 0A JL SHORT GameServ.0047C80B
00473348 |. 8955 FC |MOV [LOCAL.1],EDX
0047334B |> 837D FC 11 CMP [LOCAL.1],11
0047334F |. 7D 16 |JGE SHORT GameServ.00473367
Troque todos os valores [color:cb6e="Yellow"]11, dos codigos citados acima, para [color:cb6e="Yellow"]19, e o limite ficara [color:cb6e="Yellow"]25, pois no Hex 19 = 25.
3° Mudando o limite dos mapas II:
0044377D |. /7C 06 JL SHORT GameServ.00443785
0044377F |. |837D 08 10 CMP [ARG.1],10
00443783 |. |7E 04 JLE SHORT GameServ.00443789
0045C61C |. 33C9 XOR ECX,ECX
0045C61E |. 83F8 10 CMP EAX,10
0045C621 |. 0F9EC1 SETLE CL
0045BA59 |. C745 FC 00000000 MOV [LOCAL.1],0
0045BA60 |. 837D 0C 10 CMP [ARG.2],10
0045BA64 |. 7E 29 JLE SHORT GameServ.0045BA8F
Troque todos os valores [color:cb6e="Yellow"]10, dos codigos citados acima, para [color:cb6e="Yellow"]18.
CMP [ARG.1],[color:cb6e="Yellow"]10 || CMP EAX,[color:cb6e="Yellow"]10 || CMP [ARG.2],[color:cb6e="Yellow"]10
4° O mapa não tem drops, por isso agora precisa remover o limite dos drops.
00409F86 |. /74 4A JE SHORT GameServ.00409FD2
004188EE |. /75 49 JNZ SHORT GameServ.00418939
00444ED7 |. 74 53 JE SHORT GameServ.00444F2C
Mude todos para JMP.
[color:cb6e="Yellow"]JE SHORT || J[color:cb6e="Yellow"]NZ SHORT || [color:cb6e="Yellow"]JE SHORT
5° Agora vamos adicionar o respawn nos novos mapas, se um monstro morrer ele renasce novamente.
00472F7F |. /75 4C |JNZ SHORT GameServ.00472FCD
Mude para JMP.
JNZ SHORT
6° No offset 00473371 escreva:
00473371 83F8 01 CMP EAX,1
00473374 75 05 JNZ SHORT 0047337B
00473376 ^ E9 06FCFFFF JMP 00472F81
0047337B 83F8 12 CMP EAX,12
0047337E 75 05 JNZ SHORT 00473385
00473380 ^ E9 FCFBFFFF JMP 00472F81
00473385 83F8 13 CMP EAX,13
00473388 ^ 0F85 3FFCFFFF JNZ 00472FCD
0047338E ^ E9 EEFBFFFF JMP 00472F81
[URL="https://2img.net/r/ihimizer/img530/1919/45389979gx3.gif"]Imagem de exemplo[/URL]
7° Agora vamos fazer uma dll para ler os novos mapas:
mapas.cpp
#include "mapas.h"
void LoadMaps()
{
LoadMap("..\\data\\Terrain19.att",18);
LoadMap("..\\data\\Terrain20.att",19);
LoadMap("..\\data\\Terrain21.att",20);
LoadMap("..\\data\\Terrain22.att",21);
LoadMap("..\\data\\Terrain23.att",22);
LoadMap("..\\data\\Terrain24.att",23);
LoadMap("..\\data\\Terrain25.att",24);
}
__declspec (naked) void LoadMap (char*mapname, DWORD mapnr)
{
_asm
{
PUSH EBP
MOV EBP, ESP
SUB ESP, 4
MOV ECX, mapnr
IMUL ECX, ECX, 0x4DB68
ADD ECX, 0x6354C78
MOV EDX, 0x402225
CALL EDX
MOV EAX, mapname
PUSH EAX
MOV ECX, mapnr
IMUL ECX, ECX, 0x4DB68
ADD ECX, 0x6354C78
MOV EDX, 0x401FC3
CALL EDX
MOV ESP, EBP
POP EBP
RETN
}
}[/PHP]
mapas.h
[PHP]#include <stdio.h>
#include <windows.h>
void LoadMaps();
void LoadMap (char * mapname, DWORD mapnr);
7° Agora e só você colocar o terrain do mapa na pasta data , lembrando que se vc colocou o limite 25 , você não poderá colocar terrains mais q 25 ex: Terrain26 , e etc.
9° Não se esqueça de colocar o arquivo do mapa no patch do seu servidor.
10º Lembrando que quando for adicionar pule 6 terrains do 12 , porque ambos são do BloodCastle =) , então vc pode começar pelo 18 , para garantir eu comecei do 19 ^^
10º Se você adicionou Terrain19 , o número pra colocar spots e no gate será 18 , e o World no client será 19.
[Creditos]
Cahir (Tutorial Original da versão 1.00.18)
Disconnect (Tutorial Inglês na CZF)
Motto(LighT Team) (Modificações e achar offsets da dll para 97)