Crear una cuenta por SQL-Query

Bienvenidos a un nuevo tutorial, hoy aprenderemos a crear una cuenta mediante una query o consulta SQL, algo que nos puede ayudar en varias ocasiones. 
 
Actualmente para crear una cuenta podemos hacerlo por página web (la cual debe estar vinculada a la base de datos), por editor o por algun software específico creado para dicho propósito. Pero tambien podemos crear una cuenta mediate una query o consulta SQL.
 
¿Podemos usar una misma query para crear una cuenta en cualquier tipo de files y versión? La respuesta es no, de echo , dependiendo los files y versión las tablas y columnas no son exactamente las mismas.


1) Comenzemos con la query para versiones antiguas, la que además de la tabla MEMB_INFO requiere cargar los datos en la tabla VI_CURR_INFO.
Para eso debemos copiar el siguiente código y pegarlo en el campo en el Analizador de Consultas (Lo haremos bajo SQL Server 2000)
Use MuOnline

INSERT INTO MEMB_INFO
(memb___id,memb__pwd,memb_name,sno__numb,post_code,addr_info,addr_deta,tel__numb,mail_addr,phon_numb,fpas_ques,fpas_answ,job__code,appl_days,modi_days,out__days,true_days,mail_chek,bloc_code,ctl1_code)
VALUES
('admin','password','MuTutorial',123456789,123456789,null,null,null,'admin@localhost.com',null,null,null,1,10/11/2020,10/11/2020,10/11/2020,10/11/2020,1,0,1)

INSERT INTO VI_CURR_INFO
(ends_days,chek_code,used_time,memb___id,memb_name,memb_guid,sno__numb,Bill_Section,Bill_value,Bill_Hour,Surplus_Point,Surplus_Minute,Increase_Days )  
VALUES 
('2005','1',1234,'admin','MuTutorial',1,7,6,3,6,6,'10/11/2020 10:36:00',0)
 
Visualizando el analizador de consultas del sql 2000
 
2) El siguiente paso será modificar los datos resaltados en color.
a) admin= ID de la cuenta que deseamos crear, recuerda respetar el máximo de caracteres.
b) password= La clave o password que deseamos que tenga nuestra cuenta.
c) admin= Debemos repetir el mismo ID que colocamos en el punto a)

Una vez que modificamos los datos, apretamos el boton F5 o hacemos un clic en el boton "Ejecutar Consulta"

Visualizando la query ejecutada
 
3)Y con eso, cargaremos los datos a la base de datos.
Ahora, si nuestro servidor es S4/S6/S8 MuEMU, debemos usar la siguiente query (Lo haremos bajo SQL Server 2008):
Use MuOnline

INSERT INTO MEMB_INFO
(memb___id,memb__pwd,memb_name,sno__numb,post_code,addr_info,addr_deta,tel__numb,mail_addr,phon_numb,fpas_ques,fpas_answ,job__code,appl_days,modi_days,out__days,true_days,mail_chek,bloc_code,ctl1_code)
VALUES
('admin','password','MuTutorial',123456789,123456789,null,null,null,'admin@localhost.com',null,null,null,1,10/11/2020,10/11/2020,10/11/2020,10/11/2020,1,0,1)
Nuevamente, debemos modificar los datos de admin y password por los deseados, luego apretamos F5 o hacemos un clic en el boton "Execute"/"Ejecutar"
 

Visualizando la query en SQL Server 2008

 
Recuerden: Si la versión es vieja eso no significa que tengamos que usar la primera query, lo que condiciona el uso de una o de la otra, es si nuestro servidor trabaja con la tabla VI_CURR_INFO, y eso lo podemos verificar revisando nuestra DB en busca de su presencia.

Coordenadas en MuEMU

Bienvenidos a un nuevo tutorial, hoy veremos un tema que hemos dejado pendiente: las coordenadas a la hora de crear un spot, agregar un monster en un evento, etc. Antes de continuar, debemos entender que rango y coordenadas, son variables totalmente diferentes. 
La primera indica el radio de movimiento y la segunda indica posicionamiento inicia-final de un objeto.
 


Comenzemos primero a entender que es una coordenada. Para explicarlo de una forma fácil, una coordenada es un punto en un plano dado en este caso por dos valores: X-Y
 
Ahora, pasemos esto al juego, el plano seria el mapa en donde está posicionado nuestro personaje, y los X-Y son los valores que recibe al movernos horizontal, vertical y diagonalmente dentro del juego. Veámoslo dentro del juego:
 
Visualizando la posicion de coordeandas x y
 
1) Cuando creamos un spot, debemos definir cuatro valores para cuatro variables y estan son:
BeginPosX, BeginPosY, EndPosX, EndPosY
¿Pero qué es y cómo funciona esto?
BeginPosX y BeginPosY, = Son las coordeandas de posicionamiento inicial
EndPosX y EndPosY = Son las coordenadas de posicionamiento final
Supongamos que tenemos estos valores: BeginPosX=130 BeginPosY=95
                                                                  EndPosX= 150 EndPosY=95
 
¿Qué creen que suceda? ¿Como creen que saldrá el spot? Veámoslo:
 
Visualizando la posicion de monsters
 
2) Lo que hemos echo anteriormente es crear un spot en línea recta, y la explicación es muy sencilla, si observan tanto el BeginPosY como el EndPosY tiene el mismo valor , eso indica que solo movemos BeginPosX y EndPosX de 150 a 130 , lo que daría una linea recta de 20 secuencias.
Para que se entienda mejor , observen la siguiente imagen:
 

Visualizando la posicion de coordeandas x y 

3) Ahora supongamos que deseamos que un monster de determinado evento aparezca en una parte especifica del mapa, pero atentos, cuando decimos específica , no queremos que el monster salga siempre en el mismo lugar, pero si queremos que aparezca en un rango de coordenadas específicas. 
¿A qué nos referimos con ese rango de coordenadas? Para explicarlo mejor, observen la siguiente imagen:
 
