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.

Editar WCoinC, WCoinP y GoblinPoint en MUEMU

Bienvenidos a un nuevo tutorial, hoy aprenderemos a editar WCoinC, WCoinP y GoblinPoint mediante una query en nuestra base de datos utilizando files MUEMU.
Cabe mencionar que este tutorial será realizado sobre el motor de datos SQL Server 2008 R2, si bien no abrá problema con ejecutar la consulta en otro tipo de SQL, hacemos esta mención ya que luego tenemos consultas sobre la interfaz del programa en referencia al que usa cada uno de ustedes.
Por otra parte, si bien existen programas que nos pueden permitir realizar esta tarea de forma sencilla, siempre es bueno tener una segunda opción y de paso, aprender un poco un más.



1)Lo primero que haremos será iniciar nuestro SQL Server Management Studio y hacemos un clic en "Connect" (En este ejemplo haremos la autenticación mediante: Windows Authentication)

Visualizando la interfaz del SQL Server 2008

2)El siguiente paso será hacer un clic en "New Query"

Visualizando la interfaz del SQL Server 2008

3)Ahora, del lado derecho del SQL pegamos la siguiente sentencia:
Use MuOnline
update cashshopdata set WCoinC=WCoinC+'0',WCoinP=WCoinP+'0',GoblinPoint=GoblinPoint+'0' where AccountID='Login'
Visualizando la query en el SQL Server 2008

4)Lo que debemos hacer ahora es modificar en la sentencia los valores 0 por los deseados y la palabra "Login" por el ID de la cuenta a editar.
En el caso que solo tengamos la intención de agregar por ejempo WcoinP, modificamos solo ese valor y dejamos en 0 los demas valores

Entonces, supongamos que deseamos editarle a la cuenta "test01" 500 WcoinC y 500 WcoinP, la sentencia final sería la siguiente:
Use MuOnline
update cashshopdata set WCoinC=WCoinC+'500',WCoinP=WCoinP+'500',GoblinPoint=GoblinPoint+'0' where AccountID='test01'
Para actualizar la base de datos luego de nuestra configuración apretamos el boton F5 o hacemos un clic en "Execute"
Atención: si al momento de ejecutar la sentencia no les aparece el mensaje "1 row(s) affected" eso significa que el id o login colocado no existe en la base de la tabla cashshopdata.

Ejecutando la sentencia en el SQL Server 2008

Si todo esta correcto, la cuenta recibirá los puntos establecidos en la sentencia.
De manera adicional, en el caso en que lo que deseamos es quitar o restar puntos, lo que haremos será "sumar un valor negativo", ejemplo: supongamos que deseamos restarle a la cuenta "test01" 150 GoblinPoint, la sentencia seria la siguiente
Use MuOnline
update cashshopdata set WCoinC=WCoinC+'0',WCoinP=WCoinP+'0',GoblinPoint=GoblinPoint+'-150' where AccountID='test01'
Para finalizar, presten mucho atención a la hora de ejecutar cualquier tipo de sentencias, ya que muchas veces nos podemos encontrar en la red con cosas asi: [... WCoinP='0', WCoinC='0',GoblinPoint='0' ...] esto tambien es válido, pero cuidado, este tipo de sentencias hace directamente un seteo de la columna y no contempla el valor que ya tenemos definido.



Para ejemplificar lo anterior supongamos que tenemos una cuenta que tiene 700 WcoinP y deseamos sumarle a ese valor 100 mas, la sentencia que podemos llegar a encontrarnos sería:
Use MuOnline
update cashshopdata set WCoinC='0',WCoinP='100',GoblinPoint='0' where AccountID=''
El error en este caso será que estaremos dando los 100 puntos pero borrando los 700 puntos que tenía la cuenta previamente, es por eso que la sentencia debe ser WCoinP=WCoinP+'100', de esta forma sumamos al valor que ya tenemos los 100 puntos que deseamos agregar, dando como resultado 800 como puntos finales.

Custom Monster en MUEMU [Parte I]

Bienvenidos a un nuevo tutorial, hoy veremos veremos la primera parte de la configuración del Custom Monster en los files MUEMU.
Este archivo nos permite hacer diversas cosas, como por ejemplo: crear un evento (Boss Atrack), premiar con WCoinC/WCoinP/GoblinPoint/etc al matar un determinado monster en forma de monospot/spot, etc

