[Aportes] Procedimiento para cargar datos desde un .dat (Ejemplo usado no podes ocultarte en éste mapa)

Bramhh

Fundador Evolutionao
Miembro del equipo
Moderador de AO
Buenas, quiero dejar una mini guía de vb6 (sintaxis) y un ejemplo de un código MUY SIMPLE.

Se que muchos les va resultar útil, mientras que a los más experimentados les resultará MUY básico y lo comprendo.

Espero que le sirva a alguien y todo aporte SUMA por lo cuál de 10.

Lo que vamos hacer es levantar en un archivo del servidor (En la carpeta del Servidor>Dats) algo similar a ésto...

El archivo se va llamar: MapEvents.dat

Código:
[INIT]
MAX_MAPASEVENTOS=14

'Mapa coliseo
MapaEvento1=132
'Mapa canjes
MapaEvento2=133
'Mapa laberinto
MapaEvento3=150
'Mapa eventos
MapaEvento4=152
'Mapa Arena doble
MapaEvento5=160
'Mapa Carcel
MapaEvento6=176
'Mapa Gms
MapaEvento7=181
'Mapa Retos 1 vs 1
MapaEvento8=188
'Mapa Retos 2 vs 2
MapaEvento9=189
'Mapa Cruzada faccionaria
MapaEvento10=191
'Mapa Comercio
MapaEvento11=192
'Mapa Futboll
MapaEvento12=196
'Mapa Torneo 1 vs 1
MapaEvento13=197
'Mapa Death
MapaEvento14=198

El uso que le di en mi servidor de EvoAo fue que al querer usar ocultar o invocar npcs u otras opciones, no te deje si es que la acción se trata de hacer en alguno de esos mapas creados en el archivo MapEvents.dat

Ahora que entendemos ésto y que finalidad tiene el aporte vamos a cómo se hace y como funciona la movida.

Primero que nada declaremos la variable de "MAX_MAPASEVENTOS" que se utilizará como número límite de un array, la preguna es "¿Que mierda es un array?"
Simple, un array es como tener en un terreno muchos contenedores, y dentro de cada contenedor voy a guardar algo, ejemplo "Array de 5 espacios", sería 1,2,3,4,5 (En ese array podemos guardar 5 datos, 1 por celda), no soy pro explicando pero veanlo como unas celdas de excel.

Primero ctrl + F y busquemos en el código del servidor
Código:
'*****************ARRAYS PUBLICOS*************************
Posterior a eso pueden agregar ésto...
Código:
Public mapasEventos() As Long
Con ésto hemos creado un array que guardará datos de tipo "LONG" pueden ser de integer, byte etc, lo mejor es manejar long siempre y cuando los datos no sean para enviar al cliente, si se manejan datos en el servidor es algo muy práctico y no afecta el funcionamiento del servidor en gran medida.

Lo que creamos fue un array de datos de tipo LONG con la finalidad de guardar acá los mapas q cargemos en nuestro archivo .dat, por ejemplo...
MapaEvento12=196 'acá guardamos el mapa numero 196 en la celda 12 del array de mapasEventos(), para luego ser citado para su uso.

Segundo buscamos el modulo de las declaraciones y agregamos donde se declaren variables....
Código:
'Mapas totales para eventos max array
Public MAX_MAPASEVENTOS As Long
Acá vamos a guardar el rango total del array, que pueden ver en el archivo que se declara, en vez de declararlo en el código podemos hacerlo del .dat y cargarlo en el servidor sin usar los códigos....
Public Significa que es una variable q se puede usar en cualquier parte del código del servidor, mientras que el Long es el tipo de dato que se maneja.

Tercero ya teniendo el array y la variable declarada necesitamos una función que carge los mapas al iniciar el servidor por lo cuál....
Buscamos "Sub Main" en el servidor, es el código principal que se ejecuta al empezar el programa, por lo cuál en algun sitio del código tenemos que declarar lo siguiente...
Código:
    'Cargamos los mapas de eventos
    Call CargarMapasEventos


Yo ésto lo declaré abajo de
Código:
    frmCargando.Label1(2).Caption = "Cargando ArmadurasFaccionarias.dat"
    Call LoadArmadurasFaccion

Pero es lo mismo en si, pueden ponerlo en algun sitio donde vean que carge datos como los .dats

Ahora vamos a lo más importante, la función!

Se van a preguntar que carajos es todo esto... así que vayan leyendo lo que tiene cada ' que sería un comentario explicando...

