Ir al contenido

Entregas y atracos

  • mailbox: el item o dinero queda en el buzón.
  • meetup: recogida en punto definido.
  • npc: entrega por NPC con coste extra.
  • person: encuentro presencial entre comprador y vendedor.

Config.DeliveryBuyerFee define el extra que paga el comprador según el modo elegido:

  • mailbox: 0
  • meetup: 100
  • npc: 0
  • person: 300

Config.MeetupPoints define los puntos fijos de recogida en el mapa.

Config.Gameplay.NPCDelivery controla:

  • coste extra
  • si es interceptable
  • valor mínimo para poder ser robado
  • coste de seguro
  • payout del seguro
  • velocidad del vehículo
  • timeout de entrega
  • visibilidad del blip
  • modelos de peds y vehículos
  • prop del repartidor
  • intentos de robo por jugador y furgoneta (ExtractionAttempts)
  • suelo de tiempo que valida el servidor (ExtractionMinSeconds)
  • animación del ladrón mientras fuerza el maletero (ExtractionAnim)

Una entrega interceptable se puede robar por el maletero, y para llegar ahí primero hay que dejar al repartidor fuera de juego: encañonarlo con un arma -se rinde solo, a la distancia de IntimidationDistance- o matarlo.

Un repartidor retenido deja de entregar. El comprador no puede recoger su pedido mientras el conductor este encañonado, ni aunque sea el propio comprador quien lo haya hecho: el paquete esta en el maletero y de ahí hay que sacarlo.

Forzar el maletero es el minijuego de Config.SkillCheck (sección 9.4.2). Se corta si el ladrón se aleja más de 3,5 metros, si dispara, si corre o si recibe daño. Fallar el minijuego gasta uno de los intentos; que le disparen o que la furgoneta arranque, no. Gastados todos, ese maletero ya no se abre para el, pero sigue disponible para cualquier otro.

Si el ladrón es el propio comprador, forzar el maletero cuenta como entrega anticipada y el vendedor cobra igual. Si es un tercero, es un robo y el vendedor solo cobra si habia seguro.

Quién puede robarla. Cualquier jugador, siempre que la entrega sea robable (Interceptable = true y el pedido valga al menos MinValueForIntercept). Por defecto los ladrones no tienen blip: tienen que encontrar la furgoneta en el mundo. Si NotifyJob tiene el nombre de un trabajo (por ejemplo 'robber'), los jugadores con ese trabajo reciben un aviso y un blip parpadeante en el punto de salida de la furgoneta cuando empieza una entrega robable.

Qué se lleva cada parte:

Caso Ladrón Comprador Vendedor
Robo de un tercero Se lleva el paquete Pierde el pedido (sin reembolso) y se le dice quién se lo llevó Cobra InsurancePayout (80 %) solo si el comprador contrató seguro
Robo del propio comprador — Recibe el pedido (entrega anticipada) Cobra con normalidad
Furgoneta destruida o fuera de tiempo (DeliveryTimeout) — Reembolso completo al buzón Cobra el seguro si la furgoneta se destruyó y había seguro
Comprador desconectado — El pedido va al punto de recogida más cercano Cobra el seguro si lo había

Policía e integraciones. Config.OnDeliveryRobbed(thiefSrc, deliveryId, value, trigger) en config.lua y Handlers.OnDeliveryRobbed en server/handlers.lua saltan una vez por robo (trigger es 'driver_killed' o 'cargo_stolen'), listos para un aviso de dispatch. En el cliente están sl-marketplace:onDeliveryRobbed y los tres eventos del minijuego en client/handlers.lua.

Seguridad. El servidor valida los modelos de vehículo y conductor, la distancia, el tiempo mínimo del robo (ExtractionMinSeconds), un token de un solo uso por intento y el límite deliveryRobbery. Un cliente modificado no puede robar una furgoneta a distancia ni saltarse el minijuego.

Config.SkillCheck define el anillo que aparece al forzar el maletero: da una vuelta con un tramo pintado en el borde y hay que pulsar la tecla cuando la punta pasa por ese tramo.

  • Phases — las fases, en orden. duracion es la vuelta en milisegundos y arco lo ancho que es el tramo, en grados de 360. Ensanchar el tramo o alargar la vuelta lo hacen más fácil; el tramo es lo más contundente de los dos.
  • Keys — de donde salen las teclas, barajadas en cada partida. control es el id de control de GTA, que el juego no entiende de letras. Se desactivan mientras dura el minijuego para que acertar una fase no abra además una puerta.
  • ZoneMin / ZoneMax — donde puede caer el tramo, en grados. Nunca al principio: a 5 grados no daria tiempo a verlo y seria una moneda al aire.
  • LockMovement — clava los pies del jugador mientras dura. La cámara no se toca. Por defecto activo: el anillo esta clavado en el maletero, así que andando se sale del encuadre.
  • Sounds — los cuatro sonidos: arranque de fase, acierto, fallo y superarlo entero. false los apaga.
  • LatencyMs — el desfase entre el reloj que decide si has acertado (el juego) y el que dibuja el anillo (el navegador). Subirlo si los aciertos se registran antes de tiempo.

El minijuego no sabe de robos: es generico, y de que va cada partida lo dice quien lo lanza. Los tres eventos que emite estan en client/handlers.lua.

Config.InPersonTrade controla:

  • distancia de proximidad para iniciar el trade
  • radio válido del punto
  • timeout
  • si se permite ubicación custom
  • cancelación si alguno se aleja demasiado