Visualizando el rango de coordeandas

4) Lo importante de crear un rango de coordenadas es para evitar que el monster o los monsters puedan aparecer en una alguna parte del mapa que no es accesible por los jugadores.
Para eso , debemos obtener cuatro coordenadas completas dentro del juego, de esa forma creamos un rectángulo, cuadrado, paralelogramo, etc imaginario, es decir, obtendremos un perímetro (que funcionará como limitador) y a partir de ese périmetro obtenemos el areá (superficie total) en donde podrá aparecer el monster.

Para obtener los cuatros puntos, debemos posicionar el personaje en el punto inicial deseado, por ejemplo , usaré el mapa noria, y mi coordenada inicial será: (125,45), luego caminaré en línea recta para obtener mi segundo punto de coordenadas, esta será (128,34), ahora comenzaré a cerrar mi rectángulo caminando en sentido opuesto a la última coordenada (136,34) y finalmente para cerrar la figura geométrica ire en línea recta paralela en sentido al punto inicial (133,47) 
 
 Visualizando el rango de coordeandas
 
 5) Si ordemos las cuatro coordeandas, obtenemos:
1º coordenada = (125,45) 
2º coordenada = (128,34)
3º coordenada = (136,34)
4º coordenada = (133,47) 
¿Pero ahora cómo cargamos 8 coordenadas si el archivo sólo admite 4? Para eso debemos extraer de cada coordenada un valor y posicionarlo dentro del archivo de la siguiente manera:
En BeginPosX retiraremos de la 1º coordenada el primer valor, es decir, el 125
En BeginPosY retiraremos de la 2º coordenada el segundo valor, es decir, el 34
En EndPosX retiraremos de la 3º coordenada el primer valor, es decir, el 136
En EndPosY retiraremos de la 4º coordenada el segundo valor, es decir, el 47
 
El archivo editado nos quedará asi:
 
Visualizando el archivo editado
 
6) Si colocamos un monster para hacer el test, lo que debería suceder es que cada vez que lo matemos , este se regenerá dentro del perímetro que le hemos dado, y de eso se trata justamente. De echo, ¿Qué sucede si colocamos la misma cantidad de monsters que el total de la superficie? 
La respuesta la podrán ver en la siguiente imagen:
 
Visualizando spot
 
Lo que sucedio, es que como la cantidad de monsters superá/iguala la cantidad de espacio de la superficie total, logramos cubrir el área completa con los monsters asignados. 

Atención: Todos los mapas no son iguales, es decir, que no podemos repetir coordenadas sin antes verificarlas, ya que como hemos explicado anteriormente, la idea de este tutorial es evitar posicionar un monster en un espacio que no existe o que no sea accesible.

Con este tutorial, tambien podremos crear secciones delimitando coordenadas como lo hicimos anteriormente, luego podemos usar los posicionamiento para evalular sentencias. En fin, el uso como siempre es amplio, si conocemos las bases los limites los ponen ustedes.

Invasion Manager en MuEMU

Bienvenidos a un nuevo tutorial, hoy aprenderemos a configurar e interpretar el archivo responsable por las invasiones en nuestro servidor MuEMU



El archivo encargado de esto lo encontramos en la siguiente ruta: 
Muserver/data/Event/InvasionManager.dat
1) Este archivo contiene 4 secciones, la 0-1-2-3 y analizaremos en detalles cada una de ellas.
Para este tutorial, utilizare un archivo vacio, de esa forma podremos visualizarlo de forma limpia y podremos configurarlo con nuestros parámetros.
La primera sección es la 0, en esta sección se define lo siguiente:
 
 Visualizando la interfaz de archivo invasion manager  

Index = Corresponde al ID de la invansión que deseamos configurar.(0=Skeleton King, 1=Red Dragon, 2=Dorados, 3=White Wizard, 4=Año Nuevo, 5=Conejos,6=Verano, 7=Navidad, 8=Medusa) 
Year = Corresponde al año en que ejecutará la invasión 
Month = Corresponde al mes en que ejecutará la invasión (Del 1 al 12) 
Day = Corresponde al día del mes en que ejecutará la invasión (Del 1 al 31) 
DoW= Son las siglas de Day Of Week, día de la semana en que se ejecutará el evento. (1=Domingo, 2=Lunes, 3=Martes, 4=Miercoles, 5=Jueves, 6=Viernes, 7=Sábado) 
Hour = Corresponde a la hora en que ejecutará la invasión (Formato 24 HS)
Minute = Corresponde a los minutos en que ejecutará la invasión (De 0 a 60)
Second = Corresponde a los segundos en que ejecutará la invasión (De 0 a 60)
Atención: el valor * significa "todos". 
Ejemplo: si en tenemos el campo Month=* , eso significa que el evento transcurrirá todos los meses, el * se usa caso no desees especificar algun valor. 
A modo de ejemplo, configure para que el evento White Wizard, transcurra todos los años, todos los dias, todos los meses, todos los dias de la semana, a las 16 hs , 15 minutos, todos los segundos.
El archivo configurado nos quedará asi: 
 
Visualizando la seccion 0 del invasion
  manager 
 
