LIBRAIRIES DE SCRIPT © Pumpkin
Mode d'emploi : décompresser l'archive dans la mission et accéder aux scripts sans oublier d'ajouter le préfixe "lib\..."
CONTENU
- CLEAN_BODIES.SQF : (v1.0) effacement des ennemis morts pour mission très chargée en IA - CHARGE_OBJ.SQF : (v1.4) chargement d'élément (caisses de munition, armes statiques,...) dans un camion - CLIENT_DETECTION.SQF : (v1.0) test de détection machine-client - SERVER_DETECTION.SQF : (v1.0) test de détection serveur - GETGPSCOORDS.SQF : (v2.0) transforme les coordonnées cartésiennes d'ArmA2 (cf. commande "getpos..") en coordonnées GPS - REAMMO_AUTO.SQF : (v1.0) réapprovisionnement automatique de véhicule - REAMMO_VEH.SQF : (v1.0) réapprovisionnement de véhicule - EXTRACT_CARGO.SQF : (v1.0) transforme le tableau issu des commandes "getMagazineCargo" et "getWeaponCargo" en tableau similaire à celui des commandes "Magazines" et "Weapons" - REARM_CARGO.SQF : (v2.1) remplissage universel de caisse d'armes/munitions - INIT_SPEACH_BROADCAST.SQF : (v1.0) initialisation des fonctions ci-dessus - FONCTIONS_SPEACH.SQF : (v1.0) fonctions de messages multimédias en Multi-joueur (chats, titletext, sons,...) - OBJECTS_GENERATION.SQF : (v1.0) génération d'objet alèatoire et sur périmètre (+ répertoire WPNS_ARRAYS\) - TELEPORT_GROUP.SQF : (v1.0) téléportation de groupe, dans et hors véhicule - FONCTIONS_MATH.SQF : (v1.0) fonction(s) mathématique(s) - GETBUILDINGPOS.SQF : (v1.0) retourne un tableau des positions d'un batiment passé en paramètre - GETRNDTRGPOS.SQF : (v1.0) Renvoi une coordonnée aléatoire à l'intérieur d'un déclencheur (rectangle ou ellipse) - REPAIR_VEH.SQF : (v1.3) Systeme de réparation de véhicule "simpliste"
EFFACEMENT DES ENNEMIS MORTS POUR MISSION TRÈS CHARGÉE EN IA
Clean_Bodies.sqf
- DESCRIPTION :
Détruit les corps des IA ennemis selon différents paramètres : laps de temps à partir du moment où l'IA meurt, distance minimale des joueurs humains, nombre maximal d'IA morts
- SYNOPSIS :
nul = [(camp ennemi) (si positif : distance minimale entre morts-IA et joueurs / si négatif : nombre maximal de morts-IA à garder) (,[délai avant activation de l'effacement, unité de temps = "h" pour heure, "m" pour minute, "s" pour seconde]) ] execVM "Clean_bodies.sqf"La position des paramètres n'a pas d'importance
- EXEMPLE :
nul = [] execVM "lib\Clean_bodies.sqf"destruction des morts-IA après 10mn (temps par défaut) ** SANS PARAMÈTRE DE CAMP ~ DÉCONSEILLÉ ! **
nul = [east] execVM "lib\Clean_bodies.sqf"; =>destruction des morts-IA du camp EST, après 10mn (temps par défaut)
nul = [east, -20] execVM "lib\Clean_bodies.sqf"; =>destruction des morts-IA du camp EST si le nombre de morts-IA total dépasse 20, ce après 10mn
nul = [east, 100] execVM "lib\Clean_bodies.sqf"; =>destruction des morts-IA du camp EST s'il n'y a plus de joueurs dans un rayon de 100m, ce après 10mn
nul = [east, -20, [30,"m"]] execVM "lib\Clean_bodies.sqf"; =>destruction des morts-IA du camp EST si le nb de morts-IA total > 20, toutes les 30mn
nul = [east,-20,100] execVM "lib\Clean_bodies.sqf"; =>SYNTAXE INUTILE : destruction des morts-IA du camp EST si le nb de morts-IA total > 20; ** LA DISTANCE EST IGNORÉ **
CHARGEMENT/DÉCHARGEMENT D'OBJET DANS UN CAMION
Charge_obj.sqf
- DESCRIPTION :
Permet de charger/décharger un ou plusieurs objets (caisses de munition, armes statiques,...) dans un camion, par l'intermédiaire de menus. Le positionnement de l'objet dans le camion se fait automatiquement. Cependant, chaques véhicules ayant ses particularités, on peut également positionner précisemment l'objet dans le camion et par rapport au camion grâce aux offsets : l'offset X permet un ajustement gauche-droite par rapport au camion, l'offset Y permet l'ajustement avant arrière, l'offset Z permet l'ajustement haut-bas, et enfin on peut orienter l'objet à l'aide de la direction relativement à la direction du camion (autrement dit, un angle de 0 ou de 180 degré aligne l'objet selon l'axe du camion, par exemple).
Une fois inscrite dans le champ "initialisation" de l'objet, un menu est disponible pour permettre de charger l'objet, à condition qu'un camion soit situé à moins de 10m de l'objet. Une fois chargé, un menu apparait sur le camion pour permettre de décharger l'objet. On peut charger et décharger plusieurs objets.
Script compatible MP : un joueur peut déchargé l'objet chargé par un autre joueur. Attention ! script non compatible JIP ! : Un joueur qui arrive en cours de partie n'aura pas accés aux déchargements des objets chargés avant son arrivé.
Nota : si on charge une arme statique dans un camion, elle reste disponible pour le tir.
- SYNOPSIS :
nul = [this (, [offset X, offset Y, offset Z, direction relative]) ] execVM "lib\Charge_obj.sqf"A placer dans le champ "initialisation" de l'objet
- EXEMPLE :
nul = [this] execVM "lib\Charge_obj.sqf"initialise l'objet et le menu de chargement
nul = [this,[0.2,-1,0,75]] execVM "lib\Charge_obj.sqf"initialise l'objet et le menu de chargement et, lorsque l'objet sera chargé, il sera légèrement décalé de 0.2 sur la droite du camion, de -1 vers l'arrière du camion et ré-orienté à 75 degré par rapport à l'axe du camion
DÉTECTION SERVEUR/CLIENT
Client_detection.sqf
- DESCRIPTION :
Renvoi "True" si le script est lancé sur une machine cliente et "False" dans le cas contraire. Il faut souvent pourvoir bloquer ou autoriser des scripts selon qu'ils soient destinés à tourner sur le serveur uniquement, ou seulement sur les machines-clientes (= les machines des joueurs). Il y a trois cas dans lequel on peut se trouver en tant que machine-cliente : - en éditeur : on est à la fois client et serveur - dans une partie créer par le jeu lui-même : la encore, on est à la fois client et serveur - dans une partie sur serveur dédié : on est uniquement client Cette fonction tient compte de ces trois cas. On peut donc utiliser ce test en tête de script, il renverra la bonne valeur selon la situation.
- ACCÉS À LA FONCTION CLIENT_DETECTION.SQF :
_testclient = call compile preprocessFile "lib\Client_detection.sqf";"_testclient" : nom de la variable en retour arbitraire; à placer en entête de script.
- EXEMPLE :
_testclient = call compile preprocessFile "lib\Client_detection.sqf";
if (not _testclient) exitwith {};//les lignes de codes suivantes sont destinées à une machine-cliente
//...
- DESCRIPTION :
Renvoi "True" si le script est lancé sur une machine serveur et "False" dans le cas contraire. Inverse/complément de la fonction ci-dessus, la fonction est destiné à bloquer les scripts qui ne doivent tourner que sur serveur. Cette fonction tient également compte de ces trois cas énoncés au-dessus et renverra la bonne valeur selon la situation.
- ACCÉS À LA FONCTION SERVER_DETECTION.SQF :
_testserver = call compile preprocessFile "lib\Server_detection.sqf";"_testserver" : nom de la variable en retour arbitraire; à placer en entête de script.
- EXEMPLE :
_testserver = call compile preprocessFile "lib\Server_detection.sqf";
if (not _testserver) exitwith {};//les lignes de codes suivantes sont destinées au serveur uniquement
//...
CONVERSION COORDONNÉES CARTÉSIENNES / GPS ARMA 2
GetGPSCoords.sqf
- DESCRIPTION :
Converti les coordonnées cartésiennes des cartes de base de ArmA2 et Opération Arrowhead en coordonnées GPS
- ACCÉS À LA FONCTION POSPOLAIRE :
_func_coords = compile preprocessFile "lib\GetGPSCoords.sqf";"_func_coords" : nom de fonction arbitraire; à placer en entête de script.
- SYNOPSIS :
coords_GPS_en_retour = _pos call _func_coords;
- EXEMPLE :
_func_coords = compile preprocessFile "lib\GetGPSCoords.sqf";
_gpsc = _pos call _func_coords;
player commandchat format ["coordonnées GPS: %1",_gpsc];
FONCTIONS DE REAPPROVISIONEMENT EN MUNITION POUR VÉHICULE
Reammo_auto.sqf
- DESCRIPTION :
Scrute un véhicule et attend qu'il soit en panne de munition avant de le recahrger totalement; on peut spécifier un type de munition à scruter, auquel cas, lorsque le véhicule tombera en panne de cette munition précise, l'approvisionement complet s'effectuera. Cette fonction appele la fonction Reammo_veh.sqf
- SYNOPSIS :
nul = [this (ou nom_du_vehicule)] execVM "lib\Reammo_Veh.sqf"
- EXEMPLE :
nul = [mon_char] execVM "lib\Reammo_Veh.sqf";
- DESCRIPTION :
Recharge un véhicule de toutes ses munitions (par ex., pour un hélico, missiles + canon + roquettes); Nota : un bug de ArmA empêche le rechargement total de certain titeur (chef de char notamment)
- SYNOPSIS :
nul = [this (ou nom_du_vehicule)] execVM "lib\Reammo_Veh.sqf"
- EXEMPLE :
nul = [mon_char] execVM "lib\Reammo_Veh.sqf";
FONCTIONS DE TRANSFORMATION DE TABLE ARMES & MUNITIONS
Extract_Cargo.sqf
- DESCRIPTION :
Créer une table "simple" (type des tables issues des commandes "Magazines" ou "Weapons") contenant les armes ou les munitions à partir de la double table que génère les commandes "getWeaponCargo" ou "getMagazineCargo"
- SYNOPSIS :
_table2 = [table] execVM "lib\Extract_Cargo.sqf"
- EXEMPLE :
_extractCargo = compile preprocessFile "lib\Extract_Cargo.sqf";
_allmagsincaisse = (getMagazineCargo _caisse) call _extractCargo;
FONCTIONS DE REMPLISSAGE UNIVERSEL DE CAISSE D'ARMES / MUNITIONS
Rearm_Cargo.sqf
- DESCRIPTION :
Remplissage de container universel; rempli avec toutes les armes disponibles dans le jeu, quelque soit les addons installés. Le script détecte les munitions utilisé par chaque arme et les ajoute automatiquement au container. Pour permettre une plus grande souplesse d'utilisation, le script permet l'uitilisation de filtre, afin de pouvoir remplir le container avec un contenu plus "précis" :
- soit en indiquant le numéro du slot correspondant au type d'arme (voir ci-dessous) : un numéro positif remplira le container uniquement avec les armes de ce type. Un numéro négatif retirera les armes de ce type et laissera toutes les autres.
correspondance numéro - type d'arme:
- 1 : fusils
- 2 : armes de poing
- 4 : lances-roquette
- 5 (= 4+1) : mitrailleuses lourdes
- 4096 : jumelles, JVN,...
- 65536 : "hard mounted", armes fixées sur véhicules
- 131072 : items (photos, preuves,... + gps, carte,...)
- 200000 : (ARBITRAIRE!) utilisé pour les armes de jet (grenades,...) et bombes
- 400000 : (ARBITRAIRE!) utilisé pour les sac à dos
- soit en indiquant l'indicatif de la table prédéfinie :
note : les tables prédéfinies se trouvent dans le répertoire wpns_arrays\. Oublier de les copier fera planter Arma (à cause des "#include "..." en tête du script)
- "a2e" pour se limiter aux armes basiques de ArmA2 et utilisées par le camp EST
- "a2w" pour se limiter aux armes basiques de ArmA2 et utilisées par le camp OUEST
- "oae" pour se limiter aux armes d'Opération Arrowhead et utilisées par le camp EST
- "oaw" pour se limiter aux armes d'Opération Arrowhead et utilisées par le camp OUEST
- "baf" pour se limiter aux armes de British Armed Force
- "pmc" pour se limiter aux armes de Private Military Company
un signe "-" devant l'indicatif retire les armes de l'ensemble du contenu :
- "-a2e" pour retirer les armes basiques de ArmA2, camp EST
- "-a2w" pour retirer les armes basiques de ArmA2, camp OUEST
- "-oae" pour retirer les armes d'Opération Arrowhead, camp EST
- "-oaw" pour retirer les armes d'Opération Arrowhead, camp OUEST
- "-baf" pour retirer les armes de British Armed Force
- "-pmc" pour retirer les armes de Private Military Company
Le cas échéant, on peut moduler le contenu de la caisse en placant une double barre ("//") devant l'arme ou la munition qu'on désire ne pas voir apparaitre dans la caisse
Le script ajoute également 2 sacs à dos de chaque type existants dans le jeu (filtré grâce au numéro 40000)
Les filtres peuvent se cumuler : on peut utiliser conjointement le filtrage par numéro de slot et l'indicatif de table (voir les exemples)- SYNOPSIS :
nul = [nom_du_container (,filtres optionnels)] execVM "lib\Rearm_Cargo.sqf"
- EXEMPLES :
nul = [this] execVM "lib\Rearm_Cargo.sqf"rempli avec toutes les armes et munitions
nul = [this, 1] execVM "lib\Rearm_Cargo.sqf"ne rempli qu'avec les fusils
nul = [this, 1, 2] execVM "lib\Rearm_Cargo.sqf"ne rempli qu'avec les fusils et les armes de poings
nul = [this, -4] execVM "lib\Rearm_Cargo.sqf"rempli avec toutes les armes, sauf les lances-roquettes
nul = [this, -4, -4096] execVM "lib\Rearm_Cargo.sqf"rempli avec toutes les armes, sauf les lances-roquettes et les jumelles
nul = [this, "a2w", "oaw", 2] execVM "lib\Rearm_Cargo.sqf"ne rempli qu'avec les fusils de ArmA2 et de OA du camp OUEST
nul = [this, "a2e", "oae", -5] execVM "lib\Rearm_Cargo.sqf"ne rempli qu'avec les armes de ArmA2 et de OA du camp EST, sauf les mitrailleuses lourdes
FONCTIONS DE MESSAGE MULTI-JOUEURS
Les commandes de "chat" (globalchat, sidechat, groupchat,...) et autres "messages multimédia" (hint, titletext, say3D,...) des scripts ne fonctionnant pas en multi-joueurs, il faut utiliser un système de "distribution" de message. Init_Speach_Broadcast.sqf permet d'initialiser le système d'échange de messages entre les machines des joueurs et Fonctions_Speach.sqf contient les commandes de "chat" multi-joueurs
Fonctions_Speach.sqf
- DESCRIPTION :
Initialisation des fonctions de message, à placer de préférence dans le fichier init.sqf. Aucun argument.
- LANCEMENT DE LA COMMANDE :
nul = execVM "lib\Init_Speach_Broadcast.sqf";
- DESCRIPTION :
Fonctions de "chat" multi-joueurs. Ligne d'accès aux fonction à placer au début de chaque script devant les utiliser.
- ACCÉS AUX FONCTIONS DE MESSAGE :
call compile preprocessFileLineNumbers "lib\Fonctions_Speach.sqf";
- FONCTIONS :
- PUMPKINGlobalChat : équivalent du "globalchat"
Synopsis :[nom de la variable de l'émetteur du message, message] call PUMPKINGroupChat;Exemple :[civil1,"Salut à tous !"] call PUMPKINGlobalChat
- PUMPKINSideChat : équivalent du "sidechat"
Synopsis :[nom de la variable de l'émetteur du message, message] call PUMPKINGroupChat;Exemple :[[west,""HQ""],"Retour à la base !"] call PUMPKINSideChat
- PUMPKINGroupChat : équivalent du "groupchat"
Synopsis :[nom de la variable de l'émetteur du message, message] call PUMPKINGroupChat;Exemple :["player","retour en formation !"] call PUMPKINGroupChat;
- PUMPKINCommandChat : équivalent du "commandchat"
Synopsis :[nom de la variable de l'émetteur du message, message] call PUMPKINCommandChat;Exemple :["player","Tourner à droite !"] call PUMPKINCommandChat;
- PUMPKINhint : équivalent du "hint", accepte les textes structurés XML
Synopsis :message call PUMPKINhint;Exemple :"Ceci est un avertissement" call PUMPKINhint;
- PUMPKINsay3D : équivalent du "hint", accepte les textes structurés XML
Synopsis :exemple: [nom_du_son, _coordonnees (, duree_du_son_optionnel)] call PUMPKINsay3D;Exemple :["shellwhiz", _impact, 8.5] call PUMPKINsay3D;
- PUMPKINtitletext : équivalent du "titleText", type "PLAIN" par défaut
Synopsis :exemple: [message (,type ("PLAIN","BLACK OUT",...))] call PUMPKINtitletext;Exemple :["Petit titrage", "PLAIN"] call PUMPKINtitletext;
- PUMPKINcuttext : équivalent du "cutText", type "PLAIN" et délai 5s par défaut
Synopsis :exemple: ["message prioritaire !" (, type, delai)] call PUMPKINcuttext;Exemple :"Ceci est un avertissement" call PUMPKINhint;
GENERATION D'OBJET
objects_generation.sqf
- DESCRIPTION :
- Fonction 1 : Génére aléatoirement un nombre d'objet indiquée par "densité" dans la zone délimitée par un déclencheur.
Le script ne créé pas d'objet si :
- si un objet de même nature existe à proximité.
- la pente du terrain est trop forte
- le point de création est dans l'eau
- le point de création est sur une route
- Fonction 2 : Génére un objet sur le périmètre d'un déclencheur.
- SYNOPSIS :
["nom_object", nom_déclencheur, densité , mode d'alignement] execVM "lib\objects_generation.sqf"les modes d'alignement sont :
- 0 = pos. aléatoire dans la zone + direction du déclencheur
- 1 = pos. aléatoire dans la zone + direction aléatoire
- 2 = pos. sur périmètre + direction selon le périmètre (coté pour rectangle, tangente pour ellipse)
- EXEMPLES :
nul = ["Land_fort_rampart", obstacles1, 15, 0, true] execVM "lib\objects_generation.sqf";
nul = ["Hedgehog", obstacles1, 70, 0] execVM "lib\objects_generation.sqf";
nul = ["Fort_RazorWire", obstacles1, 50, 0, true] execVM "lib\objects_generation.sqf";
nul = ["Land_fort_bagfence_long", cloture, 72, 2] execVM "lib\objects_generation.sqf";
TELEPORTATION DU GROUPE
Teleport_group.sqf
- DESCRIPTION :
Téléportation d'un groupe complet avec ou sans vehicule; conserve l'altitude en cas de téléportation "aérienne". La téléportation s'effectue avec un effet "fondu au blanc" pour paraitre moins "brutale"; cet effet peut être désactivé en indiquant un 3ème paramètre "false"
- SYNOPSIS :
[unité, position <, booléen effet actif/non actif>] execVM "lib\teleport_group.sqf";
- EXEMPLE :
nul = [assault_1, getMarkerPos "proxy_plage", false] execVM "lib\teleport_group.sqf";
FONCTION(S) MATHÉMATIQUE(S)
Fonctions_Math.sqfcontient (pour le moment) une fonction de calcul de coordonnées polaires, PosPolaire
- DESCRIPTION :
Calcule une nouvelle position à partir d'un point, d'un angle, d'une distance en X et en Y, et éventuellement d'une direction, en fait toutes informations issus d'un marqueur ou d'un déclencheur
- ACCÉS À LA FONCTION POSPOLAIRE :
call compile preprocessFileLineNumbers "lib\Fonctions_Math.sqf";
- SYNOPSIS :
[centre , angle , rayon X , rayon Y (, direction axe)] call PosPolaire;
SCRIPT/FONCTION RETOURNANT UN TABLEAU DES POSITIONS D'UN BATIMENT
GetBuildingPos.sqf
- DESCRIPTION :
retourne un tableau des positions d'un batiment passé en paramètre. Les positions sont chacunes au format [x,y,z]
- SYNOPSIS :
nul = batiment execVM "GetbuildingPos.sqf";
SCRIPT/FONCTION RETOURNANT UNE POSITION ALEATOIRE DANS UN DECLENCHEUR
GetRndTrgPos.sqf
- DESCRIPTION :
Renvoi une coordonnée aléatoire à l'intérieur d'un déclencheur (rectangle ou ellipse). Peut être utilisé soit directement ou en fonction. Pratique pour placer un objet (véhicule, personnage,..) dans une zone bien délimitée; On peut très bien utiliser le même déclencheur pour lancer le script et délimiter la zone
- SYNOPSIS :
coords = nom_variable_declencheur execVM "GetRndTrgPos.sqf"ou (fonction)_getcoords = compile preprocessFile "lib\GetRndTrgPos.sqf";
_coords = _nom_variable_declencheur call _getcoords;
REPARATION DE VEHICULE "SIMPLISTE"
Repair_Veh.sqf
- DESCRIPTION :
Systeme de réparation de véhicule "simpliste" : la réparation se fait avec pondération du temps en fonction du véhicule, autrement dit : + il est gros, + la réparation est longue. Le joueur se voit proposé une validation de réparation et peut refuser la réparation s'il estime qu'elle sera trop longue car IL SE RETROUVERA BLOQUÉ ET VULNÉRABLE le temps de la réparation (blocage sur une animation de réparation compatible MP). Tout le temps passé à la réparation diminue graduellement le niveau de dégât du véhicule, ce qui fait que, si le joueur est tué durant la réparation, elle pourra reprendre sans avoir à tout recommencer depuis le début. Le temps de réparation est divisé par 2 si un "ingenieur" répare. La réparation peut être accélérée si deux joueurs réparent le même véhicule en même temps. Dernier point : un véhicule endommagé et renversé sera remis sur roue.
Grâce au paramètres, on peut limiter les possibilités de réparation : un nombre entier indique le nombre de réparation maximale que l'on peut faire sur le véhicule, un décimal sous 0 indique que l'on ne pourra pas réparer le véhicule si son niveau de dégât est supérieur au nombre indiqué (par exemple : 0.7 signifie que si le véhicule est endommagé à 70% ou plus, il ne pourra pas être réparer). Enfin, on peut créer un table contenant un ou plusieurs types de véhicule (cf. commande TYPEOF) et dans ce cas, il n'y aura que ces types de véhicules qui seront réparable (si on ne veut pas autorisé la réparation d'avion ou d'hélico)
- SYNOPSIS :
nul = [(si entier >= 1 : nombre_de_réparation_maxi) (si décimal < 1 : pourcentage de dégat pour limite de réparation) (,table du type de véhicule réparable)] execVM "lib\repair_veh.sqf";
- REMARQUE :
Il y a dans le répertoire "lib\docs", un script "Repair_veh_doc.sqf" que l'on peut appeler comme le "briefing.sqf" et au même endroit, qui donne accès à un "mode d'emploi" en jeu