En esta primera parte, veremos algo sencillo, tomaremos un monster X, le modificaremos sus propiedades, y al matarlo tendremos un aviso global y recompensa del mismo.
Entonces comenzemos:



1)Lo primero que debemos hacer es definir algun monster del juego que queremos usar para este nuevo evento.
A modo ejemplo nosotros lo haremos con el monster "Aegis", pero lo importante no es el nombre del monster si su ID, en este caso el 147
Recuerden que pueden saber el ID de cada monster ingresando al archivo monster.txt alojado en Muserver\Data\Monster

Visualizando el id del monster en el archivo monster.txt

2)Una vez que tenemos el ID del monster, ingresamos a la carpeta Muserver\data y abrimos el archivo llamado Message.txt
Una vez dentro del archivo nos posicionamos sobre la última línea (Arriba del End) y observamos cual es el número que acompaña el index, le sumamos 1 y lo escribimos debajo.
Ejemplo: La última línea (arriba del end) en este ejemplo es la 491, entonces escribiré debajo 492, y entre comillas, escribimos el mensaje que queremos que aparezca a la hora de matar el monster, por ejemplo "%s elimino a Aegis" (El "%s" es la variable que imprime el nombre del jugador, no es obligatorio agregarla)

Visualizando el id del monster en el archivo monster.txt

3)Ahora abrimos al archivo CustomMonster.txt alojado en la siguiente ruta: Muserver\Data\Custom e iremos completando las columnas guiandonos con la siguiente explicación:
Index:Número o ID del monster (Aca debemos agregar el nº que hemos ingresado en el paso 1), en este ejemplo sería el 147)
MapNumber: Número de mapa en donde estará nuestro monster.(En este ejemplo hemos seleccionado al mapa 10, es decir, Icarus. Sino recuerdas los nº de los mapas puedes revisar en nuestros tutoriales)
MaxLife: Valor máximo de vida que tendrá nuestro monster.
DamageMin: Valor referente al daño minimo
DamageMax: Valor referente al daño máximo
Defense: Valor referente a la defensa
AttackRate: % de ataque
DefenseRate: % de defensa
ExperienceRate: % de experiencia
KillMessage: Número del mensaje que aparecerá al matar el monster. (Aca debemos agregar el nº que hemos ingresado en el paso 2), en este ejemplo sería el 492)
InfoMessage: Podemos agregar el mismo número que en Kill Message ya que esta columna se usa para anunciar su aparición pero en este caso no lo veremos sino en el próximo tutorial en donde haremos esto mismo pero en forma de evento o invación.
RewardValue1: Recomenpensa 1: cantidad de GloblinPoints que recibirá al matar el monster.
RewardValue2: Recomenpensa 2: cantidad de GloblinPoints que recibirá al matar el monster.
*Si lo desean, poremos usar el propio archivo monster.txt para orientarnos en algunos valores como ataque, defensa, etc.
El archivo editado en nuestro caso, nos quedará asi:

Visualizando CustomMonster ya editado

4)Finalmente, debemos agregar el monster al archivo monstersetbase.txt el cual se aloja en Muserver\Data\Monster

Visualizando el monstersetbase ya editado con los parametros

5)Reinciamos el servidor y probamos.
El monster debe aparecer en las coordenadas indicadas en el archivo monstersetbase.txt

Visualizando el monster Aegis

Como podemos ver, al matar el monster 147 aparecio el mensaje y obtuvimos nuestro premio.
En este caso el premio fue 100 GloblinPoints pero podemos cambiarlo por otro premio como por ejemplo: WcoinC.
Para eso tenemos que modificar el procedimiento almacenado dbo.WZ_CustomMonsterReward en la linea del UPDATE.

Para culminar con esta primera parte, tengamos en cuenta que ese monster se regenera en el tiempo que tengamos configurado en el archivo monster. Caso que modifiquemos el tiempo de regeneración tambien afectará otros spots que tengamos con ese mismo mob.

