Page 1 sur 1

Mission recon

Publié : sam. août 25, 2012 11:57 pm
par bolt
Bonsoir a tous,

Bon voila, je me lance. J'ai passé un certains temps sur une petite mission. Elle n'est pas parfaite (surtout que c'est ma premiere vrais mission, pas le truc jeter en 5 minutes dans le FMB).

Le sujet : Mission de Reconnaissance en Blenheim afin de permettre l'identification d'un avion spécial enemis. Mission purement libre sans base historique (ou alors sans l'avoir fait expret). L'un des objectifs de la mission va devoir etre de voler très bas. En dessous de 100 pieds AGL.

Le texte de la mission en dit plus.

La ou j'ai passé un peu plus de temps c'est sur les script. Je previens tout de suite, je ne suis pas un codeur C# de fou, style barbu qui y passe ses nuits. J'ai recuperé des bouts de scripts a droite et a gauche et j'ai fait cette mission. A noter que j'ai du quand meme chercher un moment sur certains trucs et ca a pas été simple.

Un des points interessants est le fait de devoir voler bas. J'ai un script qui vérifie ce parametre et declenche des actions si on passe au dessus des 100 pieds. Idem lors que vous survolerez l'aerodrome enemis. Idem lorsque vous passerez a proximité de l'avion a identifier.

Je dois dire que j'ai eu, et j'ai toujous, quelques soucis avec la FLAK. Je voulais donner a celle ci un délai de reaction pour simuler le temps de réponse lors d'un passage avion mais ca semble bugguer plein pot. Des valeurs aleatoire viennent remplacer les setting que j'avais mis. J'ai pas encore trouvé la solution donc la FLAK c'est un peu aleatoire.

Pour revenir a la mission, si vous volez bas et si vous suivez le parcour définit, vous maximiserez vos chance de rentrer.

Merci pour votre retour, encore une fois il y a surrement plein de trucs pas top mais j'aimerais votre retour.

Pour ceux qui ne connaissent pas le Blenheim, essayé vous aimerez peut etre. Je peux vous tuyauter si vous avez des soucis avec l'avion.

Je ferais un autre post explicatif des script. Le but de la mission etait aussi de servir de mission tutoriel pour les script.


http://www.mediafire.com/?tcb3b8ahbzzf9d1

a+
Bolt

EDIT 09/09/2012 : lien du fichier changé pour Mediafire

Publié : dim. août 26, 2012 12:11 am
par nacy
salut si tu peut donner un lien sans avoir a s'inscrire pour télécharger.

Publié : dim. août 26, 2012 1:12 am
par bolt
Salut Nacy,

Je dois etre naze ce soir. Je croyais que Rapidshare permattait un download sans inscription pour les autres personnes que celui qui upload.

Voici un autre lien sans inscription :

http://www.filedropper.com/blenheim-recon

Cliquer sur le lien download this file en gris et remplir le check bot.

Merci
Bolt

Ps : je corrige le post initial

Publié : dim. août 26, 2012 1:45 am
par nacy
merci bolt.

Publié : dim. août 26, 2012 7:51 am
par bolt
hello,

Petite precision, les photos de reconnaissances ont été faite mise en forme avec ce logiciel en ligne. Ca evite d'installer un truc sur son PC.

http://pixlr.com/editor/

Bolt

Publié : dim. août 26, 2012 7:57 am
par bolt
Petite precision du colonel, vous pourriez trouver des informations importante dans votre manuel de navigation officiel. N'hesitez pas a le consulter :

http://www.fileconvoy.com/dfl.php?id=ga ... 4c29003cbb

(lien sur un tres vieux manuel de navigation du Army Air Force Command)

Pour l'immersion de la mission

Publié : dim. août 26, 2012 8:21 am
par bolt
Voici comme promis les infos sur le script :

using System;
using maddox.game;
using maddox.game.world;

public class Mission : maddox.game.AMission
{
// Quelques variables globales
double I_Altitude;
bool Spawned = false;
bool missionOk = false;

//Les tests trigger (trigger de zone) permettant de savoir si le joueur est passé au dessus de l'avion (dans un rayon de 200m ; définit dans la mission) ==> définit si l'observateur a vu ce qu'il devait voir
//Le deuxieme test, vérifie si le joueur est passéau dessus de l'aerodrome enemis (trigger de zone) et déclenche l'apparition d'une patrouille enemie d'interception ==> décollage de la chasse sur cet intrut qui survole leur base
public override void OnTrigger(int missionNumber, string shortName, bool active)
{
if (("avionOk".Equals(shortName)) && active)
{
missionOk = true;
GamePlay.gpHUDLogCenter("Ici l'observateur, mission accomplie, j'ai pu identifier l'objectif");
}

if (("overaerodrome".Equals(shortName)) && active)
{
AiAction action = GamePlay.gpGetAction("overaerodrome");
if (action != null)
{
action.Do();
}
}

GamePlay.gpGetTrigger(shortName).Enable = false;
}

//simple test pour savoir si le joueur a reussi a se poser. Dans ce cas c'est un succes
public override void OnAircraftLanded(int missionNumber, string shortName, AiAircraft aircraft)
{

if (missionOk)
{
GamePlay.gpHUDLogCenter("Excellent travail");
}
}

//meme chose qu'au dessus mais si vous vous etes craché (peut etre parce que touché et avec des degat)
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
GamePlay.gpHUDLogCenter("Bravo, vous etes en vie");
}


// cette methode sera effectuer toutes les clics
public override void OnTickGame()
{

//Initialise le compteur
base.OnTickGame();

//ce test sera effectué toutes les 1/30eme de second (il y a 30 clics par second)
if (Time.tickCounter() % 30 == 1)
{
//curPlane est une variable qui définit l'avion du joueur
AiAircraft curPlane = GamePlay.gpPlayer().Place() as AiAircraft;

//on effectue le test si l'avion du joueur existe
if (curPlane != null)
{
//On prend les infos d'altitude grace a la methode getParameter. J'ai pris les 3 altitudes (altimetre, AGL et MSL) mais seul l'AGL va servir car c'est celle dont j'ai besoin.
I_Altitude = curPlane.getParameter(part.ParameterTypes.I_Altitude, -1);
double Z_AltitudeAGL = curPlane.getParameter(part.ParameterTypes.Z_AltitudeAGL, -1);
double Z_AltitudeMSL = curPlane.getParameter(part.ParameterTypes.Z_AltitudeMSL, -1);


//obtient le clic actuel du jeu
double dtime = Time.current();
// Ces lignes GamePlay.gpHUDLogCenter permettent d'afficher des infos a l'ecran. Du text et des variables. Si on les active, ca affiche le texte demandé.
//Ces 3 premieres lignes affiches au choix l'info qu'on veut
// GamePlay.gpHUDLogCenter(" ALT: " + I_Altitude.ToString("0.00")); //TEMP
// GamePlay.gpHUDLogCenter(" ALT: " + Z_AltitudeAGL.ToString("0.00")); //TEMP
// GamePlay.gpHUDLogCenter(" ALT: " + Z_AltitudeMSL.ToString("0.00")); //TEMP


//Cette ligne fait un affichage des 3 infos en meme temps
//GamePlay.gpHUDLogCenter(" ALT: " + I_Altitude.ToString("0.00") +
// " AGL: " + Z_AltitudeAGL.ToString("0.00") +
// " MSL: " + Z_AltitudeMSL.ToString("0.00"));

//le test le plus important
//On test si l'avion du joueur est en dessous des 100 pieds.
//Si on depasse les 100 pieds, ca affiche un message et ca déclenche le décollage de la chasse enemie via les trigger go1 et go2
//A noter la variable bool Spawned qui pass a true afin de ne pas generer constamment de nous nouveaux avions enemis toutes les 1/30 de secondes
if (Z_AltitudeAGL > 100 && !Spawned)
{
Spawned = true;
GamePlay.gpHUDLogCenter("Vous avez depassé les 100 pieds AGL");
AiAction action1 = GamePlay.gpGetAction("go1");
AiAction action2 = GamePlay.gpGetAction("go2");
if (action1 != null)
{
action1.Do();
}
if (action2 !=null)
{
action2.Do();
}
}

}


}

}

}

Si vous avez des questions, n'hesitez pas

Bolt

Publié : dim. août 26, 2012 8:40 am
par bolt
Pour finir, voici une petite aide sur le trimm du Blenheim et autres conseils pour ceux qui ne connaissent pas le Blenheim.

Il tire a droite en vole. Pour eviter ca il faut trimmer pas mal. Je vous conseil de le faire avant decollage. Voici un petit PDF qui indique ou et combien de trim il faut mettre :

http://www.fileconvoy.com/dfl.php?id=ga ... b34b605a2c

meme avec le trim, au decollage, il faudra du palonier pour garder l'avion sur le piste. Rotation a 90-100 MPH. Maintenez le vol a l'horizontal et rentrez le train.

A noter que pour les besoins de la mission, en bout de piste vous passez le bout de la coline et vous plongez dans la valée. il faut suvre le relief pour pas se faire detecter. Profitez en pour prendre de la vitesse.

Dès que vous volez a 130 MPH, passer en petit pas. Il faudra trimmer un peu en profondeur car l'avion voudra se cabrer. Ensuite, c'est assez stable si vousavez trimmez comme indiqué sur le PDF.

Bon vol

Publié : dim. août 26, 2012 9:15 pm
par OBT~Miguel21
Merci Bolt ;)

