You are viewing a potentially older version of this package. View all versions.
Pedro159_team-CrewRow-0.1.5 icon

CrewRow

Los tripulantes de un barco reman junto al timonel para ganarle al viento en contra.

Date uploaded a month ago
Version 0.1.5
Download link Pedro159_team-CrewRow-0.1.5.zip
Downloads 172
Dependency string Pedro159_team-CrewRow-0.1.5

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2350

README

CrewRow

Mod de cliente para Valheim 1.0. Los que van arriba del barco pueden remar junto al timonel y sumarle velocidad.

Existe por una razón concreta: con el viento en contra la vela no sirve para nada —el juego le da literalmente fuerza cero— y la única opción es la velocidad 1, que empuja siempre igual sin importar si van dos personas o diez. Con este mod, los que están arriba dejan de ser carga muerta.

Instalación

Lo instala cada jugador que quiera remar. El servidor no lleva nada.

  1. Tener BepInExPack_Valheim (5.4.2350 o superior).
  2. Copiar CrewRow.dll a BepInEx\plugins\.

Se puede jugar con gente que no lo tenga: a ellos simplemente no les va a funcionar la tecla de remar, y no se rompe nada. Pero para que un barco ande más rápido hace falta que lo tengan el remero y el que esté simulando el barco — en la práctica, que lo tengan todos.

Uso

Subite a un barco, dejá que otro tome el timón, poné el barco en velocidad 1 y apretá B.

  • Vas a ver "Estás remando" arriba a la izquierda.
  • El timonel ve "Remando: 3" cada vez que ese número cambia.
  • Apretá B de nuevo para parar.

Mientras remás no te podés mover. Remar ocupa las dos manos: apenas caminás por la cubierta soltás el remo, y tampoco podés empezar a remar en movimiento. Si apretás B caminando, el mod te dice por qué no puede.

Además se corta solo si te bajás del barco, si tomás el timón o si el barco deja de remar. No se dispara mientras escribís en el chat, la consola o un cartel.

Remar cuesta stamina — 1 por segundo por defecto — y mientras remás no regenerás. Con 75 de stamina eso es poco más de un minuto seguido, bastante más si comiste bien. Cuando se te acaba, la remada se pausa sola y vuelve sola al recuperar un cuarto de la barra: no hay que estar apretando la tecla de nuevo en medio de una travesía. Se cambia en CostoStaminaPorSegundo, y en 0 remar es gratis.

El timonel no cuenta como remero: él ya es la fuerza de remo del juego base, contarlo sería contarlo dos veces.

Ver a qué velocidad vas

Llevando el timón, apretá B y te dice la velocidad del barco:

Velocidad: 3.4 m/s (6.6 nudos)

Es la misma tecla: para el timonel no tiene otro uso, porque no puede remar. Sirve para ver de verdad cuánto está sumando la tripulación — apretá antes y después de que se pongan a remar.

En reversa el número sale negativo. Se apaga con MostrarVelocidad.

Cuánto acelera de verdad

Con los valores por defecto, cada remero suma un 50% del empuje de remo del barco, hasta un tope de 4 veces el empuje normal con 6 remeros.

Pero el agua frena de forma cuadrática, así que la velocidad crece con la raíz de la fuerza:

Remeros Empuje Velocidad
0 x1 x1
1 x1,5 ~x1,22
3 x2,5 ~x1,58
6 o más x4 ~x2

O sea: con la tripulación completa remando vas al doble de rápido, no al cuádruple. Es una mejora grande igual, sobre todo en un viaje largo contra el viento.

Configuración

El archivo es BepInEx\config\com.valheimcrew.crewrow.cfg. Aparece recién después de entrar al juego una vez con el mod instalado.

Hay dos formas de tocarlo:

  • A mano, con un editor de texto y el juego cerrado. BepInEx no vigila el archivo, así que hay que reiniciar el juego para que tome los cambios.
  • In-game con F1, que aplica al instante. Para eso hace falta instalar aparte el mod Official BepInEx ConfigurationManager — no viene incluido en BepInEx.
Opción Por defecto Para qué
Atajo B Tecla para ponerse a remar
Modo Alternar Alternar (una pulsación prende, otra apaga) o Mantener (solo mientras tenés la tecla)
AplicarEn SoloRemo Cuándo suma la tripulación. Ver abajo
AplicarEnReversa true Si también ayuda en marcha atrás
CancelarAlMoverse true Soltás el remo apenas caminás. Apagalo si preferís seguir remando mientras te acomodás
CostoStaminaPorSegundo 1 Stamina por segundo que gasta remar. En 0 es gratis
BonoPorRemero 0.5 Cuánto suma cada remero, como fracción del empuje del barco
BonoMaximo 3.0 Tope del bono sumado de toda la tripulación
MaxRemeros 6 Cuántos remeros se cuentan como máximo
MostrarAvisos true Los avisos de "Estás remando" y "Remando: N"
MostrarVelocidad true Llevando el timón, la tecla de remar muestra la velocidad del barco
LogDeRemada false Anota en el log quién rema y cuántos cuenta el barco
LatidoSegundos 0.5 Cada cuánto el remero le recuerda al barco que sigue remando
CaducidadSegundos 2 Cuánto se le cree a un remero sin volver a escucharlo
MaxMensajesPorSegundo 6 Tope de avisos por jugador, para que nadie inunde la red