2) Ahora pasaremos a configurar la sección 1, en este apartado debemos configurar:
Index =  Corresponde al ID de la invasión.
RespawnMessage =  Nº de mensaje que saldrá cuando la invasión comienze. (Este número lo encontramos en el archivo Muserver/data/message.txt, generalmente ya viene definido para todas las invasiones originales de la versión, pero caso deseen, pueden crear un nº de mensaje personalizado)
DespawnMessage = Nº de mensaje que saldrá cuando la invasión termine. (Este número no viene definido en el message.txt ya que no es necesario anunciarlo, por eso basta con dejar un *)
BossIndex = Nº del Boss o monster que aparecerá en la invasión. Es valor lo pueden extraer del archivo Muserver/data/Monster/Monster.txt (Caso su invasión no tenga un boss o monster , dejamos un *, tambien pueden obtener el nº del monster haciendo un Clic Aqui)
BossMessage = Nº de mensaje que saldrá al matar el monster. (Este número lo encontramos en el archivo Muserver/data/message.txt, generalmente ya viene definido para todas las invasiones originales de la versión, pero caso deseen, pueden crear un nº de mensaje personalizado, y si la invasión no tiene ningun boss , dejamos un *)
InvasionTime = Duración de la invasión en segundos
Continuando con la ejemplificación, configuraré esta sección de la siguiente forma:
El index continuará siendo 3, el mensaje de aparición será el 195 (Recuerden, este mensaje lo encontrarán en el archivo message.txt), el mensaje de finalización será *
El BossIndex será el 135, es decir, el número que corresponde al boss White wizard. (Podrán encontrar el listado completo en el archivo Monster.txt). 
El mensaje que aparecerá al matar el Boss será el Nº 205 (Ya definido en el archivo message.txt) y finalmente, la duración del evento será de 600 segundos (10 minutos)
El archivo configurado nos quedará asi:
 
 Visualizando la seccion 1 del invasion
  manager 
 
3) La siguiente sección es la 2, en esta sección debemos configurar:
Index = Corresponde al ID de la invasión.
Group = Se utiliza en el caso de invasiones multiples, como por ejemplo en el caso de la invasión de los dorados, en donde varios monsters , invaden diferentes mapas de forma simultánea. (El valor va de 0 a X). 
Map =  Nº de mapa en donde se desarrollará la invasión. Si no recuerdas el número de cada mapa, puedes consultar haciendo un Clic Aqui
Value = Permite la creación de invasiones en donde los monster aparecen de forma randon en el mapa.
Continuando con la ejemplificación, configuraré esta sección de la siguiente forma:
El index continua siendo 3 . El grupo será 0 ya que no se trata de invasión de dorados. El mapa será lorencia y noria y el value será 0

Visualizando la interfaz de archivo invasion manager seccion 2 
 
*Atención: Como la invasión será en donde mapas, debemos agregar dos lineas, es decir, si deseamos que una misma invasión transcurra en diferentes mapas, debemos agregar tantas lineas como mapas deseamos.
 
4) Y finalmente llegamos a la última sección, la 3.
En este apartado debemos configurar:
Index=  Corresponde al ID de la invasión.
Group=  Caso tengas definidos grupos en la sección 2, deberás agregarlos en este apartado seguiendo la misma secuencia.
MonsterClass = Nº de monster que aparecerá en la invasión. Sino recuerdas los números de los monsters, puedes consultar haciendo un Clic Aqui. Tambien es importante saber que podemos tener varios monsters en un a misma invasión (Por ejemplo: boss+tropas) agregando más de una línea con el mismo index
RegenType = Aqui definimos el tipo de regeneración, si colocamos 0, al matar el boss o el monster , la invansión finaliza, pero si en cambio colocamos un 1, el boss/monster se regenera nuevamente y continurá regenerandose por un tiempo que nosotros podremos definir a continuación.  
RegenTime = Aqui podremos definir el tiempo de regeneración, este valor se calcula en segundos.
Y para completar nuestra ejemplificación, completaremos el archivo de la siguiente forma:
El index continua siendo 3, el group será 0, en MonsterClass agregaremos al Boss nº 135 (White Wizard) en una primera linea, y dos lineas más para los monsters ID 136 (Destructive ogre soldier) y 137 (Destructive ogre archer)
En RegenType colocaré 0 (Es decir, no se regenerará al matarlo) y en RegenTime, tambien colocaré 0 (Ya que el RegenType fue definido en 0, no hay necesidad de definir el tiempo)
 
Visualizando la interfaz de archivo invasion manager seccion 3

5) Para finalizar de configurar la invasión, debemos agregar los monsters al archivo 
Muserver/data/Monster/MonsterSetBase.txt

Lo que debemos hacer en ese archivo es crear una nueva sección con ID 3 (Recuerden que el ID 3 es para eventos) y agregamos los monsters de la siguiente manera:  

Monster= Debemos agregar el número de cada monsters que participara en la invasión,
MapNumber =  Aqui debemos agregar el número de mapa en donde se origina la invansión
Range =  Rango máximo de movimiento del monster
BeginPosX = Posición incial X en donde podrá aparecer el monster    
BeginPosY= Posición incial Y en donde podrá aparecer el monster         
EndPosX =  Posición final X en donde podrá aparecer el monster       
EndPosY =   Posición final Y en donde podrá aparecer el monster   
Direction =  Dirección de movimiento. (-1 para ir a en cualquier dirección)      
Quantity =  Cantidad de monsters que saldrán de forma simultánea. 
Value =  0
Comment = De forma opcional podremos comentar el nombre del monsters para ubicarlos facilmente dentro del archivo para futuras modificaciones. Para eso , agregamos dos // luego de la último valor y seguido el nombre de referencia.
Finalizando con nuestra ejemplificacion, nos quedaría asi:
En la columna Monster como serán 3 monsters los que participan en la invasión debemos crear 3 lineas, en cada línea agregaremos el id de cada monster de la siguiente forma: ID:135 (White Wizard), ID 136 (Destructive ogre soldier) e ID 137(Destructive ogre archer)
  
Range: En este caso le daremos un rango máximo de 30
 