Publié : dim. août 26, 2012 9:23 pm
par Rickenbacher
Téléchargé, j'espère pouvoir tester bientôt !
Merci en tous cas Bolt !

Publié : dim. août 26, 2012 9:57 pm
par bolt
j'ai oublié de préciser mais il faut passer a moins de 200 metres de l'avion cible pour que l'observateur puisse etre assez pres pour identifier l'avion enemie.

Sinon, cette mission est reutilisable a souhait. Vous pouvez le reprendre, la modifier ...etc a volonté.

Au fait, meme si vous trouvez la mission completement naze, n'hesitez pas a me donner vos critiques. C'est ma premiere mission et je prends les feedback.

Merci

Publié : dim. sept. 02, 2012 7:02 pm
par Mike_Sky
Un autre gros merci...
Je suis nul en programmation et le simple de fait d'étudier / copier ton script m'a permis de comprendre 2 ou 3 trucs basiques qui vont me simplifier ma vie d'éditeur.:notworthy

Publié : lun. sept. 03, 2012 9:18 pm
par bolt
Salut Mike_Sky,

Merci a toi et je suis content que ca ait pu te servir. C'est vraiment le but. Je ne suis pas non plus un king du code mais j'essai de comprendre et autant que le maximum de gens en profite. C'est pierre apres pierre qu'on va rendre ce simu interessant pour un maximum de gens.