AplicarEn

  • SoloRemo (por defecto): la tripulación suma únicamente en las velocidades de remo, que es exactamente lo que sirve con viento en contra. La vela queda igual que en el juego base.
  • RemoYVelaEnContra: además empuja con la vela izada, en proporción a lo malo que sea el ángulo del viento. Con viento a favor no cambia nada; con viento de proa ayuda todo lo que puede.
  • Siempre: suma en todos los modos, también con viento a favor. Los barcos quedan bastante más rápidos en general.

Una aclaración sobre la configuración en multijugador

El empuje lo calcula el cliente que está simulando el barco, que no siempre es el timonel. Así que los valores que mandan son los de esa persona. Si cada uno tiene números distintos, el resultado va a cambiar según quién tenga la propiedad del barco en ese momento.

Lo más prolijo es que todos usen la misma configuración.

Multijugador

  • No se instala en el servidor. Los avisos entre jugadores viajan como RPC dirigidos, que el servidor reenvía sin necesidad de entenderlos.
  • No mueve ningún objeto. No toca inventarios, ni cofres, ni el mundo guardado. Lo peor que puede pasar es que un barco ande a la velocidad equivocada, no que se pierda algo.
  • Nadie puede sumar remeros falsos. El cliente que simula el barco verifica, con sus propios datos, que el que dice estar remando esté físicamente a bordo y que sea quien dice ser.
  • El tráfico que agrega es despreciable: un mensaje chico cada medio segundo por remero, solo mientras se está remando. El juego ya manda el timón cinco veces por segundo.

Limitaciones conocidas

  • No hay animación de remo. Los remeros siguen parados como siempre; lo que cambia es la velocidad del barco.
  • Si el que está simulando el barco no tiene el mod, va a ver líneas Failed to find rpc method en su log cada medio segundo mientras alguien intente remar. No rompe nada, pero es molesto: es la razón práctica por la que conviene que lo instalen todos los que navegan juntos.
  • Cuando cambia el dueño del barco (por ejemplo, si el timonel se desconecta), puede haber un bache de hasta un segundo hasta que el cliente nuevo se entera de quién está remando.
  • No conviene usarlo junto a otros mods que toquen la velocidad de los barcos: las fuerzas se multiplican entre sí. El mod avisa en el log si detecta alguno.

Log

Con LogDeRemada = true, en BepInEx\LogOutput.log:

[Info   :     CrewRow] REMANDO -> Karve (1243, -678)
[Info   :     CrewRow] TRIPULACION Karve (1243, -678) | remeros: 3 | empuje x2.50
[Info   :     CrewRow] DESCARTADO (no esta a bordo) | de 76561198... | jugador 12345

La línea DESCARTADO es la que importa cuando alguien jura que está remando y el barco no acelera: dice exactamente cuál de las validaciones lo frenó.

CHANGELOG

Changelog

0.1.5

  • Remar ahora cuesta stamina de entrada, 1 por segundo. Antes venía en 0 y había que activarlo a mano, así que parecía que no consumía nada.
  • Quedarse sin stamina ya no cancela la remada: la pausa y la reanuda sola al recuperar un cuarto de la barra. En una travesía larga, cancelarla obligaba a estar apretando la tecla cada tanto. Avisa al pausar y al volver.

El cobro pasó de tandas de 2 segundos a medio segundo, y eso cambia el significado del número. El juego reinicia el retardo de regeneración en cada cobro: cobrando cada medio segundo la regeneración queda apagada mientras remás y el gasto neto es exactamente el que dice la opción. Con las tandas de 2 segundos la regeneración se colaba entre cobro y cobro, y como regenera 5 por segundo, cualquier costo por debajo de 2,5 no gastaba nada en la práctica — el número configurado no significaba lo que aparentaba.

Con el default de 1 y 75 de stamina se rema poco más de un minuto seguido, bastante más con comida. Para que pese más, subí CostoStaminaPorSegundo; en 0 vuelve a ser gratis.

0.1.4

  • El timonel ve la velocidad del barco. Llevando el timón, la misma tecla de remar muestra Velocidad: 3.4 m/s (6.6 nudos). Es la tecla que para el timonel no tenía otro uso, porque no puede remar. Sirve para medir de verdad cuánto aporta la tripulación: apretar antes y después de que se pongan a remar. En reversa sale negativo. Se apaga con MostrarVelocidad.

La velocidad se mide siguiendo la posición del barco y no leyendo su rigidbody, que es lo que parecería obvio. El motivo: el juego solo replica la velocidad del cuerpo físico a los clientes que no son dueños si el prefab lo tiene habilitado, y si no la deja en cero. Como el timonel no es necesariamente el dueño del barco, leerla de ahí habría mostrado 0,0 m/s con el barco navegando. La lectura ignora el movimiento vertical, así que el cabeceo con olas no la infla.