Código:
'Declaramos el inicio de una función que ejecutará una acción en el servidor al iniciar el código, ya que fue llamado del Sub Main.
Public Sub CargarMapasEventos()

    'Declaramos las variable que guardaran datos para posteriormente usarlas.... Dim es sinónimo de declarar datos y luego el As Long x ejemplo es de que tipo de dato vamos a guardar ahí...

    Dim LoopC As Long    'Ésta variable se usa para un bucle de preguntar hasta que pase algo...
    Dim Leer As clsIniManager  'Vamos a leer con el tipo de dato clsIniManager q permite leer archivos.

    Set Leer = New clsIniManager   'Explicamos q tipo de dato es....

    Call Leer.Initialize(DatPath & "MapEvents.dat")    'llamamos el archivo verificando que exista....

    MAX_MAPASEVENTOS = val(Leer.GetValue("INIT", "MAX_MAPASEVENTOS"))   'Recuerdan la variable del array total y cuantas celdas tendrá?, bueno acá vamos a decirle que el array va guardar espacio para X cantidad de variables, en nuestro ejemplo son 14.

    If MAX_MAPASEVENTOS > 0 Then   'Preguntamos si el numero de mapas es mayor a 0....

        ReDim mapasEventos(1 To MAX_MAPASEVENTOS) As Byte    'Le decimos al array que va ser utilizado para guardar 14 variables dentro de él o el numero total q se defina...

        For LoopC = 1 To MAX_MAPASEVENTOS    'Definimos un recorrido del array, guardando datos enel array, para eso hacemos que recorra hasta el número total del array, y vaya guardando 1 x 1 en cada celda el dato q se tenga cargado en nuestro MapEvents.dat

            mapasEventos(LoopC) = CLng(Leer.GetValue("INIT", "MapaEvento" & LoopC)) 'Aca vamos guardando cada dato... el LoopCva sumando +1  y así se va guardando correctamente cada dato en su celda...

        Next LoopC 'Bucle..... hasta q no tenga más celdas para asignarle valor...
      
        Set Leer = Nothing 'Leer vuelve a 0... donde fue cargado el archivo...
    End If   'concluimos el if de donde se pregunta de If MAX_MAPASEVENTOS > 0 Then que seria si la variable de los datos a cargar era mayor a 0...
  
End Sub  'concluimos el sub....

Ahora que se puede apreciar como es la movida de cargar datos un ejemplo de cómo usarlo para q no se puedan ocultar en X mapas de eventos x ejemplo.....

Busquemos.....

Código:
HandleWork

Luego agregamos bajo ésto.... en la función de handlework

Código:
            If .Flags.EnConsulta Then
                Call WriteConsoleMsg(UserIndex, "No puedes ocultarte si estás en consulta.", FontTypeNames.FONTTYPE_INFO)
                Exit Sub
            End If


ésto....

Recuerden declarar Dim i para el recorrido as integer.

Código:
For i = 1 To MAX_MAPASEVENTOS   'Recorremos las celdas del array
                If .Pos.map = mapasEventos(i) Then   'Si el mapa donde nos encontramos es = a uno de los mapas guardados en el array pasa lo siguiente....
                    Call WriteConsoleMsg(UserIndex, "No puedes ocultarte en éste mapa.", FontTypeNames.FONTTYPE_INFO)   'Mandamos un mensaje de que no puede ocultarse....
                    Exit Sub  'Salimos de la funcion de ocultarse, osea no funcionará
                End If
            Next i    'Sumamos +1 a i para recorrer celda x celda del 1 al 14 que usamos de ejemplo.
Con ésto recorremos las celdas que guardamos los mapas de eventos que queremos tener presente... y filtramos si tratamos de ocultarnos en 1 de éstos mapas... de ser así que no se pueda.

Listo, creo que es todo por ahora, es un post medio educativo medio aporte de una función bien básica, si me falto algo, no duden en anotármelo en los comentarios, saludos!.
PD: Si me equivoque en alguna parte, por favor corrijanme para arreglarlo
 
Última edición:

UnScared

Aprendiz Lvl 6
good, pero, no pensaste en una boleana al MapInfo, luego en el cargarmapa y luego, bueno, lo condicionas como lo hiciste en vez del bucle

Código:
If MapInfo(.Pos.map).MAPA_EVENTO = True Then
              WriteConsoleMsg UserIndex, "No puedes ocultarte en un mapa de evento.", FontTypeNames.FONTTYPE_INFO
              Exit Sub
          End If
 

Bramhh

Fundador Evolutionao
Miembro del equipo
Moderador de AO
good, pero, no pensaste en una boleana al MapInfo, luego en el cargarmapa y luego, bueno, lo condicionas como lo hiciste en vez del bucle

Código:
If MapInfo(.Pos.map).MAPA_EVENTO = True Then
              WriteConsoleMsg UserIndex, "No puedes ocultarte en un mapa de evento.", FontTypeNames.FONTTYPE_INFO
              Exit Sub
          End If
No, se me paso totalmente, queria mostrar varias cosas que solemos usar los novatos pero todo en 1 mismo post, Inti en una charla que tenía con él, me dijo lo mismo, que existen formas más prácticas para hacerlo, incluyendo el método de dato que en vez de ser long, sea integer. Gracias por compartir el nuevo método, que personalmente me parece más práctico, lo voy a implementar. :corazon:
 

Howell

Newbie Lvl 1
Me leí todo el post, cada linea de código comentada aporta muchísimo a los nuevos programadores del foro.
Gracias por tomarte el tiempo de compartir esto Bramhh y espero que sigas subiendo mas codigos explicativos.
Saludos!!
 
M

Miembro

Invitado
incluyendo el método de dato que en vez de ser long, sea integer

OFF: Hay olor a quemado... sienten?

----------------------------------------------------------------------------

ON: Buen aporte. Te dejo un detalle de rompe bolas que soy:

MapEvents.dat -> Llamas a la clsIniManager para leer el archivo pero nunca verificas que exista previamente (podes hasta inclusive crearlo de forma automática si no existe el archivo con el valor de MAX_MAPASEVENTOS en 0)

Saludinhos.
 
Arriba