Modificar nivel de uso de los items

Bienvenidos a un nuevo tutorial, hoy veremos como modificar los niveles de uso de los items.
¿Qué significa eso?, la mayoria de los items requieren para su uso, que el personaje tenga una combinación de stats a cumplir (Cierta cantidad de fuerza y agilidad)



Pero hay items que requieren además de eso, un nivel específico, como los conocidos "Items level 380", es decir, dichos items a los cuales podemos refinar y estos son los siguientes:
Sets:
1- Set Dragon Knight
2- Set Venon Mist
3- Set Sylpidray
4- Set Volcano
5- Set Sunlight
Armas:
1- Bone Blade
2- Grand Viper Staff
3- Sylpidray Bow
4- Explosion Blade
5- Solay Scepter
Ahora bien, es normal o no tanto que tengamos items que requieran de niveles, o los mismos items anteriores no piden un nivel 380 sino 400.
Para modificar los niveles de los items, necesitamos editar dos archivos.
a)El item(kor).txt o el item(new).txt (Dependiendo la versión)
B)El item.bmd del cliente (Dependiendo la versión el nombre puede variar)
Entonces para eso comenzaremos con la edición en el lado del SERVIDOR.
1)Trabajaré con una versión Season 6, por entonces para abrir el item(New).txt, me dirijo a la siguiente ruta: Muserver\data\lang\kor
Una vez dentro del arhivo, buscamos al items que deseamos modificar el nivel, supongamos que la "Bone Blade" nos pide un nivel 400, y queremos que nos pida un nivel 380, para eso buscamos el items por su nombre y luego del lado derecho, buscamos la columna llamada "ReqLev" (Nivel requerido), lo que veremos será algo similar a lo siguiente:

Nivel requerido de uso

2)Nuestro siguiente paso, será modificar el nivel por el deseado, en mi caso por "380"

Nivel modificado de uso

3)Reiniciamos el servidor para aplicar los cambios.
Hasta entonces, hemos realizado el trabajo sobre el SERVIDOR, nuestro siguiente y último paso será aplicar el mismo cambio pero en el CLIENTE.
El archivo que necesitamos modificar se encuentra en nuestra carpeta DATA/LOCAL (de nuestro cliente, y dependiendo la versión puede variar la ruta, en clientes de versiones recientes tenemos la selección de lenguajes, por entonces debemos buscar al archivo dentro de las carpetas ENG, SPA, etc...)
Para abrir el archivo .bmd podemos utilizar infinitos programas (Ver tutoriales anteriores).
Sin importar el programa a usar, lo que debemoso hacer es posicionarnos sobre el item, en este caso , sobre la "Bone Blade", buscamos la columna llamada "ReqLvl", en ella veremos el nivel actual, es decir, el 400 (Si el programa que están usando no les muestra el nombre de las columnas, usen la lógica: simplemente revisan en que columna aparece el número 400, si da la casualidad que aparece dos veces, en dos columnas diferentes, entonces repiten estos pasos dos veces, uno por cada columna hasta encontrar la buscada)

Modificación en el cliente en el nivel requerido

4)Entonces ahora, lo que hacemos es cambiar el nivel 400, por 380, guardamos los cambios, reemplazamos el archivo editado por el original e ingresamos al servidor para ver si nos pide el nivel "380" la "Bone Blade".

Verificación de cambios en el cliente

Entonces con este tutorial, podemos modificar cualquier nivel de items para su uso, y tambien podemos hacer que items que no requieran ningun nivel, lo requieran.
El uso que quieran darle, es totalmente libre.
Tengan en cuenta que como la segunda modificación se realiza sobre el Cliente MuOnline, deben de agregar un parche, ya que si solo aplicamos los cambios en el server no se verán reflejados del otro lado. (Bug Visual)

El Xampp no inicia (Busy)

Bienvenidos a un nuevo tutorial, hoy veremos la razon o algunas de las razones por las cuales nuestro Xampp no inicia en nuestro sistema.
Este error se manifiesta cuando queremos iniciar nuestro apache y parece no dar respuesta al apretar el boton "Start"

Panel de control del xampp

1)Una de las tantas razones que puede producir este error, es que tenemos otro software ocupando el puerto 80 en ese momento.
Resalte la útlima palabra para que se entienda bien, podemos tener infinitos programas o servicio que utilizan el puerto 80, pero eso no implica que entren en conflicto con el XAMPP, sino que el conflicto se produce cuando uno de ellos está iniciado.



