IGK Emulator

Seguridad y bans

Desde la versión 1.0.0 15 min de lectura Para: Dueño Actualizada el 29-10-2026

Cómo se controla quién entra a tu servidor: el registro de cuentas desde el juego, los límites de conexiones, los baneos (por cuenta, personaje, IP y PC), los chequeos contra hacks, el anti-spam del chat y las recomendaciones básicas para el VPS.

Todas las rutas son relativas a la carpeta MuServer. Los archivos GameServerInfo - *.dat están en la carpeta Data de cada GameServer (GameServer\Data\, GameServerCS\Data\ y cada SubServerN\GameServer\Data\): si cambias una opción, cámbiala en todos.


Registro de cuentas desde el juego (JoinServer.ini)

Qué es

Los jugadores pueden crear su cuenta desde la pantalla de login del juego (PC, Android, web y Mac). Se pide solo cuenta, contraseña y correo:

  • La cuenta y la contraseña usan letras y números (sin espacios ni símbolos), hasta 10 caracteres.
  • El correo debe tener la forma nombre@dominio.ext (hasta 50 caracteres) y cada correo sirve para una sola cuenta: si ya está en otra, el jugador ve "Ese correo ya está registrado en otra cuenta".
  • En la base, la cuenta queda en MEMB_INFO con el correo en mail_addr. El PIN de 7 dígitos (sno__numb) queda vacío (o 1111111 si tu base no acepta vacío) y el teléfono vacío. El PIN no afecta al juego mientras PersonalCodeCheck = 0 en GameServerInfo - Common.dat (así viene).

El JoinServer controla cuántas cuentas se crean y con qué frecuencia, para que nadie llene la base de cuentas falsas.

Dónde se configura

JoinServer\Data\JoinServer.ini, sección [JoinServerInfo]. Después de cambiarlo, reinicia el JoinServer.

ClaveQué haceEn los archivos que vienen con IGK
RegisterSwitch1 = se pueden crear cuentas desde el juego. 0 = apagado.1
RegisterDelaySegundos mínimos entre dos intentos de registro desde la misma IP.10
RegisterMaxPerIpCuentas nuevas por IP en 24 horas. 0 = sin límite.3
WriteAccountLog1 = escribe JoinServer\LOG\ACCOUNT_LOG con las entradas (con su IP), salidas y cuentas creadas.1
BanCheckSecondsCada cuántos segundos se buscan baneos nuevos por IP o PC para expulsar a los conectados. 0 = solo se comprueba al entrar. Mínimo 3 si no es 0.10

Notas:

  • Los límites de registro se cuentan en memoria: al reiniciar el JoinServer empiezan de cero.
  • Cuando el registro se rechaza, el jugador ve un aviso (la cuenta ya existe, el correo ya está en otra cuenta, espera unos segundos, se llegó al máximo de cuentas desde su IP, o el registro está apagado).
  • El cliente, el GameServer y el JoinServer tienen que ser de la misma versión: un cliente anterior (el que pedía PIN y teléfono) recibe "Los datos no son válidos".
  • Las demás claves del archivo (ODBC, usuario de SQL, puertos) no se tocan. Este archivo no se ve ni se edita desde el panel IGK Host porque guarda el acceso a SQL Server.

JoinServer\Data\AllowableIpList.txt

Lista de IPs que pueden conectarse al JoinServer (los GameServer). En los archivos que vienen con IGK: solo 127.0.0.1 (la misma máquina). Déjalo así si todos los servidores están en el mismo VPS. DataServer\Data\AllowableIpList.txt hace lo mismo para el DataServer.


Tiempo de login y límites de conexiones

GameServerInfo - Common.dat (cada GameServer)

GameServer\Data\GameServerInfo - Common.dat. Se aplica con Reload Common o reiniciando el GameServer.

ClaveQué haceEn los archivos que vienen con IGK
MaxIpConnectionJuegos abiertos a la vez desde una misma IP en este GameServer. No lo pongas en 0: con 0 nadie puede entrar.5
MaxHWIDConnectionJuegos abiertos a la vez desde un mismo PC (HWID). 0 = sin límite.2
LoginTimeoutSegundos que tiene el jugador para entrar después de elegir el servidor; después se cierra la conexión. Mínimo 10.90
PersonalCodeCheck1 = pide el código personal de 7 dígitos de la cuenta para borrar personajes y en algunas acciones de guild y baúl. 0 = no lo pide.0

ConnectServer\Data\ConnectServer.ini

