> For the complete documentation index, see [llms.txt](https://realisticnode.gitbook.io/rnsetups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://realisticnode.gitbook.io/rnsetups/es/rncombatpvp/guides/combat-log.md).

# Desconexión en combate y NPCs

El NPC con la skin del jugador, los otros castigos y quién nunca es castigado.

Un jugador que sale del servidor mientras está en combate **se desconecta en combate**. `combat-log.punishment` decide qué pasa:

| Castigo              | Qué pasa                                                                                    |
| -------------------- | ------------------------------------------------------------------------------------------- |
| `NPC`                | Una copia del jugador se queda donde salió. Si la matan a tiempo, el jugador lo pierde todo |
| `KILL` (por defecto) | El jugador muere al salir y suelta todo                                                     |
| `NOTHING`            | Solo la multa de dinero, los comandos y el mensaje de abajo                                 |

## En cada desconexión en combate

Sea cual sea el castigo:

* La desconexión se cuenta en las estadísticas del jugador (**Desconexiones en combate**, `%rncombat_logs%`).
* `combat-log.money-penalty` quita dinero (necesita Vault): una cantidad (`500`) o un porcentaje del dinero del jugador (`"10%"`). `0` = no.
* `combat-log.commands` se ejecutan desde la consola. `{player}` es quien salió y `{enemy}` el último enemigo. Las líneas también pueden ser [acciones](/rnsetups/es/rncombatpvp/guides/kills-and-rewards.md#acciones-de-premio) como `[broadcast] ...`.
* Todos los conectados reciben el mensaje `combat-log.broadcast` ("Steve se desconectó en combate.").
* Con un webhook de Discord y `discord.combat-log: true`, se publica en Discord.

```yaml
combat-log:
  punishment: NPC
  money-penalty: "5%"
  commands:
    - "eco take {player} 100"
```

## El NPC

<figure><img src="https://i.imgur.com/si90fLe.png" alt="El NPC de un jugador que se desconectó en combate, con su skin y su armadura"><figcaption><p>El NPC de un jugador que se desconectó en combate, con su skin y su armadura</p></figcaption></figure>

Con `punishment: NPC`, el NPC aparece donde salió el jugador:

* En la **1.21.9 o más nueva** es un maniquí con la **skin del jugador**, su armadura, los ítems de sus manos, y su vida y vida máxima.
* Sobre su cabeza: `&c{player} &7(desconectado)` (`combat-log.npc-name` en los archivos de idioma).
* No se mueve y no se quema con el sol. El chunk se mantiene cargado mientras está ahí.
* Se queda `combat-log.npc.seconds` (20).
* Golpearlo mete al atacante en combate. Quien no podría golpear a su dueño tampoco puede herirlo: si el dueño tiene el PvP desactivado o protección de novato, o el atacante tiene el PvP desactivado o es novato, el golpe se frena.

Después pasa una de tres cosas:

1. **Alguien lo mata.** Suelta **todo lo que llevaba el jugador** y algo de experiencia, como una muerte de verdad. Los ítems con maldición de desaparición desaparecen. Lo que suelta sigue `kills.drops` (`KEEP`, `CLEAR` y `TRANSFER` funcionan igual que en una muerte real) y la protección del botín del asesino. El asesino se lleva la muerte como cualquier otra: estadísticas, rating, premios, asistencias y recompensas. Todos ven quién mató el cuerpo. Cuando el jugador vuelve a entrar, su inventario y su experiencia ya no están y muere al instante, con el mensaje `combat-log.killed-away-by` ("Te desconectaste en combate y Alex mató tu cuerpo. Perdiste tus ítems.").
2. **Sobrevive.** Desaparece y no pasa nada más: el jugador conserva todo.
3. **El jugador vuelve mientras está ahí.** El NPC desaparece y el jugador **toma su lugar**: aparece donde está el NPC, con la vida del NPC si estaba herido, y **sigue en combate** (como mínimo el tiempo de combate normal).

{% hint style="info" %}
Con la regla de juego `keepInventory` activada en ese mundo, o con `kills.drops: KEEP`, un NPC muerto no suelta nada y el jugador conserva sus ítems, pero igual muere al volver a entrar.
{% endhint %}

{% hint style="warning" %}
El NPC necesita una base de datos que funcione para recordar el castigo hasta que el jugador vuelva. Si la base de datos no funciona, el jugador muere en su lugar (como con `KILL`).
{% endhint %}

### Servidores anteriores a la 1.21.9

Los maniquíes no existen antes de Minecraft 1.21.9. `combat-log.npc.fallback` decide qué hacer ahí:

| Alternativa            | Qué pasa                                                                                                                                                                                                                             |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `ZOMBIE` (por defecto) | El NPC es un husk (un zombi que no se quema con el sol) con la cabeza y la armadura del jugador. En los mundos en pacífico, donde no pueden existir monstruos, es un aldeano con la cabeza del jugador. Todo lo demás funciona igual |
| `KILL`                 | El jugador muere al salir, como con `punishment: KILL`                                                                                                                                                                               |
| `NOTHING`              | Ni NPC ni muerte: solo la multa de dinero, los comandos y el mensaje                                                                                                                                                                 |

## KILL

El jugador muere en el momento en que sale y suelta sus ítems según `kills.drops`. La muerte es para el último jugador que lo golpeó, así que da estadísticas, premios y recompensas como una muerte normal.

## Quién no es castigado

* **Cuando el servidor se apaga.** Los jugadores que salen en el minuto después de que alguien escribe `/stop` o `/restart` (el comando solo), o mientras el plugin se está apagando, solo salen del combate. Los NPCs que siguen en el mundo cuando el servidor se apaga se quitan y sus dueños no son castigados.
* **Expulsiones del staff o de otros plugins.** Las expulsiones que no son culpa del jugador no se castigan:
  * En **Paper** (y sus forks) el plugin sabe la causa de cada expulsión. Las expulsiones con `/kick`, los baneos, la whitelist, un reinicio o el paquete de recursos no se castigan. **Entrar otra vez desde otro lugar, los timeouts, el spam y las expulsiones del propio servidor por volar o por acciones ilegales sí se castigan.** Las expulsiones de plugins (anti-cheats, herramientas del staff) y las de causa desconocida siguen la lista de palabras de abajo, así que una expulsión de un anti-cheat que diga "flying", "cheat" o "hack" sí se castiga.
  * En **Spigot** no hay causa, así que solo se castigan las expulsiones cuyo motivo tiene una de las palabras de `combat-log.kick-reasons-that-punish`:

```yaml
combat-log:
  kick-reasons-that-punish: ["another location", "timed out", "spam", "illegal", "flying", "invalid", "cheat", "hack", "disconnect.spam"]
```

* Los jugadores con `rncombat.bypass.combatlog`.
* Los jugadores que ya estaban muertos cuando salieron.

## Castigos pendientes

El castigo de un NPC muerto se guarda en la base de datos, así que se aplica la próxima vez que el jugador entra, incluso después de un reinicio. Con `combat-log.tell-on-join: true` (por defecto) el jugador recibe un aviso de por qué murió.

### Redes con una sola base de datos MySQL

Si varios servidores comparten una base de datos MySQL, dale a cada servidor su propio nombre en `storage.server-id` (por ejemplo `survival` y `factions`). Así el castigo de una desconexión se aplica en el servidor donde pasó: un jugador cuyo NPC murió en `survival` no muere al entrar al lobby, solo cuando vuelve a `survival`. Déjalo en `""` si tienes un solo servidor.
