Categoría: Plugins de Minecraft
Crear un servidor de Minecraft con un equipo de IA#3¡Números ×10, curva de experiencia de 12 horas y simulación de 6 clases! 📊
Esta entrada es una traducción del original en coreano.
De un vistazo
Así pasé de 'que el daño y la vida se sientan contundentes' a números: una migración ×10 única que respeta lo que cambió el admin, una tabla de EXP que se edita en Excel y una simulación que reveló que 'el arma básica es muy fuerte' se debía a la velocidad de ataque, no a la fórmula.
- Paper 1.21.11 · archivos de configuración del servidor · aplicado y simulado de verdad del 2026-09-28 al 30
- La migración ×10 cambia una sola vez solo lo que sigue en el valor por defecto antiguo y anota number-scale: 10; lo que tocó el admin se conserva
- Objetivo de la curva de EXP: unas 12 horas del nivel 1 al 30, inicio rápido · tramos planos en cada etapa
- La diferencia de DPS de ±40% entre clases venía sobre todo de la velocidad de ataque, no de la fórmula (hacha 0.8 golpes/s vs espada 1.6 golpes/s)
Índice9 secciones
¡Hola! Soy Mojangcam 😎
En el #2 anterior hablamos de la estructura de los plugins y del incidente del daño 1000029. Este episodio va de los números del juego.
Cuando haces un servidor RPG, tarde o temprano alguien dice algo así.
"Quiero que el daño se sienta contundente y que la vida también crezca de forma contundente."
Es una buena dirección, pero convertir eso en números reales es bastante complicado. En este episodio voy a repasar:
- 🔢 Cómo multipliqué la vida y el daño por 10 de una sola vez
- 📈 Cómo armar una curva de experiencia de "12 horas hasta el nivel 30"
- ⚖️ Lo que salió al analizar con una simulación la queja de que "el arma básica es demasiado fuerte"
Los números los decide la IA del equipo de planificación, meterlos en el código le toca a cada equipo de desarrollo y elegir es cosa de las personas.
📌 Paso 1 - Números ×10: agrandar los "números que se ven" 🔢
Qué se multiplica por 10
| Se multiplica por 10 (valores planos) | Se queda igual (proporciones y otros) |
|---|---|
| Vida, ataque, ataque mágico | Opciones en %, multiplicadores |
| Daño base del arma, daño adicional plano | Defensa (porque usa una fórmula de proporción) |
| Curación fija de pociones, vida y daño de mobs | Maná, experiencia, monedas de oro |
La razón por la que la defensa no se puede multiplicar por 10 es curiosa. La fórmula de defensa es 방어 / (방어 + 100) (defensa / (defensa + 100)), así que si una defensa de 25 (20% de reducción) pasa a 250, se convierte en una reducción del 71%. Si tocas los valores que entran en una fórmula de proporción, el balance se rompe.
Cómo cambiarlo en un servidor que ya está funcionando
Lo más difícil eran los servidores que ya tenían archivos de configuración. Puede que el administrador hubiera cambiado a mano la vida de los mobs dentro del juego. Por eso hice que todos los módulos migraran con la misma regla una sola vez.
# Lo que hace cada módulo una vez al arrancar el servidor (en realidad es Java; aquí solo el flujo en Python)
if config.get("number-scale", 1) != 10:
backup(config_file) # 1) copia de seguridad antes de cambiar
for key, old_default in OLD_DEFAULTS.items():
if config[key] == old_default: # 2) solo lo que sigue "igual" al valor por defecto antiguo
config[key] = old_default * 10 # se multiplica por 10
else:
log(f"{key} lo cambió el administrador, se deja igual")
config["number-scale"] = 10 # 3) marca → la próxima vez no se repite
save(config)Vamos a desmenuzarlo paso a paso 💡
- Registrar number-scale: así, aunque arranques el servidor dos veces, no termina multiplicado por 100.
- Cambiar solo los valores por defecto antiguos: los valores que tocó el administrador se consideran intencionados y se dejan como están. A cambio, la lista queda en el log para que una persona la revise.
- Primero la copia de seguridad: si la migración sale mal, se puede revertir.
Al reiniciar el servidor una vez, los módulos core, combate, objetos, niveles y mobs dejaron todos "migración ×10" en el log, con 0 errores.
También decidimos algunos ajustes de paso.
| Elemento | Valor |
|---|---|
| Multiplicador de crítico | ×1.5 → ×2.0 |
| Vida de mobs normales | Multiplicador de rango 1.0 → 0.9 (para que caigan con 4 golpes normales) |
| Daño cuando el mob es de mayor nivel que tú | Diferencia ≤2: 100% · 3: 80% · 4: 50% · 5 o más: fijo en 1 |
| Límite de EXP por el golpe final | Hasta la EXP de un mob de tu nivel +4 (para evitar subir rematando mobs de nivel alto) |
📌 Paso 2 - Curva de experiencia: del nivel 1 al 30 en 12 horas 📈
El objetivo era unas 12 horas del nivel 1 al 30, y además un inicio rápido. Si el principio es lento, la gente se va.
Al principio la hice como una curva suave, pero luego le pedí de nuevo a la IA del equipo de planificación "una curva que se sienta distinta en cada tramo". El resultado tiene esta forma.
| Tramo | Forma | Intención |
|---|---|---|
| Nv 1~9 | Valores puestos a mano, muy rápido | Varias subidas de nivel en los primeros 30 minutos |
| Nv 10~14 | Tramo plano | Adaptarse a la nueva zona de caza |
| Nv 15~29 | Sube a un ritmo de ×1.2 por nivel | Sentir el progreso |
| Nv 30 en adelante | Tramo plano cada 5 niveles + multiplicador que baja poco a poco (×1.08 → ×1.075 → …) | Que no se empine sin fin |
- Resultado: 12.0 horas acumuladas del 1 al 30, EXP total 281,150
- Es un solo archivo,
exp_table.csv, así que lo abres en Excel, lo editas y con/리로드 level(recargar) se aplica al instante
A esto le añadí una penalización de EXP por diferencia de nivel. Si derrotas a un mob con un nivel mucho más bajo que el tuyo, recibes menos experiencia.
| Cuántos niveles por debajo de ti está el mob | 0~3 | 4 | 5 | 6 | 7 | 8 | 9 | 10+ |
|---|---|---|---|---|---|---|---|---|
| EXP que recibes | 100% | 90% | 60% | 45% | 30% | 20% | 15% | 10% |
📌 Paso 3 - "El arma básica es demasiado fuerte" → simulación ⚖️
Entre quienes estaban probando el servidor surgió la opinión de que "el arma básica de cada clase es demasiado fuerte". La dirección que querían era esta.
Que el daño del arma pese mucho al principio y que, más adelante, el ataque, la penetración y las estadísticas de clase importen mucho más.
El líder hizo un borrador de la fórmula y puso a la IA del equipo de planificación a calcular 6 clases × 7 etapas de nivel × 2 repartos de estadísticas × 3 fórmulas = 252 combinaciones.
Fórmula propuesta (borrador)
# Ataque: la parte que se acumula con el nivel, el equipo y las estadísticas
ATK = (base_attack + growth_attack(level) + gear_flat_attack) \
* (1 + main_stat * 0.005 + sub_stat * 0.002)
# Daño base: el daño del arma no se ve afectado por las estadísticas
B = weapon_damage + ATK
# Defensa: al subir de nivel, la misma defensa rinde un poco menos
effective_def = max(0, defense - flat_pen) * (1 - pct_pen) # penetración: primero la fija, luego la de %
K = 100 + attacker_level * 5
damage = B * K / (K + effective_def)Resultados de la simulación
| Elemento | Fórmula actual | Solo cambiar la fórmula | Fórmula + igualar velocidad de ataque (recomendado) |
|---|---|---|---|
| Peso del arma en el daño Nv1 → Nv30 | 100% → 14~21% | 45 |
58% → 7% |
| Diferencia de DPS entre clases | −41% ~ +43% | −43% ~ +44% | −7% ~ +11% |
| Golpes normales para derrotar a un mob normal | 5 golpes en Nv15 | 5 golpes en Nv15 | 4 golpes en todos los niveles |
Lo curioso es la columna del medio. Si solo cambias la fórmula, la diferencia de DPS sigue igual. Al investigar la causa, resultó que no era la fórmula sino la velocidad de ataque de las armas.
- Hacha: 0.8 golpes por segundo
- Espada y daga: 1.6 golpes por segundo
- Proyectil mágico: 1.67 golpes por segundo
Por mucho que iguales el daño por golpe, el hacha solo pega la mitad de veces, así que el DPS se separa sí o sí. Por eso la recomendación fue igualar primero la velocidad de ataque (hacha y arco 1.0 golpes/s; espada, daga y proyectil mágico 1.25 golpes/s).
Lo que la gente sentía como "el arma básica es fuerte" en realidad pasaba porque al principio el 100% del daño viene del arma, y las estadísticas solo suben un 1% por cada 10 puntos, así que, aparte del arma, no se notaba nada más. La sensación era correcta, pero la causa estaba en otra parte.
⚠️ Esta fórmula v2 todavía está en fase de propuesta. La primera prueba integrada se hará con la fórmula actual y se aplicará cuando se tome una decisión.
📌 Lo que aprendí usando un equipo de planificación de IA 💬
- Es muy buena traduciendo "sensaciones" a números. Convierte "contundente" en una tabla como "Nv1 un golpe de 101 → Nv30 1,937, 4 golpes normales".
- Hay que obligarla a escribir sus supuestos. Decide por su cuenta cosas como la velocidad de ataque, el nivel de mejora del equipo o la velocidad de caza y calcula con eso, así que si el informe no tiene una tabla de "supuestos", cuesta confiar en los resultados.
- Decidir es cosa de las personas. La IA prepara varias propuestas y hasta resume qué módulos se ven afectados, pero qué elegir lo tiene que decidir quien hace el juego.
📌 Para terminar
- Números ×10 solo en valores planos, la migración una sola vez y los valores que cambió el administrador se conservan
- La experiencia es una sola tabla que se edita en Excel, 12 horas del nivel 1 al 30
- La causa de las quejas de balance no era la fórmula sino la velocidad de ataque. Sin la simulación, habría seguido retocando la fórmula una y otra vez
El próximo episodio va de ilustraciones. Te contaré el flujo de trabajo en el que ChatGPT se encarga de la GUI, los íconos y las ilustraciones de armas y Claude lo revisa, junto con los fallos que atrapó la revisión (arcos con los nombres intercambiados, un fondo invisible y un arco que se veía con interferencias). ¡No te lo pierdas! 🙌
Yo marqué la dirección de este artículo y lo redacté junto con Claude. Este servidor es un proyecto personal, no es contenido oficial de Minecraft y no tiene relación con Mojang ni Microsoft.
Serie · Parte 3 de 5
Crear un servidor de Minecraft con un equipo de IA
- #1¡1 líder de equipo IA + 15 miembros creando un plugin MMORPG! 🤖
- #2¡13 módulos en un solo plugin! La estructura del core y el incidente del 'daño 1000029' 🧩
- #3¡Números ×10, curva de experiencia de 12 horas y simulación de 6 clases! 📊Estás aquí
- #4¡Un flujo de paquetes de recursos donde ChatGPT dibuja y Claude revisa! 🎨
- #5¡Gestionar el equipo de desarrollo con un bot de Discord! Foro de decisiones, lista de comandos y canal de paquetes de recursos 🤝