Para saber que software está usando el puerto 80, podemos valernos de un comando en cmd conocido como "Netstat" como necesitamos verificar las conexiones activas junto a sus puertos, usaremos los parámetros "-abn".
-a =>Visualiza todas las conexiones y puertos TCP y UDP, incluyendo las que están "en escucha" (listening).
-b =>En los sistemas recientes, visualiza el binario (ejecutable) del programa que ha creado la conexión.
-n =>Se muestran los puertos con su identificación en forma numérica y no de texto.
Entonces abrimos la consola, y escribimos cmd
Luego en ella escribimos: netstat -abn

Comando en cmd

2)Simplemente apretamos "Enter" y buscamos el programa que este usando el puerto 80, en mi caso era el Skype, ya que usa el puerto 80 y el 443 como alternativos.

Configuración del puerto del Skype

3)En el caso que quieran, pueden desactivar esta opción del Skype, guardan los cambios y reinician el Skype.
Una vez aplicado los cambios, intentamos iniciar nuevamente el XAMPP

Inicio correcto del xampp

4)Como podrán observar, inicio sin problemas.
Este tutorial más que nada apunta a que este problema será muy frecuente con el cierre de MSN Messenger.
Como muchos de ustedes ya sabrán el servicio ofrecido por Microsoft será reemplazado por Skype y este conflicto con el Xammp se repetirá en varios de ustedes.
Es por eso que con este tutorial podrán resolver el inconveniente sin problema alguno.

Codigo de los items

Bienvenidos a un nuevo tutorial hoy aprenderemos a saber que códigos representa a cada items.
Esto fue explicado en varios tutoriales, pero hemos decidido desdoblarlo y tratar este tema específicamente en este tutorial:
Lo que veremos en este tutorial es la forma de conocer los códigos de los items.
¿Para que nos sirve esto?



Para infinitas cosas, por ejemplo: para editar los shops, premio de eventos, configuraciones de dropeo, etc.
1)Un items para un usuario es por ejemplo el siguiente:
"Leather Helm"
y el mismo item para nuestro servidor es el siguiente
7 5
¿Notan alguna diferencia?, entonces veamos la respuesta a la incógnita .
1)Como abrán podido observar, un items para el servidor un es un grupo de números que se forman de acuerdo a una secuencia.
Muchos de ustedes me preguntan ¿Cómo se cambia lo que se vende en el shop?, la respuesta es: dentro de los archivos Shop.txt de nuestro servidor.
Al abrirlos vemos o podemos ver algo similar a la siguiente imagen:

Archivo shop con código de los items

2)Como podemos ver, en el archivo no tenemos ninguna referencia despues de las // (Recuerde que hemos visto infinitas veces que todo lo escrito despues de las // es una acotación que no es procesada)
Como no tenemos ninguna referencia, no sabemos que items se están vendiendo (Sólo podremos saberlo entrando al server y mirando el shop), pero sería dificultoso idenficar a cada items en el archivo.
Veamos un ejemplo cualquiera de la imagen anterior:
15 8 0 0 0 0 0 0 //
¿Qué items reepresenta el anterior código?
Para saberlo, necesitan abrir el archivo llamado:
Item(New).txt (Si nuestra versión es Season 5, Season 6 o superior)
Item(Kor).txt (Si nuestra versión es 0.97x, 0.97+0.99, 0.99b, Season 1, Season 2, Season 3 o Season 4)
El archivo nos mostrará algo similar a lo siguiente:

Item kor del servidor

3)En dicho archivo, tenemos todos los códigos de todos los items de nuestros servidor, lo que necesitamos saber es cómo leerlos.
Entonces para saber que items reepresenta el
15 8 0 0 0 0 0 0 //
tomaremos el primer número completo:
El [15], dicho número nos indica el grupo
¿Qué es el grupo? Es un número que agrupa un conjunto de items.
¿Donde veo el grupo en el archivo?, dicho número se encuentra aislado en la parte superior-izquierda del archivo.
Veámoslo en la imágen:

Identificado del grupo de items

4)Ahora veamos el segundo número de nuestro ejemplo:
15 8 0 0 0 0 0 0 //
El [8], dicho número identifica al items dentro del grupo, de esta forma se garantiza que jamás podrá haber dos items ocupando el mismo lugar, ya que dentro del archivo podemos encontrar muchos items ocupando el espacio 8, pero sólo uno en el grupo 15.
Ahora, veamos en la imagen de que items se trataba:

Posición del item

5)De acuerdo a la imagen anterior el código del item reepresentaba al "Scroll of Evil Spirits", de esta forma podemos saber y conocer todos los códigos de los items.
¿Se puede verificar?, claro que si, ingresando al server y abriendo el NPC de dicho archivo.

