0 Members and 1 Guest are viewing this topic.
int oapiGetNavDescr (NAVHANDLE hNav,char *descr,int maxlen)
char BaseDescr[255]={0};oapiGetNavDescr (hNav,BaseDescr,254); // 254 pour pas avoir de merde avec le null de fin
char cStringComplete[255]={0}; // initialise a zéro la chaine!!!TaFonctionQuiRenvoieChar(cStringComplete,254); // get la string completechar *cPtr=strstr(cStringComplete,":"); // recherche la séparation*cPtr=0; // met un zéro a la placeint iNumeroDeBase=atoi(cStringComplete); // atoi le débutchar cNomDeLaBaseFinale[255]={0}; // initialise a zéro la chaine!!!strcpy(cNomDeLaBaseFinale,cPtr+1); //copie le nom de la base
char cStringComplete[255]={0}; // initialise a zéro la chaine!!!if(TaFonctionQuiRenvoieChar(cStringComplete,254)<2) return ERREUR;char *cPtr=strstr(cStringComplete,":"); // recherche la séparationif(!cPtr) return ERREUR;*cPtr=0; // met un zéro a la placeint iNumeroDeBase=atoi(cStringComplete); // atoi le débutchar cNomDeLaBaseFinale[255]={0}; // initialise a zéro la chaine!!!strcpy(cNomDeLaBaseFinale,cPtr+1); //copie le nom de la baseif(strlen(cNomDeLaBaseFinale)<2) return ERREUR;
//Récupération des clics utilisateursbool SuborbMFD::ConsumeKeyBuffered (DWORD key){ bool cbChooseTGT(void *id, char *str, void *data); switch (key) { case OAPI_KEY_T: if(modeAction != -1) { if(langueEnglish) oapiOpenInputBox("Select Target :", cbChooseTGT, 0, 20, (void*)this); else oapiOpenInputBox("Choix de la destination :", cbChooseTGT, 0, 20, (void*)this); } return true;}}
bool SuborbMFD::chooseTGT(char *str){ char *base = NULL; char pad[3]; char *ptr; const char delimiteur = ':'; ptr = strchr(str,delimiteur); OBJHANDLE baseChoisie; if(ptr == NULL) { base = (char *)malloc (sizeof (*base) * (strlen(str) + 2)); strcpy(base,str); } else { base = (char *)malloc (sizeof (*base) * (ptr - str + 2)); strncpy(base,str,ptr-str); } sprintf(oapiDebugString(),"%s",base); baseChoisie = oapiGetBaseByName(body.corps,base); if(baseChoisie == NULL) return false; else {//Alors on choix du pad int numTotalPad = oapiGetBasePadCount(baseChoisie); if(numTotalPad == 0) oapiGetBaseEquPos(baseChoisie,&cible.lonCR,&cible.latCR); else { if(ptr == NULL) { //Alors choix au hasard parmi les dispos int status; bool trouve = false; int k=0; while(k<numTotalPad && !trouve) { oapiGetBasePadStatus(baseChoisie,k,&status); if(status==0) { trouve = true; cible.numPad = k; } k++; } if(!trouve) { baseChoisie = NULL; autoPilotes.approach.modeAuto = false; return false; } } else { //On v�rifie si ce pad est libre, sinon on jette strncpy(pad,ptr+1,1); int numPad = max(atoi(pad)-1,0); if(numPad<0 || numPad>=numTotalPad) { baseChoisie = false; autoPilotes.approach.modeAuto = false; return false; } else { int status; oapiGetBasePadStatus(baseChoisie,numPad,&status); if(status == 0) cible.numPad = numPad; else { baseChoisie = false; autoPilotes.approach.modeAuto = false; return false; } } } } } //Si on est toujours vivant, c'est que c'est bon. cible.baseCible = baseChoisie; //extraction des coordonnées de la base oapiGetBasePadEquPos(cible.baseCible,cible.numPad,&cible.lonCR,&cible.latCR); cible.latC = cible.latCR*radian; cible.lonC = cible.lonCR*radian; SuborbMFD::calcul(); return true;}
bool SuborbMFD::chooseTGT(char *str){ char base[255]={0}; // nom de la base OBJHANDLE baseChoisie=NULL; // !!!TOUJOURS initialiser les handles!!! int iNumeroDePad=-1; // numero de pad, -1 pas de numéro // y a eu un merde le gars a rien rentré // ou autres problemes. on sais jamais if(str==NULL) return false; if(strlen(str)<2) return false; // recherche la séparation si y a un numéro de pad char *cPtr=strstr(str,":"); // on a un numéro aussi, prend le // et sépare la string en deux avec un zero. if(cPtr!=NULL) { *cPtr=0; // sépare la string en deux iNumeroDePad=atoi(cPtr+1); // prend le numéro de pad if(iNumeroDePad<0||iNumeroDePad>50) // assure une premiere validation iNumeroDePad=-1; } //copie le nom de la base strcpy(base,str); // pas de nom valide ? ca pue le gars a merdé ! if(strlen(base)<3) return false; // la on est bon, au moins un nom de base // et possible aussi un numéro de pad // sinon iNumeroDePad==-1 sprintf(oapiDebugString(),"base: %s pad: %i",base,iNumeroDePad); baseChoisie = oapiGetBaseByName(body.corps,base); if(baseChoisie == NULL) return false; // pas trouvé, au revoir ! else { //Alors on choix du pad int numTotalPad = oapiGetBasePadCount(baseChoisie); if(numTotalPad == 0) { oapiGetBaseEquPos(baseChoisie,&cible.lonCR,&cible.latCR); } else { // pas de pad spécifié ? //Alors choix au hasard parmi les dispos if(iNumeroDePad<0) { int status; bool trouve = false; int k=0; while(k<numTotalPad && !trouve) { oapiGetBasePadStatus(baseChoisie,k,&status); if(status==0) { trouve = true; cible.numPad = k; } k++; } if(!trouve) { baseChoisie = NULL; autoPilotes.approach.modeAuto = false; return false; } } else { //On verifie si ce pad est libre, sinon on jette // on est dans le range au moins ? if(iNumeroDePad>=numTotalPad) { baseChoisie = false; autoPilotes.approach.modeAuto = false; return false; } else { int status; oapiGetBasePadStatus(baseChoisie,iNumeroDePad,&status); if(status == 0) cible.numPad = iNumeroDePad; else { baseChoisie = false; autoPilotes.approach.modeAuto = false; return false; } } } } } //Si on est toujours vivant, c'est que c'est bon. cible.baseCible = baseChoisie; //extraction des coordonnées de la base oapiGetBasePadEquPos(cible.baseCible,cible.numPad,&cible.lonCR,&cible.latCR); cible.latC = cible.latCR*radian; cible.lonC = cible.lonCR*radian; SuborbMFD::calcul(); return true;}
DanSteph a écrit:C'est dommage quoi.. un super algo mais une interface DOS... mais c'est toi qui vois hein