Je suis actuellement en train de programmer un petit bout de programme qui va afficher le nombre de G encaissé. C'est basique mais c'est plus pour tester des trucs qu'autre chose. Pour l'instant ca ne mesure les G que suivant le sens de d'évolution de l'appareil. Je veux dire par la que si tu vol droit, tu as les G suivant ton axe de vol mais si tu ton avion tombe a plat, c'est suivant le sens de déplacement et pas l'axe de l'avion. En fait c'est parce qu'il me faudrait un repere avion pour connaitre les deplacement dans ce repere mais je n'ai pas trouvé de methode pour ca. J4ai donc limité au déplacement "simple". Je devrais finir ca cette semaine (reprise de boulot = moins de temps).

Bolt

Publié : lun. sept. 03, 2012 10:10 pm
par bolt
Bon,

Comme je risque de tarder a poster un truc testé, je post directement le code sur l'acceleration dont je parlais plus haut. C'est donc pas testé mais ca permettra de voir ce qu'on peut fqire avec les script.

JE suis reparti d'un source Black Box existant. Ce source a été fait pour enregistrer certains parametre de vol. Je le reutilise car j'ai besoin de connaitre la vitesse de mon avion. J'ai laissé le passage ou on prend plein d'info sur l'avion (Vitesse, altitude, vario ...etc) meme si ca sert plus apres. Ensuite j'ai fait une double boucle de test pour prendre les position et le temps a un moment donnée et puis la meme chose au clic suivant. J'ai donc le delta temps et position X,Y et Z. Je fait un peu de formule de physique de mémoire de mes cours d'il y a longtemps. C'est la que j'espere que je me suis pas trompé.

Ca affiche donc les G (Vitesse finale - vitesse initiale divisé par le temps au carré). J'affiche aussi l'espace parcouru en m pour chaque clic avec cette formule :
distance = System.Math.Sqrt(((xP2 - xP1) * (xP2 - xP1)) + ((yP2 - yP1) * (yP2 - yP1)) + ((zP2 - zP1) * (zP2 - zP1)));

Sinon, cette ligne sert a passer des Miles par heure a des m/s : ((I_VelocityIAS * 1.6 * 1000) / 3600);.

Si vous avez des questions, n'hesitez pas. Si vous voyez un os dans lepaté, n'hesitez pas non plus. Faut le prendre comme un exercice.
A noter que les retour d'info en G sont très variable de l'attitude en vol.

a+
Bolt

Code : Tout sélectionner

using System; using maddox.game; using maddox.game.world; using maddox.GP; //using System.math; public class Mission : AMission { //User Control bool do_get = true; //Coord1 Player double xP1; double yP1; double zP1; //Coord2 Player double xP2; double yP2; double zP2; //variables double temps1; double temps2; double distance; double V0 = 0; double VFinale; double acceleration2; bool premiereMesure = true; //Define and Init AiAircraft cur_Plane; double cur_Time = 0.0; double I_VelocityIAS = 0.0; double I_Altitude = 0.0; double I_Variometer = 0.0; double I_Peilzeiger = 0.0; double I_MagneticCompass = 0.0; double I_Slip = 0.0; double Z_Overload = 0.0; double Z_AltitudeAGL = 0.0; double Z_AltitudeMSL = 0.0; double Z_VelocityIAS = 0.0; double Z_VelocityTAS = 0.0; double Z_VelocityMach = 0.0; double Z_AmbientAirTemperature = 0.0; //Script Main public override void OnTickGame() { //Init Ticker base.OnTickGame(); //loop rate set to ~1/30th of a second, i.e. 30 ticks = ~1 second if (Time.tickCounter() % 30 == 1) { //Get player aircraft cur_Plane = GamePlay.gpPlayer().Place() as AiAircraft; if (cur_Plane != null) { //Get Data ------------------------------------------------------------------------ if (do_get) { cur_Time = Time.current(); I_MagneticCompass = cur_Plane.getParameter(part.ParameterTypes.I_MagneticCompass, -1); I_Altitude = cur_Plane.getParameter(part.ParameterTypes.I_Altitude, -1); I_VelocityIAS = cur_Plane.getParameter(part.ParameterTypes.I_VelocityIAS, -1); I_Variometer = cur_Plane.getParameter(part.ParameterTypes.I_Variometer, -1); I_Peilzeiger = cur_Plane.getParameter(part.ParameterTypes.I_Peilzeiger, -1); I_Slip = cur_Plane.getParameter(part.ParameterTypes.I_Slip, -1); Z_Overload = cur_Plane.getParameter(part.ParameterTypes.Z_Overload, -1); Z_AltitudeAGL = cur_Plane.getParameter(part.ParameterTypes.Z_AltitudeAGL, -1); Z_AltitudeMSL = cur_Plane.getParameter(part.ParameterTypes.Z_AltitudeMSL, -1); Z_VelocityIAS = cur_Plane.getParameter(part.ParameterTypes.Z_VelocityIAS, -1); Z_VelocityTAS = cur_Plane.getParameter(part.ParameterTypes.Z_VelocityTAS, -1); Z_VelocityMach = cur_Plane.getParameter(part.ParameterTypes.Z_VelocityMach, -1); Z_AmbientAirTemperature = cur_Plane.getParameter(part.ParameterTypes.Z_AmbientAirTemperature, -1); } if (GamePlay.gpPlayer() != null) { if (GamePlay.gpPlayer().Place() != null) { Player me = GamePlay.gpPlayer(); AiActor where = me.Place(); Point3d pos = where.Pos(); if (premiereMesure) { xP1 = pos.x; yP1 = pos.y; zP1 = pos.z; V0 = ((I_VelocityIAS * 1.6 * 1000) / 3600); temps1 = Time.current(); premiereMesure = false; } else { xP2 = pos.x; yP2 = pos.y; zP2 = pos.z; VFinale = ((I_VelocityIAS * 1.6 * 1000) / 3600); premiereMesure = true; } distance = System.Math.Sqrt(((xP2 - xP1) * (xP2 - xP1)) + ((yP2 - yP1) * (yP2 - yP1)) + ((zP2 - zP1) * (zP2 - zP1))); temps2 = Time.current() - temps1; acceleration2 = ((VFinale - V0) / (temps2 * temps2)); acceleration2 = (acceleration2 / 9.81); if (premiereMesure) { GamePlay.gpHUDLogCenter("Acceleration :" + acceleration2.ToString("0.00") + " Distance :" + distance.ToString("0.00")); } } } } } } }

Publié : lun. sept. 03, 2012 10:33 pm
par bolt
Mike_Sky, si tu programme un peu, je vais peut etre te dire des choses que tu sais déja mais vaut mieux ca que de ne rien dire.

Utilise un logiciel de programmation plutot que l'editeur texte de COD car c'est beaucoup plus simple. Je te propose le Visual C#Express qui est gratuit et top. Tu trouvera facilement sur google.

Sous C# Express, tu cliques sur :

- Nouveau projet
- Bibliotheque de classes
- Tu vires le petit bout de code que C# va mettre par defaut et tu mets ton programme (ou tu copie celui plus haut pour essai pour démarrer).

Tu va surrement remarquer qu'il y a plein d'erreur. C'est normale. il faut associé les références de DLL de COD a ton programme. C'est simple, tu fais ca :

- Dans l'explorateur de solution a droit tu fais cliques droit sur ClassLibrary et tu cliques sur ajouter une reference...
-Dans la boite qui s'ouvre tu cliques sur l'onglet parcourir
- Et la tu selectionnes les DLL suivantes qui se trouve dans ton dossier jeux (fait une recherches explorateur pour les trouver) :
- Campaign
- core
- gamePages
- gamePlay
- gameWorld
- hostview
- maddox
- part
- partbob
- sound
- strategy
Il y en a qui te serviront pas tout de suite mais tu sera couvers. Petit truc, tu copies ces DLL dans un dossier dans un coin et comme ca, la prochaine fois, avec ta boite de selection de reference, tu pourra les retrouver plus facilement que si elles sont dispercées dans le dossier de COD.

Quand tu as chargé ces DLL en reference, normalement, toutes les erreur en souligné rouge doivent disparaitre.

Ca permet pas de tester la validité de ton code sous COD mais ca permet au moins de voir si tu as des erreurs de synthaxe et si tu as pas d'erreur de methode du jeux.

Derniere choses, il faut parfois un peu fouiller les methodes (fonctions) des DLL. Je te conseilles ce logiciel gratuit et super :

http://wiki.sharpdevelop.net/ILSpy.ashx

Sinon il y a aussi l'explorateur d'objet de C# Express mais j'aimes moins.

Voila, n'hesites pas si tu as des questions.

Bolt

Publié : mar. sept. 04, 2012 7:45 pm
par Mike_Sky
Salut Bolt, merci pour les conseils.
T'as bien vu, j'suis une buse en programmation.

Juste pour info, tu ne désactives tes "triggers PassTrough" après utilisation.
Attention à la multiplication d'apparitions d'objets!
J'ai tenté ce code et ça marche.

Code : Tout sélectionner

GamePlay.gpGetTrigger("Nom du trigger").Enable = false;
@+++

Publié : mar. sept. 04, 2012 8:14 pm
par bolt
Hello Mike_Sky,

Oui effectivement, j'aurais du en mettre dans les tests If. Tu as raison. Merci pour la remarque.