Scroll Evil Spirit en el shop

Entonces con esos dos secuencias de números podemos identificar cualquier items dentro de los archivos, recuerden el primero es el grupo (No todas las versiones tienen la misma cantidad de grupos, algunas versiones tienen menos grupos y otras más) y la segunda es el index que identifica al items dentro de ese grupo.
El resto de los números que muestra el ejemplo anterior, configura al item en diferentes aspecto (durabilidad, nivel, opciones, skill, luck, etc...), si necesitan más información al respecto de esto, puede revisar los anteriores tutoriales para editar shops, ya que ahi se explica en detalles el significado de cada dígito.

Mover, agregar, o eliminar un NPC

Bienvenidos a un nuevo tutorial, hoy aprenderemos a mover, agregar o eliminar un NPC.
Para aquellos que desconocen el termino NPC, intentaré darles una defición (Espero que no se mal entienda).
Un NPC es un objeto dentro del juego con el cual podemos tener diferentes tipos de interacciones (Comprar items, crear una guild, realizar una quest, etc)
Son ejemplos de NPC los siguientes:
"Sebina the Priest"
"Golden Archer"
"Charon"
"Chaos Goblin"
"Elf Lala"
"Eo the Craftsman"
"Caren the Barmaid"
"Wizard","Izabel"
"Weapons Merchant Zienna"
"Wandering Merchant Martin"
"Guard","Wandering Merchant"
"Hanzo the Blacksmith"
"Potion Girl Amy"
"Pasi the Mage"
"Lumen the Barmaid"
"Lahap"
"Shadow Phantom Soldier"
"Marlon"
"Gens Duprian"
"Gens Vanert"
"Imperial Guardian Npc"
"Lucky Coins"
"Priest Devin"
"Werewolf Quarrel"
"Keepergate"
"Elite Soldier"
"Jerridon"
"Osborne"
"Archangel"
Entre otros...
Los NPC se clasifican de acuerdo al uso, tenemos varios de ellos que son para SHOPS, otros para realizar GUILD, algunos se usas para interactuar con los items, subirlos de nivel, agregarle opciones, etc...
Estos NPC se destribuyen en el juego dentro de cada mapa en diferentes coordenadas.
¿Qué podemos hacer con los NPC?
Con los NPC podemos realizar tres acciones: moverlos, agregarlos o eliminarlos.
¿Cómo se hace eso?, con este tutorial:



1)Para el siguiente tutorial trabajaré con una versión Season 6, dicha ejemplificación puede ser aplicada a cualquier version de MuOnline (Deben tener en cuenta que dependiendo la versión pueden variar los npc y las rutas de los archivos)
Para trabajar con NPC(s) necesitan dos archivos, el Monster.txt y el MonsterSetBase.txt (Recuerden que si usamos gameserver_cs, tambien podemos usar el MonsterSetBase_cs.txt)
Es normal o aveces no tanto, que dentro de nuestro archivo (MonsterSetBase.txt) tenemos ordenado de la siguiente manera:

Archivos monstersetbase

2)En caso que no, veamos como se organizan los NPC dentro del MonsterSetBase.txt
Tomemos un ejemplo cualquiera:
238 3 0 180 103 1 //Chaos Goblin
Cada dígito o conjunto de dígitos hacen una secuencia númerica la cual va formando al NPC.
El 238 = Es el ID del NPC [ID es el identificador, luego veremos como saber el id de cualquier NPC]
El 3 = Es el mapa en donde esta ubicado dicho NPC [3=Noria]
El 0 = Es el radio [Todos los NPC tendrán siempre ese valor a excepción de los Guardias, que son los únicos que pueden caminar dentro del juego]
El 180 = La coordenada X
El 103 = La coordenada Y
El 1 = La dirección (La dirección sería el lado para donde se ubica el NPC, ejemplo mirando hacia el norte, sur, este , oeste, etc)
Entonces, si yo entro al juego y me posiciono en el mapa Noria en las coordenadas X=180 e Y=103, todo indicaría que alli debería estar un NPC llamado "Chaos Goblin"
Veamos ...

Coordenads del NPC Goblin

3)Hasta ahi, hemos visto como se interpreta el código de un NPC y como se refleja en el juego. (En la imagen del juego se ve la coordenada 102 en lugar de 103, es simple lógica que me acerque lo máximo posible, ya que no se puede entrar dentro de un NPC sino aproximarse, la única menera de entrar al 103 es bugeando el move con un personaje Admin)
Entonces comenzemos con la primera acción "Mover el NPC"
Para mover el npc primero debemos saber que NPC queremos mover, en este caso podemos hacerlo de muchas maneras, la ideal es entrando al juego, buscar el NPC que deseamos mover, anotar las cordenadas en donde se encuentra (aproxímación), el mapa y el nombre del NPC.
Supongamos que quiero mover este NPC a otro lado:

Coordenadas del NPC Charon

4)Lo que debemos hacer para mover el NPC es simplemente tomar los datos como:
Nombre del NPC: Charon
Mapa: 3 [Noria] (¿No conoces el número del mapa? Ver Aqui)
Coordenada X: 172 (Aproximación)
Coordenada Y: 104 (Aproximación)
Nuestro siguiente paso es saber que número de NPC le corresponde a "Charon", para eso abrimos el monster.txt, apretamos simultáneamente "Control+B" y escribimos "Charon"
Los primeros números reepresentan el código del NPC.
237 => NPC Charon
Archivo monster

5)Entonces, repasemos la información que necesitamos para localizar al NPC Charon en el archivo del juego:
Nombre del NPC : Charon
Número del NPC : 237 (Recuerden, el número del NPC lo sacamos del monster.txt)
Coordenada X: 172 (Aproximación)
Coordenada Y: 104 (Aproximación)
Con esta información recolectada, abrimos nuestros MonsterSerBase.txt , en mi caso ubicado en la ruta Muserver/data/Monsters/
Al abrirlo, veremos algo como lo siguiente (Dependiendo la versión, esto puede variar):

Archivos monstersetbase

6)Lo que debemos hacer ahora, es buscar entre todos esos códigos, al NPC en cuestión.
¿Cómo?, con la información que tenemos arriba.
Si nuestro MonsterSetbase esta organizado, es super sencillo, ahora supongamos que no está, lo que podemos hacer es: apretar simultaneamente "Control+b" y en diálogo de búsqueda, ponemos el ID del NPC, es decir 237
Cuando comenzemos a buscar, es muy probable que no nos lleve al NPC en el primer intento, sino a una cordenada de algun monster y algo similar.
¿Cómo puedo darme cuenta de esto?
Simplemente con la lógica, veamos un ejemplo:

Coordenada x

7)Por lógica ese 237 no reepresenta al NPC Charon por varias razones:
Primero: el ID del NPC debe ubicarse en primer lugar de la secuencia númerica, Segundo: el grupo es [2] y si revisamos el tutorial sobre Spots Ver Aqui podemos observar que el [2] se usa para crear un "spot normal"
Y finalmente, por la posición que ocupa el 237 en la secuencia, sabemos que se trata de una coordenada Y.
Ahora veamos el verdadero:

Modificación de la coordenada del npc Charon

8)¿Porque es el verdadero?
Por todo lo inverso a lo anterior, veamoslo:
El 237 está al inicio de la secuencia numérica (OK)
El grupo (Lo marcado en verde) es [0] eso nos indica que estamos en presencia de NPC (OK)
La secuencia de números respeta la cantidad de dígitos, es decir, el grupos de números.
¿Y para que recolectamos la información de coordenadas apróximadas y el número de mapa?
Porque es posible que tengamos varios NPC con ese ID, no solo en ese mapa sino en otros mapas tambien, entonces para ir filtrando, primero buscamos el mapa y despues las cordenadas, de esta forma sabremos exctamente cual es la linea del NPC que estamos buscando.
Entonces, como ya tenemos ubicado el NPC supongamos que deseamos moverlo de Noria a lorencia y a otras coordenadas, para esto debemos configurar el archivo de la siguiente manera:
Número de mapa actual: 3 [noria]
Número de mapa nuevo: 0 [Lorencia]
Coordenada X actual: 172
Cordenada Y actual: 104

Coordenada X nueva: 125
Cordenada Y nueva: 125
El archivo configurado nos quedaría de la siguiente forma:

Modificación del npc en noria

9)Claro esta que ustedes puede agregar el número de mapa y coordenadas que necesiten, y recuerden que sino conocen el número del mapa puede revisar este tutorial: Ver Aqui y para saber la coordenada, simplemente entran al juego y la anotan.
Nuestro siguiente paso, será guardar los cambios en el archivo y reiniciar el server para verificar los cambios (Opcionalmente pueden hacer un Reload), lo que debemos verificar es que el NPC se encuentre en el mapa que le indicamos en las coordeandas seteadas.

Visualizando NPC modificado en el cliente

