[Scripts] Faite le ménage dans vos missions

Pour les Masochistes Éditeurs de missions
Répondre
Titi
Tout fou
Tout fou
Messages : 32
Enregistré le : dim. 19 déc. 2010, 21:22

[Scripts] Faite le ménage dans vos missions

Message par Titi »

Au menu du jour, c'est pas le tout de mettre des tonnes d'IA dans les missions mais faut aussi penser a faire le ménage pendant. :roll:
Car les cadavres en tout genre çà pollue et çà fait lagger. Pas bien :Evil:

Oé je sais dans la catégorie je sais pas ou est le balai vous êtes nombreux... :mrgreen:
Donc y'a des petits scripts pour cela, facile a inclure et qui fait tout du sol au plafond. Bien :D

Fonctionnent tous en SP comme en MP


----------------------------------------------------------------
Ce script enleve tout ce qui est mort et c'est édité par Celery de BIS et je l'utilise depuis longtemps.

Dans l'init.sqf (ou coté serveur) vous mettez ceci :

Code : Tout sélectionner

if (isServer) then {
       [
		120, //Delai pour enlever les corps morts (-1 veut dire ne pas enlever les corps)
		180, //Delai pour les vehicules leger (-1 veut dire ne pas enlever ces vehicules)
		180, //Delai pour les blindés  (-1 veut dire ne pas enlever ces vehicules)
		300, //Delai pour les aériens (-1 veut dire ne pas enlever ces vehicules)
		[], // Unités qui ne doivent absolument pas etre enleves à mettre dans l'array (sans "")
		[], //Weapons or items qui ne doivent absolument pas etre enlevés à mettre dans l'array (sans "")
		[], //Magazines qui ne doivent absolument pas etre enlevés à mettre dans l'array (sans "")
		[] //Backpacks qui ne doivent absolument pas etre enlevés à mettre dans l'array (sans "")
	] execVM "cly_bodyRemoval.sqf";
};

Code : Tout sélectionner

/*
	CLY Body Removal
	Author: Mika Hannola AKA Celery
	
	Description:
	Body and wreck removal script that removes things with a countdown as they come.
	
	How to use:
	[
		120, //Removal delay for bodies (-1 disables removal for this type)
		180, //Removal delay for soft vehicles (-1 disables removal for this type)
		180, //Removal delay for armored vehicles (-1 disables removal for this type)
		300, //Removal delay for aircraft (-1 disables removal for this type)
		[], //Units that aren't removed
		[], //Weapons or items that prevent units from being removed if they have them
		[], //Magazines that prevent units from being removed if they have them
		[] //Backpacks that prevent units from being removed if they have them
	] execVM "cly_bodyRemoval.sqf";
	
	All arguments are -1 or [] by default.
	
	[60] execVM "cly_bodyRemoval.sqf";
	This makes bodies disappear in 60 seconds, leaving everything else untouched.
*/

if (!isServer) exitWith {};

_manDelay = [_this, 0, -1, [0]] call BIS_fnc_param;
_softDelay = [_this, 1, -1, [0]] call BIS_fnc_param;
_armorDelay = [_this, 2, -1, [0]] call BIS_fnc_param;
_airDelay = [_this, 3, -1, [0]] call BIS_fnc_param;
CLY_BR_exclusiveUnits = [_this, 4, [], [[]]] call BIS_fnc_param;
CLY_BR_exclusiveWeapons = [_this, 5, [], [[]]] call BIS_fnc_param;
CLY_BR_exclusiveMagazines = [_this, 6, [], [[]]] call BIS_fnc_param;
CLY_BR_exclusiveBackpacks = [_this, 7, [], [[]]] call BIS_fnc_param;

//Exclusiveness check
CLY_BR_exclusive =
{
	private ["_unit", "_exclusive", "_items", "_backpack"];
	_unit = _this;
	_exclusive = true;
	//Unit not excluded
	if !(_unit in CLY_BR_exclusiveUnits) then
	{
		//No exclusive weapons
		if ({_x in weapons _unit} count CLY_BR_exclusiveWeapons == 0) then
		{
			//No exclusive items
			_items = (items _unit) + (assignedItems _unit);
			if ({_x in _items} count CLY_BR_exclusiveWeapons == 0) then
			{
				//No exclusive magazines
				if ({_x in magazines _unit} count CLY_BR_exclusiveMagazines == 0) then
				{
					//No exclusive backpack
					if !(backpack _unit in CLY_BR_exclusiveBackpacks) then
					{
						_exclusive = false;
					};
				};
			};
		};
	};
	_exclusive;
};

//Spawnable script
CLY_BR_removeScript =
{
	_unit = _this select 0;
	_wait = _this select 1;
	sleep _wait;
	//Don't remove flag carriers
	waitUntil {sleep 0.1;isNull flag _unit};
	//Exit if unit is already gone or is excluded
	if (isNull _unit || _unit call CLY_BR_exclusive) exitWith
	{
		if (!isNull _unit) then
		{
			_unit setVariable ["CLY_BR_pending", nil];
		};
	};
	//Hide body
	if (_unit isKindOf "Man") then
	{
		if (vehicle _unit == _unit) then
		{
			hideBody _unit;
			_removeTime = time + 8;
			while {getPosATL _unit select 2 < 0.2 && time < _removeTime} do {sleep 0.1;};
		};
		//Remove dropped weapon
		_holder = objNull;
		_holders = getPosATL _unit nearEntities ["WeaponHolderSimulated", 10];
		if (count _holders > 0) then
		{
			_holder = _holders select 0;
		};
		deleteVehicle _holder;
	}
	//Remove bodies in a vehicle if they're waiting to be removed anyway
	else
	{
		{
			if (_x != _unit) then
			{
				if (!alive _x) then
				{
					if (_x getVariable ["CLY_BR_pending", false]) then
					{
						deleteVehicle _x;
					};
				};
			};
		} forEach crew _unit;
	};
	//Delete unit
	deleteVehicle _unit;
};

//Loop
while {true} do
{
	sleep 1;
	{
		_unit = _x;
		if !(_unit getVariable ["CLY_BR_pending", false]) then
		{
			_wait = _manDelay;
			if !(_unit isKindOf "Man") then
			{
				_wait = switch (getNumber (configFile / "CfgVehicles" / (typeOf _unit) / "type")) do
				{
					case 1 : {_armorDelay;};
					case 2 : {_airDelay;};
					default {_softDelay;};
				};
			};
			if (_wait >= 0) then
			{
				if !(_unit call CLY_BR_exclusive) then
				{
					_unit setVariable ["CLY_BR_pending", true];
					[_unit, _wait] spawn CLY_BR_removeScript;
				};
			};
		};
	} forEach allDead;
};


----------------------------------------------------------------
Une autre chose qui est interessante, c'est de supprimer de suite le corps d'un joueur qui se deconnecte.
On peut avoir des problemes de revive, de revive incomplet ou voir sans aucun revive et ceci regle ce detail.

Toujours a actionner coté serveur

Code : Tout sélectionner

if (isServer) then {addMissionEventHandler ["HandleDisconnect",{deleteVehicle (_this select 0);}];};

----------------------------------------------------------------

Pendant qu'on y est, on peut aussi rajouter ceci du cote joueur pour enlever toutes les armes, chargeurs et autres choses qui ont ete abandonnés et qui trainent partout (on peut regler le timing):

Code : Tout sélectionner

if (local player) then {
	0 spawn {
		private ["_items"];
		while {true} do {
			sleep (180 + random 60);
			_items = allMissionObjects "WeaponHolderSimulated" + allMissionObjects "GroundWeaponHolder" + 
				      allMissionObjects "WeaponHolder";
			{
				deleteVehicle _x;
				sleep 0.212;
			} count _items;
			_items = nil;
		};
	};
};


Et ce code coté serveur pour les armes, chargeurs et autres provenant des IA, plus les crateres de bombes (on peut regler le timing):

Code : Tout sélectionner

if (isServer) then {
	0 spawn {
		private ["_craters","_items"];
		while {true} do {
			sleep (120 + random 60);
			_craters = allMissionObjects "CraterLong" + allMissionObjects "CraterLong_small";
			_items = allMissionObjects "WeaponHolderSimulated" + allMissionObjects "GroundWeaponHolder" + 
			             allMissionObjects "WeaponHolder";
			{
				deleteVehicle _x;
				sleep 0.212;
			} count _craters + _items;
			_craters = nil;
			_items = nil;
		};			
	};
};
Modifié en dernier par Titi le sam. 18 juin 2016, 18:05, modifié 4 fois.

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: [Script ] Faite le ménage dans vos missions !

Message par =[TTK]= Memphis007 »

Merci !

Après des fois c'est pas mal de laisser tous les trucs crevés pour le réalisme. A utiliser avec parcimonie.
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Titi
Tout fou
Tout fou
Messages : 32
Enregistré le : dim. 19 déc. 2010, 21:22

Re: [Script ] Faite le ménage dans vos missions !

Message par Titi »

Bien sur c'est bien d'en avoir quelque un aussi, d'ailleurs j'en use dans la pvp pour le décor, on peut se le permettre si y'a de la place.
Le timing se regle dans les scripts et on peut laisser plus de temps pour le réalisme.

Tout dépent du nombre d'IA, de vehicules et d'objets sur la map en meme temps.

Il faut privilégier la jouabilité sur l'environnement, même si on affectionne l'immersion comme moi.
Modifié en dernier par Titi le lun. 20 juin 2016, 21:30, modifié 3 fois.

Avatar du membre
=[TTK]= Yoda
Grand Mérou
Grand Mérou
Âge : 58
Messages : 3562
Enregistré le : jeu. 11 févr. 2010, 17:52
Humeur : bieng-bieng
Localisation : Le milieu

Re: [Script] Faite le ménage dans vos missions !

Message par =[TTK]= Yoda »

C'est beau, toutes ces couleurs ...
C’est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l’air brillant avant d’avoir l’air con.

Image
" ... j'ai pas la tirelire dans le string et des tétons comme des pipettes de roues de camion ..." - Injonction Frog Pénelope 2014

Avatar du membre
=[TTK]= Dobeul Ouépone
Grand Fou
Grand Fou
Âge : 41
Messages : 1365
Enregistré le : mar. 14 août 2012, 17:27
Humeur : Brise des os avec ses burnes
Localisation : Par terre, attendant une coco

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Dobeul Ouépone »

:lol:
Image
C'est quand même pas compliqué bordel !

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Memphis007 »

J'avoue, j'ai rit aussi. :lol:
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Yourry
Grand Scriptou
Grand Scriptou
Âge : 36
Messages : 1634
Enregistré le : mer. 17 mars 2010, 16:39
Localisation : Dans le reblochon !

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Yourry »

Il y a beaucoup plus simple pour les cadavres et épaves, BIS s'en est chargé via les commandes suivantes à mettre dans le description.ext :
  • corpseLimit
  • wreckLimit
Pour plus d'info :
https://community.bistudio.com/wiki/Des ... orpseLimit

A noter que l'on peut paramétrer le temps de nettoyage. Les commandes en questions sont *RemovalMinTime et *RemovalMaxTime (* à remplacer soit par corpse ou wreck)
"Les Boches faisaient "Kamarad". Il aurait fallu commencer par ça des deux côtés, pour éviter les massacres organisés par ceux d'en haut, mais le fusil qu'ils nous avaient collé entre les mains, forcément, il a bien fallu qu'il serve et tout le reste à suivit." dixit Tardi et Verney
Image
L'autre jour, en tirant le rouleau de papier cul, toute la cloison est venue avec. dixit Camille Caz

Avatar du membre
=[TTK]= Memphis007
Grand TranKilou
Grand TranKilou
Âge : 43
Messages : 3351
Enregistré le : mer. 13 janv. 2010, 15:29
Humeur : Binaire
Localisation : 127.0.0.1
Contact :

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Memphis007 »

Bien que plus simple dans le cas d'un nettoyage global, c'est quand même plus bourrin comme technique, avec le script proposé par Titi tu peux sélectionner plus finement le type d'épaves à nettoyer ou spécifier des timing différents pour chaque type.

Pis Yoda aime bien les couleurs alors...
Si ya pas de shell, ya pas de plaisir...
Image

Fingers in the noise. Maxime verdâtre.

Avatar du membre
=[TTK]= Balrog
Grand Cochonou
Grand Cochonou
Âge : 37
Messages : 830
Enregistré le : lun. 19 nov. 2012, 15:05
Humeur : quenelleuse
Localisation : La Moria

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Balrog »

Moi je dit que c est Yourry le meilleur et en plus c est un TTK.
Il est liiibre BAL , y en à même qui disent.......
Image

Avatar du membre
=[TTK]= Yoda
Grand Mérou
Grand Mérou
Âge : 58
Messages : 3562
Enregistré le : jeu. 11 févr. 2010, 17:52
Humeur : bieng-bieng
Localisation : Le milieu

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Yoda »

hahahahahahaha !! C'est un argument de poids, je te le concède, mon Bal !!
C’est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l’air brillant avant d’avoir l’air con.

Image
" ... j'ai pas la tirelire dans le string et des tétons comme des pipettes de roues de camion ..." - Injonction Frog Pénelope 2014

Titi
Tout fou
Tout fou
Messages : 32
Enregistré le : dim. 19 déc. 2010, 21:22

Re: [Scripts] Faite le ménage dans vos missions

Message par Titi »

çà sent la leche ici lol....

D'abord BIS n'inclue pas d'exception dans ses commandes, vala pourquoi le script de Celery qui en inclue lui (voir ci dessous) est bien plusse mieuxxxxxxxx, na ! Placer une ligne de commande dans l'init et mettre un fichier dans la mission c'est pas bien compliqué quand meme, surtout pour ceux qui ne vont pas sur le wiki*.

[], //Units that aren't removed (mettre nom unités a ne pas enlever, un perso important dans la mission peut etre...)
[], //Weapons or items that prevent units from being removed if they have them (mettre armes a ne pas enlever)
[], //Magazines that prevent units from being removed if they have them (mettre magazines a ne pas enlever)
[] //Backpacks that prevent units from being removed if they have them (mettre backpacks a ne pas enlever)


*non ce n'est pas un fruit...

Avatar du membre
=[TTK]= Yoda
Grand Mérou
Grand Mérou
Âge : 58
Messages : 3562
Enregistré le : jeu. 11 févr. 2010, 17:52
Humeur : bieng-bieng
Localisation : Le milieu

Re: [Scripts] Faite le ménage dans vos missions

Message par =[TTK]= Yoda »

Takapostulersituveukonfasdelalechawectoaossi. ;)
C’est parce que la vitesse de la lumière est supérieure à celle du son que certains ont l’air brillant avant d’avoir l’air con.

Image
" ... j'ai pas la tirelire dans le string et des tétons comme des pipettes de roues de camion ..." - Injonction Frog Pénelope 2014

Répondre