Script satellite

Pour les Masochistes Éditeurs de missions
Répondre
Avatar du membre
=[TTK]= Mao
Retraité
Retraité
Âge : 39
Messages : 168
Enregistré le : mar. 18 mai 2010, 00:02
Localisation : Juste a coté du pays de la quenelle Pile poil dans le pays de la noix et de la Chartreuse

Script satellite

Message par =[TTK]= Mao »

En farfouillant sur le net, je suis tombé sur ce script qui peut donner des idées aux missions makers en manque de scénarios (celle la elle est pour toi clem :lol: )

Code : Tout sélectionner

/*
 SATELLITE.SQF
 =============
 version 2.0 (11.10.2009)  © Pumpkin of M.O.S
 
 Vue satellite avec déplacement par touches-flèches, sortie par "x" et zoome/dézoome par "+"/"-"
 
 Paramètres : 
 ------------
 nul = [délai_de_clareté, délai_de_brouillage (, heure_de_visibilité_déterminée)] execVM "Satellite.sqf"
  
 remarques :
 ® script "lib\GetGPSCoords.sqf" nécessaire pour afficher les coordonnées type GPS
 ® l'heure de départ doit s'inscrire sous forme fractionnaire avec décimal égale aux minutes : 8.30 = 8h30, 8.55 = 8h55,...
 ® le délai de visibilité est lié / calculé par rapport à l'heure de départ, par défaut 0.0 (recalculé si 3ème paramètre existe)
 ® Si on veut une heure précise d'affichage ou de brouillage, il suffit de fixer ou décaler l'heure de départ grâce au 3ème paramètre (facultatif)
 
*/


// Fonction pour calculer les coordonnées GPS
_func_coords = compile preprocessFile "lib\GetGPSCoords.sqf";

// Tous les paramètres recalculés en 1/100ème de minute
_delayvisible = (_this select 0) / 60;
_delaydown = (_this select 1) / 60;
_ttime = 0; // => _satvisible = true
if (count _this > 2) then { _ttime = _this select 2 };
_ttime = (floor _ttime) + (_ttime - (floor _ttime)) / 60 * 100;

// Modulo permettant de déterminé l'heure de départ pour heure de visibilité fixée
_nexttime = _ttime mod (_delayvisible + _delaydown);

_phases = true;
if ((_delayvisible + _delaydown) == 0) then { _phases = false };

// Un seul sat dispo par joueur
if (isnil "MOSOnlyOneSat") then {MOSOnlyOneSat = false};
if (MOSOnlyOneSat) exitwith {hint "Annulation satellite"};

hint "Cliquer 1X sur la carte\n(Click once on the map)";

// Timeout en secondes
_initialtime = daytime;
_timelimit = 30;
clickok = false;
while {not clickok} do {
	_timeout = (daytime - _initialtime) * 3600;
	if (_timeout > _timelimit) exitWith {clickok=false};
	if (not alive player) exitWith {clickok=false};
	onMapSingleClick "clickok = true;satpos=[_pos select 0,_pos select 1,0];";
	sleep 0.01;
};

hint format ["Init Satellite... %1\n(Sortie du mode carte nécessaire avant affichage de la vue satellite)\n\nCommandes :\n Fleches = déplacements\n +/- = Zoom/Dezoom\n X = sortie",clickok];