En la columna MapNumber, debemos agregar los mapas en donde deseamos que se origine la invasión, ¿Pero podemos agregar cualquier mapa?, la respuesta es no, debemos mantener la coherencia con la que tenemos configurado en nuestra invasión. Si recuerdan en la sección 2, hemos definido los mapas y en mi caso era lorencia (0) y el mapa noria (3). Como no podemos agregar mas de un mapa en una misma linea, debemos agregar dos lineas una por cada mapa. (Y no olvidemos que por cada mapa, debemos agregar las 3 lineas por cada monster)
 
BeginPosX, BeginPosY, EndPosX y EndPosY: son las coordenadas de aparición. Estas coordenadas deben existir en el mapa y ser accesibles por los jugadores. 
Para calcular estas coordenadas debemos ingresar al juego para verificar su existencia. (En un próximo tutorial veremos este tema con mayor profundidad.)
Nuestros valores seran: 148-047-164-065 para el mapa lorencia.
                                        194-070-204-086 para el mapa noria.
Colocamos las mismas coordenada tanto para el boss como para sus tropas, de esa forma apareceran juntos.

Direction: en este caso colocaremos -1 para que el monster se mueva en todas las direcciones.
 
Quantity: En el caso del Boss, colocare 1 y en el caso de las tropas colocaré 10.
 
Value= Será 0 
 
Comment = Colocaremos el nombre de cada monster.(Esto es opcional)
El archivo editado nos quedará asi:  

Visualizando el monstersetbase  
 
6) Y finalmente realizamos el test en nuestro servidor.
 
Visualizando la invasion
 
Como podemos ver, encontramos al boss y sus tropas en el rango de coordenadas configurado.
En esta ejemplificaciones se utilizo una invasión ya existente, la idea es conocer el uso de las funciones de cada sección para poder realizar nuestras propias invasiones personalizadas o modificar las ya existentes.

Editar el CashShop en MuEMU [PARTE I]

 

Bienvenidos a un nuevo tutorial, hoy aprenderemos a editar la tienda CashShop en los files MuEMU. Como este es un tema sumamente amplio, lo haremos por partes, en esta primera parte, aprenderemos a editar nuestra tienda CashShop de forma básica, es decir, a conocer la interfaz, a agregar algunos items, etc.

Para los que no conocen, la tienda/mercado Cashshop , es aquel mercado que, cuando ingresamos al juego y estando en una zona segura aparece al apretar la tecla X.



Este tipo de mercado, tiene la particularidad de que trabaja con los siguientes tipos de monedas:
a)WcoinC
b)WcoinP 
c)GoblinPoint
Si no sabes como editar este tipo de monedas a una cuenta, revisa el siguiente tutorial haciendo Clic Aqui 
Para los que aun no saben a cúal mercado estamos haciendo referencia, observen la siguiente imagen:
 
Visualizando la interfaz del cashshop 7 
 
1) Lo primero que debemos saber, es que, este tipo de shops requiere ediciones server/cliente. 
Pero ¿Qué significa una edición server/cliente? Cuando decimos que una edición es server/cliente, es porque, por cada modificación que realizemos del lado del servidor, debemos hacerlo del lado del juego, es decir, del lado del cliente. Si efectuamos una modificación de forma unilateral (O del lado server o del lado cliente) ocasionaremos un error, que; traerá como consecuencia que el CashShop deje de funcionar en su totalidad. 
 
2) Para comenzar, debemos descargar el archivo llamado Editor CashShop MuEMU.rar el cual podran encontrar en nuestra página de Facebook. Una vez descargado, descomprimimos la carpeta en nuestro escritorio y ejecutamos el archivo Editor CashShop MuEMU.exe 
 
 Abiendo el ejecutable
 
3) Una vez ejecutado el programa, veremos la interfaz inicial, la cual contiene varias secciones , la primera sección es la llamada: "Item Table", en esta primera parte lo que debemos hacer es seleccionar el item que deseamos poner a la venta, en mi caso será una Sword Flameberge
 
 
4) Nuestro siguiente paso, sera configurar la sección "Main Info", aqui le podremos dar un nombre al item diferente al original y una descripción, en mi caso dejare el nombre real y en descripción colocaré "CashShop MuOnline Tutoriales" 
En la misma sección, tenemos cuatro variables a definir, a las cuales debemos prestar atención para evitar errores. 
A) PackType: Define el tipo de pack que usaremos, tenemos variantes, como Normal (Cantidad), Expire (El item desaparece vencido el tiempo dado) y Rate (%) 
Como este es el primer tutorial, trabajemos los aspectos básicos, entonces seleccionaremos la opción Normal(Qty)
B) En Currency debemos seleccionar el tipo de coin por la cual se venderá nuestro item, en mi caso seleccionaré WcoinC
C) Y finalmente en Count , definimos la cantidad de items que estamos ofreciendo a venta, en mi caso será 1 (unidad) (Atención: este valor es la cantidad de item que ofertamos en el CashShop, es decir, si en lugar de 1 ponemos por ejemplo 5, se venderan 5 Swords Flameberge juntas. Este valor no es el precio por el cual queremos vender el item, eso lo veremos a continuación)
Nuestra sección Main Info editada nos quedará asi:
 
Visualizando la main info cashshop
 