Tengan en cuenta que nosotros seleccionamos un monster típico del mapa Kalima como lo es; Aegis, y lo pusimos en el mapa Icarus, ya que si hubiesemos seleccionado el mismo mapa Kalima, los spots que tengamos creados con ese mob tambien participarían del evento.

Entonces, como consejo, si seleccionan por ejemplo un monster de Tarkan, no utilizen como mapa del evento al mismo Tarkan, porque sino deberán quitar todos los spots de ese mapa que tenga el mismo index del mob, por eso la recomendación es utilizar un mapa diferente a donde comunmente se encuentran dicho mob.

Configurar el EventItemBag en MUEMU

Bienvenidos a un nuevo tutorial, hoy aprenderemos a modificar los EventItemBag en los files MUEMU.
Pero ¿Qué son los EventItemBag?
Los EventItemBag en realidad es una carpeta, la cual contiene variados archivos .txt en donde cada uno de ellos reprensenta el drop/premios/etc de un evento o box.

La configuración de estos EventItemBag son muy similares entonces haremos este tutoriales tomando uno de ellos al azar.
Talvez por ser uno de los mas conocidos, lo haremos con el 011 - Box of Kundun 5.txt



1)Entonces, lo primero que haremos será ingresar a Muserver\Data\EventItemBag y abrimos el archivo llamado 011 - Box of Kundun 5.txt

Visualizando la carpeta  EventItemBag

2)Analicemos su contenido:
Comenzemos con el primer bloque, el 0
EventName: Nombre referente al evento/box/etc (Variable no editable)
DropZen: Valor numérico que representa la cantidad de zen a dropear.
ItemDropRate: Porcentaje referente al drop de un item x/100.
ItemDropCount: Cantidad de items que dropeará
SetItemDropRate: Porcentaje referente al drop ancient x/10000 (El item no necesita estar en la listado del segundo bloque)
ItemDropType: 0=Utiliza la configuración de adicional de los items que se encuentran en el bloque dos, 1= hace variar el adicional del item de forma ramdon
Fireworks: Junto al drop tambien será dropeado fuegos artificiales (1=si, 0=no)
Hay mucha contradicción en la opcion ItemDropType, pero basados en los MUEMU originales los resultados fueron los detallados. Esta opción no hace un random en las opción excelent, de echo esta variación la realiza con la variable en 0 o en 1.
Tampoco tiene relación a los items ancient, ya que este valor lo controla la variable SetItemDropRate y trabaja de forma similar al ItemDropRate sobre el zen.

Visualizando las kundon

3)Ahora vamos a analizar el bloque número 1
Section: grupo al que pertenece el item
Type: posición en la que se encuentra el item
MinLevel: nivel mínimo con el que podrá caer el item
MaxLevel: nivel máximo con el que podrá caer el item
Skill: 1= si, 0=no
Luck: 1= si, 0=no
Option: Adicional de defensa (1=+4,2=+8,3=+12,4=+16,5=+20,6=+24,7=+28)
*Para que esta configuración no sea ramdon es necesario que el ItemDropType sea igual a 0
Excellent: Cantidad de opciones excellents que podrá tener un item (0-7)
*En este caso no definimos la opc. exc sino la cantidad de ellas.
Visualizando el bloque dos

4)Y finalmente tenemos la posibilidad de configurar que los items caigan con opc. sockets o ancient.
Para esto debemos crear un nuevo bloque, el 2.
Para crearlo copiamos las siguientes lineas y las pegamos debajo el "end" del bloque 1
2
//Section Type MinLevel MaxLevel Skill Luck Option Excellent SetOption SocketOption

end
Como pueden observar, se agregan dos nuevas opciones, analicémolas:
SetOption: 1=Habilita el item ancident, 0=Desactiva el item ancident
SocketOption: 0=Desactiva el socket del item, 1=Libera 1 slot, 2=Libera 2 slots, 3=Libera 3 slots, 4=Libera 4 slots, 5=Libera 5 slots
Bloque dos MUEMU

Aunque estas configuraciones no siempre responden de la forma deseada, recomendamos realizar nuestros propios test antes de hacerlas efectivas dentro del juego.
Recuerden realizar un backups previo a las modificaciones, ya que cualquier error en este tipo de configuración podrá generar inestabilidad al servidor (Crash)

