Bienvenidos a nuevo tutorial, hoy aprenderemos una alternativa a como dar puntos a los personajes que recien comienzan en el juego.
En el antiguo tutorial lo hemos hecho desde un JOB en SQL el cual funciona de una manera un poco "estructurada"
¿Qué quiere decir o a qué me refiero?, Al crear un Job o Sentencia SQL obliga a que cada personaje creado deba salir del juego para recibir el premio.
¿De qué forma podemos evitar eso?, simple; lo haremos modificando los valores del procedimiento encargado de crear el personaje dentro del juego.
Aclaración: Resets y Puntos son tablas totalmente diferentes que no tienen ninguna relación en sus valores (solo comparten coherencia), ya que muchos creen que agregarle a un personaje 2 o 3 resets implica que el personaje ya tenga puntos, stats , etc.
Pero, no, no es asi; un personaje puede tener 35 resets y cero stats, cero puntos para repartir. El punto de esto es que debemos tener bien claro que son tablas diferentes, resets son resets, puntos son puntos.
Terminada la explicación, vamos al tutorial.
1)Ingresamos al SQL Server Enterprice Manager y luego desplegamos las opciones de nuestra base de datos "MuOnline". En ella nos desplazamos hasta los procedimientos almacenados y del lado derecho buscamos el llamado "CreateCharacter" (No presente en todas las versiones y el nombre del proceso puede variar de acuerdo a la versión de MuOnline con la que estemos trabajando)
2)Este procedimiento es el que se ejecuta a la hora de crear un personaje, es decir, que dicho procedure consta de 3 partes importantes:
a)Declaración de variables
b)Insertado de variables
c)Valores de variables
a)Declaración de variables:
@AccountID varchar(10),Alli lo que hacemos es simplemente @[tabla][tipo],
@Name nvarchar(10),
@cLevel smallint,
@LevelUpPoint int,
@Class tinyint,
@Experience int,
@Strength int,
@Dexterity int,
@Vitality int,
@Energy int,
@Money int,
@Life real,
@MaxLife real,
@Mana real,
@MaxMana real,
@MapNumber smallint,
@MapPosX smallint,
@MapPosY smallint,
@MapDir tinyint
De esta forma, estamos declarando una variable a la cual le asociamos un tipo de datos.
Tomemos el primer ejemplo AccountID-varchar, lo que estamos haciendo es que dicha tabla "AccountID" recibirá valores de tipo "varchar"
b)Insertado de variables:
Con esta instrucción lo que hacemos es agregar dichas variables en sus campos de la tabla character. Es importante destacar que la instrucción es INSERT INTO y no INSERT INTO Character. Esta última hace referencia a la tabla en donde insertaremos dichos datos.
c)Valores de variables:
Es bastante intuitivo, son los valores que le asignaremos a cada variable.
Lo importante de esta combinación de variables+valores es que se debe de respetar ambas cantidades.
¿Qué significa eso?, que si tenemos algo asi:
INSERT INTO CharacterTendremos un error similar al siguiente:
(tabla1, tabla2, tabla3)
VALUES
(@tabla1, @tabla2,)
3)Entonces, de acuerdo al tutorial, lo que haremos será configurar la parte C) para alterar los valores que enviaremos al crear un personaje.
No hará falta decir que tabla corresponde a cada stats porque eso ya lo hemos visto infinitas veces.
Entonces simplemente lo que haré en esta demostración es darle 2000 puntos para repartir a cualquier nuevo personaje creado en el servidor.
Para eso en la sección C) buscamos la variable @LevelUpPoint y la modificamos por el valor que deseamos tener como puntos adicionales al crear un personaje, por ejemplo "2000" de modo tal que nos quede algo similar a lo siguiente.
Luego hacemos un clic en aceptar, iniciamos el servidor y verificamos los cambios dentro del juego
4)Finalmente, al crear un nuevo personaje dentro del juego, nos aparece con 2000 puntos para repartir.
Adicionalmente algo que también podemos hacer es declarar una variable y asignarle un valor:
declare @Point intLuego como "VALUES" colocamos el @point directamente, de esta forma tomarÃa el valor del set anterior.
set @Point=2000
¿Para qué hacer eso?, de repente se me ocurrio que a ese código podemos adicionarle algunos condicionales, por ejemplo dependiendo la raza del personaje podemos dar X puntos o inventar un mod. vip que adicione puntos de acuerdo a un ON/OFF, realmente esto es creatividad y podemos hacer infinitas cosas.
CreateCharacter.sql [1 kb]