5) Y finalmente pasemos a la última sección, la llamada "Products", aca podremos definir si se trata de un Package (Varios items a elección) o Bundle (Varios items juntos). Como dijimos anteriormente, en este primer tutorial, veremos lo básico, entonces dejaremos la opción Package, MultiPackage y Bundle para un próximo tutorial.
En cuanto a las demas opciones, completaremos el cuadro de la siguiente manera:
A)En el campo donde va el nombre, podremos modificarlo si desean, en mi caso dejaré el original, y como era una sola unidad la que venderé, dejaré (1 UN)
B)El campo de abajo, el que dice "1" , es el mismo campo de unidad que modificamos arriba, eso indica que si lo modificamos abajo, automáticamente se modificara arriba (En el campo nombre). (Recuerden, este valor hace referencia a cantidad de un mismo items que pondremos a venta)
C)En el campo "Price", debemos colocar el costo en la coin seleccionada anteriormente, en mi caso serán WcoinC. Colocaré un valor simbólico de 100 WcoinC
D) Y finalmente los demás campos hacen referencia a las características de ese item como nivel, duración, sockets, opc. exc, etc. esto lo configuran a gusto de acuerdo al item seleccionado.
Una vez terminado de configurar el item, hacemos un clic en boton  >Add
 ( Los nombres de las columnas horizontales [W coin (C), W coin (P) y Goblin Point] y verticales [Special, Accessory, Buff, Pet, Ticket], se pueden editar, mover, agregar nuevas, etc. Para eso, basta con hacer un clic derecho sobre el campo y seleccionar la opción deseada. 
Nuevamente, como se trata de un primer ejemplo en mi caso conservaré la originalidad de la interfaz.)
 
Visualizando la interfaz de la opcion products
 
6)Y listo, con eso ya tenemos editado nuestro primer item en nuestra CashShop. Pero claro, sino exportamos los cambios al server/cliente, nada de esto se reflejará al ingresar al juego, por eso debemos prestar atención a esta parte ya que muestro se confunden y esta es una de las razones por las cuales nos escriben a diario.
El programa nos permite salvar el proyecto, de esta forma podremos continuarlo, modificarlo, quitar o agregar item en modificaciones futuras. Para salvar el proyecto hacemos un clic en File => Save As y seleccionamos la ruta en donde se guardará nuestro archivo CashShopData.dat (En los próximos tutoriales veremos como retomar un proyecto guardado)
 
Visualizando save as
 
7) Y si deseamos aplicar los cambios a nuestro servidor/cliente, debemos exportar el proyecto, para eso hacemos un clic en File => Export
 
Exportar proyecto cashshop
 
8) Luego nos aparecerá el siguiente mensaje: 
 
Mensaje de exito
 
9) Ese mensaje nos indica que los archivos del server/cliente fueron exportados a la carpeta Output , la cual se abrirá al aceptar el mensaje anterior. Caso no se abra automáticamente o la cierren, la podrán encontrar en la ruta original en donde hemos descargado los archivos de editor (Escritorio > Editor CashShop MuEMU > Output ).
 
Visualizando la carpeta output
 
10) Dentro de la carpeta OutPut, encontraremos dos carpetas, una llamada Server y la otra llamada Client
El contenido de la carpeta Client contiene 3 archivos: IBScategory, IBSPackage, IBSProduct, los copiamos y los pegamos en la siguiente ruta de su cliente:
MiClienteMuOnline/Data/InGameShopScript/512.2011.006
(Caso tu cliente tenga la carpeta 512.2011.047 tambien hacemos el mismo procedimiento), entonces pegamos los archivos y reemplazamos.

Copiando los archivos del cashshop al cliente
 
11) Por otra parte, el contenido de la carpeta Server contiene 4 archivos, pero atención, de esos 4 archivos sólo usaremos dos y debemos renombrarlos antes de pegarlos en el servidor. 
Esos dos archivos que debemos copiar y pegarlos en el escritorio para renombrarlos son: CashShopPackageMuEmu y CashShopProductMuEmu y los renombraremos de la siguiente forma:
CashShopPackageMuEmu => CashShopPackage
CashShopProductMuEmu => CashShopProduct
Es decir, le quitamos el MuEmu al nombre

Visualizando los archivos del servidor del cashshop
 
12) Ahora copiamos los archivos ya renombrados y los pegamos en la siguiente ruta: 
MuServer/Data/CashShop 
y reemplazamos.

Visualizando la interfaz del firewall en Windows 7
 
13) Ahora reiniciamos el servidor y verificamos los cambios en el juego.

Visualizando la sword en el cashshop
 
Como podemos observar, aparece correctamente el item en nuestro cashshop, junto a su valor en coins y la descripción dada.
Tengan en cuenta que el test real no es ver el item publicado en el cashshop, sino que el test real es cuando podemos efectuar la compra del mismo, entonces siempre que editen el cashshop o lo modifiquen, hagan el test completo e intentanlo comprar para ver si aparece en el inventario.

Observaciones: 
- Este tutorial solo funciona en files base MuEMU, si utilizas otro tipo de archivos no te funcionará.
- Toda la intefaz del cashshop es modificable, desde los nombres, columnas, hasta el skin o diseño.
- En próximos tutoriales, veremos todos los temas pendientes que fuimos comentando.

MuEditor remoto en MUEMU

Bienvenidos a un nuevo tutorial, hoy aprenderemos a configurar el MuEditor (Editor base de los files MUEMU) de forma remota.
¿Pero para que sirve el editor de forma remota?
Sirve para poder usar la aplicación desde cualquier sistema sin necesidad de ingresar a la pc servidora.
Este tipo de prácticas se aplica a quienes alojan el servidor en un VPS y desean utilizar su propia pc para utilizar el editor, de esta forma, evitan el ingreso al sistema virtual.



Para configurar el MuEditor de MUEMU de forma remota, debemos seguir estos sencillos pasos:

1)Ingresamos a la PC server y liberamos el puerto 1433 (Puerto por defecto utilizado por nuestro motor de datos para conexiones remotas) en el firewall (En el caso que nuestra pc server sea un VPS) y en el firewall+router (En el caso que nuestra pc server sea una pc casera conectada a un router)
Recuerden abrir el puerto en modo TCP

Visualizando la interfaz del firewall en Windows 7