10)Y efectivamente, el NPC se encuentra en donde lo configuramos.
Ahora supongamos que deseamos agregar un NPC, para esto; buscamos el código del NPC que deseamos desde el Monster.txt.
Por ejemplo: queremos agregar un baul al mapa "Atlans", entonces como habíamos dicho, abrimos el Moster.txt [Generalmente los NPC se encuentran al final del mismo] y buscamos el llamado "Baz the Vault Keeper o Baz, Storage Guard" y vemos el ID que lo reepresenta:

Store Guard en el monster

11)El ID que reempresenta el Baul es el "[240]", entonces buscamos el MonsterSetBase.txt, nos posicionamos sobre cualquier secuencia que tengamos NPC(s) y agregamos la linea como ya lo hemos visto:
Primero el ID del NPC = 240
Segundo el número del mapa = 7 (Atlans)
Rad: 0 (El baul no tiene radio de movimiento)
Coordenada X= 16
Coordenada Y= 12

Agregando de un NPC

12)Reiniciamos el servidor y verificamos los cambios

Verificando los cambios en el juego

13)Como podemos observar, el NPC se encuentra en el mapa indicado en las coordenadas marcadas en nuestro archivo.
Finalmente para eliminar un NPC lo que debemos hacer es borrar la linea de forma horizonal, por ejemplo si tenemos esta linea de un NPC:
237 0 0 125 125 3 //Charon
Y queremos eliminarlo, simplemete borramos toda la linea completa, reiniciamos el server y verificamos los cambios.
Observaciones finales:
*Al agregar un NPC lo podemos agregar dentro de un grupo [0], en donde tenemos otros NPC en la misma secuencia, no pueden agregar las lineas sueltas dentro del archivo MosterSetBase.txt ni mucho menos dentro de las secuencias de los Spots.
*Los NPC que agregamos siempre serán los mismos que tenemos en nuestro juego, es decir, que si agregamos dos "Elf lala", los dos NPC venderan los mismos items.
*Al agregar un NPC o moverlos, es posible que la dirección o el ángulo de visión no sea el deseado, para esto necesitamos ir modificando los valores de la dirección.
*Los NPC los podemos agregar junto a otros NPC de diferentes mapas, la organización interna no afecta la externa.
*Nunca borren el "end" de una secuencia, ya que es posible que al hacerlo el server no inicie.
*Trabajen siempre sobre una copia y no sobre el original, no hagan muchos cambios sobre el archivo sin verificarlos, ya que por ejemplo: si realizamos 10 cambios y cuando deseamos verificarlos tenemos un error, no sabran cual de esos 10 es el causante, lo que los obligará a comenzar de 0 nuevamente.

Configurar el evento Kanturu

Bienvenidos a un nuevo tutorial y sección, hoy aprenderemos a modificar el tiempo o la hora del Evento Kanturu.
Para este tutorial usaré como DEMO una versión Season 6, si ustedes desean aplicar dicha guia a otra versión podrán hacerlo sin problemas solo que las rutas de los archivos pueden variar.



1)Lo primero que necesitamos ubicar es el archivo llamado "Kanturu.dat", en mis files lo encuentro en la siguiente ruta:
D:\Muserver\Data\Events\Kanturu.dat

Archivo Kanturu

2)Una vez que abrimos el archivo (Lo podemos abrir con cualquier procesador de textos), veremos algo similar a lo siguiente:

Configuraciones del archivo Kanturu

3)Ahora lo que debemos hacer es deslizarnos hasta el ante-último bloque de secuencia (9) y buscar el valor de la "Revitalization"
Este valor [82500] es el que indica el tiempo en segundos del evento Kanturu.

Revitalización del evento

4)Ese 82500 es el tiempo o el lapso de tiempo entre evento y evento.
El 82500 esta en segundo, lo que si lo dividimos por 60 obtenemos los minutos y si lo volvemos a dividir por 60 obtenemos las horas.
82500=Segundos
1375=Minutos
22= Horas [Exactamente 22.9]
Entonces el evento se realiza en lapsos de 22 horas apróximadamente.
Para modificar el tiempo, necesitamos trabajar con segundos, entonces podemos valernos de una reglas de tres simples, por ejemplo si quiero que el evento suceda cada 10 horas, hacemos lo siguiente:
3600 seg ---1 hs
X seg --- 10 hs
Matemáticamente hacemos: 3600*10/1=36000
Entonces 36000 segundos, son 10 horas.
La configuración en el archivo es muy simple: modificamos el [82500] por [36000]

Configuración del tiempo