Dominio y WebHosting

Bienvenidos a un nuevo tutorial, hoy veremos un tema relacionado a definiciones.
La idea de este tutorial es aclarar terminología de forma tal que seamos capaces de diferenciar entre: "Dominio" y "Webhosting"

En tutoriales anteriores hemos hablado un poco sobre esto, pero la idea es aclarar y ejemplicar estos dos conceptos con el fin de no mezclarlos.

La grande confunción, se dá muchas veces entre lo que es el "Dominio" y lo que es el "Webhosting"



¿Qué es el dominio?
Para explicarlo de una forma sencilla, un dominio es una dirección que al escribirla en nuestro navegador, nos lleva a un destino (Atraves de los DNS), conocido como: sitio web.

¿Qué es el Webhosting?
Es una fracción de disco en la que podemos alojar diversos archivos. Esta fracción de disco corre bajo un sistema windows/linux en donde puedes instalar tu página web MuOnline.

Sabiendo que es cada término, veamos lo siguiente:
1)¿Podemos tener un dominio sin tener un webhosting?
La respuesta es: si. Pero aca debemos pensar lo siguiente, si el dominio es una dirección la cual nos lleva a un destino ¿Cuál será ese destino?
Hagamos una analogía para responder esto, pensemos al dominio como la dirección en donde se encuentra nuestra casa, y pensemos a nuestra casa como el webhosting.
Si yo voy a la dirección indicada lo que sucederá será que no me encontraré con nada, porque la casa no existe aunque la dirección este correcta.

2)¿Podemos tener un webhosting sin tener un dominio?
La respuesta es: si. Y volviendo a usar la misma analogía, ahora lo que tenemos es la casa pero no tenemos la dirección para encontrarla. La casa existe; es nuestro webhosting, pero como vamos a llegar a ella sino tenemos la dirección para encontrarla. (Aca debemos hacer una salvación, aunque el webhosting no tenga un dominio se podrá acceder por medio de la IP)

Dominio y Webhosting son términos complementares, generalmente van juntos porque uno requiere del otro para el correcto funcionamiento.

3)¿Qué son dominios y webhosting free?
Cuando hablamos de dominios, generalmente se nos viene a la cabeza .com pero existen otros tipos de dominios, denominados FREE (Gratuitos) como son lo comunmente usados: .sytes.net, .servegame.com , zapto.org
Y cuando hablamos de webhosting gratuitos nos referimos a la utilización de nuestra propia PC bajo la aplicación XAMPP/APACHE, IIS, etc.

4)¿Podemos tener un dominio .com en un webhosting free?
La respuesta es: Si.
Pero cuidado, como el webhosting es free, es decir, será nuestra propia PC y lo mas probable es que tengamos una ip dinámica, vamos a tener muchos problemas para direccionar nuestro .com a nuestra ip.
En este caso, seguramente requiera de alguna app. que sea capaz de delegar los DNS (Como los que ofrece DynDNS o el propio y popular NoIP)

5)¿Podemos tener un dominio free en un webhosting pago?
La respues es: Si.
En este caso, la tarea es más sencilla porque nuestro webhosting tendrá una ip estática lo que facilitará la configuración desde el panel de nuestro dominio.

6)¿Cómo se adquiere un dominio pago?
Aca debemos tener en cuenta el concepto "adquirir", "comprar", etc... los dominios se renuevan y se le da prioridad de renovación a su actual dueño.
Hoy en día el tiempo máximo de renovación es 10 años, y el minimo es 1 año.
Siempre debemos estar atentos a estos tiempos, ya que si olvidamos de renovar el dominio podemos estar frente a un gran problema si nuestra intención era conservarlo.
Tambien esta la situación inversa, en donde configuramos la renovación automática y dejamos seteados nuestros datos de la tarjeta de crédito. En este caso, nuestro dominio se renovará sin consulta y el débito tambien asi lo será aunque nuestra intención no lo sea.

7)¿Los webhosting pagos tienen la misma metodología que los dominios en cuanto a la renovación?
No, los webhosting son mas flexibles y se alquilan por el tiempo mínimo de 1 mes y el tiempo máximo que puedan acordar con la empresa proveedora.
Lo vencimientos tambien son tema flexible ya que puedes solicitar prórroga para efectuar el pago.