2)Ahora copiamos la carpeta MuEditor y la llevamos a la pc en donde deseamos utilizarlo.
Una vez descargados los archivos, abrimos el llamado Config.ini y analizamos su contenido:
EnableTrusted = Desactivamos esta linea colocando un 0
SERVER = IP de la pc en donde se encuentra el servidor
PORT = Puerto remoto SQL (Por defecto: 1433)
ME_DB = Nombre de la base de datos (Por defecto: MuOnline)
USER = Nuestro usuario SQL (Por defecto: sa)
PASS = Nuestro password SQL
El archivo editado a forma de ejemplo nos quedará de la siguiente forma:
EnableTrusted = 0
SERVER = 190.110.15.147
PORT = 1433
ME_DB = MuOnline
USER = sa
PASS = testsql
Recuerden hacer la misma edicion en ambos bloques, es decir, en el bloque [Me_MuOnline] y en el bloque [MuOnline]

Configurando la conexion remota en el mueditor

3)Si todo esta correcto, al iniciar nuestro MuEditor.exe, este se conectará a nuestra base de datos de forma remota.

MuEditor funcionando de forma remota

Para una mayor seguridad, recomendamos que en la configuración del firewall, modifiquen el "Ambito" para permitir que solo la IP de nuestra pc se conecte a ese puerto (Si tenemos la web alojada en un webhosting, tambien debemos agregarla al listado de conexiones permitidas)
Esto evita que se puedan conectar a nuestro SQL desde una ip desconocida, de esta forma tendremos mayor seguridad.

Durante la configuración del editor remoto, nos podemos encontrar con un sin fin de problemas o errores.
Estos pueden deverse a:
a)Error básico en los datos de conexión IP-SQL-PASSWORD
b)Puerto por defecto SQL modificado o puertos ruteados
c)Puerto SQL no liberado (Regla en firewall con error de configuración)
d)Puerto abierto en modo UPD
e)Protocolo MSSQLSERVER desactivado
f)Utilizaron el ambito de "Dirección IP remota" y la ip permitida no es la actual.
g)Otros...

Backups con SQL Server 2008 R2

Bienvenidos a un nuevo tutorial, hoy aprenderemos a crear backups usando como motor de datos el SQL Server 2008.
Como siempre hemos resaltado, tener copias de seguridad de nuestra base de datos es de suma importancia ya que nos puede ayudar a recuperar nuestros datos en caso de perderlos.
¿Cuál sería la frecuencia ideal para crear backups?
La frecuencia depende básicamente del movimiento que tiene nuestro servidor, este movimiento es dado por la cantidad de usuarios que tengamos activos en el juego. Lo recomendable es hacer un backup completo al menos una vez a la semana, de esta forma en caso de restaurar la copia realizada el rollback solo afectará el avanze en esos siete días.



Para hacer un backup con el SQL Server 2008 debemos seguir estos pasos:

1)Iniciamos el SQL Server Management Studio.

Visualizando la interfaz del SQL Server 2008

2)Una vez iniciada la aplicación, logueamos con la autenticación de windows o con la del SQL mediante nuestros datos).

Visualizando la interfaz de login del SQL Server 2008

3)Ahora nos posicionamos sobre la entrada DataBases, desplegamos sus opciones y sobre la base de datos "MuOnline" (o sobre la base que deseamos realizar el backup) hacemos un clic derecho.
Seguido, seleccionamos "Tasks" y la opción "Back Up..."

Seleccionando la opcion backup

4)En nuestra nueva ventana, debemos observar el cuadro final, el llamado "Destination" para ver si tenemos cargada alguna ruta.
En el caso de que exista, le hacemos un clic izquierdo y seguido un clic en "Remove" para quitarla.

Eliminando rutas cargadas

5)Ahora, sobre el mismo cuadro, hacemos un clic en el boton "Add".
En nuestra nueva ventana, debemos seleccionar la ruta en donde alojaremos nuestro backup. Para eso hacemos un clic en [...]

Seleccionando ruta para alojar el backup

6)En nuestra nueva ventana, seleccionamos el disco/carpeta en donde alojaremos nuestra copia y debajo, en el campo "File name" le asignamos un nombre.

Seleccionando ruta y asignando un nombre al backups

7)Luego le damos "OK" a todos los dialogos y nuestro motor de datos comenzará a procesar la copia. El tiempo de demora dependerá del tamaño de nuestro base de datos.
Finalizado, veremos algo similar a lo siguiente:

Backups realizado con exito

8)Para verificar que todo este correcto, ingresamos a la ruta que hemos seleccionado en el paso 6), en mi caso fue en el disco C:\, y buscamos nuestro backup.

Visualizando la copia de seguridad

Este tutorial, fue realizado bajo el SQL Server 2008 R2 en Ingles.

Configurar el BonusManager.dat en MUEMU

Bienvenidos a un nuevo tutorial, hoy aprenderemos a configurar el archivo BonusManager.dat
En este archivo es el responsable por el evento conocido como: "HappyHour" el cual consiste en que determinado momento, se incrementa la experiencia y el drop del juego de forma automática.
El BonusManager además de aumentar la exp y drop, nos permite incrementar otros aspectos que veremos a continuación.



1)El archivo BonusManager se encuentra en la siguiente ruta: Muserver\Data\Event
El contenido del archivo, es similar al siguiente:

Visualizando la interfaz del archivo BonusManager.dat

2)Lo primero que deben identificar, siempre que se encuentran con archivos de este tipo, es la cantidad de secciones que tiene. En este caso las secciones o bloques las podemos percibir de manera muy simple, son los números que se encuentran aislados en la parte superior izquierda.
Veamos cuantas secciones tiene nuestro archivo BonusManager

Visualizando las secciones del archivo BonusManager

3)Como podemos observar, tenemos 3 secciones.
La sección 0, la sección 1 y la sección 2
¿Pero, qué significa eso?
Eso significa que al asignarle un "Nº" a una sección, debemos repetir ese mismo valor en las siguientes, de esa forma, podemos identificar una misma configuración en las demás secciones.