5)Por las dudas, para quien no entiendo la parte matemática, les dejaré la siguiente lista:
1 hora = 3600 segundos
2 horas = 7200 segundos
3 horas= 10800 segundos
4 horas = 14400 segundos
5 horas = 18000 segundos
6 horas = 21600 segundos
7 horas = 25200 segundos
8 horas = 28800 segundos
9 horas = 32400 segundos
10 horas = 36000 segundos
11 horas = 39600 segundos
12 horas = 43200 segundos
13 horas = 46800 segundos
14 horas = 50400 segundos
15 horas = 54000 segundos
16 horas = 57600 segundos
17 horas = 61200 segundos
18 horas = 64800 segundos
19 horas = 68400 segundos
20 horas = 72000 segundos
21 horas = 75600 segundos
22 horas = 79200 segundos
23 horas = 82800 segundos
24 horas = 86400 segundos

Numero de mapas para MuOnline

Bienvenidos a un nuevo tutorial, hoy veremos algo realmente práctico, se trata del listado de mapas con el número correspondiente.

0=Lorencia
1=Dungeon
2=Davias
3=Noria
4=Lost Tower
5=Exilie
6=Arena
7=Atlans
8=Tarkan
9=Devil Square 1-2-3-4
32=Devil Square 5-6-7
10=Icarus
11= Blood Castle I
12= Blood Castle II
13= Blood Castle III
14= Blood Castle IV
15= Blood Castle V
16= Blood Castle VI
17= Blood Castle VII
52= Blood Castle VIII
18= Chaos Castle 1
19= Chaos Castle 2
20= Chaos Castle 3
21= Chaos Castle 4
22= Chaos Castle 5
23= Chaos Castle 6
53= Chaos Castle 7
24= Kalima 1
25= Kalima 2
26= Kalima 3
27= Kalima 4
28= Kalima 5
29= Kalima 6
36= Kalima 7
30=Valle Of Loren
31=Land Of Trial
33=Aida
34=Crywolf
37=Kanturu
38=Kanturu Remain
40=Silent
41=Barracks
42=Refuge
45=Illusion Temple
46=Illusion Temple
47=Illusion Temple
48=Illusion Temple
49=Illusion Temple
50=Illusion Temple
51=Elbeland
56=Swamp of Peace
57=Raklion
63=Vulcanus
79=Loren Market
80=Karutan
91=Acheron
96=Debenter
112=Ferea
113=Nixies Lake
En caso que este faltando algun mapa del juego, nos informan por comentario y lo agregamos a la brevedad.

Cambiar el puerto del SQL (1433)

Bienvenidos a un sencillo pero práctico tutorial en donde aprendreremos de manera aislada a modificar/cambiar el puerto del SQL 1433.
¿Por qué de manera aislada?, Porque en varios tutoriales ya hemos visto como hacerlo, entonces lo que haremos ahora, será trabajar en ese punto.



1)Abrimos el "Administrador Corporativo" y sobre el Grupo de SQL [Local] hacemos un clic derecho y seleccionamos la opción => "Propiedades"

Propiedades en SQL server

2)Ahora hacemos un clic en donde dice "Configuración de red"



3)Hacemos un clic en donde dice "TCP/IP" y luego un clic en "Propiedades"

Configuraciones de red

4)Simplemente ahora cambiamos el puerto 1433 de nuestro SQL por el que deseamos.

Propiedades de TCP

5)Finalmente, guardamos los cambios y para que sean efectivos, deben reinciar el SQL.

Crear un mapa VIP

Bienvenidos a un nuevo tutorial, hoy aprenderemos una alternativa de como crear un mapa VIP.
La historia de este tutorial comienza cuando un usuario quería tener un mapa vip dentro de su servidor FREE.
La respuesta rápida sería crear un Subserver VIP y, de esta manera; todos los mapas serían vips, ya que el acceso al subserver sería totalmente restringido.
¿Qué sucede?, un subserver vip implica un consumo de memoria mayor y las condiciones técnicas no lo permitian.



Entonces como los Server Files no tenían dicha programación incluida se ideo una manera de hacerlo.
1)Lo primero que debemos hacer, es decidir que mapa retiraremos del juego FREE para convertirlo en VIP, en este DEMO trabajaré con una versión vieja [0.97+0.99] y usaremos al mapa TARKAN para convertirlo en vip (Sin duda, ustedes puede aplicarlo al mapa que deseen)
Lo primero que necesitamos es saber que número de mapa es TARKAN, existe diversas formas de saber que número es, en mi caso lo haré con una muy sencilla, llevo mi personaje a Tarkan y reviso en el SQL que numeración le corresponde.

Tabla character