Bolt

Publié : mer. sept. 05, 2012 6:52 pm
par Mike_Sky
Je n'ai pas du trouver exactement le même programme, voir mal compris.
J'ai téléchargé Microsoft Visual C++ 2010 Express.
C'est bien ça?
Car je n'ai pas tout à fait le même comportement que tu m'annonces.:sweatdrop

Désolé si je fait mon boulet, la dernière fois que j'ai programmé quelque chose c'était du Pascal à la fin des années 80.:yes:
Et sans commentaire.:huh:

Publié : mer. sept. 05, 2012 10:22 pm
par bolt
Hello Mike_Sky,

En fait tu as installé C++ Express 2010 au lieu de C# Express 2010. Le C++ est un language plus difficile et reservé aux barbus.

Les script de COD sont en C#.

C'est pas grave si tu as installé C++. Ne desinstalle rien. C# a besoin de certains fichiers commun avec C++. Il seront déja dispo comme ca. L'installe de C# sera donc un peu plus courte.

Bon, sinon, je t'ai fait un petit PDF sur l'installe de C#, la config des DLL et quelques infos sur les fonctions de ces DLL et comment s'y retrouver. C'est ici :

http://www.filedropper.com/c-sharpetdll

http://www.mediafire.com/view/?tnk96kv3zophir4


Ca pourra servir a tout ceux qui veulent démarrer.

Sinon, j'ai pas précisé mais C# Express (comme tout les soft Express comme C++ d'ailleurs), demande a terme une activation. C'est gratuit, il faut juste cliquer sur demander une clé quand il te le demande. Il faut créer un compte MS pour ca, ca prend deux minutes et microsoft t'envoi la clé.

Bonne lecture, si tu as des questions. N'hesites pas.

Sinon, a tous, le service filedropper est limité a 7 jours pour un fichier uploadé. Ensuite il est supprimé. Avez vous un lien sur un site sans inscription qui garde les fichiers a vie ?

Merci
Bolt

Ps : désolé pour la presentation que j'ai faite un peu a l'arrache. Elle est lien d'etre belle et esthetique. Désolé aussi pour les puristes de C#et des appelation officielle et rigoureuses du language du programmeur. J'ai surrement fait des erreur dans le nom de certaines choses.

Publié : mer. sept. 05, 2012 11:35 pm
par EFG_Fried
Merci Bolt :)

C'est très sympa de nous faire partager tes connaissances qui seront très utiles pour démarrer dans ce charabia de C#

Publié : ven. sept. 07, 2012 6:33 pm
par Mike_Sky
C'est génial ton aide Bolt!
Un énorme merci!!!!!!!!!!!!!!!:notworthy

Publié : ven. sept. 07, 2012 7:29 pm
par EFG_Richy
bolt a écrit :Sinon, a tous, le service filedropper est limité a 7 jours pour un fichier uploadé. Ensuite il est supprimé. Avez vous un lien sur un site sans inscription qui garde les fichiers a vie ?
J'utilise personnellement mediafire.
Bon, il y a une inscription à faire, pour avoir un compte et gérer ses fichiers, mais c'est gratuit et on ne reçoit pas de pub ou autres trucs gênants, donc pas vraiment de contrainte, et au moins les fichiers ne sont pas supprimés même si plus personne ne les télécharge.

Sinon, merci pour les infos!!!

Publié : ven. sept. 07, 2012 8:57 pm
par bolt
Bonsoir Richy,

Merci pour l'info je vais regarder ca.

@ Mike_Sky, de rien. Ca me fait plaisir d'aider.

Bolt

Publié : ven. sept. 07, 2012 11:21 pm
par bolt
Voila, j'aqi ajouté un lien mediafire a mon post avec le petit fichier. Merci a vous.


Ha sinon, j'oublié Mike_Sky. Quand j'utilise C# 2010, je l'ouvre avant de lancer COD. Ensuite sous l'éditeur de mission je fais un Alt - Tab pour revenir a C#et faire des copier coller de code dans la boite a script de COD. En gros je programme sous C#et je recopie dans COD.

Bon codage,
Bolt