ClaveQué haceEn los archivos que vienen con IGK
MaxIpConnectionConexiones a la lista de servidores desde una misma IP. No lo pongas en 0 (nadie entra).5
MaxHWIDConnectionConexiones a la lista de servidores desde un mismo PC. No lo pongas en 0 (nadie entra).5

Reinicia el ConnectServer después de cambiarlo.

Problemas comunes

SíntomaCausaSolución
Varios jugadores de la misma casa o cibercafé no pueden entrar todosMaxIpConnection bajo: comparten IP.Súbelo (por ejemplo a 10).
Un jugador no puede abrir un tercer juego en su PCMaxHWIDConnection = 2.Es el límite por PC. Súbelo si quieres permitir más.
Nadie puede entrar al servidorMaxIpConnection = 0 (en GameServer o ConnectServer) o MaxHWIDConnection = 0 en el ConnectServer.Pon un número mayor que 0.
Se desconecta en la pantalla de personajes si tarda en entrarLoginTimeout corto.Súbelo (en los archivos que vienen con IGK: 90 segundos).

Baneos por cuenta y personaje (comandos /banacc y /banchar)

Qué es

Bloquean una cuenta o un personaje por una cantidad de días, desde el juego. Los usa un GM escribiendo en el chat.

Dónde se configura

  • Los comandos están en Data\Command.txt.
  • Los avisos a todo el servidor, en GameServer\Data\GameServerInfo - Command.dat, sección "Command Bloc".
  • Necesitan el script DataBase\SQL\Update11 - Ban columns.sql y Update11 - Procedure WZ_DesblocAccount.sql ejecutados en la base (agregan la fecha de vencimiento del bloqueo).
ComandoUsoQué hace
/banchar/banchar <personaje> <días>Bloquea ese personaje los días indicados. Si está conectado, lo saca del juego.
/banacc/banacc <personaje> <días>Bloquea la cuenta de ese personaje los días indicados (se escribe el nombre del personaje, no el de la cuenta). Si está conectado, lo saca del juego.
  • Los días son obligatorios y deben ser mayores que 0. Sin días el comando no hace nada.
  • El GM recibe un mensaje si funcionó o si no encontró el personaje.
  • El bloqueo se levanta solo cuando pasan los días: la próxima vez que el jugador entra, la cuenta o el personaje se desbloquea.

Importante: en Data\Command.txt revisa que la columna GameMaster de /banchar y /banacc sea 1 o 2, para que solo los GM puedan usarlos (0 = cualquiera que tenga el comando activo). Los GM se definen en Data\Util\GameMaster.txt (cuenta, personaje y nivel).

Clave de GameServerInfo - Command.datQué haceEn los archivos que vienen con IGK
CommandBlocAccShowMessage1 = avisa a todo el servidor "X baneó la cuenta del personaje Y por N días".1
CommandBlocCharShowMessage1 = avisa a todo el servidor "X baneó al personaje Y por N días".1

Quitar un bloqueo antes de tiempo

Con HeidiSQL (IGK Connect > Base de datos), en la base MuOnline:

-- Desbloquear una cuenta
UPDATE MEMB_INFO SET bloc_code = 0 WHERE memb___id = 'nombredecuenta'
-- Desbloquear un personaje
UPDATE Character SET CtlCode = 0 WHERE Name = 'nombredelpersonaje' AND CtlCode = 1

Otros comandos útiles

ComandoUsoQué hace
/disconnect/disconnect <personaje>Desconecta a un jugador (puede volver a entrar).
/blocchat/blocchat <personaje> <minutos>Bloquea el chat de un personaje. 0 minutos lo desbloquea.

Baneos por IP y por PC (HWID): tabla IGK_Ban

Qué es

Un baneo por IP deja afuera a todo el que entre desde esa IP. Un baneo por PC (HWID) deja afuera a todo el que entre desde ese computador, aunque cambie de cuenta o de IP. Al jugador baneado el juego le dice que la cuenta está bloqueada.

  • Se comprueba al entrar al juego y al pasar de un GameServer a otro.
  • Cada pocos segundos (BanCheckSeconds de JoinServer.ini, en los archivos que vienen con IGK: 10) el JoinServer busca baneos nuevos y expulsa a quien esté conectado con esa IP o ese PC, en cualquier GameServer o subservidor. No hay que recargar nada.
  • Un baneo hecho con el JoinServer apagado también se aplica a los conectados cuando el JoinServer arranca.
  • Funciona con jugadores de PC, celular y navegador (los del navegador llegan con su IP real).

Instalación (una vez)

Ejecuta en la base del juego (MuOnline) el script:

DataBase\SQL\Update30 - IGK_Ban table and procedures.sql

  • Se puede ejecutar varias veces: no borra datos.
  • Funciona desde SQL Server 2008.
  • No hace falta reiniciar: el JoinServer busca la tabla cada 30 segundos. Mientras no exista, el log del JoinServer dice que no hay baneos por IP ni HWID.

Cómo agregar y quitar un baneo

Desde el panel IGK Host (lo más fácil): pestaña Baneos o el botón de baneo en Usuarios en línea. Ver 11_IGK_HOST_STARTUP_CONNECT.md.

Desde SQL (HeidiSQL o SQL Server Management Studio):

-- Banear: tipo (0 = IP, 1 = HWID), valor, días (0 = permanente), motivo, quién lo hizo
EXEC IGK_BanAdd 0, '1.2.3.4', 7, N'Uso de hack', 'Admin'
EXEC IGK_BanAdd 1, 'EL-HWID-DEL-PC', 0, N'Estafa', 'Admin'

-- Quitar el baneo: tipo, valor, quién lo quitó
EXEC IGK_BanRemove 0, '1.2.3.4', 'Admin'

-- Ver los baneos activos
SELECT * FROM IGK_Ban WHERE UnbannedAt IS NULL AND (ExpiresAt IS NULL OR ExpiresAt > GETDATE())

Columnas de la tabla IGK_Ban

ColumnaQué guarda
IdNúmero del baneo.
Type0 = IP, 1 = HWID (PC).
ValueLa IP o el HWID.
ReasonEl motivo.
BannedBy / BannedAtQuién y cuándo.
ExpiresAtHasta cuándo. Vacío (NULL) = permanente.
UnbannedAt / UnbannedByCuándo y quién lo quitó.

Notas:

  • Quitar un baneo no borra la fila: queda en el historial. Banear otra vez algo que ya estaba baneado cierra el anterior (queda como "reemplazado") y crea uno nuevo.
  • No se pueden banear - (el PC de quien no manda HWID), 127.0.0.1 ni 0.0.0.0: dejarían afuera a muchos jugadores a la vez.
  • IP: una familia, un cibercafé o una compañía de celular pueden compartir la misma IP, y en casa suele cambiar al reiniciar el router. Mejor banear por tiempo.
  • HWID: es más difícil de cambiar en PC. En el celular cambia si reinstalan el juego y en la versión web al borrar los datos del navegador.

HWID guardado en cada ingreso (MEMB_STAT)

Qué es

Cada vez que una cuenta entra al juego, se guarda en MEMB_STAT la IP y el HWID (el identificador del PC) de esa conexión. Así sabes desde qué PC entró cada cuenta, y el panel puede banear "la IP o el PC de una cuenta o personaje".

Instalación (una vez)

Ejecuta en la base MuOnline: DataBase\SQL\Update30 - MEMB_STAT HWID.sql

  • Agrega la columna HWID a MEMB_STAT. Se puede repetir sin problema.
  • No hace falta reiniciar: el JoinServer busca la columna cada 5 minutos.

Para ver las últimas conexiones:

SELECT TOP 20 memb___id AS Cuenta, ServerName AS Servidor, IP, HWID, ConnectTM AS Entro, DisConnectTM AS Salio
FROM MEMB_STAT ORDER BY ConnectTM DESC

Chequeos contra hacks (Data\Hack y GameServerInfo - Common.dat)

Opciones de GameServerInfo - Common.dat, sección "Hack Settings"

Se aplican con Reload Hack (o reiniciando el GameServer).

ClaveQué haceEn los archivos que vienen con IGK
CheckSpeedHack1 = desconecta a quien ataca más rápido de lo que permite su personaje.1
CheckSpeedHackToleranceMargen permitido en ese chequeo.0
CheckLatencyHack1 = desconecta a quien tiene el reloj del juego acelerado.0
CheckLatencyHackToleranceMargen permitido (milisegundos).0
CheckAutoPotionHack1 = ignora las pociones tomadas demasiado rápido.1
CheckAutoPotionHackToleranceTiempo mínimo entre pociones (1000 = 1 segundo).300
CheckAutoComboHack1 = no da combo si se hace demasiado rápido.1
CheckAutoComboHackToleranceTiempo mínimo entre combos (1000 = 1 segundo).1000
SpeedHackSkillEnable1 = activa el chequeo de velocidad de skills de HackSkillCheck.txt.0
SpeedHackSkillTypeQué pasa al detectarlo: 0 = solo se anota en el log, 1 = desconectar, 2 = no deja atacar, 3 = no deja atacar durante SpeedHackSkillPenalty milisegundos, 4 = desconectar y bloquear la cuenta (por confirmar).1
SpeedHackSkillPenaltyMilisegundos de castigo para el tipo 3.5000
SpeedHackSkillDialog1 = le muestra al jugador "[AntiHack] SpeedHack usage detected!".1
SpeedHackSkillDebug1 = escribe en el log cada uso de skill para ajustar los valores. Déjalo en 0 en un servidor abierto.0