2)Como pudimos ver, el mapa 8 es TARKAN, esto no lo vamos a usar ahora, sino que vamos a anotarlo en algun apartado porque más adelante lo necesitaremos.
Como TARKAN será nuestro mapa a convertir en VIP, lo que haremos ahora será sacar al mapa del juego, ¿Sacarlo del juego?, no literalmente , lo que necesitamos hacer es evitar que los personajes puedan moverse a el.
Yo estoy trabajando con una versión 0.97+0.99 entonces lo que hare será simplemente abrir el archivo message_kor.wtf con cualquier editor .WTF y cambiar o retirar el nombre TARKAN.
Para que se entienda lo que estamos haciendo, en el .WTF tenemos el nombre del mapa, es decir, el nombre por el cual al escribir /move tarkan o /warp tarkan no lleva a dicho destino. Lo que necesitamos hacer es evitar esto, es decir que ningun usuario pueda ir a TARKAN con el comando move o warp.
Les rescomendaría que pongan otro nombre, asi Ustedes: administradores del juego, de manera secreta puedan moverse sin problemas.
Lo llamaré "mapvip" [Recuerden el nombre que ingresarán ya que les servirá dentro del juego]

Editor wtf

3)Reiniciamos el server y verificamos los cambios dentro del juego. (Por las dudas, lo que deben verificar es que al escribir [/move tarkan] o [/warp tarkan] no los lleve a dicho mapa, sino que el comando funcione al escribir [/move mapvip] o [/warp mapvip]
Atención: todos sabemos que a un mapa podemos llegar dentro del juego por comando o por un portal, por entonces necesitamos modificar nuestro archivo gate.txt, lo que haremos será simplemente quitar la entrada al mapa por portal (La salida a stadium o arena se la dejamos, de modo tal que podamos salir del mapvip por dicho portal pero no entrar)

Modificación del archivo gate

4)Entonces, revisemos lo realizado:
a)Seleccionamos un mapa para convertir en vip
b)Lo sacamos de nuestra lista de moves
c)Le quitamos cualquier acceso de tipo portal
Nuestro último paso será configurar la forma de ingreso al mapa, es decir, ¿Cómo haran para ingresar los usuarios a dicho mapa?
Veamos diferentes alternativas:
a)Un adm/gm los moverá de manera manual [Podría servir como evento, pero no sería lo ideal si queremos usar a dicho mapa como VIP ya que no siempre tendremos un adm/gm Online en nuestro server]
b)Con job o sentencia SQL [También podría ser como evento, y podría servir, sólo que siempre que salgamos del juego apareceremos en el mapa vip]
c)Por PHP, creo que sería la mejor alternativa y además podemos usar muchísimos condicionales.
Para quienes tienen conocimiento en PHP esto será una tarea muy sencilla para quienes no, deberán seguir leyendo el tutorial:
Lo primero que necesitamos es crear nuestra propia tabla, la cual la usemos como llave de ingreso, ¿Qué quiere decir "llave de ingreso"?, me refiero a que haremos un:
1= SI entra al mapa vip
0= No entra al mapa vip
Para crear nuestra tabla ingresamos al SQL , buscamos la tabla MEMB_INFO hacemos un clic derecho y luego seleccionamos la opción "Diseñar tabla"

Acceso vip desde el sql

5)Ahora nos deslizamos hasta el final de las tablas y la completamos de la siguiente manera:
Nombre de columna: asd
Tipo de datos: int
Logintud: 4
Permitir valores null: [Destilden la opción]
Valor predeterminado: 0
Configuración y asignación de una columna

6)Nuestro siguiente paso será crear el formulario en PHP el cual contenga los siguientes datos:
Login de cuenta
Nombre del personaje
Password de cuenta
Y luego con un "Select" (Ya que más adelante podremos tener más mapas vips), hacemos la selección del mapa
y enviamos toda la información por un _post para evaluarla [El número 8 reempresenta al mapa, si ustedes van a usar otro mapa, deben ingresar el número que vimos en el paso 1) ].

Agregado de código php para el sistema vip

7)Una vez que recibimos las variables enviadas por el formulario, las evaluamos:
$personaje = stripslashes($_POST['personaje']);
$cuenta = stripslashes($_POST['cuenta']);
$pass = stripslashes($_POST['pass']);
$map= stripslashes($_POST['map']);
Un poco de seguridad para evitar códigos en el pasaje y evaluación
if ((eregi("[^a-zA-Z0-9_-]", $personaje)) ||
(eregi("[^a-zA-Z0-9_-]", $cuenta)) ||
(eregi("[^a-zA-Z0-9_-]", $map)) ||
(eregi("[^a-zA-Z0-9_-]", $pass)))
Junto a la extración de datos del SQL, agregamos lo siguiente para conocer el estado de la cuenta:
$vip2 = mssql_query("select asd From MEMB_INFO Where memb___id = '$cuenta'");
$row = mssql_fetch_row($vip2);
Agregamos el condicional para saber si la cuenta es VIP (Comparando los datos)
elseif ($row[0] < 1){ echo "Error: Tu cuenta no es VIP"; }




