N'hésitez pas à parcourir son site qui est plein de ressources pour Arma.
;ATTENTION écrit pour OFP
;==========================================================================
; Fais tourner la camera autour de la position de "cible" version 1.0
;
; [getmarkerpos "cible",getpos soldat1, 0, 50, 10, 50, 0.1] exec "Cam_rotation.sqs"
; [getpos patrouille,getpos espionintro,-30,0,10,5,0.1] exec "Cam_rotation.sqs"
; paramètre 1: origine
; paramètre 2: point concerné
; paramètre 3: angle de départ
; paramètre 4: angle d'arrivée (la caméra parcourt les angles entre celui de départ et d'arrivée)
; paramètre 5: placement par rapport au point (devant derrière)
; paramètre 6: placement par rapport au point (hauteur)
; paramètre 7: fréquence
;
_coordOrigine = _this select 0
_coordPoint = _this select 1
_Theta1 = _this select 2
_Theta2 = _this select 3
_recul = _this select 4
_hauteur = _this select 5
_freq = _this select 6
_inc = 1
? _theta1 > _theta2 : _inc = -1
_coordx = _coordOrigine select 0
_coordy = _coordOrigine select 1
_coordz = _coordOrigine select 2
;On calcule les distances algébriques pour chaque coordonnée.
_PosX = ((_coordPoint select 0) - (_coordOrigine select 0))
_PosY = ((_coordPoint select 1) - (_coordOrigine select 1))
_PosZ = ((_coordPoint select 2) - (_coordOrigine select 2))
;On détermine la distance entre les deux points
_distance = sqrt ((_PosX * _PosX) + (_PosY * _PosY) + (_PosZ * _PosZ))
_sin = _PosY / _distance
_cos = _PosX / _distance
;On regarde sur quelle partie du cercle trigo on est pour déterminer l'angle.
? _sin >= 0 and _cos >= 0: _angle = acos _cos
? _sin >= 0 and _cos < 0: _angle = acos _cos
? _sin < 0 and _cos >= 0: _angle = - acos _cos
? _sin < 0 and _cos < 0: _angle = - acos _cos
;TitleText [format["dist: %1 ; cos: %2 ; sin: %3 ; angle: %4",_distance,_cos,_sin,_angle],"PLAIN DOWN",1]
_distance= _distance + _recul
_rot = _angle + _Theta1
;_rot = _angle
_camera = "CAMERA" camCreate [_coordx + (_distance * (cos _rot)),_coordy + (_distance * (sin _rot)),_hauteur]
_camera cameraEffect ["internal","front"]
_camera camCommand "inertia off"
_camera camsetTarget _coordOrigine
_camera camCommit 0
@camCommitted _camera
#boucleprincipale
_camera camSetPos [_coordx + (_distance * (cos _rot)),_coordy + (_distance * (sin _rot)),_hauteur]
_camera camCommit _freq
@camcommitted _camera
_rot = _rot + _inc
;?_rot < 360 : goto "boucleprincipale"
?_inc == 1 and _rot < _angle + _Theta2 : goto "boucleprincipale"
?_inc == -1 and _rot >= _angle + _Theta2 : goto "boucleprincipale"
camdestroy _camera
;Écrit pour OFP Fonctionne avec Arma
;==========================================================================
;Ce script réalise la vue caméra d'un véhicule en déplacement
;
; Paramètre
; 1: Le véhicule suivi
; 2: distance de la caméra au véhicule en mètres
; 3: hauteur de la caméra par rapport au véhicule
; 4: cible de la caméra
; 5: tableau contenant la condition d'arrêt
;
; Exemple pour que la camera pointe droit devant:
; [helico,10,5,objNull,[false]] exec "cam_suiveuse.sqs"
;
; Exemple pour que la camera pointe vers une cible:
; [helico,10,5,tank,[false]] exec "cam_suiveuse.sqs"
_vehicule = _this select 0
_distance = _this select 1
_hauteur = _this select 2
_cible = _this select 3
_fini = _this select 4
;Crée une caméra et la positionne sur _vehicule
_camx = getpos _vehicule select 0
_camy = getpos _vehicule select 1
_camz = getpos _vehicule select 2
_dir = getdir _vehicule
_cam = "camera" CamCreate [_camx + _distance * sin _dir,_camy + _distance * cos _dir,_camz + _hauteur]
_cam CameraEffect ["Internal","Front"]
_cam camCommand "inertia on"
? not (isNull _cible) : _cam camsettarget _cible
? isNull _cible : _cam camsettarget [_camx + 1000 * sin _dir,_camy + 1000 * cos _dir,2];goto "camLoop"
_cam CamCommit 0
;La caméra suit le véhicule
#camloopCible
_camx = getpos _vehicule select 0
_camy = getpos _vehicule select 1
_camz = getpos _vehicule select 2
_dir = getdir _vehicule
_cam camsetpos [_camx + _distance * sin _dir,_camy + _distance * cos _dir,_camz + _hauteur]
_cam camcommit 0
~0.01
?not (_fini select 0) : goto "camloopCible"
goto "Fin"
;La caméra pointe droit devant
#camloop
_camx = getpos _vehicule select 0
_camy = getpos _vehicule select 1
_camz = getpos _vehicule select 2
_dir = getdir _vehicule
_cam camsetpos [_camx + _distance * sin _dir,_camy + _distance * cos _dir,_camz + _hauteur]
_cam camsettarget [_camx + 1000 * sin _dir,_camy + 1000 * cos _dir,2]
_cam camcommit 0
~0.01
?not (_fini select 0) : goto "camloop"
;Termine la séquence vidéo
#Fin
_cam CameraEffect ["Terminate","Back"]
CamDestroy _cam
;cuttext [format["%1",_fini],"PLAIN"]
exit
;ATTENTION écrit pour OFP
;==========================================================================
;deplacementAleatoire.sqs: Version 1.00
;Ce script réalise le déplacement d'un groupe ou d'une unité dans une zone
;prédéterminée.
;
;
; Paramètres:
;
; Paramètre 1: le(s) unité(s) à déplacer - peut être un groupe ou une unité
; Paramètre 2: la position à partir de laquelle on définit la zone de déplacement
; Paramètre 3: le rayon de la zone de déplacement.
; Paramètre 4: le(s) unité(s) se déplacent indéfiniment ou non (booléen).
;
;
; Attention, ce script est utilisé par le script "pourchasse.sqs"
;
;Exemple:
;
;[player,getpos player,100,true] exec "deplacementAleatoire.sqs"
_groupe = group (leader (_this select 0));
_pos_origine = _this select 1;
_rayon_action = _this select 2;
_continue = _this select 3;
#actualisation
_alpha = random 360;
_rayon = random _rayon_action;
_posx = (_pos_origine select 0) + (_rayon * (cos _alpha));
_posy = (_pos_origine select 1) + (_rayon * (sin _alpha));
_position = [_posx,_posy];
_groupe move _position;
?not _continue : goto "fin"
@unitready leader _groupe
goto "actualisation"
#fin
exit
;ATTENTION écrit pour OFP
;==========================================================================
;pourchasse.sqs: Version 1.00
;Ce script réalise la poursuite d'une unité ou d'un groupe par un autre.
;
;
; Paramètres:
;
; Paramètre 1: le(s) poursuivant(s) - peut être un groupe ou une unité
; Paramètre 2: le(s) poursuivi(s) - peut être un groupe ou une unité
;
;
; Attention, ce script utilise le script "deplacementAleatoire.sqs"
;
;Exemple:
;
;[group mechants,player] exec "pourchasse.sqs"
_groupe_chasseur = group (leader (_this select 0));
_proie = leader (_this select 1);
_lasttime = time;
_rayon = 0.5 * ((leader _groupe_chasseur) distance _proie)
_pos_origine = getpos (leader _groupe_chasseur);
#determine_position
_connaissance = _groupe_chasseur knowsabout _proie;
_distance = (leader _groupe_chasseur) distance _proie;
~1
;Ligne de debug...
;hint format["KnowsAbout: %1 rayon: %2",_connaissance,_rayon];
; Si le groupe se trouve à la dernière position connue de la cible, il passe
; en mode "recherche et destruction".
? (time - _lasttime) > 5 and unitReady (leader _groupe_chasseur) : [_groupe_chasseur,getpos leader _groupe_chasseur,_rayon,false] exec "deplacementAleatoire.sqs";
; Si cela fait plus de 5 minutes que la position de la proie n'a pas
; été réactualisée, on abandonne la recherche.
? time - _lasttime > 300 : goto "fin";
; Si les chasseurs n'en savent pas suffisamment, on ne réactualise pas
; la position de la proie.
; Info: la fonction knowsAbout renvoit la valeur 1.5 si la cible est repérée...
? _connaissance < 1.49 : goto "determine_position"
_lasttime = time;
?not alive _proie : goto "fin"
?count units _groupe_chasseur == 0 : goto "fin";
#actualisation
_position = getpos _proie;
_coeff_localisation = (5 - sqrt _connaissance) * _distance / 20;
_alpha = random 360;
_rayon = (random (3 * _coeff_localisation / 4)) + (_coeff_localisation / 4);
_posx = (_position select 0) + (_rayon * (cos _alpha));
_posy = (_position select 1) + (_rayon * (sin _alpha));
_pos_estimee = [_posx,_posy];
_groupe_chasseur move _pos_estimee;
~4
goto "determine_position"
#fin
_groupe_chasseur move _pos_origine;
exit
;ATTENTION écrit pour OFP
;==========================================================================
; Ejection_Helico.sqs: Version 1.10
;
; PARAMETRES:
;
; Paramètre 1: L'hélico concerné
; Paramètre 2: L'intervalle entre chaque saut en parachute
;
;
; Exemple d'appel de la fonction:
; [helico,0.5] exec "Ejection_Helico.sqs"
;
_Helico = _this select 0
_freq = _this select 1
; ici, on prend tout l'équipage de l'appareil, meme le pilote!
_equipage = crew _Helico
_nb = count _equipage
? _nb == 0 : goto "fin"
#Boucle
(_equipage select (_nb - 1)) action["EJECT",_helico];
unassignVehicle (_equipage select (_nb - 1));
~_freq
_nb = _nb - 1
? _nb > 0 : goto "Boucle"
#fin
exit
;"_x action[""EJECT"",_helico];unassignVehicle _x;~0.01" foreach crew _Helico
;ATTENTION écrit pour OFP
;==========================================================================
; Bombardement.sqs: Version 1.00
; Ce script réalise le bombardement d'une cible jusqu'à élimination.
;
; PARAMETRES:
;
; Paramètre 1: Rayon de la zone bombardée.
; Paramètre 2: cible à bombarder.
;
;
; Exemple d'appel de la fonction:
; [75,player] exec "Bombardement.sqs"
;
_zone = _this select 0
_cible = _this select 1
#loop
_where = getpos _cible
_position =[(_where select 0) - random _zone + random _zone, (_where select 1) - random _zone + random _zone]
_bombe = "AAA807" createVehicle _position
_bombe setDammage 1
~random 2.5
;you can change the condition below the end
? alive _cible : goto "loop"
exit
;ATTENTION écrit pour OFP
;==========================================================================
;AjouteGroupe.sqs: Version 1.00
;Ce script Crée un groupe d'unités dynamiquement en cours de partie. Le
;leader du groupe crée s'appelle Groupe.
;
;
; Paramètres:
;
; Paramètre 1: camp du groupe à créer ("WEST","EAST","RESISTANCE","CIVILIAN")
; Paramètre 2: type d'unités à créer ("BLINDE","BLINDELEGER","INFANTERIE","INFANTERIEMECA",
; "SABOTEUR","COMMANDO","COMMANDONUIT")
; Paramètre 3: Nombre d'unités à créer (max:12 pour fantassins, max:4 pour blindés)
; Paramètre 4: Position du groupe à créer.
; Paramètre 5: Qualité des membres du groupe (min:0, max:1)
;
;
;Exemple:
;
;["WEST","BLINDELEGER",3,getmarkerpos "barracks",1] exec "AjouteGroupe.sqs"
_camp = _this select 0
_type = _this select 1
_nb = _this select 2
_position = _this select 3
_qualite = _this select 4
?_camp != "WEST" and _camp != "EAST" and _camp != "RESISTANCE" and _camp != "CIVILIAN" : goto "Fin"
?_nb < 1 : goto "Fin"
? _camp == "WEST" : _groupe = group beckett
? _camp == "EAST" : _groupe = group sentinelle1
?_type == "BLINDE" : goto "Blindé"
?_type == "BLINDELEGER" : goto "BlindéLeger"
?_type == "INFANTERIE" : goto "Infanterie"
?_type == "INFANTERIEMECA" : goto "InfanterieMeca"
?_type == "SABOTEUR" : goto "Saboteur"
?_type == "COMMANDO" : goto "Commando"
?_type == "COMMANDONUIT" : goto "CommandoNuit"
goto "Fin"
#Blindé
? _camp == "WEST" : _chaine = "M1Abrams";_equip = "SoldierWCrew"
? _camp == "EAST" : _chaine = "T80";_equip = "SoldierECrew"
goto "BoucleTank"
#BlindéLeger
? _camp == "WEST" : _chaine = "M60";_equip = "SoldierWCrew"
? _camp == "EAST" : _chaine = "T72";_equip = "SoldierECrew"
goto "BoucleTank"
#InfanterieMeca
? _camp == "WEST" : _vehicule = "M113"
? _camp == "EAST" : _vehicule = "BMP"
#Infanterie
? _camp == "WEST" : _chaine = "OfficerW";_chaine2 = "SoldierWB";_chaine3 = "SoldierWMG";_chaine4 = "SoldierWG";_chaine5 = "SoldierWLAW"
? _camp == "EAST" : _chaine = "OfficerE";_chaine2 = "SoldierEB";_chaine3 = "SoldierEMG";_chaine4 = "SoldierEG";_chaine5 = "SoldierELAW"
goto "Infant"
#Saboteur
? _camp == "WEST" : _chaine = "SoldierWSaboteurXMS"
? _camp == "EAST" : _chaine = "SoldierESaboteurPipe"
goto "FormeGroupe"
#Commando
? _camp == "WEST" : _chaine = "SoldierWSaboteurDay"
? _camp == "EAST" : _chaine = "SoldierESaboteurBizon"
goto "FormeGroupe"
#CommandoNuit
? _camp == "WEST" : _chaine = "SoldierWSaboteurPipe"
? _camp == "EAST" : _chaine = "SoldierESaboteurBizon"
goto "FormeGroupe"
;-----------------------------------------
;--------- Création des tanks ------------
;-----------------------------------------
#BoucleTank
_tab = []
_tab resize _nb
#BoucleBld
?_nb > 4 : _nb = 4
_tank = _chaine CreateVehicle _position
_tank lock false
;-----------------------------------------
;----------- Création équipage -----------
;-----------------------------------------
_equip CreateUnit [_position,_groupe,"Groupe = this",_qualite,"Corporal"]
[Groupe] join objNull
_tab set [(_nb-1),Groupe]
Groupe moveinCommander _tank
#BoucleBld
_equip CreateUnit [_position,group Groupe,"Tempo1 = this",_qualite,"Private"]
_equip CreateUnit [_position,group Groupe,"Tempo2 = this",_qualite,"Private"]
[Tempo1,Tempo2] join Groupe
Tempo1 moveindriver _tank
Tempo2 moveingunner _tank
_nb =_nb - 1
?_nb>0 : goto "BoucleBld"
"units group _x join group Groupe" foreach _tab
;cuttext[format["%1",count units group Groupe],"PLAIN"]
goto "Fin"
;-----------------------------------------
;--- Création de l'infanterie mécanisée --
;-----------------------------------------
#Infant
?_type == "INFANTERIEMECA" : _transport = _vehicule createVehicle _position
?_nb <= 1 : _nb = 2
;-----------------------------------------
;------- Création de l'infanterie --------
;-----------------------------------------
;#Infant
?_nb > 12 : _nb = 12
_chaine CreateUnit [_position,_groupe,"Groupe = this",_qualite,"Sergeant"]
[Groupe] join objNull
?_nb>1:_chaine2 CreateUnit [_position,group Groupe,"Tempodrv = this",_qualite,"Private"]
?_nb>2:_chaine3 CreateUnit [_position,group Groupe,"",_qualite,"Private"]
?_nb>3:_chaine4 CreateUnit [_position,group Groupe,"",_qualite,"Corporal"]
?_nb>4:_chaine2 CreateUnit [_position,group Groupe,"",_qualite,"Private"]
?_nb>5:_chaine5 CreateUnit [_position,group Groupe,"",_qualite,"Corporal"]
?_nb>6:_chaine3 CreateUnit [_position,group Groupe,"",_qualite,"Corporal"]
?_nb>7:_chaine4 CreateUnit [_position,group Groupe,"",_qualite,"Corporal"]
?_nb>8:_chaine2 CreateUnit [_position,group Groupe,"",_qualite,"Private"]
?_nb>9:_chaine3 CreateUnit [_position,group Groupe,"",_qualite,"Private"]
?_nb>10:_chaine2 CreateUnit [_position,group Groupe,"",_qualite,"Private"]
?_nb>11:_chaine5 CreateUnit [_position,group Groupe,"",_qualite,"Corporal"]
?_type != "INFANTERIEMECA" : goto "Fin"
Tempodrv moveindriver _transport
goto "Fin"