En la sección "Log Settings" del mismo archivo, WriteHackLog = 1 guarda en un log lo que detectan estos chequeos (en los archivos que vienen con IGK: 0).

Data\Hack\HackSkillCheck.txt

Límite de usos de una skill según la velocidad de ataque. Solo se usa con SpeedHackSkillEnable = 1.

ColumnaQué es
SkillIndexNúmero de la skill.
MinSpeed / MaxSpeedRango de velocidad de ataque del personaje al que se aplica la línea (* = sin máximo).
MaxDelayVentana de tiempo en milisegundos.
MaxCountUsos máximos de la skill dentro de esa ventana. Si los pasa, se aplica SpeedHackSkillType.

En los archivos que vienen con IGK hay líneas para la skill 230 (Red Storm). El archivo termina con end.

Data\Hack\HackPacketCheck.txt

Límite de cuántas veces por segundo puede mandar el juego cada tipo de mensaje al servidor.

ColumnaQué es
IndexTipo de mensaje (0 a 255).
ValueSubtipo (* = todos).
EncryptNo lo cambies.
MaxDelayVentana de tiempo en milisegundos (0 = sin límite).
MinCountA partir de cuántos mensajes en esa ventana se ignoran los siguientes.
MaxCountA partir de cuántos se desconecta al jugador.

Déjalo como viene salvo que soporte te indique otra cosa.

Otros archivos de Data\Hack

Dec1.dat, Enc2.dat y MHPServer.ini son parte de la protección del juego. No los cambies ni los borres.


Anti-spam del chat (GameServerInfo - Custom.dat)

Si un jugador repite el mismo mensaje varias veces seguidas en poco tiempo, su chat queda bloqueado unos minutos. Se aplica con Reload Custom.

ClaveQué haceEn los archivos que vienen con IGK
EnableAntiSpam1 = activado.1
LimitMaxMessageCuántas veces seguidas puede repetir el mismo mensaje.3
LimitMaxTimeMessageCheckEn cuántos segundos se cuentan esas repeticiones.60
TimeBlockedChatMinutos que queda bloqueado el chat.1

El jugador ve "You cannot chat for N minute(s)" (texto 269 de Data\Message.txt). Un GM también puede bloquear el chat a mano con /blocchat.


Scripts Lua protegidos (Data\Script)

Los scripts Lua del GameServer (Data\Script) no pueden tocar archivos ni programas del servidor: no pueden leer ni escribir archivos (salvo los .ini de Data\Script con ConfigSaveString), ejecutar programas ni cargar librerías. Sí pueden usar la hora y la fecha, y cargar otros scripts .lua que estén dentro de Data\Script.

  • Límites: un evento que tarda más de 3 segundos se corta con un error, y todos los scripts juntos usan como máximo 256 MB: un script mal hecho no cuelga el GameServer.
  • Base de datos: las consultas de los scripts van por el DataServer con los valores aparte (no se pueden inyectar) y solo pueden escribir en tablas Lua_..., salvo LuaDatabaseWrite = 1 en DataServer.ini. Nunca EXEC, DROP, ALTER ni varias sentencias.
  • Paquetes del cliente: como mucho 30 por segundo por jugador; el script del servidor debe comprobar lo que llega.

Si un script viejo usa funciones de archivos o de programas, da error al cargarse: hay que quitar esa parte. Después de editar un script: /reload lua. Todo sobre Lua en 16_LUA.md.


Recomendaciones para el VPS

Puertos

Abrir (los usan los jugadores)Puerto en los archivos que vienen con IGK
ConnectServer (lista de servidores)TCP 44405
GameServer principalTCP 55901
Subservidoresel de cada uno (por ejemplo 55902, 55903...)
GameServerCS (Castle Siege)TCP 55919
WebBridge (solo si usas el cliente web y los jugadores se conectan directo)TCP 44480 o el puerto seguro que configures
Panel IGK Host (solo si usas IGK Host)TCP 47443 (el StartUp solo deja entrar a las IPs del panel)
Base de datos por IGK Connect (solo si usas IGK Host)TCP 47444 (se abre solo mientras hay una sesión)
Dejar cerrados a internetPor qué
DataServer (55960) y JoinServer (55970)Solo los usan los servidores del mismo VPS.
Puerto UDP del ConnectServer (55557)Solo lo usan los GameServer del mismo VPS.
SQL Server (1433 u otro)Nunca lo abras a todo internet. Si tu web necesita la base, usa [Firewall] SqlAllowedIps de IGKStartUp.ini para abrirlo solo a la IP de tu hosting.
Escritorio remotoSi puedes, limítalo a tu IP en el firewall del proveedor.