8)¿Que diferencias hay entre un dominio gratuito y un dominio pago?
Son muchas las diferencias, mas allá que uno es pago y el otro es gratuito existen una seríe de tips:
a)La facilidad de recordar la dirección de un dominio pago sobre un dominio gratuito.
b)Posibilidad de tener un correo electrónico corporativo.
c)Da un aspecto profesional a nuestro sitio.
d)Ayuda al posicionamiento de nuestro sitio en los buscadores.

9)¿Que diferencias hay entre un webhosting gratuito y un webhosting pago?
Al igual que lo comentado con los dominios, tambien existen algunos tips que los diferencian:
a)No depender de nuestro sistema para alojar nuestro sitio web (Dado por el consumo de memoria de la aplicación)
b)Velocidad de transferencia superior a la que podemos tener con nuestra conexión.
c)Seguridad, en todos los aspectos (Ataques DOS, DDOS, vulneabilidades, etc)
*Cuidado, cuando hablamos de vulneabilidad no nos referimos a que nuestra página web es más segura cuando está en un webhosting pago que cuando está en un hosting gratuito, es exactamente la misma, si nuestra web es inyectable, lo será independientemente en donde la alojemos.

10)¿Qué es lo que se recomienda?
Si van a optar por un webhosting Free, es decir, usar nuestra propia pc, recomendamos XAMPP o IIS
Si van a optar por un dominio Free, recomedamos NoIP
Si van a optar por un dominio pago y webhosting Free, recomendamos adquirir el dominio pago en algun sitio que cuente con soporte para gestionar DNS con ips dinámicas (Actualmente NoIP ofrece este servicio)
Si va a optar por un hosting pago y un dominio pago, adquieran todo junto en la misma empresa, no lo hagan por separado ya que se evitan el translado del dominio o el direccionamiento del mismo.

Dominio y WebHosting, parecen ser la misma cosa y apesar de que no lo sean, siempre van juntos de la mano ya que en donde esta uno, tendremos seguramente la presencia del otro.

Eliminar logs mediante un .bat

Bienvenidos a un nuevo tutorial, hoy aprederemos a eliminar los logs o archivos creados por las aplicaciones de nuestro servidor Mu Online.
Para quien no lo sabe, los logs son "Registros" que crean nuestras aplicaciones (Siempre y cuando las tengamos habilitadas)
Generalmente estos registros se guardan en un archivo .txt y dentro se almacena información relevante en dos grandes aspectos:
a)Información que detalla lo sucedido dentro del juego, en relación a los personajes, como trades, posts, etc
b)Información que detalla lo sucedio con la aplicación, como errores, conexiones, etc.

Si estos archivos guardan información relevante o importante ¿Por que deberíamos eliminarlos?
El sentido de este tutorial no es eliminar la información, justamente, estamos haciendo mención a la importancia del contenido, pero como ya hemos dicho, estas informaciones se guarda en espacios físicos en donde se aloja el servidor y con el tiempo estos archivos comienzan a representar un grande porcentaje de nuestro espacio.



Esta inofensiva práctica (La de guardar y acumular logs o registros) puede convertirse en una verdadera pesadilla con varias consecuencias.
Veamos un ejemplo concreto de lo que puede llegar a suceder:
Supongamos que tenemos un servidor corriendo con aprox. 50 personajes online y por esas casualidades (O mejor dicho: un descuido en el área de mantenimiento del servidor) nos quedamos sin espacio en el disco

¿Qué creen que sería lo peor que puede suceder?
Han escuchado hablar alguna vez de la "Memoria virtual" o "Paginación"; sin entrar en detalles técnicos para no extendernos, cuando nuestro sistema no dispone de suficiente memoria ram, esta "ocupa" espacio físico de nuestro disco para "emularla", al no tener espacio suficiente ni memoria ram, el sistema queda totalmente incapacitado de procesar datos y aca entramos en primer grande problema, consecuencias: varias.

¿Y que sucede con el servidor MuOnline?
Si nos quedamos sin espacio en disco, los avances que realizen nuestros jugadores no serán almacenados, porque toda esa información que realiza cada personaje la graba nuestro servidor en la base de datos.
Esa información son datos físicos, los cuales no se destruyen cuando un personaje sale del juego, sino al contrario, se guardan en las diferentes tablas y columnas de nuestro SQL.
Al no tener espacio, estos datos se perderán y como consecuencia todos los personajes entrarán en un bucle infinito de rollback hasta que volvamos a disponer de espacio nuevamente. Consecuencias: varias.

Estos dos casos hipotéticos son algunos de los escenarios de todo lo que puede llegar a suceder, pero existen un sin fin más.

1)Para evitar esto, necesitamos ejecutar "tareas de mantenimiento" (Semanal, mensual, etc, el tiempo dependerá de nuestro servidor y de las limitaciones de nuestro sistema)
Una de estas tareas es la eliminación de Logs o registros (Nuevamente, como hemos dicho anteriormiente, esta es información importante por lo que antes de eliminar suban el contenido a la nube o pasen estos registros a un disco con mayor capacidad y solo eliminen esta información cuando esten seguros que ya no la necesitarán.)

Estos logs o registros se guardan generalmente en carpetas llamadas "Logs" las cuales podemos encontrar dentro de cada aplicación en la carpeta Muserver, como por ejemplo las siguientes:
Muserver\GameServer\LOG
Muserver\ConnectServer\LOG
Muserver\DataServer\LOG
Las rutas de estos archivos varian dependiendo los files que estemos usando, ya sean Titan Tech, MuEMU, IGCN, etc.

Visualizando logs en la carpeta Muserver logs

2)Eliminar esos archivos de forma manual, es una tarea sencilla ya que podemos usar la combinación de teclas "Control+E" => "Supr" => "Enter" (Atención, recuerden que esta forma de eliminación no libera espacio en disco, ya que al hacer esto, enviamos el contenido a la papelera de reciclaje)
Para eliminar un archivo sin pasar por la papelera de reciclaje, debemos precionar la tecla "Shift" antes de precionar la tecla "Supr"
Como ya lo hemos dicho, es una tarea muy sencilla pero, en algunos files nos encontramos con lo siguiente:

Visualizando las carpetas con logs

3)Como podemos observar son muchas carpetas, y por cada una de ellas deberemos ingresar y eliminar los registros, luego repertir este procedimiento en todas las carpetas del juego, entonces lo que parecia una tarea sencilla, se convierte en una gran demanda de tiempo.(Recuerden que los mantenimientos se deben realizan con el servidor OFFLINE)
Entonces lo podemos hacer para simplificar esta tarea, es por ejemplo crear un archivo .bat que realize esto de forma rápida y sencilla.

Para esto, creamos un Documento de texto (Puede ser con el "Bloc de notas") le ponen el nombre que desean y luego de creado lo abrimos.
Dentro de el pegaremos lo siguiente
del C:\Muserver\GameServer\LOG /q
Analicemos su contenido:
del: Comando que nos permitira borrar/suprimer los archivos de la carpeta Logs ejecutado en .bat
C:\Muserver\GameServer\LOG: Ruta del archivo en donde se encuentras los archivos .txt a eliminar
/q: Evitamos la confirmación de eliminación del archivo.
Luego de eso, guardamos lo cambios y modificamos la extensión del archivo original [nombre].txt por [nombre].bat
Para modificar la extensión borramos el .txt y escribimos .bat
Sino podemos cambiarle la extensión, debemos ingresar a "Panel de Control" => "Opciones de carpeta"
Luego, en nuestra nueva ventana, hacemos un clic en "Ver" y nos desplazamos hasta la opción que dice "Ocultar las extensiones de archivos para tipos de archivo conocidos"
y destildamos la opción
Luego hacemos un clic en "Aplicar" y luego en "Aceptar"

Destildando la opción para poder modificar las extensiones de archivos

4)Finalmente para poner en funcionamiento nuestro "eliminador de archivos", bastará con ejecutar el [nombre].bat

En el paso 3) solo hemos cargado una ruta de una carpeta con registros a eliminar, lógicamente la tarea de ustedes será cargar el resto de las carpetas en donde se encuentren los logs que deseamos borrar ya que como hemos dicho antes, las rutas dependen o varian de acuerdo a los files que usemos.
Supogamos que deseamos eliminar los logs de la carpeta "ConnectServer" y el server se encuentra en el disco C:\, la ruta seria la siguiente:
del C:\Muserver\GameServer\LOG /q
del C:\Muserver\ConnectServer\LOG /q
Es decir, los vamos agregando uno debajo del otro.

Tambien, si deseamos automatizar aun este proceso, podemos usar el "Programador de Tareas de Windows" el cual podemos usar para indicarle que ejecute este archivo .bat cuando nosotros deseemos sin necesidad de nuestra presencia.

Instalacion pendiente SQL 2000

Bienvenidos a un nuevo tutorial, hoy veremos un problema relacionado al proceso de instalación del SQL Server 2000
Muchas veces al intentar instalar el SQL nos encontramos con un error muy frecuente, el cual consiste en que a la hora de ejecutar el asistente nos aparece un mensaje con la siguiente leyenda:
Una instalación anterior del programa creó operaciones de archivos pendientes en el equipo de instalación. Debe reiniciar el equipo antes de ejecutar la instalación

Error de instalacion anterior pendiente en SQL 2000

Si bien, el error parece solucionarse con tan solo reiniciar el sistema, no siempre corremos con esa suerte ya que hemos comprobado que no es realmente una solución infalible y puedes estar un largo periodo intentándolo sin éxito.



Para solucionar este problema podemos seguir estos sencillos pasos:
1)Hacemos clic en el boton "Inicio" o apretamos la tecla "Windows", seguido escribimos en el cuadro de búsqueda "regedit" y le damos "Enter"
(Si nos aparecere la ventana preguntando si deseamos permitir que este programa realize cambios en nuestro sistema, simplemente hacemos un clic en SI)

Ingresando al regedit

2)Como lo que haremos será una modificación en los registros del sistema, antes de comenzar haremos un backup de los mismos, para tener una copia de seguridad en caso que cometamos algun error.
Para esto, hacemos un clic en donde dice "Archivo" y seleccionamos la opción "Exportar"
Luego seleccionamos una ruta, le damos un nombre y hacemos un clic en "Guardar"

Ingresando al regedit

3)Una vez que tenemos la copia de seguridad, volvemos a nuestra aplicación regedit y desplegaremos las opciones de la siguiente forma:
"HKEY_LOCAL_MACHINE" => "SYSTEM" => "CurrentControlSet" =>"Control"
Para desplegar las opciones, hacemos doble clic sobre el nombre de la carpeta o podemos hacer un clic sobre el triángulito que acompaña la entrada.

Visualizando

4)Ahora, dentro la carpeta "Control" debemos buscar la sub-carpeta "Session Manager" (Las sub-carpetas se organizan por orden alfabético)
Una vez que la encontramos, hacemos un sólo clic en ella (No es necesario desplegar sus opciones) y nos posicionamos del lado derecho sobre la cadena llamada "PendingFileRenameOperations", la damos clic derecho y seleccionamos la opción "Eliminar"
Luego confirmamos el mensaje de eliminación.

Eliminando la cadena PendingFileRenameOperations del regedit

5)Finalmente, sin necesidad de reiniciar el sistema, volvemos a ejecutar el instalador de nuestro SQL Server 2000

Instalando el SQL sin el error de archivos pendientes

Recuerden siempre realizar un backup antes de modificar un archivo original.
Hacemos esta mención en la mayoría de los tutoriales no para ser reiterativos, sino, para que tomen conciencia de lo importante que es esta práctica a la hora de modificar cualquier archivo.

Agregar el main.exe al DEP de Windows

Bienvenidos a un nuevo tutorial, hoy aprenderemos a agregar una aplicación a nuestro DEP de Windows.
Para quienes no conocen, la Prevención de Ejecutación de Datos o más conocido con sus siglas como DEP es un sistema de seguridad incorporado a los sistemas bajo Windows que previene la ejecución de aplicaciónes como medida de seguridad.



¿De que forma afecta esto a los servidores Mu Online?
Lo que sucede es que aveces cuando deseamos ejecutar el cliente, específicamente la aplicación main.exe esta no se ejecuta y muchas veces es debido a este bloqueo que realiza nuestro sistema de forma automática.

