Guía de programación Ao [0.11.5]

    Comparte
    avatar
    SuaveChiTow.-

    TEMPLARIO ESTRELLA


    TEMPLARIO ESTRELLA

    PJ :
    Nombre : SuaveChitOw.-
    Monedas de Oro-2261
    Mana :
    900 / 900900 / 900

    Vida :
    100 / 100100 / 100

    Premios :
    Mensajes : 132
    Edad : 27
    Llegada : 25/11/2008
    Masculino

    Guía de programación Ao [0.11.5]

    Mensaje por SuaveChiTow.- el Lun Ago 23, 2010 10:55 pm

    Bueno, por dónde empezar...

    Enviar un Mensaje en Consola, a un usuario en particular, o a todos los usuarios.

    Muy simple. El código debe realizarse en el servidor, y se tipea de la siguiente manera:

    Si quieren que el mensaje se envíe, por ejemplo, sólamente al usaurio que escriba /MENSAJE, el cóodigo sería así:


    Código:
    Case "/MENSAJE"
    Call SendData(SendTarget.ToIndex, UserIndex, 0, "||Enviando un mensaje al usuario que activa el comando" & FONTTYPE_INFO)

    Veamos con atención:
    SendTarget.ToIndex, UserIndex, 0,: Quiere decir, que lo que queremos enviar o "decir" le aparecerá únicamente, al usuario que activa el comando.

    "||El mensaje siempre debe llevar las dos barras verticales", sino no será envíado.

    FontType_INFO: Es la fuente con la cual aparecerá el texto en la consola. Argentum tiene una serie de fuentes declaradas particularmente, como INFO, VENENO, CENTINELA, COMBATE, entre otras. Para agregar un tipo de fuente, buscamos:


    Código:

    Public Const FONTTYPE_CONSOLA As String = "~0~128~128~0~0"

    Y ahí podremos ver la lista completa de fuentes, para agregar una, agregamos la línea:


    Código:

    Public Const FONTTYPE_NOMBREDELAFUENTE As String = "~R~G~B~Negrita~Itálica"

    Analicemos esto detalladamente: "~R = Color rojo de la fuente, Si queremos saber los valores RGB de un color particular, podemos hacerlo con paint o photoshop, en Paint, poniendo definir color personalizado y podremos ver que nos aparecerán los valores R,G y B, y en PhotoShop, al hacer doble click sobre un color. "~G = Color verde de la fuente.
    "~B = Color Azul de la fuente.
    "~Negrita: Si el valor está en 1, la fuente aparecerá en negrita, si está en 0 no.
    "~Itálica: Si el valor está en 1, la fuente aparecerá itálica, si está en 0, no.

    Si quieren que el mensaje se envíe, por ejemplo, a todos los usuarios, cuando un usuario escriba /MENSAJE, el código sería así:


    Código:
    Call SendData(SendTarget.ToAll, 0, 0, "||Enviando un mensaje a todos los usuarios" & FONTTYPE_INFO)

    Donde SendTarget.ToAll, especifica que el mensaje será enviado a TODOS los usuarios. All = Todo en inglés.

    Los FLAGS y STATS de un usuario
    Bueno, los flags, son distintos tipos de variables a las que pueden estar sometidos los usuarios. Por ejemplo:


    Código:
    If UserList(UserIndex).flags.Muerto = True Then 'el código se realiza solo si el user está muerto
    Call WarpUserChar (UserIndex, 1, 50, 50)
    Else Exit Sub
    End if

    Esto significa que si el flag "Muerto" del usuario es verdadero, (True ó 1) entonces el código se ejecutará, de lo contrario, "Exit Sub" nos indica que nos "quita" del procedimiento, ya que no cumplimos con el flag que se pide.
    Los flags son muchos, y para poder verlos uno por uno, podemos colocar, en el servidor:


    Código:

    UserList(UserIndex).flags.

    y de esa manera nos aparecerá una lista con todos los flags a utilizar.

    AGREGAR UN FLAG

    Para agregar un flag a nuestro argentum, todo lo que debemos hacer es buscar:


    Código:
    Public Type UserFlags

    y debajo agregar el flag, seguido del valor de almacenamiento de datos.

    Paso a explicar brevemente, si declaramos "As Boolean", el flag podrá ser = True ó = False.
    Si declaramos "As Integer", el flag podrá ser =1 ó =0.

    Los Stats:
    Los stats, son otra variable del usuario, tales como flags, name, targetUser, etc., que involucran todo lo relacionado con las estadísticas del usuario, ya sea su golpe máximo, su energía máxima y mínima, su salud máxima y mínima, etc., por ejemplo:


    Código:
    If UserList(UserIndex).Stats.ELV < 35 Then Exit Sub

    Esto quiere decir que si el usuario es menor a nivel 35, nos vuelve a "quitar" del procedimiento.

    Agregar un STAT:

    Para agregar un STAT, es simple, lo que debemos hacer es buscar


    Código:
    Public Type UserStats

    y luego agregar nuestro STAT, seguido del valor de almacenamiento de datos:

    As Boolean = True ó False.
    As Byte = Números enteros entre 0 y 255.
    As Integer = Hasta 2.147.483.647
    As Long = Hasta 9.223.372.036.854.775.807

    Entre Otros.

    Transportar a un usuario, meter y quitar items del inventario de un usuario.

    Transportar a un usuario:
    para transportar un usuaroi, se utiliza el "WarpUserChar", seguido de "UserIndex", y el mapa y coordenadas a los que deseamos transportar al usuario.

    Se codea de la siguiente manera:


    Código:
    Call WarpUserChar(UserIndex, MAPA, COORDENADA X, COORDENADA Y, TRUE ó FALSE)
    De esa forma, transportaríamos al usuario al Mapa = MAPA, coordenada X, coordenada Y. (True o False es si dibuja el FX del warp o no).

    Quitar un item del inventario de un personaje.
    Bueno, para quitar un item se utiliza el procedimiento QuitarObjetos, que se utiliza de la siguiente forma:


    Código:
    Call QuitarObjetos(NUMERODEOBJETO, CANTIDAD, UserIndex)

    Donde NUMERODEOBJETO tiene que ser equivalente al número del objeto en el OBJB.DAT, que deseamos quitar al usuario, y CANTIDAD, un número entero que indique la cantidad de items a quitar.

    Meter objeto en el inventario de un usuario
    para meter un objeto en el inventario de un usuario se utiliza el procedimiento "MeterItemEnINvetario", y se codea de la siguiente manera:


    Código:
    Dim OBJETO As Obj
    OBJETO.Amount = CANTIDAD DE OBJETOS
    OBJETO.ObjIndex = NUMERO DEL OBJETO
    Call MeterItemEnInvetario(UserIndex, OBJETO)

    Donde OBJETO.Amount es la cantidad de objetos, y OBJETO.ObjIndex es el numero del objeto en obj.dat.

    Plus, verificar si un usuario tiene un item.

    Para verificar si un usuario tiene un item, podemos utilizar el procedimiento "TieneObjetos", de la siguiente manera:


    Código: Esto quiere decir que si el usuario no tiene el objeto NUMERO y la CANTIDAD determinada, nos "quita" del procedimiento.

    Ejercicios:

    1_Realizar un sistema de canjeo simple, que requiera que el usuario tenga 3 objetos, si no los tiene, que envíe un mensaje al usuario informandole que no tiene el objeto, y si lo tiene, que le quite esos 3 objetos y que le de el item a canjear, informando a todos los usuarios, que un usuario ha canjeado el item.

    2_Realizar un sistema de duelos que, al tipear /DUELO, lleve a un usuario a X mapa y notifique a todos los usuarios: Un usuario ha entrado al mapa de duelos, si quieres combatir con él, escribe /DUELO. Que pida como mínimo nivel 40, y que no se pueda entrar estando muerto, meditando o comerciando.

    Parte 2

    Envío de paquetes.

    Un paquete es una forma de conectar el cliente y el servidor, de forma que algo que debe ser tipeado en el cliente, pueda ser leído por el servidor, y el servidor realice la acción, por ejemplo, si deseamos que al escribir "/FORM" se abbra el formularioX, entonces hacemos un paquete de la siguiente manera:

    En el CLIENTE buscamos:


    Código:
    Case "CFX"

    y arriba agregamos:


    Código:
    Case "FRM"
    formularioX.Show

    Luego vamos al SERVIDOR, y buscamos:



    Case "/ONLINE"

    y arriba ponemos:


    Código:
    Case "/FORM"
    Call SendData(SendTarget.ToIndex, UserIndex, 0, "FRM")

    De esta forma, el servidor recibe el paquete del cliente y lo interpreta para que al escribir "/FORM", se llame al paquete "FRM" que se encuentra en el CLIENTE, y que puede abrir el formularioX.

    Uniendo variables en un SendData

    Ya sabemos que para unir una variable se utiliza la tecla "&" pero, ¡cómo lo realizamos en un código de Argentum ?

    Por ejemplo, si queremos enviar un mensaje de consola a todos los usuarios, que X usuario tiene X objeto entonces hacemos así:


    Código:
    Call SendData(SendTarget.ToAll, 0, 0, "||El Usuario " & UserList(UserIndex).name & "tiene el objeto X" & FONTTYPE_INFO)


    DE esta manera, en el mensaje de consola, saldrá el nombre del usuario que tiene el objeto X.

    Uniendo Variables con SendData II

    Bueno, como vimos anteriormente, podemos usar el "&" para combinar una variable del usuario con un mensaje de consola. Ahora, si queremos combinar un mensaje de consola con una variable definida por el usuario en el mismo procedimiento?

    Sencillo, tomemos por ejemplo el comando de "/ONLINE":


    Código:
    Case "/ONLINE"
    'No se envia más la lista completa de usuarios
    N = 0
    For LoopC = 1 To LastUser
    If UserList(LoopC).name <> "" And UserList(LoopC).flags.Privilegios <= PlayerType.Consejero Then
    N = N + 1
    End If
    Next LoopC
    Call SendData(SendTarget.ToIndex, UserIndex, 0, "||Número de usuarios: " & N & FONTTYPE_INFO)
    Exit Sub
    El código nos muestra mediante un SendData, al usuario que escribe "/ONLINE" la cantidad de usuarios online que hay en el servidor, mediante una variable definida en el procedimiento (N).


    Leyendo desde el cliente un comando del servidor

    Como ya sabemos, los comandos realizados en el servidor, no pueden ser realizados en el cliente, ya que no tiene las mismas variables definidas. Ahora, si yo hice un código de /HOGAR y quiero que abra un formulario mediante un paquete, que al clickear en un CommandButton, se me active el commadno "/HOGAR". Cómo lo hago?

    Sencillo, vamos al código del commandbutton, y ponemos:


    Código:
    SendData("/HOGAR")

    De esa manera, se activará elñ comando /HOGAR del servidor, al clickear un commandbutton del cliente.

    Ejercicios

    1_Realizar el mismo sistema de canjeos anterior, pero mediante un formulario, y un commandbutton con el caption "canjear", para que se active el comando.

    2_Realizar el mismo sistema de duelos, pero que al escribir /DUELO nos abra un formulario que nos diga a qué sala queremos ir.


      Fecha y hora actual: Miér Dic 12, 2018 4:18 am