if (clickok) then {

	MOSOnlyOneSat = true;
	publicVariable "MOSOnlyOneSat";

	// Mise en place du handler du clavier
	disableserialization;
	keyspressed = compile preprocessFile "satellite\keyspressed.sqf";
	_displayID = (findDisplay 46) displaySetEventHandler ["KeyDown","_this call keyspressed"];

	// Détermine si le sat est visible en fonction de l'heure de départ (cf. init _nexttime)
	_oldtime = 0;
	// Init _satvisible à "false" pour entrer dans les effets "visibilité du sat" au moins une fois
	_satvisible = false;
	if (_phases) then {
		while {_nexttime < daytime} do {
			_satvisible = false;
			_oldtime = _nexttime;
			_nexttime = _nexttime + _delayvisible;
			if (_nexttime >= daytime) exitwith {};
			_satvisible = true;
			_oldtime = _nexttime;
			_nexttime = _nexttime + _delaydown;
		};
		_nexttime = _oldtime;
	};
	
	// Attendre que le joueur sorte de la vue map
	if (visibleMap) then { waituntil {not visibleMap} };
	
	// Créer l'objet cible de la caméra
	_sattgt = "InvisibleFence2" createvehicle [satpos select 0, satpos select 1, -10];
	_sattgt setpos [satpos select 0, satpos select 1, 0];
	sleep 0.1;
	// Position de la caméra, le décalage de -20 évite les rotations parasites de la caméra lors du déplacement
	_sathipos = [satpos select 0, (satpos select 1) - 20, 250];
	sleep 0.1;
	
	// Création de la caméra
	camera = "camera" camcreate satpos ;
	camera cameraeffect ["external", "back"];
	showCinemaBorder false;
	
	camera camPreparePos _sathipos;
	camera camPrepareTarget _sattgt;
	camera camPrepareFOV 1;
	camera camCommitPrepared 0;
	waituntil{camCommitted camera};
	
	// Effets visuels
	_ppColor = ppEffectCreate ["colorCorrections", 500];
	_ppColor ppEffectEnable true;
	_ppColor ppEffectAdjust [-1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0.0], [1, 1, 1, 1.0]];  // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
	_ppColor ppEffectCommit 0;
	
	_ppBlur = ppEffectCreate ["dynamicBlur", 400];
	_ppBlur ppEffectEnable true;  
	_ppBlur ppEffectAdjust [.1];  // ppEffectAdjust [blur]
	_ppBlur ppEffectCommit 0;

	_ppGrain = ppEffectCreate ["filmGrain", 600];
	_ppGrain ppEffectEnable true;
	_ppGrain ppEffectAdjust [0.4, 1, 1, 0, 1];  // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
	_ppGrain ppEffectCommit 0;
	
	waituntil{camCommitted camera};
	
	keyout = 0;
	movesatx = 0;
	movesaty = 0;
	zoom = 0;
	_zoominout = 1;
	_timer = 100;

	_once = true;
	
	for [{_infinite=0},{_infinite<=1},{_infinite=_infinite+1}] do {
	
		if (not alive player) exitWith {};
		if (keyout > 0) exitwith {};
		
		if (_satvisible) then {
			if ((movesatx != 0) or (movesaty != 0) or (zoom != 0)) then {
				satpos = [(getpos _sattgt select 0) + movesatx, (getpos _sattgt select 1) + movesaty, 0];
				_sattgt setpos [satpos select 0, satpos select 1, 50];
				_sathipos = [satpos select 0, (satpos select 1) - 20, 250];
				
				_zoominout = _zoominout + zoom;
				if (_zoominout < 0.4) then {_zoominout = 0.4};
				if (_zoominout > 1) then {_zoominout = 1};
	    	
				camera camPreparePos _sathipos;
				camera camPrepareTarget _sattgt;
				camera camPrepareFOV _zoominout;
				camera camCommitPrepared 0;
				waituntil{camCommitted camera};
        	
				movesatx = 0;
				movesaty = 0;
				zoom = 0;
			};
		};

		// Heure de changement de phase atteinte => bascule sur un autre affichage
		if ((daytime >= _nexttime) and _phases) then { _once = true };
		
		// Satellite visible
		if ((not _satvisible) and _once) then {
			
			_once = false;
			_satvisible = true;
			_nexttime = _nexttime + _delayvisible;
			
			_ppColor ppEffectAdjust [1, 1, 0, [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1]];  // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
			_ppColor ppEffectCommit 2;

			_ppBlur ppEffectAdjust [.1];  // ppEffectAdjust [blur]
			_ppBlur ppEffectCommit 2;

			_ppGrain ppEffectAdjust [0.4, 1, 1, 0, 1];  // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
			_ppGrain ppEffectCommit 2;

			waituntil{camCommitted camera};
		};
		
		// Satellite non visible
		if (_satvisible and _once and _phases) then {

			_once = false;
			_satvisible = false;
			_nexttime = _nexttime + _delaydown;

			_ppColor ppEffectAdjust [1.2, 0.2, 0, [1, 1, 1, 0], [1, 1, 1, 0], [1, 1, 1, 1]];  // ppEffectAdjust [brightness, contrast, gamma, [R, G, B, multiplier], [R, G, B, multiplier], [R, G, B, multiplier]]
			_ppColor ppEffectCommit 2;
			
			_ppBlur ppEffectAdjust [20];  // ppEffectAdjust [blur]
			_ppBlur ppEffectCommit 2;
	
			_ppGrain ppEffectAdjust [0.5, 1, 2, 0.3, 0];  // ppEffectAdjust [strength, alpha, scale, blend-light, blend-dark, ?]
			_ppGrain ppEffectCommit 2;

			waituntil{camCommitted camera};
		};
				
		// Infos texte mis à jour ~ toutes les secondes
		_timer = _timer + 1;
		if (_timer > 100) then {
			_timer = 0;
			_gpsc = satpos call _func_coords;
			
			_htime = daytime;
			_ht = floor _htime;
			_hm = floor ((_htime - _ht) * 6000) / 100;
			_htime = _ht + (_htime - (floor _htime)) / 100 * 60;
			_vtime = 0;
			if (_phases) then { _vtime = floor ((_nexttime - daytime) * 60) };

			cuttext [format ["%1 / GPS %2 / timeV: -%3mn / timeH: %4:%5",worldName,_gpsc,_vtime,_ht,_hm], "PLAIN DOWN"];
		};
		setMousePosition [0,0];
	
		sleep 0.01;
		_infinite = 0;
	};

	ppEffectDestroy _ppColor;
	ppEffectDestroy _ppBlur;
	ppEffectDestroy _ppGrain;

	player cameraEffect ["terminate","back"];
	camdestroy camera;
	deletevehicle _sattgt;

	(findDisplay 46) displayRemoveAllEventHandlers "KeyDown";

	cuttext ["Fermeture connection satellite...", "BLACK IN",3];

};


