Anuncio

Colapsar
No hay anuncio todavía.

[SourceGuía] GameServer creando nuevas cargas de mapas (1.00.18)

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
    • Compartir

    [SourceGuía] GameServer creando nuevas cargas de mapas (1.00.18)

    Guia Agregar Nuevos Mapas al GS (1.00.18)

    Este tutorial muestra cómo podemos añadir nuevos mapas. Todos son para compensar SG 1.00.18, pero usted puede easly encontrar en otros GameServers. Bien, podemos empezar.


    Descargar OllyDbg Aplicacion a usar: Aqui



    En primer lugar abrir GameServer en Olly.
    I. GameServer tiene límite de mapas. Tenemos que eliminar es el siguiente:
    1. Cambio:
    Código:
    00520203 |. 6A 28 empuje 28 [40 mapas <- número de mapas originales (HEX)]
    ->
    00520203 |. 6A 33 empuje 33 [51 mapa <- aquí es número de nuestros mapas (en HEX)]
    2. Función MAPSVR_DATA:: Borrar
    Código:
    	
    0054D9D4 837D F8 28 cmp [local.iMAP_COUNT], 28
    ->
    0054D9D4 837D F8 33 cmp [local.iMAP_COUNT], 33
    3. Función gObjCheckAttackArea
    Código:
    00501591      837D FC 28    cmp [local.mapnumber], 28
    ->
    00501591      837D FC 33    cmp [local.mapnumber], 33
    
    005015BB      837D F8 28    cmp [local.tarmapnumber], 28
    ->
    005015BB      837D F8 33    cmp [local.tarmapnumber], 33
    4. Función gObjSetState
    Código:
    004F507C      837D FC 28    cmp [local.n], 28
    ->
    004F507C      837D FC 33    cmp [local.n], 33
    Función CItemBagEx:: CItemBagEx
    Código:
    0047CAB1      6A 28         push 28
    ->
    0047CAB1      6A 33         push 33
    II. Ahora debemos eliminar limite de warp:
    1. Función MapNumberCheck
    Código:
    0048F72F      837D 08 27    cmp [arg.map], 27	[Maps 0-39]
    ->
    0048F72F      837D 08 32    cmp [arg.map], 32	[Maps 0-50]
    2.Funcion gObjSetCharacter
    Código:
    004D3C58      83FA 27       cmp edx, 27
    ->
    004D3C58      83FA 32       cmp edx, 32
    3. Function GetMapMoveLevel
    Código:
    004D2980      837D 0C 27    cmp [arg.mapnumber], 27
    ->
    004D2980      837D 0C 32    cmp [arg.mapnumber], 32
    III. OK, tenemos algo de espacio para los nuevos mapas. Ahora debemos cargarlos. Podemos escribir easly DLL, que las nuevas cargas de los mapas:
    1. Carga nuevos mapas que se ve:
    Código:
    void LoadMaps()
    {
    	LoadMap("..\\Data\\Terrain41.att", 40);
    	LoadMap("..\\Data\\Terrain42.att", 41);
    	/*... Dalej ładujemy kolejne mapy...*/
    
    }
    
    _declspec (naked) void LoadMap (char * mapname, DWORD mapnr)
    {
    	__asm
    	{
    		PUSH EBP
    		MOV EBP, ESP
    		SUB ESP, 4
    		MOV ECX, mapnr
    		IMUL ECX, ECX, 0x51068
    		ADD ECX, 0x9FF4BD0
    		MOV EDX , 0x403A6C
    		CALL EDX
    	
    		MOV EAX, mapname
    		PUSH EAX
    		MOV ECX, mapnr
    		IMUL ECX, ECX, 0x51068
    		ADD ECX, 0x9FF4BD0
    		MOV EDX, 0x403698
    		CALL EDX
    	
    		MOV ESP, EBP
    		POP EBP
    		RETN
    	}
    }
    2. Tenemos que hacer nuestra llamada a la DLL. El mejor lugar es GameMainInit función.

    IV. OK, tenemos nuevos mapas cargados., Pero no hay ningún tema
    descenso. Debemos eliminar el punto límite de caída:

    1. Fijar el punto gota. Función gObjMonsterDieGiveItem:
    Código:
    0041B60B  |. /74 4C         je short GameServ.0041B659
    ->
    0041B60B     /EB 4C         jmp short GameServ.0041B659
    2. Fijar recogiendo elementos. Funciones CGItemGetRequest y MapClass:: ItemGive:
    Código:
    0043596C  |. /75 49         jnz short GameServ.004359B7
    ->
    0043596C     /EB 49         jmp short GameServ.004359B7
    
    00490847  |. /74 53         je short GameServ.0049089C
    ->
    00490847     /EB 53         jmp short GameServ.0049089C
    V. Ahora añadimos reaparecer después de la muerte en los nuevos mapas. Lorencia será buena elección.
    1. Ir a la función y el cambio gObjSetState:
    Código:
    004F47A8  |.  83F8 01       |cmp eax, 1
    004F47AB  |.  75 4A         |jnz short GameServ.004F47F7
    ->
    004F47A8     /E9 F4080000   jmp GameServ.004F50A1
    2. El 004F50A1 compensar escribimos:
    Código:
    004F50A1      83F8 01       cmp eax, 1	[Lorencia]        
    004F50A4      75 05         jnz short GameServ.004F50AB
    004F50A6    ^ E9 02F7FFFF   jmp GameServ.004F47AD
    004F50AB      83F8 29       cmp eax, 29	[Our map (HEX)]
    004F50AE      75 05         jnz short GameServ.004F50B5
    004F50B0    ^ E9 F8F6FFFF   jmp GameServ.004F47AD
    004F50B5      83F8 30       cmp eax, 30	[Our map (HEX)]
    004F50B8    ^ 0F85 39F7FFFF jnz GameServ.004F47F7
    004F50BE    ^ E9 EAF6FFFF   jmp GameServ.004F47AD
    VI. Hecho. Estamos plenamente de trabajo nuevos mapas!

    eso nos servira para entender como hacer las nuevas cargas de los mpas
    mapas a los GS de SCFMT
    Saludos Geforce

    Creditos:
    MasterJeus por pasarme la data,
    Cahir y yo por postiarla en HastleGames.
    A Tambien a HastleGames.Com por su espacio en su Foro. ^^

    Fuente: http://www.coderzfactory.org

    En un mundo tan bipolar, solo el mas garca triunfa; El honesto, muere en la mas suave calma del olvido.
    • Compartir

    #2
    bueno la verdad yo ya intente hacer esto y la DLL no es compilada... pero bueno nada se pierde con seguir probando
    sigpic

    Comentario

      • Compartir

      #3
      VIXIO, esto es para "ENTENDER" es simular el metodo que hace SCFMT para crear sus cargas a los GameServers, obio que modificar o crear una nueva carga para un GameServer de SCFMT debe de ser un poco complicado dado al caso de que estas DLL son cada vez mas modificadas por este Team.
      Canguro Hosting
      La Forma en que se crean grandes comunidades no es haciendo que tus amigos que ya tienes lleguen y lo usen, es conociendo nuevos amigos dentro de la comunidad.
      Fundador & Director de http://cangurohosting.com, Co-Fundador de http://www.hastlegames.com
      Sigueme en Twitter @JesusSuarez http://jesussuarez.net

      Comentario

        • Compartir

        #4
        Bien, yo lamento desalentar a varias personas, pero esto no es 100% funcional, ya he testeado estos incrementos al gameserver, asi como también crear las dll's en varios lenguajes y aún así el gameserver no carga los mapas y sigue tomando el error de max maps.

        La dll no la has podido compilar por que no pusiste argumentos en el archivo *.h

        Aqui les dejo el source code para ambos archivos, codigo para C++ archivo Mapas.cpp y Mapas.h

        Mapas.cpp:

        Código:
        // Mapas.cpp : Codigo de Source para la carga de los Mapas nuevos
        // By ARIES
        
        #include "stdafx.h"
        #include "Mapas.h"
        void LoadMap()
        {
            LoadMap("..\\Data\\Terrain63.att", 62);
        	LoadMap("..\\Data\\Terrain64.att", 63);
        	LoadMap("..\\Data\\Terrain65.att", 64);
            //Add all maps
        }
        _declspec (naked) void LoadMap (char * mapname, DWORD mapnr)
        {
            __asm
            {
                PUSH EBP
                MOV EBP, ESP
                SUB ESP, 4
                MOV ECX, mapnr
                IMUL ECX, ECX, 0x51068
                ADD ECX, 0x9FF4BD0
                MOV EDX , 0x403A6C
                CALL EDX
            
                MOV EAX, mapname
                PUSH EAX
                MOV ECX, mapnr
                IMUL ECX, ECX, 0x51068
                ADD ECX, 0x9FF4BD0
                MOV EDX, 0x403698
                CALL EDX
            
                MOV ESP, EBP
                POP EBP
                RETN
            }
        }
        Mapas.h

        Código:
        // Mapas.h : Codigo de Source para la carga de argumentos de Mapas.cpp
        // By ARIES
        
        void LoadMap(char * mapname, DWORD mapnr);
        Proximamente estaré realizando algunos cambios y tests en el gameserver, ahora estoy imposibilitado de probarlo dado a que mi pc me reconoce mi disco Sata como IDE y no me esta trabajando correctamente, entre varios problemas que tengo, 1 de ellos es que me impide ejecutar el joinserver, y sin el joinserver no se pude realizar ningun test.

        Cuando tenga novedades al respecto pasaré por aqui, pero ya les digo, tengo las dll's compiladas y enganchadas en 3 gameservers diferentes, fixes en gates y moves, trabajos directos desde el sql y nada, los mapas nuevos no cargan aún.

        Saludos.

        PD: el titulo esta mal, en ningún lado de la guía se especifica como cargar mapas en un *.ini
        sigpic
        www.comunidadfusion.com.ar - Portal de la Comunidad.
        www.mufusion.com.ar - Server S4 Fast.
        www.mufusion.com.ar/pro - Server S6 Pro.
        www.comunidadfusion.com.ar/online - MuOnline Browser Version.

        Comentario

          • Compartir

          #5
          me parece que el codigo es de otra persona, no se no estoy seguro.
          sigpic

          Comentario

            • Compartir

            #6
            El codigo c++ en source es el mismo que esta en todos lados, esta es solo Mi versión del codigo de source para cargar los mapas 63-64 y 65 + los argumentos necesarios para el archivo *.h en este caso Mapas.h, creo que en ningun lugar coloqué que el codigo era mio, le puse By ARIES por que yo le puse la modificación para que cargue esos mapas y la linea de argumentos para que no de errores al compilar, los créditos de donde fue obtenido el codigo de source estan en el primer post. CZF
            sigpic
            www.comunidadfusion.com.ar - Portal de la Comunidad.
            www.mufusion.com.ar - Server S4 Fast.
            www.mufusion.com.ar/pro - Server S6 Pro.
            www.comunidadfusion.com.ar/online - MuOnline Browser Version.

            Comentario

            Trabajando...
            X