IGK StartUp abre solo en el firewall de Windows los puertos de ConnectServer, GameServer y WebBridge ([Firewall] OpenServerPorts = 1). Si tu proveedor tiene su propio firewall, ábrelos también allí.

Contraseñas

  • Usa una contraseña fuerte para el usuario de SQL Server (sa): larga, con letras, números y símbolos, distinta de la del VPS.
  • Usa una contraseña fuerte para el usuario de Windows del VPS.
  • Revisa Data\Util\GameMaster.txt: deja solo las cuentas de tus GM reales.

Copias de seguridad

  • Haz copias de la base de datos con frecuencia (en IGK Host hay backups automáticos; ver 11_IGK_HOST_STARTUP_CONNECT.md).
  • Antes de ejecutar un script SQL o hacer un cambio grande, haz un backup.
  • Guarda las copias fuera del VPS.

Preguntas frecuentes

P: ¿Cómo apago el registro de cuentas desde el juego? R: En JoinServer\Data\JoinServer.ini pon RegisterSwitch = 0 y reinicia el JoinServer.

P: Alguien crea muchas cuentas. ¿Cómo lo limito? R: RegisterMaxPerIp (cuentas por IP en 24 horas, en los archivos que vienen con IGK: 3) y RegisterDelay (segundos entre intentos) en JoinServer.ini. Reinicia el JoinServer.

P: ¿Cómo baneo a un jugador por unos días? R: En el juego, como GM: /banacc <personaje> <días> bloquea su cuenta, /banchar <personaje> <días> bloquea solo ese personaje. Los días son obligatorios.

P: Usé /banacc con el nombre de la cuenta y dice que no funcionó. R: /banacc se usa con el nombre de un personaje de esa cuenta, no con el nombre de la cuenta.

P: El jugador baneado creó otra cuenta. ¿Qué hago? R: Banea su PC (HWID) o su IP desde el panel (pestaña Baneos, "La IP o el PC de una cuenta") o con EXEC IGK_BanAdd.

P: Baneé una IP. ¿Tengo que reiniciar algo? R: No. El JoinServer lo aplica al momento y expulsa a los conectados con esa IP en unos segundos.

P: El baneo por HWID no funciona. R: Revisa que ejecutaste Update30 - IGK_Ban table and procedures.sql y que todos los GameServer están actualizados. El log del JoinServer avisa si falta la tabla o si un GameServer no manda el HWID.

P: ¿Cómo quito un baneo por IP o HWID? R: En el panel, pestaña Baneos > Quitar. Por SQL: EXEC IGK_BanRemove 0, '1.2.3.4', 'Admin' (0 = IP, 1 = HWID).

P: ¿Cómo quito un /banacc o /banchar antes de tiempo? R: Con SQL: UPDATE MEMB_INFO SET bloc_code = 0 WHERE memb___id = 'cuenta' o UPDATE Character SET CtlCode = 0 WHERE Name = 'personaje' AND CtlCode = 1.

P: ¿Dónde veo desde qué PC entró una cuenta? R: En la tabla MEMB_STAT, columnas IP y HWID (necesita Update30 - MEMB_STAT HWID.sql), o en el panel en Usuarios en línea.

P: ¿Cuántos juegos puede abrir un jugador a la vez? R: MaxHWIDConnection en GameServerInfo - Common.dat (por PC, en los archivos que vienen con IGK: 2) y MaxIpConnection (por IP: 5).

P: Un jugador dice que no puede hablar en el chat. R: Repitió el mismo mensaje y el anti-spam le bloqueó el chat por TimeBlockedChat minutos, o un GM le aplicó /blocchat. /blocchat <personaje> 0 lo desbloquea.

P: Mi script Lua usa io.open y da error. R: Los scripts no pueden leer ni escribir archivos del servidor. Quita esa parte del script.

P: ¿Qué puertos tengo que abrir en el VPS? R: ConnectServer (TCP 44405), cada GameServer (55901, 55919 y los de los subservidores) y, si los usas, el WebBridge y los del panel IGK Host (47443 y 47444). Nunca abras DataServer, JoinServer ni SQL Server a internet.

¿No encontraste lo que buscabas? Si eres cliente, pregúntale a tu asistente de soporte: responde con esta misma documentación. Si todavía no lo eres, escríbenos: