Page 1 sur 1

[Scripts] Faite le ménage dans vos missions

Posté : ven. 17 juin 2016, 20:31
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;
		};			
	};
};

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

Posté : ven. 17 juin 2016, 20:55
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.

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

Posté : ven. 17 juin 2016, 22:15
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.

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

Posté : sam. 18 juin 2016, 12:42
par =[TTK]= Yoda
C'est beau, toutes ces couleurs ...

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

Posté : mar. 21 juin 2016, 23:50
par =[TTK]= Dobeul Ouépone
:lol:

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

Posté : mer. 22 juin 2016, 00:38
par =[TTK]= Memphis007
J'avoue, j'ai rit aussi. :lol:

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

Posté : sam. 25 juin 2016, 00:04
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)

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

Posté : sam. 25 juin 2016, 00:20
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...

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

Posté : sam. 25 juin 2016, 18:45
par =[TTK]= Balrog
Moi je dit que c est Yourry le meilleur et en plus c est un TTK.

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

Posté : sam. 25 juin 2016, 20:15
par =[TTK]= Yoda
hahahahahahaha !! C'est un argument de poids, je te le concède, mon Bal !!

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

Posté : sam. 25 juin 2016, 20:34
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...

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

Posté : sam. 25 juin 2016, 22:27
par =[TTK]= Yoda
Takapostulersituveukonfasdelalechawectoaossi. ;)