Comenzemos con la primera sección, la "0", esta sección es la responsable por dar inicio al evento. Analicémoslo.
Index: Nº que identificará el evento a lo largo de las siguiente secciones.
Year: Año en que iniciará el evento. *=Todos los años
Month: Mes en que iniciará el evento. *=Todos los meses
Day: Día que iniciará el evento. *=Todos los dias
DoW: Día que finaliza el evento. *=Nunca
Hour: Hora en que iniciará el evento. (Formato en 24hs)
Minute: Minuto en que iniciará el evento.
Second: Segundo en que iniciará el evento.
4)Continuemos con la siguiente sección, la "1"
En este apartado definiremos el mensaje de inicio, mensaje de finalización y la duración del evento.
Index: Como lo habiamos explicado anteriormente, aca debemos repetir el mismo valor que que hemos colocado en el campo index de la sección 0.
StartMessage: Número que identificará el mensaje para el inicio del evento, en este ejemplo será el 492 (Lo veremos en detalle a continuación).
FinalMessage: Número que identificará el mensaje para la finalización del evento, en este ejemplo será el 493 (Lo veremos en detalle a continuación).
BonusTime: Tiempo de duración del evento medidos en segundos.
Tanto el mensaje de inicio como el mensaje de finalización parten de un numéro. Ese número y mensaje deben ser definidos antes en el archivo Message.txt el cual se encuentra alojado en la siguiente ruta: Muserver\Data
Una vez abierto el archivo, nos dirigimos a la última linea, en mi caso la 491 y justo debajo agregaremos las siguientes lineas, una debajo de la otra:
492 "Y el mensaje de inicio de evento que deseas, por ejemplo: Evento ON"
493 "Y el mensaje de finalización del evento, por ejemplo: Evento OFF"
Luego, guardamos los cambios. (Presten mucha atención, el mensaje debe estar entre comillas)

Visualizando las dos lineas agregadas al archivo Message

5)Y finalmente llegamos a la última sección, la 2. Aqui podemos definir el tipo de bonus, mapa afectado, etc. Analicémoslo:
Index: Una vez más, en este campo debemos volver a colocar el mismo nº de index que hemos colocado en las anteriores secciones.
BonusIndex: Define el tipo de bonus:
0= Incrementa la experiencia del servidor en adicional de porcentaje
1= Incrementa la master experiencia del servidor en adicional de porcentaje
2= Incrementa el drop de items del servidor en adicional de porcentaje
3= Incrementa la posibilidad de aumentar el drop de items del archivo "ItemDrop.txt" (x/1000000)
4= Incrementa la posibilidad de aumentar el drop excelent. (x/1000000)
5= Incrementa la posibilidad de aumentar el drop ancient. (x/1000000)
6= Aumenta la cantidad de GoblinPoints
7= Aumenta la cantidad de Resets
8= Aumenta la cantidad de MasterResets
BonusValue_AL0: Valor que incide sobre el BonuxIndex seleccionado. Solo afecta a las cuentas FREE
BonusValue_AL1: Valor que incide sobre el BonuxIndex seleccionado. Solo afecta a las cuentas VIP 1
BonusValue_AL2: Valor que incide sobre el BonuxIndex seleccionado. Solo afecta a las cuentas VIP 2
BonusValue_AL3: Valor que incide sobre el BonuxIndex seleccionado. Solo afecta a las cuentas VIP 3
ItemIndex: Número de ItemIndex al que será aplicado el evento. Si deseamos que se aplique a cualquier item, ponemos el valor -1
Sino recuerdas como calcular el ItemIndex puedes verlo haciendo Clic Aqui
ItemLevel: Nivel del item al que será aplicado el evento.
MapNumber: Número de mapa en donde se transcurrirá el evento. Si deseamos que se realizé en cualquier mapa, ponemos el valor -1
Sino recuerdas el número de cada mapa puedes verlo haciendo Clic Aqui
MonsterClass: Número de monster al que será aplicado el evento.
Sino recuerdas el número de cada monster puedes verlo haciendo Clic Aqui
MonsterLevelMin: Nivel mínimo que deberá tener el monster para que se aplique el evento.
Para ver el nivel del monster, deberán hacerlo sobre el archivo monster.txt
MonsterLevelMax: Nivel máximo que deberá tener el monster para que se aplique el evento.
Para ver el nivel del monster, podrán hacerlo sobre el archivo monster.txt
6)Ahora veamos todo junto en un ejemplo:
Supongamos que deseamos configurar el BonusManager de la siguiente manera:
En la sección 0, en donde definimos los horarios, queremos que el bonus inicie todos los años, días, meses pero queremos que sea tres veces al día de la siguiente forma:
a)A las 17:30 hs
b)A las 19:30 hs
c)A las 21:30 hs
Como sabran, solo podemos configurar un horario por linea, entonces lo que haremos será agregar tres lineas bajo el mismo index, en este ejemplo, nuestro index será el nº 0
La primera sección configurada nos quedará asi:

Visualizando la seccion 0

7)Continuemos con la sección 1, aca definimos mensaje de inicio, mensaje de finalización y duración del evento.
En este ejemplo usaremos el mensaje "492" y "493" el cual ya hemos visto anteriormente.
La duración del evento será de 45 minutos, entonces hacemos 45*60 = 2700 (ya que debemos calcular el tiempo en segundos)
La sección 1 configurada nos quedará asi:

Visualizando la seccion 1

8)Y finalmente llegamos a la última sección, la 2. Aqui definimos, como ya hemos visto, el bonus que tendrá nuestro evento entre otras cosas.
El responsable del bonus es el "BonusIndex"
Para este ejemplo, usaremos el BonusIndex=0, es decir, el que "Incrementa la experiencia del servidor en adicional de porcentaje" y usaremos un BonusValue_AL0=100, de esta forma, aumentaremos la exp. en 100% a todos los usuarios FREE del servidor.
Adicionalmente, el evento transcurrirá en cualquier mapa, bajo cualquier monsters, etc...
La sección 2 configurada nos quedará asi:

Visualizando la seccion 2

9)Ahora verifiquemos los resultados. Primero veamos la exp. antes del evento:

Visualizando la experiencia dentro del juego con el evento off

10)Como podemos observar, tenemos dos valores de experiencia recibida antes del evento (En el spot teniamos 2 monsters diferentes)
Exp= 4750
Exp= 5160
Si recuerdan, nosotros hemos usado el BonusValue_AL0=100, eso significa que aumentamos en 100% la exp. cuando el evento comienza.
Presten atención a ese detalle: "el 100" es porcentaje, no es +100 sino +100% (Lo que matemáticamente hablando no es lo mismo)
Haciendo los cálculos obtenemos lo siguiente:
Exp base= 4750 + 100% = 9500
Exp base= 5160 + 100% = 10320
Veamos que sucede con la experiencia con el evento activo:

Visualizando la experiencia dentro del juego con el evento on

Y efectivamente, al iniciar el evento la experiencia del juego aumenta en 100%

-Información adicional:
*Para que el bonusmanager funcione, se debe activar previamente en el archivo GameServerInfo - Event.dat el cual se encuentra en la ruta: Muserver\GameServer\DATA
La linea que activa el evento es la siguiente:
;==================================================
; Bonus Manager Settings
;==================================================
BonusManagerSwitch = 1
1=Activado
0=Desactivado

*No usen reload cuando modifiquen el horario, ya que muchas veces no lo toma, deberán reiniciar el server.
*Como hemos podido observar, podemos poner varias lineas en una misma sección con el mismo index, como por ejemplo poner varios horarios bajo el mismo nº index.

Configurar el MapManager.txt en MUEMU

Bienvenidos a un nuevo tutorial, hoy veremos como configurar el archivo MapManager.txt el cual podemos encontrar en los files MUEMU en la siguiente ruta: Muserver\Data
¿Pero, para sirve este archivo y que podemos configurar en él?

El MapManager.txt nos permite personalizar varias características como la experiencia, dropexc, dropAcc, etc en cada mapa del juego, es decir, podemos realizar configuraciones de manera independiente.



1)Lo primero que haremos, será abrir el archivo para visualizar su contenido:

Visualizando la interfaz del archivo MapManager.txt

2)Ahora, analicémoslo.
Index: Hace referencia al Nº del mapa, sino recuerdas que número representa cada mapa, pueden revisar nuestro tutorial haciendo Clic Aqui

NonPK: Nos permite configurar la característica del mapa en referencia al PVP.
*=Configuración General
0=PVP Activado
1=PVP Desactivado
2=PVP activado + Pk desactivado (El personaje no se convierte en PK)

ViewRange: Rango de visión (Este valor no está relacionado al zoom de la cámara, sino al rango de visión que tendrá el personaje en referencia a un objeto, lo explicaremos en detalles después)

ExperienceRate: Desde aqui podremos aumentar, mantener o disminuir la experiencia en determinado mapa.
100 = Mantiene el valor de la experiencia ya establecida en el servidor
200 = Dobla el valor de la experiencia
300 = Triplica el valor de la experiencia
50 = Reduce a la mitad la experiencia del servidor

ItemDropRate: Valor referente al drop de items. x/1000000

ExcItemDropRate: Valor referente al drop de items excelentes. x/1000000

SetItemDropRate: Valor referente al drop de items ancient. x/1000000

SocketItemDrop: Configuración referente al drop de items Sokets. 0=Deshabilitado, 1=Habilitado.

HelperEnable: Configuración referente al MuHelper. 0=Deshabilitado, 1=Habilitado

GensBattle: Convierte el mapa en Gens Battle. 0=Mapa normal, 1=Gens Battle Zone.

Comment: Apartado de referencias.

2)Recuerden: estas configuraciones solo afectan al mapa que hemos colocado en el campo inicial.
Lo que veremos ahora será el tema que dejamos pendiente respecto al "ViewRange", como ya hemos explicado, no hace referencia al zoom de la camara, sino a la distancia que le permite "ver" a nuestro personaje.
Para entenderlo mejor, veamos esto en un ejemplo, configuraremos al mapa lorencia de la siguiente forma:
0 * 20 100 100 1000 0 0 1 0 //Lorencia
En donde el valor 20 hace referencia a la columna "ViewRange"

Visualizando la configuracion de la columna ViewRange

3)Ahora veremos de que se trata esta configuración y como efecta al juego.

Visualizando la posicion de los personajes dentro del juego

4)Como podemos observar el personaje "test" se encuentra en la posicion X=152,Y=128 y el personaje llamado "mututorial" se encuentra en la posición X=152, Y=127

Lo que haremos ahora, será mover al personaje "mututorial" 20 pasos, es decir, X+20
Entonces, si la posición inicial es X=152 y a este le sumamos 20, el resultado final de ecuación sería X=172

Visualizando el personaje en la posicion x 172

5)Al configurar el ViewRange con el valor 20 significa que los personajes podrán verse si las distancias son menores o iguales al valor de la variable (En este caso, ViewRange=20, esto cuenta tanto en X como en Y).
Pero que pasa si nos movemos 21 posiciones, es decir, x=173 (Un valor a más del definido en la variable).
Veamos el resultado:

Visualizando el personaje en la posicion x 173

6)Efectivamente, el personaje "Mututorial" ya no visualiza al personaje "test".
De eso se trata el ViewRange, y no solo afecta el rango de visión entre personajes, sino que tambien afecta a diversos objetos como NPCs, monsters, etc...

No lo olviden, esta configuración afecta tanto a la distancia X como a la distancia Y, sumando o restando, es decir, tomamos un punto neutro y de ahi establecemos las distancias.