0.1.3

  • Remar y caminar ya no son compatibles. Antes podías activar la remada y seguir paseándote por la cubierta con WASD sin que se cortara. Ahora soltás el remo apenas te movés, y tampoco podés empezar a remar en movimiento. Se apaga con CancelarAlMoverse si preferís lo de antes.
  • Si apretás la tecla cuando no podés remar, el mod te dice por qué ("estás en movimiento", "estás en el timón", "el barco no está remando") en vez de no hacer nada.

El corte mira el input del teclado, no la posición del personaje, así que el cabeceo del barco con olas no lo dispara: solo se corta si realmente tocás una tecla de movimiento.

0.1.2

  • La tecla por defecto para remar pasa de G a B: G ya estaba ocupada por un acceso rápido. Se sigue cambiando en Atajo.

0.1.1

Correcciones de la auditoría de seguridad y de la revisión de código, todas antes del primer reparto. Nada de esto cambia cómo se juega.

  • CRÍTICO: un cliente modificado podía congelar el cliente de cualquiera que estuviera simulando un barco. El freno anti-inundación se llevaba la cuenta por remitente, y el remitente de un RPC lo escribe el que envía, así que mandando uno distinto cada vez el diccionario crecía sin límite y su propia limpieza se volvía el trabajo del ataque. Ahora la identidad se valida antes de tocar cualquier estructura, con lo que las claves posibles quedan acotadas a los jugadores que están realmente a bordo. Más un tope duro de remitentes y un freno propio para el log de rechazos.
  • Un aviso que fallaba la validación ya no puede borrar a un remero legítimo. Antes, un mensaje con remitente falsificado cancelaba la remada de la persona que decía ser. La limpieza de los que se bajan ya la hacía el camino de solo lectura.
  • El aviso "Remando: N" al timonel se manda solo si su personaje tiene dueño. Si no, ese aviso se convertía en un broadcast a todo el servidor.
  • Activado = false ahora también apaga la recepción de avisos, no solo el efecto.
  • La fuerza del barco se restaura solo si sigue siendo la que escribimos nosotros, para no pisar a otro mod que esté usando la misma técnica sobre el mismo campo.
  • El empuje con la vela ya no puede aplicarse a un barco que simula otro cliente, en el caso de que otro mod cancele nuestro enganche a mitad del ciclo de física.
  • El costo de stamina dejó de ser esquivable: alternando la tecla cada menos de 2 segundos se remaba gratis.
  • Si el empuje falla, se apaga y lo dice una vez, en vez de escribir un error por barco y por paso de física.
  • El aviso al dejar de remar ahora dice el motivo correcto: antes decía "el barco dejó de remar" incluso cuando lo que pasaba era que acababas de tomar el timón.
  • La caducidad de remeros se ajusta sola si quedó configurada por debajo del latido, que hacía titilar el empuje.

0.1.0

Primera versión. Sin probar todavía en el servidor: el protocolo de prueba está en docs/pruebas.md, y la parte que importa (secciones C en adelante) necesita dos personas.

  • Los jugadores parados en un barco pueden remar junto al timonel apretando G y sumarle velocidad. El timonel no se cuenta a sí mismo, porque ya es la fuerza de remo del juego base.
  • Por defecto solo actúa en las velocidades de remo, que es lo único que sirve con viento en contra. Con AplicarEn se puede extender a la vela izada contra el viento, o a todo.
  • La activación es alternando con una tecla; se puede cambiar a mantener la tecla apretada.
  • Costo de stamina configurable, apagado por defecto. Cuando se activa, el cobro se hace en tandas espaciadas a propósito: el juego reinicia el retardo de regeneración en cada cobro, así que cobrar seguido no cuesta un poco de stamina, apaga la regeneración entera.
  • Avisos en pantalla: "Estás remando" al remero y "Remando: N" al timonel cuando ese número cambia.
  • Log opcional de quién rema, cuántos cuenta el barco y qué avisos se descartaron.

Sobre cómo está hecho, que explica buena parte del código:

  • La física del barco corre en un solo cliente. Ship.CustomFixedUpdate corta con un early return para todo el que no sea dueño del ZDO, así que un remero no puede empujar el barco desde su propia máquina. Le avisa al dueño por RPC, con el mismo patrón que usa el juego base cuando alguien pide el timón.
  • No se reimplementa nada de física. Toda la fuerza de remo del juego sale de una sola línea que multiplica m_backwardForce; el mod escala ese campo antes de que corra el método y lo devuelve después, con un finalizador y una restauración defensiva por si una excepción se lleva puesto el postfix. Así hereda gratis el nivel del agua, la atenuación por timón, la dirección y el punto de aplicación.
  • El cliente que simula el barco valida todo. Un aviso de remada tiene que venir de alguien que esté a bordo según los triggers de física del propio dueño, y el remitente del RPC tiene que ser el dueño del ZDO del jugador que dice ser.
  • No se instala en el servidor, no mueve objetos y no agrega campos propios al mundo guardado.