MOSOnlyOneSat = false;
publicVariable "MOSOnlyOneSat";
hint "Fermeture connection satellite...";
et ensuite :

Code : Tout sélectionner

_params = (_this select 3);
_params execVM "satellite\Satellite.sqf";
et enfin :

Code : Tout sélectionner

//disableserialization;
/*
private['_handled'];
_handled = false;
switch (_this select 1) do
{
	//F key
	case 33: 
	{
		// code here
		_handled = true;
		hint "ca marche";
	};
};
_handled;
*/
_key = _this select 1;
_left = actionKeys "TurnLeft";
_right = actionKeys "TurnRight";
_up = actionKeys "MoveForward";
_down = actionKeys "MoveBack";
_zin = actionKeys "ZoomIn";
_zout = actionKeys "ZoomOut";

//player globalchat format ["%1",_key];

_step = 2;

if (_key in _right) then { movesatx = _step }; 
if (_key in _left) then { movesatx = -1 * _step }; 
if (_key in _up) then { movesaty = _step }; 
if (_key in _down) then { movesaty = -1 * _step }; 
if (_key in _zin) then { zoom = -0.01 }; 
if (_key in _zout) then { zoom = 0.01}; 

// touche "x" pour sortir
if (_key == 45) then { keyout = _key }; 
J'ai déjà trouvé une bonne idée pour une mission ca peut etre sympathique

EDIT : j'avais oublié le script de coordonnées qui va avec, vu que s'est l'utilité de départ autant le mettre.

Code : Tout sélectionner

/*

GetGPSCoords.sqf  © Pumpkin of M.O.S

 Paramètres :
 ------------
 
 1. Accés dans le script  :
 	_func_coords = compile preprocessFile "GetGPSCoords.sqf";
 	
 2. Résultats :
 	_retourcoords = [délai_de_clareté, délai_de_brouillage (, heure_de_visibilité_déterminée)] execVM "Satellite.sqf"

 ® variables "_func_coords" et "_retourcoords" arbitraires
 ® cadran 000000 en 0,5200 pour Utes
 ® cadran 000000 en 0,15260 pour Chernarus
 
*/

_xmap = _this select 0;
_ymap = _this select 1;

_gpsX = floor (_xmap / 100);
_compX = "";
if (_gpsX < 100) then {_compX = "0" };
if (_gpsX < 10) then {_compX = "00" };

_wd = worldName;
_zeroY = 15260; // Chernarus
if (_wd == "Utes") then {_zeroY = 5020};

_gpsY = floor ((_zeroY - _ymap + 100) / 100);
_compY = "";
if (_gpsY < 100) then {_compY = "0" };
if (_gpsY < 10) then {_compY = "00" };

_gpscoords = format["%1%2%3%4",_compX,_gpsX,_compY,_gpsY];

_gpscoords;
La règle d'or de la conduite est la tolérance mutuelle, car nous ne penserons jamais tous de la même façon, nous ne verrons qu'une partie de la vérité et sous des angles différents.
Vis comme si tu devais mourir demain. Apprends comme si tu devais vivre toujours.
Commencez par changer en vous ce que vous voulez changer autour de vous.
Indira Gandhi
L'apéro est plus fort que tout.C'est la force du trankilou.
== Mao

Répondre