Y finalmente la querry que hara mover al personaje al punto deseado
$msquery ="UPDATE dbo.Character SET MapNumber = '$map'
WHERE Name = '$personaje'
UPDATE dbo.Character SET MapPosX= '193'
WHERE Name = '$personaje'
UPDATE dbo.Character SET MapPosY= '57'
WHERE Name = '$personaje'";
}
Por último, para hacer una cuenta vip podemos valernos de este simple .sql el cual aplicamos en el analizador de consultas:
use MuOnline
UPDATE MEMB_INFO
SET asd=2
WHERE (memb___id = 'AcaElLogin')
El "asd" es la tabla que creamos para condicionar a los usuarios vips, si bien los files o la mayoria de ellos tienen una tabla llamada vip, no es bueno ocuparla con otros proyectos ya que hay webs para MuOnline que la ocupan para trabajar.
Con este tutorial podemos convertir cualquier mapa en VIP, lógicamente que el código PHP requiere de mayor optimización, seguridad, etc... Simplemente se mostro una imagen global para dar idea o dimensión de dicha estructura básica.
Ustedes puede jugar con otros condicionales, es decir, pueden hacer por ejemplo que ciertos usuarios con cierta cantidad de resets puedan ir a ese mapa, condicionar el mapa por el nivel del personaje, también pueden ir dando puntos por cierta cantidad de resets y al llegar a dicha cantidad de puntos cambiarlos por una entrada o siemplemente vender la membresia vip por 30 días para ingresar.
Las condiciones de ingreso son realmente Infinitas, solo resta un poco de imaginación y personalidad.

Autoreset con porcentaje

Bienvenidos a un nuevo tutorial, curiosamente me pidieron la forma de crear un autoreset el cual reste en los stats un porcentaje por cada resets realizado.
Veamos un ejemplo sencillo:



Supongamos que tenemos un personaje con los siguientes stats:
Agilidad=100
Fuerza=100
Destreza=100
Energia=100
Y queremos que al resetear, a dichos stats se le reste un porcentaje, por ejemplo 5%, de modo tal, que nuestros stats luego de correr el job queden asi:
Agilidad=95
Fuerza=95
Destreza=95
Energia=95
1)Para eso, no es complicado si tenemos mínimos conocimientos matemáticos, recordemos que para restar un porcentaje lo que hacemos o mejor dicho lo que podemos hacer es hallar el valor del porcentaje que lo reemplesenta. ¿Complicado?, Veámoslo en números:
Necesito restar el 5% a 100, pero ¿Cuál es el 5% de 100?, ese es nuestro primer paso:
Para hallar el 5% de 100, lo hacemos con lo conocido como regla de tres simples:
100% ---- 100
5% ---- X
Entonces, hacemos ((5*100)/100)=5
X=5
Y ahora lo restamos: 100-5= [95]
¿Simple?, creo que si, o ¿No?
2)Translademos todo al MuOnline.
Lo que haremos será algo similar a lo siguiente:
Strength = Strength-((Strength*5)/100)
Analizemos: Dicho fragmento corresponde al código de un autoreset en SQL, lo que hacemos es sacar el 5% del STAT=Fuerza para luego restarselo, de manera tal que hacemos la resta del 5%
Entonces, para aplicarlo a todos los stats del juego hacemos lo siguiente:
Strength = Strength-((Strength*5)/100),
Dexterity = Dexterity-((Dexterity*5)/100),
Vitality = Vitality-((Vitality*5)/100),
Energy = Energy- ((Energy*5)/100)
3)Luego aplicamos eso a nuestro autoreset en SQL y lo agregamos en un JOB (Sino saben hacerlo , simplemente revisen en nuestros tutoriales anteriores o la sección de SQL 2000)

Tabla character de la base MuOnline

No estaría de más aclarar que el % lo podemos modificar por el número que deseamos, es decir, cambiamos el [5] por el valor que deseamos.
¿Necesitas programar un autoreset similar? , Simplemente nos escriben a consultas@muonlinetutoriales.com y te creamos la guia de como hacerlo.