BodyBags 2.0

Description
BodyBags remplace le cadavre du joueur par un body bag apres un delai configurable.
L'inventaire du joueur mort est virtualise dans un fichier JSON, puis restaure dans le body bag quand le joueur utilise l'action F.
Les body bags virtualises restent sauvegardes pendant les restarts serveur jusqu'a leur restauration ou leur suppression.

Le mod a ete pense pour eviter les problemes classiques de desync et de drop au sol du contenu des vetements ou sacs au restart.

Fonctionnement
- Le joueur meurt.
- Apres le delai configure, le corps est remplace par un RA_BodyBag.
- L'equipement du joueur est sauvegarde dans un JSON.
- Quand le body bag est ouvert avec l'action F, le contenu est reconstruit dans son etat d'origine.
- Le fichier JSON est supprime automatiquement quand le contenu est restaure.
- Si le body bag disparait naturellement quand son lifetime arrive a 0, le fichier JSON est aussi supprime automatiquement.

Important
- Il n'y a pas besoin d'ajouter le body bag dans un types.xml.
- Le RA_BodyBag est cree par script au moment de la mort.
- La persistance du contenu est geree par les fichiers JSON dans le dossier profiles du serveur.
- Le config.json est cree automatiquement et les nouveaux parametres manquants sont ajoutes sans ecraser les valeurs deja definies par le proprietaire du serveur.
- BodyBags fonctionne seul et n'a besoin d'aucun autre mod comme dependance obligatoire pour fonctionner.
- Toutes les integrations avec d'autres mods sont optionnelles.

Ordre de chargement
- Si vous utilisez BodyBags avec Ninjins PvE/PvP, VanillaPlusPlusMap, Dogtags, DayZ Expansion Vehicles ou MuchCarKey, BodyBags doit etre charge apres ces mods.
- En bref: les mods compatibles d'abord, puis BodyBags.

Dossiers utilises dans le profile du serveur
- $profile:BodyBags/config
- $profile:BodyBags/data
- $profile:BodyBags/data_AI
- $profile:BodyBags/logs

Notes
- data stocke les body bags des joueurs.
- data_AI stocke les body bags des IA Expansion.
- logs n'est cree que si EnableLogs = 1.

Fichier de configuration
Au premier lancement, le mod cree automatiquement:
$profile:BodyBags/config/config.json

Configuration par defaut:
{
    "EnableLogs": 0,
    "BodyBagMaxLifetime": 3600,
    "BodyBagPlayerCleanupTime": 180,
    "BodyBagOwnerOnlyAccess": 1,
    "TakeBodyBags": 0,
    "AutoDeleteFreshSpawnBodyBags": 0,
    "TimeMinSurvivalAfterFreshSpawn": 1800,
    "TimeToDeleteBodyBagAfterFreshSpawn": 900,
    "EnableVanillaPlusPlusMapDeadPosition": 0,
    "EnableAI_Expansion": 0,
    "BodyBagAIMaxLifetime": 1800,
    "BodyBagAICleanupTime": 10,
    "EnableNinjins_PVE_PVP": 0,
    "PVE": {
        "BodyBagOwnerOnlyAccess": 1,
        "BodyBagMaxLifetime": 3600,
        "BodyBagPlayerCleanupTime": 180,
        "TakeBodyBags": 0,
        "AutoDeleteFreshSpawnBodyBags": 0,
        "TimeMinSurvivalAfterFreshSpawn": 1800,
        "TimeToDeleteBodyBagAfterFreshSpawn": 900
    },
    "PVP": {
        "BodyBagOwnerOnlyAccess": 0,
        "BodyBagMaxLifetime": 3600,
        "BodyBagPlayerCleanupTime": 180,
        "TakeBodyBags": 0,
        "AutoDeleteFreshSpawnBodyBags": 0,
        "TimeMinSurvivalAfterFreshSpawn": 1800,
        "TimeToDeleteBodyBagAfterFreshSpawn": 900
    },
    "RAID": {
        "BodyBagOwnerOnlyAccess": 0,
        "BodyBagMaxLifetime": 3600,
        "BodyBagPlayerCleanupTime": 180,
        "TakeBodyBags": 0,
        "AutoDeleteFreshSpawnBodyBags": 0,
        "TimeMinSurvivalAfterFreshSpawn": 1800,
        "TimeToDeleteBodyBagAfterFreshSpawn": 900
    }
}

Description des parametres

EnableLogs
WARNING WARNING WARNING
Ce sont des logs de debogage.
Ne les activez que si vous voulez debug le mod
ou si vous devez envoyer les logs pour un support.
WARNING WARNING WARNING
- Type: 0 ou 1
- Defaut: 0
- 0 = logs desactives
- 1 = logs actives
- Quand active, le mod cree automatiquement $profile:BodyBags/logs et ecrit les logs de debug dedans.

BodyBagMaxLifetime
- Type: entier en secondes
- Defaut: 3600
- Definit la duree de vie maximum du body bag joueur avant sa suppression naturelle.

BodyBagPlayerCleanupTime
- Type: entier en secondes
- Defaut: 180
- Definit le delai entre la mort du joueur et la transformation du corps en body bag.
- Si la valeur est definie sur 0, le mod reutilise la valeur d'origine: 180.

BodyBagOwnerOnlyAccess
- Type: 0 ou 1
- Defaut: 1
- 1 = seul le joueur proprietaire du body bag peut recuperer son contenu
- 0 = tous les joueurs peuvent loot le body bag joueur
- Ce parametre s'applique aux body bags des joueurs, pas a la logique de loot des IA Expansion.

TakeBodyBags
- Type: 0, 1 ou 2
- Defaut: 0
- 0 = comportement normal, le body bag peut etre pris dans les mains et range dans un inventaire si sa taille le permet
- 1 = le body bag peut etre pris dans les mains, mais ne peut pas etre range dans un inventaire/cargo
- 2 = le body bag ne peut ni etre pris dans les mains ni etre range dans un inventaire/cargo

AutoDeleteFreshSpawnBodyBags
- Type: 0 ou 1
- Defaut: 0
- 0 = aucun timer force fresh spawn
- 1 = si le joueur est mort avant le seuil TimeMinSurvivalAfterFreshSpawn, le body bag sera supprime par un timer serveur force
- Ce timer force ne depend pas du comportement normal du lifetime DayZ

TimeMinSurvivalAfterFreshSpawn
- Type: entier en secondes
- Defaut: 1800
- Definit le temps de survie minimum pour qu'un joueur ne soit plus considere comme fresh spawn
- Si le joueur a survecu au moins cette duree, le body bag repasse sur son lifetime classique

TimeToDeleteBodyBagAfterFreshSpawn
- Type: entier en secondes
- Defaut: 900
- Definit le delai de suppression force d'un body bag de fresh spawn
- Si AutoDeleteFreshSpawnBodyBags = 1 et que le joueur est mort avant le seuil de survie configure, ce timer supprime le body bag et son JSON automatiquement

EnableVanillaPlusPlusMapDeadPosition
- Type: 0 ou 1
- Defaut: 0
- 0 = aucune integration V++ map
- 1 = le mod envoie la position de mort du joueur dans le cache map V++ pour afficher un marker de mort
- Cette option est facultative
- BodyBags n'a pas de dependance compile obligatoire avec VanillaPlusPlusMap
- Si V++ n'est pas installe, BodyBags continue de fonctionner normalement

EnableAI_Expansion
- Type: 0 ou 1
- Defaut: 0
- 0 = aucune gestion des IA Expansion par BodyBags
- 1 = active la compatibilite Expansion AI et les body bags IA
- Cette option est facultative
- BodyBags n'a pas de dependance compile obligatoire avec DayZ Expansion AI

BodyBagAIMaxLifetime
- Type: entier en secondes
- Defaut: 1800
- Definit la duree de vie maximum du body bag d'une IA Expansion.

BodyBagAICleanupTime
- Type: entier en secondes
- Defaut: 10
- Definit le delai entre la mort d'une IA Expansion et la transformation du corps en body bag.
- Si la valeur est definie sur 0, le mod reutilise la valeur d'origine: 10.

EnableNinjins_PVE_PVP
- Type: 0 ou 1
- Defaut: 0
- 0 = les parametres joueurs globaux sont utilises
- 1 = pour les joueurs, les parametres du bloc PVE, PVP ou RAID remplacent les parametres joueurs globaux
- Quand cette option est active, les parametres joueurs globaux ne sont plus pris en compte pour les body bags des joueurs
- Le mapping utilise par BodyBags est:
  SafeZone -> PVE
  Raid -> RAID
- Si aucun profil de zone n'est resolu, BodyBags retombe sur le comportement PVP

Profils PVE / PVP / RAID
Quand EnableNinjins_PVE_PVP = 1, chaque bloc PVE, PVP et RAID peut definir:
- BodyBagOwnerOnlyAccess
- BodyBagMaxLifetime
- BodyBagPlayerCleanupTime
- TakeBodyBags
- AutoDeleteFreshSpawnBodyBags
- TimeMinSurvivalAfterFreshSpawn
- TimeToDeleteBodyBagAfterFreshSpawn

Body bag et propriete joueur
- Le body bag joueur enregistre l'identifiant du joueur mort.
- Si BodyBagOwnerOnlyAccess = 1, seul ce joueur peut utiliser l'action F pour restaurer le contenu.
- Si BodyBagOwnerOnlyAccess = 0, le body bag joueur devient lootable par tous.
- Si Ninjins est active, cette logique peut etre redefinie par PVE, PVP ou RAID selon la zone du joueur a sa mort.

Body bags IA Expansion
- L'integration Expansion AI est optionnelle.
- Si EnableAI_Expansion = 1, les IA Expansion peuvent aussi se transformer en body bags.
- Les JSON des IA sont stockes dans $profile:BodyBags/data_AI.
- La lootabilite du body bag IA suit le parametre CanBeLooted deja defini cote Expansion AI.
- Si une IA Expansion est configuree non lootable, son body bag doit aussi etre non lootable.

Suppression des body bags de fresh spawn
- Si AutoDeleteFreshSpawnBodyBags = 0, peu importe le temps de survie du joueur, le body bag utilise son lifetime normal.
- Si AutoDeleteFreshSpawnBodyBags = 1:
  - si le joueur a survecu moins de TimeMinSurvivalAfterFreshSpawn, le body bag prend un timer de suppression force de TimeToDeleteBodyBagAfterFreshSpawn
  - si le joueur a survecu au moins TimeMinSurvivalAfterFreshSpawn, le body bag utilise son lifetime normal
- Le timer fresh spawn est un hard delete script cote serveur
- Il ne depend pas du comportement vanilla du lifetime ni de la presence de joueurs a proximite
- Il continue aussi de fonctionner apres restart serveur ou deco/reco
- Avec Ninjins actif, cette logique suit aussi le profil PVE, PVP ou RAID du joueur.

Logs
- Les logs sont desactives par defaut.
- Si EnableLogs = 1, les logs sont ecrites dans:
  $profile:BodyBags/logs
- Si EnableLogs = 0, le mod ne cree pas le dossier logs.

Donnees JSON
Chaque body bag virtualise cree un fichier JSON dans:
- $profile:BodyBags/data pour les joueurs
- $profile:BodyBags/data_AI pour les IA Expansion

Le JSON contient notamment:
- la date
- l'heure
- le SteamID / Player ID du joueur mort quand il existe
- le pseudo du joueur mort
- le contenu complet virtualise du body bag

Compatibilite VanillaPlusPlusMap
L'integration V++ est optionnelle.
Quand EnableVanillaPlusPlusMapDeadPosition = 1:
- le joueur mort recoit sa position de mort
- le mod ecrit un marker compatible V++ avec l'icone:
  BodyBags\data\skull_64x64.paa

Le but est de rendre BodyBags compatible avec V++ sans imposer V++ comme dependance.
- Si vous utilisez VanillaPlusPlusMap, chargez BodyBags apres VanillaPlusPlusMap.

Compatibilite Dogtags / Expansion Vehicles / MuchCarKey
- BodyBags inclut une compatibilite optionnelle avec Dogtags, les cles vehicules DayZ Expansion et MuchCarKey.
- Pour que ces integrations soient prises en compte correctement, chargez BodyBags apres ces mods.

Exemple de modification des slots du BodyBag
Si vous souhaitez ajouter des slots moddes au body bag, faites-le dans un mod override separe charge apres BodyBags.
Ne modifiez pas directement le config.cpp du mod si vous voulez garder une base propre pour les mises a jour.

Exemple d'override:

class CfgPatches
{
    class MyBodyBagSlotsOverride
    {
        units[] = {};
        weapons[] = {};
        requiredVersion = 0.1;
        requiredAddons[] = {"RearmedServer_Gear_BodyBag"};
    };
};

class CfgVehicles
{
    class RA_BodyBag_Base;
    class RA_BodyBag_Base: RA_BodyBag_Base
    {
        itemSize[] = {3,3};
        attachments[] =
        {
            "Shoulder",
            "Melee",
            "Vest",
            "Body",
            "Hips",
            "Legs",
            "Back",
            "Headgear",
            "Mask",
            "Eyewear",
            "Gloves",
            "Feet",
            "Armband",
            "ModdedSlot",
            "ModdedSlot",
            "ModdedSlot",
            "ModdedSlot",
            "ModdedSlot"
        };
    };
};

Remarques pour l'override
- Remplacez les slots moddes par ceux utilises sur votre serveur.
- Le slot doit exister dans les autres mods charges, sinon il ne servira a rien.
- Chargez votre override apres BodyBags.

Resume
- Pas besoin d'ajouter le body bag dans types.xml
- Le mod cree et gere ses body bags par script
- La configuration se fait dans le profile serveur
- Les donnees des body bags sont sauvegardees en JSON
- Les body bags virtualises sont sauvegardes durant les restarts serveur
- Les body bags joueurs et IA sont separes dans data et data_AI
- La prise du body bag peut etre configuree via TakeBodyBags
- Les body bags de fresh spawn peuvent etre supprimes automatiquement par timer serveur force
- L'integration V++ est optionnelle
- L'integration Expansion AI est optionnelle
- L'integration Ninjins PVE/PVP est optionnelle
- Le mod fonctionne sans aucune dependance obligatoire
- Si vous utilisez Ninjins, V++, Dogtags, Expansion Vehicles ou MuchCarKey, chargez BodyBags apres eux