Para solucionar esto, lo que debemos hacer es:
1)Ingresamos a "Equipo" => "Propiedades de Sistema" => "Configuración avanzada del sistema" o "Panel de control" => "Configuración avanzada del sistema"

Visualizando la opción Configuracion avanzada del sistema en Windows

2)En nuestra nueva ventana, lo que debemos hacer es un clic en "Configuración" en la opción correspondiente a "Rendimiento"

Visualizando la opción de rendimiento

3)En nuestra nueva ventana hacemos un clic en la opción "Prevención de ejecución de datos" y luego tildamos la opción con la leyenda: "Activar DEP para todos los programas y servicios excepto los que seleccione"

Visualizando la opción DEP

4)Al tildar la leyenda anterior, se activará la opción "Agregar..." la cual nos permitirá adicionar excepciones a nuestro control de seguridad de datos.
Entonces hacemos un clic en el boton "Agregar..." y lo que nos aparecerá será una nueva ventana para buscar nuestra aplicación, en este caso, el main.exe
Luego hacemos un clic en "Aplicar" y luego en "Aceptar"

Aplicación main.exe agregada al DEP y aceptando el cuadro de dialogo

Finalmente, para que los cambios tengan efecto debemos reiniciar nuestro sistema.
Si bien, estos pasos pueden llegar a resolver nuestro problema, es posible que existan otros factores que influyan a la hora de ejecutar una aplicación y esta iniciarse.
Cuando hablamos de aplicación, recuerden que siempre hacemos referencia al main.exe (Aunque tambien se puede aplicar a cualquier otra aplicación)
Estos factores pueden ser:
a)El antivirus
b)Una error en la propia aplicación
c)Una modificación la cual puede a ver dañado el ejecutable
d)Un virus
e)Otros
a)La mayoria de los antivirus detectan a las aplicaciones relacionadas al Mu Online como virus, ya sea porque fueron encriptadas, o hasta por su funcionamiento o comportamiento, entonces lo que podemos hacer en el caso del main.exe es agregarlo como excepción.
Como la cantidad de antivirus que existen son varios y variados, veremos como hacerlo con uno de los más usados, me refiero al AVAST
Para esto, abrimos la interfaz del AVAST, en la parte superior derecha, hacemos un clic en "Menu" => "Opciones"

Opción AVAST

a.1)Ahoras, nos deslizamos hasta la opción "Exclusiones" (En opciones "General") y hacemos un clic en el boton "Examinar"

Visualizando la opción excepciones

a.2)En nuestra nueva ventana buscamos la carpeta del cliente y la tildamos.
Seguido, hacemos un clic en el boton "Aceptar" y luego en "Añadir"
Para finalizamos hacemos un clic en aceptar.

Agregando a excepcion el cliente MuOnline

b)Un error en la aplicación puede deberser a varios motivos, a veces producido en el mismo procedimiento de descarga o por una incompatiblidad de nuestro sistema, en este caso para tener seguridad que no se trate de un error durante la descarga, intentamos repetirla y para tener seguridad que no se trata de ninguna incompatiblidad, prueben la misma aplicación en varios sistemas.

c)Muchas veces modificamos el main.exe, ya sea para editar la IP, el serial o la versión y cometemos un error y terminamos dañanado la aplicación. En este caso, la solución es sencilla, eliminamos el archivo editado y volvemos a comenzar. Para tener seguridad que el error fue nuestro, podemos probar ejecutando el main.exe antes de ser modificado, ya que si abre (aunque no conecte) sin lugar a duda el error lo estamos cometiendo en el proceso de edición.
Si la aplicación de forma original tampoco abre, entonces vuelve a leer el punto b)

d)Finalmente, un virus puede dañar nuestros .exe o modificarlos sin nuestro consentimiento. Si este es el caso, podemos verificar volviendo a reemplazarlo por su original.
Una forma simple de comprobar esto, es si al momento de reemplazarlo el peso del archivo es diferente, es probable que tengamos algun virus en nuestro sistema.
Realiza un backups geneneral y utiliza algun antivirus para realizar un scanner completo del sistema.