3840 lines
		
	
	
		
			161 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			3840 lines
		
	
	
		
			161 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
#include <vcl.h>
 | 
						||
#include <stdio.h>
 | 
						||
#include <mmsystem.h>
 | 
						||
#include <dateutils.hpp>
 | 
						||
#pragma hdrstop
 | 
						||
 | 
						||
#include "Tmain.h"
 | 
						||
#include "THTTPdownloader.h"
 | 
						||
#include "inifiles.hpp"
 | 
						||
#include "TAlertBox.h"
 | 
						||
#include "visorAtaque.h"
 | 
						||
#include "TInfoBox.h"
 | 
						||
#include "TComprobadorActividad.h"
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
#define min(a, b)  (((a) < (b)) ? (a) : (b))
 | 
						||
 | 
						||
 | 
						||
#define csREADPASS      -2
 | 
						||
#define csRESETPASS     -1
 | 
						||
#define csLOGIN         0
 | 
						||
#define csREADY         1
 | 
						||
 | 
						||
 | 
						||
 | 
						||
#pragma package(smart_init)
 | 
						||
#pragma resource "*.dfm"
 | 
						||
Tmain *main;
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
__fastcall Tmain::Tmain(TComponent* Owner)
 | 
						||
        : TForm(Owner)
 | 
						||
{
 | 
						||
  
 | 
						||
 | 
						||
  currentState = csLOGIN;
 | 
						||
  
 | 
						||
  /* Magnetic Form */
 | 
						||
  snapped=false;
 | 
						||
  UpdateWorkArea();  //set our workarea rect
 | 
						||
  thresh = 25; //get threshold
 | 
						||
//  snapwin = FindWindow("TvisorAtaques",NULL); //get window to snap to
 | 
						||
  /*****************/
 | 
						||
 | 
						||
 | 
						||
  computacionesOcupadas = -1;
 | 
						||
  numEventos = 0;
 | 
						||
 | 
						||
  randomize();
 | 
						||
  nextUpdateCLK=60;
 | 
						||
/*
 | 
						||
  nextUpdate->Interval=nextUpdateCLK*1000;
 | 
						||
  nextUpdate->Enabled=true;
 | 
						||
*/
 | 
						||
  MyEvents = new TList;
 | 
						||
  MyAttacks = new TList;
 | 
						||
  MyPlanets = new TList;
 | 
						||
  AtaquesOfensivos = new TList;
 | 
						||
 | 
						||
 | 
						||
 | 
						||
  TIniFile *ini;
 | 
						||
 | 
						||
  ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\salvaVidas.ini");
 | 
						||
 | 
						||
  this->Top = ini->ReadInteger("window","TOP",this->Top);
 | 
						||
  this->Left = ini->ReadInteger("window","LEFT",this->Left);
 | 
						||
  this->Width = ini->ReadInteger("window","WIDTH",this->Width);
 | 
						||
  this->Height = ini->ReadInteger("window","HEIGHT",this->Height);
 | 
						||
 | 
						||
 | 
						||
  CFG_programSondeo = ini->ReadString("avisos","programSondeo","");;
 | 
						||
  CFG_ejecutarProgama = !CFG_programSondeo.IsEmpty();
 | 
						||
 | 
						||
 | 
						||
  sndCHK_ataque->Checked = ini->ReadBool("avisos","ataqueAutomatico",false);
 | 
						||
  sndCHK_sondeo->Checked = ini->ReadBool("avisos","sondeoAlEnemigo",false);
 | 
						||
  sndCHK_peligro->Checked =ini->ReadBool("avisos","atacanteDetectado",true);
 | 
						||
  sndCHK_error->Checked =  ini->ReadBool("avisos","erroresGenerales",false);
 | 
						||
  sndCHK_network->Checked =ini->ReadBool("avisos","sinConexionRed",true);
 | 
						||
 | 
						||
 | 
						||
  chkSondeo5min->Checked = ini->ReadBool("avisos","sondeo5min",false);
 | 
						||
  chkSondeo2min->Checked = ini->ReadBool("avisos","sondeo3min",false);
 | 
						||
  chkAviso5min->Checked = ini->ReadBool("avisos","aviso5min",false);
 | 
						||
  MenuItem5->Checked = ini->ReadBool("avisos","alarmaPersonal",false);
 | 
						||
 | 
						||
  activarColaAtaques->Checked = ini->ReadBool("colaAtaques","colaActiva",true);
 | 
						||
  AnsiString colaAtaques = ini->ReadString("colaAtaques","nombreCola","");
 | 
						||
  int   x = ini->ReadInteger("colaAtaques","siguienteAtaque",0);
 | 
						||
 | 
						||
 | 
						||
  oG_email      = ini->ReadString("login","email","");
 | 
						||
  oG_urlReadPass= ini->ReadString("login","urlReadPass","");
 | 
						||
  oG_login      = ini->ReadString("login","user","");
 | 
						||
  oG_password   = ini->ReadString("login","pass","");
 | 
						||
  oG_host       = ini->ReadString("login","host","");
 | 
						||
  oG_Universo   = ini->ReadInteger("login","univ",12);
 | 
						||
  oG_userAgent = ini->ReadString("login","userAgent","Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1");
 | 
						||
 | 
						||
  oG_lphu   = ini->ReadString("login","lphu","");
 | 
						||
  if ( !oG_lphu.IsEmpty() )
 | 
						||
        oG_decode(oG_lphu,&oG_login,&oG_password,&oG_host,&oG_Universo);
 | 
						||
  else {
 | 
						||
        oG_encode(&oG_lphu,oG_login,oG_password,oG_host,oG_Universo);
 | 
						||
        statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+oG_lphu );
 | 
						||
  }
 | 
						||
 | 
						||
  oG_location   = ini->ReadString("login","redir","");
 | 
						||
 | 
						||
  CFG_visionGeneralSoloLunas =  ini->ReadBool("keepAlive","visionGeneralSoloLunas",false);
 | 
						||
  CFG_tiempoCritico = ini->ReadInteger("keepAlive","tiempoCritico",4); // Cuatro segundos antes de que llegue el ataque, retirar TODO.
 | 
						||
  CFG_ocuparMaxComputaciones = ini->ReadInteger("keepAlive","ocuparMaxComputaciones",10);       // Computaciones m<>ximas que se quieren tener ocupadas para los ataques automatizados
 | 
						||
  setComputaciones->Position = CFG_ocuparMaxComputaciones;
 | 
						||
  CFG_verbose = ini->ReadBool("keepAlive","verbose",true);       // Mostrar toda la informacion posible de lo que estamos haciendo
 | 
						||
  CFG_ocultarActividadDespuesResetServer = ini->ReadBool("keepAlive","ocultarActividadDespuesResetServer",false);       // Oculta el * despues de logar por segunda vez (por ejemplo tras el reset del server a las 3:00 am)
 | 
						||
 | 
						||
  delete ini;
 | 
						||
/*
 | 
						||
  oG_login      = "cataglyphis";
 | 
						||
  oG_password   = "cabrones";
 | 
						||
  oG_host       = "ogame310.de";
 | 
						||
  oG_Universo   = 14;
 | 
						||
*/
 | 
						||
  oG_session    = "";
 | 
						||
  oG_SSID       = "";
 | 
						||
  oG_Cookie     = "";
 | 
						||
                 session->Text = oG_session;
 | 
						||
                 PHPSESSID->Text = oG_Cookie;
 | 
						||
 | 
						||
  PageControl1->ActivePage=TabSheet1;
 | 
						||
 | 
						||
  Application->Title = "sV: "+oG_login+" - U"+AnsiString(oG_Universo);
 | 
						||
  this->Caption = "salvaVidas 0.5 Alpha :: "+oG_login+" - U"+AnsiString(oG_Universo);
 | 
						||
 | 
						||
  espacioEntreAtaques = nextUpdateCLK + 60;    // La cola de ataque se activa 60 segundos despues de la primera vision general...
 | 
						||
  espacioEntreAtaques = 30;    // La cola de ataque se activa 180 segundos despues de lanzar el programa...
 | 
						||
 | 
						||
 | 
						||
  if ( !colaAtaques.IsEmpty() && cargarAtaques(colaAtaques) )
 | 
						||
  {
 | 
						||
          // marcamos todos los ataques (hasta x) como lanzados
 | 
						||
          x = min(x,AtaquesOfensivos->Count);
 | 
						||
          for (int i=0;i<x;i++) ((TAtaqueOfensivo *)AtaquesOfensivos->Items[i])->lanzado = true;
 | 
						||
          dgAtaques->RowCount = AtaquesOfensivos->Count+1;
 | 
						||
          if ( dgAtaques->RowCount>1 ) dgAtaques->FixedRows=1;
 | 
						||
  }
 | 
						||
  
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::oG_decode(AnsiString oG_lphu,AnsiString *oG_login,AnsiString *oG_password,AnsiString *oG_host,int *oG_Universo)
 | 
						||
{
 | 
						||
  char buffer[256], *aux;
 | 
						||
  int i,j,z;
 | 
						||
  i=5;
 | 
						||
 | 
						||
  aux = buffer;
 | 
						||
  for (j=1;j<=oG_lphu.Length() && oG_lphu[j]!='<27>';j++)
 | 
						||
      *(aux++) = (unsigned char)oG_lphu[j]-(unsigned char)((i++)%26);
 | 
						||
  j++;*(aux++)='\0';
 | 
						||
  *oG_login = buffer;
 | 
						||
 | 
						||
  aux = buffer;
 | 
						||
  for (;j<=oG_lphu.Length() && oG_lphu[j]!='<27>';j++)
 | 
						||
      *(aux++) = (unsigned char)oG_lphu[j]-(unsigned char)((i++)%26);
 | 
						||
  j++;*(aux++)='\0';
 | 
						||
  *oG_password = buffer;
 | 
						||
 | 
						||
  aux = buffer;
 | 
						||
  for (;j<=oG_lphu.Length() && oG_lphu[j]!='<27>';j++)
 | 
						||
      *(aux++) = (unsigned char)oG_lphu[j]-(unsigned char)((i++)%26);
 | 
						||
  j++;*(aux++)='\0';
 | 
						||
  *oG_host = buffer;
 | 
						||
 | 
						||
  *oG_Universo = oG_lphu[j]-'0';
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::oG_encode(AnsiString *oG_lphu,AnsiString oG_login,AnsiString oG_password,AnsiString oG_host,int oG_Universo)
 | 
						||
{
 | 
						||
  char buffer[256], *aux;
 | 
						||
  int i,j,z;
 | 
						||
  i=5;
 | 
						||
 | 
						||
  aux = buffer;
 | 
						||
  for (j=1;j<=oG_login.Length();j++)
 | 
						||
      *(aux++) = (unsigned char)oG_login[j]+(unsigned char)((i++)%26);
 | 
						||
 | 
						||
  *(aux++)='<27>';
 | 
						||
 | 
						||
  for (j=1;j<=oG_password.Length();j++)
 | 
						||
      *(aux++)= (unsigned char)oG_password[j]+(unsigned char)((i++)%26);
 | 
						||
 | 
						||
  *(aux++)='<27>';
 | 
						||
 | 
						||
  for (j=1;j<=oG_host.Length();j++)
 | 
						||
      *(aux++)= (unsigned char)oG_host[j]+(unsigned char)((i++)%26);
 | 
						||
 | 
						||
  *(aux++)='<27>';
 | 
						||
 | 
						||
  *(aux++)=oG_Universo+'0';
 | 
						||
 | 
						||
  *(aux++)='\0';
 | 
						||
 | 
						||
  *oG_lphu = buffer;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::Button3Click(TObject *Sender)
 | 
						||
{
 | 
						||
  HTTPdownloader->Show();
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::recuperarPassword(void) {
 | 
						||
  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > CAMBIO DE PASSWORD") );
 | 
						||
  nextUpdateCLK = 5;
 | 
						||
 | 
						||
        AnsiString request, host, page;
 | 
						||
        int error;
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        int s;
 | 
						||
        host = oG_urlReadPass.SubString(8, oG_urlReadPass.Length()-7);
 | 
						||
        s = host.Pos("/");
 | 
						||
        page = host.SubString( s, host.Length()-s );
 | 
						||
        host = host.SubString( 1, s-1 );
 | 
						||
 | 
						||
        request ="GET "+page+" HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es,es-ar;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
 | 
						||
        lastRequest = lastRequest_login;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
        if ( error==-1 ) {
 | 
						||
          statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Inicio Sesion: error recuperando password") );
 | 
						||
        } else {
 | 
						||
 | 
						||
          out->Position=0;
 | 
						||
          if ( ((char *)out->Memory)[0] == 'p' && ((char *)out->Memory)[1] == '|' ) {
 | 
						||
                  oG_password = AnsiString((char *)out->Memory+2);
 | 
						||
                  currentState = csLOGIN;
 | 
						||
          }
 | 
						||
        }
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
int __fastcall Tmain::cambioPassword(void) {
 | 
						||
  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > CAMBIO DE PASSWORD") );
 | 
						||
  nextUpdateCLK = 5;
 | 
						||
 | 
						||
        AnsiString request;
 | 
						||
        int error;
 | 
						||
        
 | 
						||
        request ="POST http://"+oG_host+"/game/reg/fa_pass.php HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es,es-ar;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://"+oG_host+"/game/reg/mail.php\r\n";
 | 
						||
	request+="Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
 | 
						||
	AnsiString params="email="+oG_email+"&send_pass=Enviar datos de acceso";
 | 
						||
	request+="Content-Length: "+AnsiString(params.Length())+"\r\n\r\n";
 | 
						||
	request+=params;
 | 
						||
 | 
						||
        lastRequest = lastRequest_login;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
        if ( error==-1 ) {
 | 
						||
          statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Inicio Sesion: error cambiando password") );
 | 
						||
        } else {
 | 
						||
          currentState = csREADPASS;
 | 
						||
        }
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::iniciarSesion()
 | 
						||
{
 | 
						||
/*****************************/
 | 
						||
    TDateTime start = Time();
 | 
						||
    TDateTime stop;
 | 
						||
/*****************************/
 | 
						||
 | 
						||
    AnsiString request, v;
 | 
						||
    int error = -1;
 | 
						||
 | 
						||
    if ( !CFG_ocultarActividadDespuesResetServer )
 | 
						||
            MyPlanets->Clear();
 | 
						||
 | 
						||
 | 
						||
	request ="POST http://"+oG_host+"/game/reg/login2.php HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es,es-ar;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://ogame.com.es/home.php\r\n";
 | 
						||
	request+="Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
 | 
						||
	AnsiString params="v=2&is_utf8=0&login="+oG_login+"&pass="+oG_password;
 | 
						||
	request+="Content-Length: "+AnsiString(params.Length())+"\r\n\r\n";
 | 
						||
	request+=params;
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        lastRequest = lastRequest_login;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
/*****************************/
 | 
						||
        stop=Time();
 | 
						||
/*****************************/
 | 
						||
 | 
						||
        if ( error==-1 ) {
 | 
						||
          statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Inicio Sesion: error de conexi<78>n") );
 | 
						||
        } else {
 | 
						||
            if ( out->Size <= 10 ) return -1;
 | 
						||
            error = checkError( out );
 | 
						||
            if ( error==-1 ) return -1;
 | 
						||
 | 
						||
            oG_Cookie=obtenerOGCookie();        // Tambien obtiene la session (la session Ya no, ahora va en el meta)
 | 
						||
            if ( oG_session.IsEmpty() )
 | 
						||
            {
 | 
						||
                char *pos, *posEnd, session[13];
 | 
						||
                out->Position=0;
 | 
						||
        	pos=StrPos((char *)out->Memory,"session=")+8;
 | 
						||
                oG_session = AnsiString( StrLCopy(session,pos,12) );
 | 
						||
            }
 | 
						||
 | 
						||
            if ( !oG_session.IsEmpty() )
 | 
						||
            {
 | 
						||
                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Inicio Sesion: ")+oG_session+" ["+AnsiString(MilliSecondsBetween(stop,start))+" / "+AnsiString(MilliSecondsBetween(Time(),stop))+"]");
 | 
						||
                 session->Text = oG_session;
 | 
						||
                 PHPSESSID->Text = oG_Cookie;
 | 
						||
 | 
						||
                 error = 0;
 | 
						||
            } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Inicio Sesion: oGameXXX.de SERVER error") );
 | 
						||
            }
 | 
						||
        }
 | 
						||
    
 | 
						||
 | 
						||
    if ( error==-1 ) {
 | 
						||
        errorCONEXION ++;
 | 
						||
        if ( errorCONEXION>20 ) {
 | 
						||
                nextUpdateCLK = 600;
 | 
						||
        } else
 | 
						||
        if ( errorCONEXION>3 ) {
 | 
						||
                nextUpdateCLK = 60;
 | 
						||
        } else
 | 
						||
                nextUpdateCLK = 10;
 | 
						||
 | 
						||
        currentState = csLOGIN;
 | 
						||
    } else {
 | 
						||
        errorCONEXION = 0;
 | 
						||
        currentState = csREADY;
 | 
						||
        nextUpdateCLK = 1;
 | 
						||
    }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
AnsiString __fastcall Tmain::obtenerOGCookie(void)
 | 
						||
{
 | 
						||
  AnsiString gameIndex_url;
 | 
						||
  HTTPheaders_list HeaderStruct;
 | 
						||
  int i;
 | 
						||
 | 
						||
  gameIndex_url="";
 | 
						||
  oG_Cookie="";
 | 
						||
  for (i=0;i<HTTPdownloader->headers->Count; i++ )
 | 
						||
  {
 | 
						||
    HeaderStruct = (HTTPheaders_list)HTTPdownloader->headers->Items[i];
 | 
						||
 | 
						||
    if ( HeaderStruct->key=="set-cookie" )
 | 
						||
    {
 | 
						||
      oG_Cookie = HeaderStruct->value.SubString(0,HeaderStruct->value.Pos(";"))+oG_Cookie;
 | 
						||
    }
 | 
						||
    if ( HeaderStruct->key=="location" )
 | 
						||
      gameIndex_url = HeaderStruct->value;
 | 
						||
  }
 | 
						||
/*
 | 
						||
Set-Cookie: PHPSESSID=351a763aba26b96a6766556cef275e6b; path=/
 | 
						||
Expires: Thu, 19 Nov 1981 08:52:00 GMT
 | 
						||
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
 | 
						||
Pragma: no-cache
 | 
						||
Set-Cookie: U_es14:lupenlll=U_es14%3Alupenlll; expires=Sun, 23 Sep 2007 22:02:52 GMT; path=/
 | 
						||
*/
 | 
						||
 | 
						||
  oG_session = "";
 | 
						||
  
 | 
						||
  int pos;
 | 
						||
  pos = gameIndex_url.Pos("session=");
 | 
						||
  if ( pos>0 )
 | 
						||
  {
 | 
						||
    oG_session = gameIndex_url.SubString(pos+8,12);
 | 
						||
  }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
  // NOS QUEDAMOS SOLO CON EL PHPSESSID
 | 
						||
  // SOY consciente de que en alg<6C>n momento
 | 
						||
  // (probablemente al inicio de sessi<73>n en ogame.com.es, perd<72> el AMA
 | 
						||
  //    que creo estar seguro que representa el TIMESTAMP del PHPSESSID)
 | 
						||
  oG_Cookie = oG_Cookie.SubString(0,oG_Cookie.Length()-1);
 | 
						||
 | 
						||
 | 
						||
/*
 | 
						||
  i = oG_Cookie.Pos("PHPSESSID=");
 | 
						||
  if ( i>0 )
 | 
						||
    oG_Cookie = "PHPSESSID="+oG_Cookie.SubString(i+10,32);
 | 
						||
*/
 | 
						||
 | 
						||
  return oG_Cookie;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::visionGeneral(void)
 | 
						||
{
 | 
						||
 int p=0;
 | 
						||
 if (MyPlanets->Count>0)
 | 
						||
 {
 | 
						||
   if ( activarSondeo->Checked )
 | 
						||
   {
 | 
						||
        // Cuando el sondeo esta activo, las actualizaciones se producen solo desde el planeta origen del sondeo.
 | 
						||
        p = (int)planetasOrigenSondeo->Items->Objects[planetasOrigenSondeo->ItemIndex];
 | 
						||
   } else {
 | 
						||
         do {
 | 
						||
                 p = rand() % MyPlanets->Count;
 | 
						||
         } while ( CFG_visionGeneralSoloLunas && ((PPlanetas)MyPlanets->Items[p])->t!=3 );
 | 
						||
   }
 | 
						||
 }
 | 
						||
 return _visionGeneral(p);
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
int __fastcall Tmain::_visionGeneral(int idxPLANET)
 | 
						||
{
 | 
						||
  TDateTime start=Time();
 | 
						||
  TDateTime stop;
 | 
						||
 | 
						||
 | 
						||
  bool enc;
 | 
						||
  bool nosAtacan = false;
 | 
						||
  int error;
 | 
						||
  AnsiString request;
 | 
						||
  // Descargamos la p<>gina de mensajes...
 | 
						||
//        oG_host, oG_session, oG_SSID, oG_Cookie;
 | 
						||
 | 
						||
  error = 0;
 | 
						||
  if ( oG_session=="" )
 | 
						||
  {
 | 
						||
     statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Session vacia") );
 | 
						||
     currentState = csLOGIN;
 | 
						||
     nextUpdateCLK = 0;
 | 
						||
  }
 | 
						||
 | 
						||
  if ( error!=-1 )
 | 
						||
  {
 | 
						||
          request = "GET /game/index.php?page=overview&session="+oG_session;
 | 
						||
          if ( MyPlanets->Count>0 && idxPLANET>=0 && idxPLANET<MyPlanets->Count )
 | 
						||
          {
 | 
						||
                request+="&cp="+AnsiString(((PPlanetas)MyPlanets->Items[idxPLANET])->cp)+"&mode=&gid=&messageziel=&re=0";
 | 
						||
          }
 | 
						||
          request+=" HTTP/1.1\r\n";
 | 
						||
          request+= "Host: "+oG_host+"\r\n";
 | 
						||
          request+= "User-Agent: "+oG_userAgent+"\r\n";//Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.7.12) Gecko/20050919 Firefox/1.0.7\r\n";
 | 
						||
          request+= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
          request+= "Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
          request+= "Accept-Encoding: gzip,deflate\r\n";
 | 
						||
          request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
          request+= "Keep-Alive: 300\r\n";
 | 
						||
          request+= "Connection: keep-alive\r\n";
 | 
						||
          if ( !oG_Cookie.IsEmpty() )
 | 
						||
                  request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
          request+= "\r\n";
 | 
						||
 | 
						||
          lastRequest = lastRequest_overview;
 | 
						||
          TMemoryStream* out  = new TMemoryStream();
 | 
						||
          error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
          /*******************/
 | 
						||
          stop=Time();
 | 
						||
          /*******************/
 | 
						||
 | 
						||
          if ( error!=-1 )
 | 
						||
          {
 | 
						||
                error = checkError( out );
 | 
						||
                if ( error!=-1 )
 | 
						||
                {
 | 
						||
                  // Parseamos el listado de mensajes...
 | 
						||
                  int i;
 | 
						||
 | 
						||
                  if ( oG_Cookie.IsEmpty() )
 | 
						||
                        oG_Cookie = obtenerOGCookie();
 | 
						||
 | 
						||
                  int eventos;
 | 
						||
                  int gO,pO,sO,tO;
 | 
						||
                  int gD,pD,sD,tD;
 | 
						||
 | 
						||
                  unsigned char *pos,*posEnd, *aux; int posOffset;
 | 
						||
                  char buffer[80],ordenes[45],tiempo[15],star[15],gsp_o[9],planeta_o[45],gsp_d[9],planeta_d[45];
 | 
						||
                  long lstar,t,last_numEventos;
 | 
						||
 | 
						||
                  last_numEventos = numEventos;
 | 
						||
                  out->Position = 0; numEventos = 0;
 | 
						||
 | 
						||
                  posEnd = (char *)out->Memory;
 | 
						||
 | 
						||
                  // Si aun no hemos rellenado la lista de nuestros planetas...
 | 
						||
                  if ( MyPlanets->Count==0 )
 | 
						||
                  {
 | 
						||
                          posEnd = obtenerListaPlanetas(posEnd);
 | 
						||
                          cargarPlanetasEnVisorAtaques();
 | 
						||
                          cargarPlanetasEnColaSondeos();
 | 
						||
                  }
 | 
						||
 | 
						||
                  // ######################
 | 
						||
                  // Buscamos nuestro punto de partida (La cabecera "eventos")
 | 
						||
                  pos = StrPos( posEnd, "Eventos" );
 | 
						||
                  if ( pos )
 | 
						||
                  {
 | 
						||
                        PEventos EStruct;
 | 
						||
 | 
						||
                        /***** ESTO ES UNA CHAPUZA, PERO ES LA FORMA MAS FACIL SIN RECODIFICAR TODO ******/
 | 
						||
                        long status[40][2];            // Maximo n<>mero de computaciones, 40...
 | 
						||
                        for (i = 0; i<last_numEventos && i<40; i++)
 | 
						||
                        {
 | 
						||
                                EStruct = (PEventos) MyEvents->Items[i];
 | 
						||
                                // Solo lo tenemos en cuenta si es una ataque NUESTRO //
 | 
						||
                                if ( EStruct->mision=='a' )
 | 
						||
                                {
 | 
						||
                                  status[i][0]=EStruct->start;
 | 
						||
                                  status[i][1]=(long)EStruct->status + (EStruct->avisado?((long)0x00010000):0);
 | 
						||
                                } else {
 | 
						||
                                  status[i][0]=0;
 | 
						||
                                  status[i][1]=0;
 | 
						||
                                }
 | 
						||
 | 
						||
                        }
 | 
						||
                        /***********************/
 | 
						||
 | 
						||
                        // Parseamos fila a fila el contenido de la tabla de eventos.
 | 
						||
                        while( pos=StrPos(pos,"<tr class='") )
 | 
						||
                        {
 | 
						||
                               // tipo de evento...
 | 
						||
                               pos+=11; posEnd=StrPos(pos,"'");
 | 
						||
                                StrLCopy(ordenes,pos,min(posEnd-pos,44) );
 | 
						||
                                StrCopy(buffer,"class='"); StrCat(buffer,ordenes);
 | 
						||
 | 
						||
 | 
						||
                               // tiempo restante
 | 
						||
                               pos=StrPos(posEnd,"='bxx");
 | 
						||
                               if ( pos>0 )
 | 
						||
                               {
 | 
						||
                                        pos=StrPos(pos,"title='")+7;
 | 
						||
                                        posEnd=StrPos(pos,"'");
 | 
						||
                                        StrLCopy(tiempo,pos,min(posEnd-pos,14) );
 | 
						||
 | 
						||
                                        pos=StrPos(pos,"star='")+6;
 | 
						||
                                        posEnd=StrPos(pos,"'");
 | 
						||
                                        StrLCopy(star,pos,min(posEnd-pos,14) );
 | 
						||
                                        lstar=atol(star);
 | 
						||
 | 
						||
                                        /*
 | 
						||
				        pos=StrPos(pos,buffer)+7;//+StrLen(buffer);
 | 
						||
				        posEnd=StrPos(pos,"'");
 | 
						||
				        StrLCopy(ordenes,pos,min(posEnd-pos,44));
 | 
						||
                                        */
 | 
						||
 | 
						||
				        pos=StrPos(pos,"='3'><span class='")+18;//+StrLen(buffer);
 | 
						||
				        posEnd=StrPos(pos,"'");
 | 
						||
				        StrLCopy(ordenes,pos,min(posEnd-pos,44));
 | 
						||
 | 
						||
                                             
 | 
						||
        tO=2;
 | 
						||
        // Vision General: transporte nuestro Vuelte
 | 
						||
        if ( strcmp(ordenes,"return owntransport")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                if ( StrPos(pos+10,"[") == 0 )  // v.0.77b
 | 
						||
                {
 | 
						||
                        // Obtenemos el tipo de origen
 | 
						||
                        { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                        // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                        posEnd = StrPos(pos,"<");
 | 
						||
                        StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
                        // Extraemos coordenadas ORIGEN
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                        strcpy(gsp_o,"0:0:0");
 | 
						||
                        strcpy(planeta_o,"-");
 | 
						||
                } else {                        // v. < 0.77b >= 0.77c
 | 
						||
                        // Obtenemos el tipo de origen
 | 
						||
                        { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
 | 
						||
                        if ( pos!=0 )
 | 
						||
                        {
 | 
						||
                                if (tO==1) pos = pos + 8;
 | 
						||
                                posEnd = StrPos(pos,"<");
 | 
						||
                                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                                // Extraemos coordenadas ORIGEN
 | 
						||
                                pos = aux;
 | 
						||
                                posEnd = StrPos(pos,"]");
 | 
						||
                                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
 | 
						||
                                pos = posEnd;
 | 
						||
                                aux=StrPos(pos,"[")+1;
 | 
						||
                                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                                { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
 | 
						||
                                if ( pos!=0 )
 | 
						||
                                {
 | 
						||
                                        if (tO==1) pos = pos + 8;
 | 
						||
                                        posEnd = StrPos(pos,"<");
 | 
						||
                                        StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                                       // Extraemos coordenadas DESTINO
 | 
						||
                                        pos = aux;
 | 
						||
                                        posEnd = StrPos(pos,"]");
 | 
						||
                                        StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
                                }
 | 
						||
                        }
 | 
						||
                }
 | 
						||
        } else
 | 
						||
        if ( strcmp(ordenes,"holding owntransport")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                tO=3; pos=StrPos(posEnd,"Luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Destino
 | 
						||
                StrLCopy(planeta_d,"Expedición P16",44); //"Expedici<63>n P16",44 );
 | 
						||
 | 
						||
                pos = StrPos(posEnd,"[")+1;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
        } else
 | 
						||
        // Vision General: transporte nuestro IDA
 | 
						||
        if ( strcmp(ordenes,"flight owntransport")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                pos = StrPos(posEnd,"posición"); //"posici<63>n ");   // v.0.77b
 | 
						||
                if ( pos== 0 )                        // v. < 0.77a >= 0.77c
 | 
						||
                {
 | 
						||
                        { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
                } else pos = pos + 9;
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        // Vision General: ataque nuestro IDA
 | 
						||
        if ( strcmp(ordenes,"flight ownattack")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                pos = StrPos(posEnd,"posición"); //"posici<63>n ");   // v.0.77b
 | 
						||
                if ( pos== 0 )                        // v. < 0.77a >= 0.77c
 | 
						||
                {
 | 
						||
                        pos=StrPos(posEnd,"Escombros ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
                } else pos = pos + 9;
 | 
						||
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = StrPos(posEnd,"[")+1;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        // Vision General: ataque nuestro VUELTA
 | 
						||
        if ( strcmp(ordenes,"return ownattack")==0 ||
 | 
						||
             strcmp(ordenes,"return ownfederation")==0
 | 
						||
        )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
 | 
						||
                if ( pos==0 || pos>aux )
 | 
						||
                        StrCopy(planeta_o,"Expedicion Desconocida");
 | 
						||
                else {
 | 
						||
                        // Extraemos el nombre del PLANETA ORIGEN (de partida)
 | 
						||
                        if ( tO==1 ) pos = pos + 8;
 | 
						||
 | 
						||
                        posEnd = StrPos(pos,"<");
 | 
						||
                        StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                        // Extraemos coordenadas ORIGEN
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                        aux = StrPos(posEnd,"[")+1;
 | 
						||
 | 
						||
                        // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                        tD=3; pos=StrPos(posEnd,"Luna ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
                        if ( pos==0 || pos>aux )
 | 
						||
                        {
 | 
						||
                                tD = 0;
 | 
						||
                                // v. 0.77b
 | 
						||
                                strcpy(gsp_d,"0:0:0");
 | 
						||
                                strcpy(planeta_d,"-");
 | 
						||
                        } else {
 | 
						||
                                StrLCopy(planeta_d,planeta_o,44);
 | 
						||
                                StrLCopy(gsp_d,gsp_o,8);
 | 
						||
 | 
						||
                                // v. < 0.77a >= 0.77c
 | 
						||
                                posEnd = StrPos(pos,"<");
 | 
						||
                                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                                // Extraemos coordenadas DESTINO
 | 
						||
                                pos = aux;
 | 
						||
                                posEnd = StrPos(pos,"]");
 | 
						||
                                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
                        }
 | 
						||
                }
 | 
						||
        } else
 | 
						||
        // Vision General: despliegue nuestro
 | 
						||
        if ( strcmp(ordenes,"flight owndeploy")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN (de partida)
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                tD=3; pos=StrPos(posEnd,"Luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
                if ( pos==0 || pos>aux )
 | 
						||
                {
 | 
						||
                        tD = 0;
 | 
						||
                        // v. 0.77b
 | 
						||
                        strcpy(gsp_d,"0:0:0");
 | 
						||
                        strcpy(planeta_d,"-");
 | 
						||
                } else {
 | 
						||
                        StrLCopy(planeta_d,planeta_o,44);
 | 
						||
                        StrLCopy(gsp_d,gsp_o,8);
 | 
						||
 | 
						||
                        // v. < 0.77a >= 0.77c
 | 
						||
                        posEnd = StrPos(pos,"<");
 | 
						||
                        StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
                        
 | 
						||
                        // Extraemos coordenadas DESTINO
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
                }
 | 
						||
 | 
						||
        } else
 | 
						||
        // Vision General: Espionaje nuestro IDA
 | 
						||
        if ( strcmp(ordenes,"flight ownespionage")==0 )
 | 
						||
        {
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                pos = StrPos(posEnd,"posición"); //"posici<63>n ");   // v.0.77b
 | 
						||
                if ( pos== 0 )                        // v. < 0.77a >= 0.77c
 | 
						||
                {
 | 
						||
                        pos=StrPos(posEnd,"Escombros ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
                } else pos = pos + 9;
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = StrPos(posEnd,"[")+1;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        // Vision General: Espionaje nuestro VUELTA
 | 
						||
        if ( strcmp(ordenes,"return ownespionage")==0 )
 | 
						||
        {
 | 
						||
/*
 | 
						||
<span class='return ownespionage'>Una de tus
 | 
						||
<a href='#' onmouseover='return overlib("<font color=white><b>Sonda de espionaje 4<br></b></font>");' onmouseout='return nd();' class='ownespionage'>flotas</a><a href='#' title='Sonda de espionaje 4'></a>
 | 
						||
vuelve de el planeta DANAG <a href="index.php?page=galaxy&galaxy=2&system=334&position=9&session=c7148a3231f1" ownespionage>[2:334:9]</a> a el planeta 2500 arcturus <a href="index.php?page=galaxy&galaxy=2&system=334&position=6&session=c7148a3231f1" ownespionage>[2:334:6]</a>. Su misi<73>n era: <span class='class'>Espionaje</span></span>
 | 
						||
*/
 | 
						||
                aux = StrPos(posEnd,"[");
 | 
						||
                pos = StrPos(posEnd,"vuelve ");   // v.0.77b
 | 
						||
                if ( pos==0 || pos>aux )                        // v. < 0.77a >= 0.77c
 | 
						||
                {
 | 
						||
                        // Extraemos el nombre del PLANETA DE REGRESO
 | 
						||
                        pos = StrPos(posEnd,"llega");
 | 
						||
                        posEnd = StrPos(pos,"<");
 | 
						||
                        StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                        // Extraemos coordenadas DESTINO
 | 
						||
                        pos = StrPos(posEnd,"[")+1;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                        strcpy(gsp_d,"0:0:0");
 | 
						||
                        strcpy(planeta_d,"-");
 | 
						||
                } else {
 | 
						||
 | 
						||
                         aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                        // Obtenemos el tipo de origen
 | 
						||
                        pos=StrPos(posEnd,"Escombros ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                        // Extraemos el nombre del PLANETA ORIGEN (de partida)
 | 
						||
                        posEnd = StrPos(pos,"<");
 | 
						||
                        StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                        // Extraemos coordenadas ORIGEN
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                        aux = StrPos(posEnd,"[")+1;
 | 
						||
 | 
						||
                        // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                        tD=3; pos=StrPos(posEnd,"Luna ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta "); }
 | 
						||
                        if ( pos==0 || pos>aux )
 | 
						||
                        {
 | 
						||
                                tD = 0;
 | 
						||
                                // v. 0.77b
 | 
						||
                                strcpy(gsp_d,"0:0:0");
 | 
						||
                                strcpy(planeta_d,"-");
 | 
						||
                        } else {
 | 
						||
                                StrLCopy(planeta_d,planeta_o,44);
 | 
						||
                                StrLCopy(gsp_d,gsp_o,8);
 | 
						||
 | 
						||
                                // v. < 0.77a >= 0.77c
 | 
						||
                                posEnd = StrPos(pos,"<");
 | 
						||
                                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                                // Extraemos coordenadas DESTINO
 | 
						||
                                pos = aux;
 | 
						||
                                posEnd = StrPos(pos,"]");
 | 
						||
                                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
                        }
 | 
						||
                }
 | 
						||
        } else
 | 
						||
        // Vision General: Ataque <20><><EFBFBD> NOS ATACAN !!! en confederacion
 | 
						||
        if ( strcmp(ordenes,"flight federation")==0 || strcmp(ordenes,"federation")==0 )
 | 
						||
        {
 | 
						||
                strcpy(ordenes, "flight attack");
 | 
						||
                
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                tO=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"de la ")+6; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Obtenemos el tipo de destino
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
                tD=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
        } else
 | 
						||
        // Vision General: Ataque <20><><EFBFBD> NOS ATACAN !!!
 | 
						||
        if ( strcmp(ordenes,"flight attack")==0 ||
 | 
						||
             strcmp(ordenes,"flight ")==0 ||
 | 
						||
             strcmp(ordenes,"attack")==0  ||
 | 
						||
             ordenes==NULL               )
 | 
						||
        {
 | 
						||
                strcpy(ordenes, "flight attack");
 | 
						||
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"Escombros ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"luna "); }
 | 
						||
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"de la ")+6; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Obtenemos el tipo de destino
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
                tD=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        if ( strcmp(ordenes,"flight espionage")==0 )
 | 
						||
        // Espionaje enemigo <20><>Atenci<63>n pueden meter naves no deseadas!!
 | 
						||
        {
 | 
						||
 | 
						||
/*
 | 
						||
<tr class='flight'>
 | 
						||
<th><div id='bxx1' title='1120'star='1214002911'></div></th>
 | 
						||
<th colspan='3'><span class='flight espionage'>
 | 
						||
Una <a href='#' onmouseover='return overlib("<font color=white><b>N<>mero de naves: 5 <br>Sonda de espionaje 5<br></b></font>");' onmouseout='return nd();' class='espionage'>flota</a><a href='#' title='N<>mero de naves: 5 Sonda de espionaje 5'></a> enemiga de ulises21 <a href='#' onclick='showMessageMenu(189016)'><img src='http://uni14.ogame.com.es/evolution/img/m.gif' title='Escribir mensaje' alt='Escribir mensaje'></a>
 | 
						||
de el planeta 81 <a href="javascript:showGalaxy(2,224,6)" espionage>
 | 
						||
[2:224:6]</a> llega a la Luna <a href="javascript:showGalaxy(2,334,6)" espionage>[2:334:6]</a>. La misi<73>n es: Espionaje</span>
 | 
						||
 | 
						||
</th>
 | 
						||
</tr>
 | 
						||
------------
 | 
						||
Una flota enemiga de ulises21 de el planeta 81 [2:224:6] llega a la Luna [2:334:6]. La misi<73>n es: Espionaje
 | 
						||
-------------
 | 
						||
 | 
						||
*/
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                /************************************************/
 | 
						||
                // Si es un ataque encubierto, en un espionaje...
 | 
						||
                posEnd = StrPos(pos,"Nave de batalla");
 | 
						||
                if ( posEnd!=0 && posEnd<aux ) strcpy(ordenes,"flight attack"); else
 | 
						||
                {
 | 
						||
                        posEnd = StrPos(pos,"Cazador ligero");
 | 
						||
                        if ( posEnd!=0 && posEnd<aux ) strcpy(ordenes,"flight attack"); else
 | 
						||
                        {
 | 
						||
                                posEnd = StrPos(pos,"Nave peque");
 | 
						||
                                if ( posEnd!=0 && posEnd<aux ) strcpy(ordenes,"flight attack"); else
 | 
						||
                                {
 | 
						||
                                        posEnd = StrPos(pos,"Crucero");
 | 
						||
                                        if ( posEnd!=0 && posEnd<aux ) strcpy(ordenes,"flight attack"); else
 | 
						||
                                        {
 | 
						||
                                                posEnd = StrPos(pos,"Acorazado");
 | 
						||
                                                if ( posEnd!=0 && posEnd<aux ) strcpy(ordenes,"flight attack"); else
 | 
						||
                                                {
 | 
						||
                                                        posEnd = aux;
 | 
						||
                                                }
 | 
						||
                                        }
 | 
						||
                                }
 | 
						||
                        }
 | 
						||
                }
 | 
						||
                /************************************************/
 | 
						||
                posEnd = pos;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
 | 
						||
                tO=2; pos=StrPos(posEnd,"Escombros "); posOffset = 10; 
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"luna"); posOffset=4; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna"); posOffset=4; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); posOffset=8; }
 | 
						||
                pos = pos + posOffset;
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                if ( posEnd==0 ) pos = posEnd;
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Obtenemos el tipo de destino
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
 | 
						||
                tD=3; pos=StrPos(posEnd,"luna "); posOffset = 5;
 | 
						||
                if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); posOffset = 5; }
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta "); posOffset = 8; }
 | 
						||
                pos = pos + posOffset;
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        if ( strcmp(ordenes,"flight owndestroy")==0 ) {
 | 
						||
                // Detruir Luna
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"de la ")+6; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Obtenemos el tipo de destino
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
                tD=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else
 | 
						||
        if ( strcmp(ordenes,"return owndestroy")==0 ) {
 | 
						||
                // Detruir Luna
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                tO=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"de la ")+6; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                posEnd = StrPos(pos,"<") -1;
 | 
						||
                StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
 | 
						||
                // Obtenemos el tipo de destino
 | 
						||
                aux = StrPos(posEnd,"[")+1;
 | 
						||
                tD=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta ")+8; }
 | 
						||
 | 
						||
                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                posEnd = StrPos(pos,"<");
 | 
						||
                StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
 | 
						||
                // Extraemos coordenadas DESTINO
 | 
						||
                pos = aux;
 | 
						||
                posEnd = StrPos(pos,"]");
 | 
						||
                StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
        } else {
 | 
						||
 | 
						||
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
 | 
						||
                // Extraemos las coordenadas para otro tipo de misiones...
 | 
						||
                aux=StrPos(pos,"[")+1;
 | 
						||
 | 
						||
                // Obtenemos el tipo de origen
 | 
						||
                tO=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=2; pos=StrPos(posEnd,"Escombros "); }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
                if ( pos==0 || pos>aux ) { tO=3; pos=StrPos(posEnd,"de la ");  if (pos!=0) pos+=6; }
 | 
						||
                if ( pos>0 ) {
 | 
						||
                        // Extraemos el nombre del PLANETA ORIGEN
 | 
						||
                        posEnd = StrPos(pos,"<") -1;
 | 
						||
                        StrLCopy(planeta_o,pos,min(posEnd-pos,44) );
 | 
						||
                }
 | 
						||
                // Extraemos coordenadas ORIGEN
 | 
						||
                if ( aux>0 ) {
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        if ( posEnd>0 ) StrLCopy(gsp_o,pos,min(posEnd-pos,8));
 | 
						||
                }
 | 
						||
 | 
						||
                if ( posEnd>0 ) {
 | 
						||
                        // Obtenemos el tipo de destino
 | 
						||
                        aux = StrPos(posEnd,"[")+1;
 | 
						||
                        tD=3; pos=StrPos(posEnd,"luna ");
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=3; pos=StrPos(posEnd,"Luna "); }
 | 
						||
                        if ( pos==0 || pos>aux ) { tD=1; pos=StrPos(posEnd,"planeta "); if (pos!=0) pos+=8; }
 | 
						||
 | 
						||
                        if ( pos>0 ) {
 | 
						||
                                // Extraemos el nombre del PLANETA DESTINO
 | 
						||
                                posEnd = StrPos(pos,"<");
 | 
						||
                                if ( posEnd>0 ) StrLCopy(planeta_d,pos,min(posEnd-pos,44) );
 | 
						||
                        }
 | 
						||
                }
 | 
						||
 | 
						||
                if ( aux>0 ) {
 | 
						||
                        // Extraemos coordenadas DESTINO
 | 
						||
                        pos = aux;
 | 
						||
                        posEnd = StrPos(pos,"]");
 | 
						||
                        if ( posEnd>0 ) StrLCopy(gsp_d,pos,min(posEnd-pos,8));
 | 
						||
                }
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
                ///////////////////////////////////////////////////////////////////////////
 | 
						||
                
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                                ///////////////////////////// ADD-FLIGHT-TO-LIST
 | 
						||
                                /////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						||
 | 
						||
                                        sscanf(gsp_o,"%d:%d:%d",&gO,&sO,&pO);
 | 
						||
                                        sscanf(gsp_d,"%d:%d:%d",&gD,&sD,&pD);
 | 
						||
                                        t=atol(tiempo);
 | 
						||
 | 
						||
        enc=false;
 | 
						||
/*
 | 
						||
        // Si es una flota que regresa al planeta origen...
 | 
						||
        if ( strncmp(ordenes,"return",6)==0 )
 | 
						||
        {
 | 
						||
          // Vemos si aun no llego a su destino
 | 
						||
          for (i = 0; i < computacionesOcupadas; i++)
 | 
						||
          {
 | 
						||
                EStruct = (PEventos) MyEvents->Items[i];
 | 
						||
                if ( EStruct->stop == lstar ||
 | 
						||
                        (EStruct->stop == 0 &&
 | 
						||
                         EStruct->gD == gO && EStruct->sD == sO && EStruct->pD == pO && EStruct->tD == tO &&
 | 
						||
                         EStruct->gO == gD && EStruct->sO == sD && EStruct->pO == pD && EStruct->tO == tD
 | 
						||
                        )
 | 
						||
                ) {
 | 
						||
                   EStruct->vuelta = t;//atol(tiempo);
 | 
						||
                   EStruct->stop = lstar;
 | 
						||
 | 
						||
                   enc=true;
 | 
						||
                   break;
 | 
						||
                }
 | 
						||
          }
 | 
						||
         }
 | 
						||
*/
 | 
						||
 | 
						||
 | 
						||
                                        if ( !enc )
 | 
						||
                                        {
 | 
						||
                                                if ( MyEvents->Count<=numEventos )
 | 
						||
                                                {
 | 
						||
                                                  EStruct = new TEventos;
 | 
						||
                                                  MyEvents->Add(EStruct);
 | 
						||
                                                }
 | 
						||
                                                EStruct = (PEventos)MyEvents->Items[numEventos];
 | 
						||
                                                EStruct->status = 0;
 | 
						||
                                                EStruct->avisado = false;
 | 
						||
                                                EStruct->mision='i';
 | 
						||
 | 
						||
                                                /* (e)spiar, (E)spiado, (a)tacar, (A)tacado, (r)ecolectar, (i)ndefinido      */
 | 
						||
                                                if ( strncmp(ordenes,"return",6)==0 )
 | 
						||
                                                {
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownattack")==0 )         EStruct->mision = 'a'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"owndeploy")==0 )         EStruct->mision = 'd'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownespionage")==0 )      EStruct->mision = 'e'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"owntransport")==0 )      EStruct->mision = 't'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownharvest")==0 )        EStruct->mision = 'r'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"owndestroy")==0 )        EStruct->mision = 'D';
 | 
						||
 | 
						||
                                                        EStruct->ida = 0;
 | 
						||
                                                        EStruct->vuelta = t;//atol(tiempo);
 | 
						||
 | 
						||
                                                        EStruct->gO = gD;
 | 
						||
                                                        EStruct->sO = sD;
 | 
						||
                                                        EStruct->pO = pD;
 | 
						||
                                                        EStruct->tO = tD;
 | 
						||
                                                        strcpy(EStruct->planeta_o,planeta_d);
 | 
						||
 | 
						||
                                                        EStruct->gD = gO;
 | 
						||
                                                        EStruct->sD = sO;
 | 
						||
                                                        EStruct->pD = pO;
 | 
						||
                                                        EStruct->tD = tO;
 | 
						||
                                                        strcpy(EStruct->planeta_d,planeta_o);
 | 
						||
 | 
						||
                                                        EStruct->start = 0;
 | 
						||
                                                        EStruct->stop = lstar;
 | 
						||
                                                } else
 | 
						||
                                                if ( strncmp(ordenes,"flight ",7)==0 )
 | 
						||
                                                {
 | 
						||
                                                        if ( strcmp(ordenes+7,"owntransport")==0 )      EStruct->mision = 't'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"owndeploy")==0 )         EStruct->mision = 'd'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"transport")==0 )         EStruct->mision = 'T'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownattack")==0 )         EStruct->mision = 'a'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownespionage")==0 )      EStruct->mision = 'e'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"espionage")==0 )         EStruct->mision = 'E'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"ownharvest")==0 )        EStruct->mision = 'r'; else
 | 
						||
                                                        if ( strcmp(ordenes+7,"owndestroy")==0 )        EStruct->mision = 'D'; else
 | 
						||
/* COSIDERAR ATAQUE CUALQUIER ACCION DESCONOCIDA
 | 
						||
                                                        if ( strcmp(ordenes+7,"attack")==0
 | 
						||
                                                             || strcmp(ordenes,"flight ")==0
 | 
						||
                                                             || strcmp(ordenes+7,"federation")==0
 | 
						||
                                                           )
 | 
						||
*/
 | 
						||
                                                        {
 | 
						||
                                                                                nosAtacan = true;
 | 
						||
                                                                                EStruct->mision = 'A';
 | 
						||
                                                                                if ( sndCHK_peligro->Checked )
 | 
						||
                                                                                sndPlaySound("snd\\recibiendoAtaque.wav", SND_ASYNC | SND_FILENAME | SND_LOOP);
 | 
						||
                                                                                //toFront=true; ShowMessage("Alerta: escuadron hostil detectado");
 | 
						||
                                                                                AlertBox->Visible=true;
 | 
						||
                                                        }
 | 
						||
 | 
						||
                                                        EStruct->ida = t;//atol(tiempo);
 | 
						||
                                                        EStruct->vuelta = 0;
 | 
						||
 | 
						||
                                                        EStruct->gO = gO;
 | 
						||
                                                        EStruct->sO = sO;
 | 
						||
                                                        EStruct->pO = pO;
 | 
						||
                                                        EStruct->tO = tO;
 | 
						||
                                                        strcpy(EStruct->planeta_o,planeta_o);
 | 
						||
 | 
						||
                                                        EStruct->gD = gD;
 | 
						||
                                                        EStruct->sD = sD;
 | 
						||
                                                        EStruct->pD = pD;
 | 
						||
                                                        EStruct->tD = tD;
 | 
						||
                                                        strcpy(EStruct->planeta_d,planeta_d);
 | 
						||
 | 
						||
                                                        EStruct->start = lstar;
 | 
						||
                                                        EStruct->stop = 0;
 | 
						||
 | 
						||
                                                        /*** CHAPU ****/
 | 
						||
                                                        enc=false;
 | 
						||
                                                        for (i=0;i<last_numEventos && i<40;i++)
 | 
						||
                                                        {
 | 
						||
                                                                if (status[i][0]==EStruct->start)
 | 
						||
                                                                {
 | 
						||
                                                                        EStruct->status=(int)(status[i][1]&0x0000FFFF);
 | 
						||
                                                                        EStruct->avisado=(status[i][1]&0x00010000);
 | 
						||
                                                                        enc=true;
 | 
						||
                                                                        break;
 | 
						||
                                                                }
 | 
						||
                                                        }
 | 
						||
                                                        /**************/
 | 
						||
                                                } else
 | 
						||
                                                if ( strncmp(ordenes, "holding",7)== 0 )
 | 
						||
                                                {
 | 
						||
                                                        if ( strcmp(ordenes+7,"owntransport")==0 )      EStruct->mision = 'x';
 | 
						||
 | 
						||
                                                        EStruct->ida = 0;
 | 
						||
                                                        EStruct->vuelta = t;//atol(tiempo);
 | 
						||
 | 
						||
                                                        EStruct->gO = gD;
 | 
						||
                                                        EStruct->sO = sD;
 | 
						||
                                                        EStruct->pO = pD;
 | 
						||
                                                        EStruct->tO = tD;
 | 
						||
                                                        strcpy(EStruct->planeta_o,planeta_d);
 | 
						||
 | 
						||
                                                        EStruct->gD = gO;
 | 
						||
                                                        EStruct->sD = sO;
 | 
						||
                                                        EStruct->pD = pO;
 | 
						||
                                                        EStruct->tD = tO;
 | 
						||
                                                        strcpy(EStruct->planeta_d,planeta_o);
 | 
						||
 | 
						||
                                                        EStruct->start = 0;
 | 
						||
                                                        EStruct->stop = lstar;
 | 
						||
                                                }
 | 
						||
 | 
						||
 | 
						||
                                                numEventos++;
 | 
						||
                                        }
 | 
						||
                                /////////////////////////////////////////////////////////////////////////////////////////////////
 | 
						||
                                ///////////////////////////// END ADD-FLIGHT-TO-LIST
 | 
						||
 | 
						||
 | 
						||
                               } // Fin flota en vuelo
 | 
						||
                        } // END ** while( pos=StrPos(pos,"<tr class='") ) **
 | 
						||
 | 
						||
 | 
						||
 | 
						||
                        dgEventos->RowCount = numEventos+1;
 | 
						||
                        if (numEventos>0) dgEventos->FixedRows=1;
 | 
						||
 | 
						||
                        // Marcamos para borrar todos los elementos en la lista de ataque...
 | 
						||
                        PAtaques EAtaque;
 | 
						||
                        int attack;
 | 
						||
 | 
						||
                        for(i=0;i<MyAttacks->Count;i++)
 | 
						||
                                ((PAtaques)MyAttacks->Items[i])->borrar=true;
 | 
						||
 | 
						||
                        for (i = 0; i < numEventos; i++)
 | 
						||
                        {
 | 
						||
                                EStruct = (PEventos) MyEvents->Items[i];
 | 
						||
                                if ( EStruct->mision=='A' )
 | 
						||
                                {
 | 
						||
                                        enc = false;
 | 
						||
                                        for(attack=0;attack<MyAttacks->Count;attack++)
 | 
						||
                                        {
 | 
						||
                                                EAtaque =(PAtaques)MyAttacks->Items[attack];
 | 
						||
                                                if ( EAtaque->start == EStruct->start )
 | 
						||
                                                {
 | 
						||
                                                   EAtaque->t = EStruct->ida;   // Actualizamos el tiempo que queda para el ataque.
 | 
						||
                                                   EAtaque->borrar = false;
 | 
						||
                                                   enc=true;
 | 
						||
                                                   break;
 | 
						||
                                                }
 | 
						||
                                        }
 | 
						||
                                        if ( !enc )
 | 
						||
                                        {
 | 
						||
                                          EAtaque = new TAtaques;
 | 
						||
                                          EAtaque->t = EStruct->ida;
 | 
						||
                                          EAtaque->start = EStruct->start;
 | 
						||
                                          EAtaque->gO = EStruct->gO; EAtaque->sO = EStruct->sO; EAtaque->pO = EStruct->pO; EAtaque->tO = EStruct->tO;
 | 
						||
                                          EAtaque->gD = EStruct->gD; EAtaque->sD = EStruct->sD; EAtaque->pD = EStruct->pD; EAtaque->tD = EStruct->tD;
 | 
						||
                                          EAtaque->borrar = false;
 | 
						||
                                          EAtaque->status = 0;                  // Aun no hemos manipulado este ataque
 | 
						||
                                          EAtaque->tDelay = 0;
 | 
						||
                                          MyAttacks->Add(EAtaque);
 | 
						||
                                        }
 | 
						||
                                }
 | 
						||
                        }
 | 
						||
                        // ********************************
 | 
						||
                  }
 | 
						||
                  // ######################
 | 
						||
                  pos = StrPos( posEnd, "</html>" );
 | 
						||
 | 
						||
                  sprintf(buffer,"%s > Visi<73>n General [%d:%0.3d:%0.2d].%d [%ld/%ld]",AnsiString(Now()),((PPlanetas)MyPlanets->Items[idxPLANET])->g,((PPlanetas)MyPlanets->Items[idxPLANET])->s,((PPlanetas)MyPlanets->Items[idxPLANET])->p,((PPlanetas)MyPlanets->Items[idxPLANET])->t,MilliSecondsBetween(stop,start),MilliSecondsBetween(Time(),stop) );
 | 
						||
                  if ( pos )
 | 
						||
                  {
 | 
						||
                          statusBar->SelAttributes->Color = clBlack;statusBar->Lines->Add(buffer);
 | 
						||
                          if (sndCHK_network->Checked && !AlertBox->Visible) sndPlaySound(0,0);
 | 
						||
                  } else {
 | 
						||
                          statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(buffer)+" <20><>INCOMPLETA!!" );
 | 
						||
                          error = -1;
 | 
						||
                  }
 | 
						||
 | 
						||
                  if ( CFG_verbose )
 | 
						||
                  {
 | 
						||
                        char buffer[255];
 | 
						||
                        PAtaques EAtaque;
 | 
						||
                        for (i = 0; i<MyAttacks->Count; i++)
 | 
						||
                        {
 | 
						||
                                EAtaque =(PAtaques)MyAttacks->Items[i];
 | 
						||
                                sprintf(buffer,"> %0.4ld < [%d:%0.3d:%0.2d].%d -> [%d:%0.3d:%0.2d].%d (%d) %s",EAtaque->t,EAtaque->gO,EAtaque->sO,EAtaque->pO,EAtaque->tO,EAtaque->gD,EAtaque->sD,EAtaque->pD,EAtaque->tD,EAtaque->status,(EAtaque->borrar?"CANCELADO":""));
 | 
						||
                                statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add( buffer );
 | 
						||
                        }
 | 
						||
                  }
 | 
						||
 | 
						||
                  // Si no hay ataques en curso, y estaban todas las computaciones ocupadas
 | 
						||
                  // revisar si se ha quedado alguna libre...
 | 
						||
                  if ( computacionesOcupadas>=CFG_ocuparMaxComputaciones )
 | 
						||
                                                          computacionesOcupadas = -1;
 | 
						||
/*
 | 
						||
                  if ( !nosAtacan && computacionesOcupadas>=CFG_ocuparMaxComputaciones )
 | 
						||
                  {
 | 
						||
                                Hangar NavesAparcadas[14];
 | 
						||
                                flota_obtenerFlota(((PPlanetas)MyPlanets->Items[idxPLANET])->cp,&RecursosDisp,NavesAparcadas);
 | 
						||
                  }
 | 
						||
*/
 | 
						||
 | 
						||
                } else {
 | 
						||
                  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error vision general (Sesion caducada)") );
 | 
						||
 | 
						||
/*
 | 
						||
                  error = iniciarSesion();
 | 
						||
                  // Deberiamos reintentar descargar los mensajes...
 | 
						||
                  if ( error!=-1 )
 | 
						||
                        _visionGeneral(-1);
 | 
						||
*/
 | 
						||
                }
 | 
						||
          } else {
 | 
						||
             statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error vision general") );
 | 
						||
          }
 | 
						||
 | 
						||
 | 
						||
          delete out;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
char * __fastcall Tmain::obtenerListaPlanetas(char *html)
 | 
						||
{
 | 
						||
  char buffer[80];
 | 
						||
  char *pos, *posEnd, *aux;
 | 
						||
 | 
						||
  PPlanetas EPlanetas;
 | 
						||
 | 
						||
  posEnd = pos = html;
 | 
						||
  while( pos = StrPos( posEnd, "<option" ) )
 | 
						||
  {
 | 
						||
 | 
						||
        EPlanetas = new TPlanetas;
 | 
						||
 | 
						||
        pos = StrPos( posEnd, "&cp=" )+4;
 | 
						||
        posEnd = StrPos(pos,"&");
 | 
						||
        StrLCopy(buffer,pos,min(posEnd-pos,12));
 | 
						||
        EPlanetas->cp = atol(buffer);
 | 
						||
 | 
						||
        pos = StrPos(posEnd,">")+1;
 | 
						||
        posEnd=StrPos(pos,"[");
 | 
						||
        /* ver. 0.76 */
 | 
						||
        aux=StrPos(pos,"<");
 | 
						||
        posEnd = min(posEnd,aux);
 | 
						||
        /***/
 | 
						||
        StrLCopy(EPlanetas->planeta,pos,min(posEnd-pos,44)); // Deberia hacer TRIM sobre el planeta
 | 
						||
 | 
						||
        strRTrim(EPlanetas->planeta);
 | 
						||
//        if ( strcmp(EPlanetas->planeta,"Luna")==0 )
 | 
						||
        if ( StrPos(EPlanetas->planeta,"Luna")!=NULL )
 | 
						||
                EPlanetas->t=3;
 | 
						||
        else
 | 
						||
                EPlanetas->t=1;
 | 
						||
 | 
						||
        pos=StrPos(pos,"[")+1;
 | 
						||
        posEnd=StrPos(pos,"]");
 | 
						||
        StrLCopy(buffer,pos,min(posEnd-pos,8) );
 | 
						||
        sscanf(buffer,"%d:%d:%d",&EPlanetas->g,&EPlanetas->s,&EPlanetas->p);
 | 
						||
 | 
						||
        MyPlanets->Add(EPlanetas);
 | 
						||
  }
 | 
						||
  return posEnd;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::descargarMensajes()
 | 
						||
{
 | 
						||
  int error;
 | 
						||
  AnsiString request;
 | 
						||
  // Descargamos la p<>gina de mensajes...
 | 
						||
//        oG_host, oG_session, oG_SSID, oG_Cookie;
 | 
						||
 | 
						||
  error = 0;
 | 
						||
  if ( oG_session=="" )
 | 
						||
  {
 | 
						||
     statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Session vacia") );
 | 
						||
     currentState = csLOGIN;
 | 
						||
     nextUpdateCLK = 0;
 | 
						||
     error = -1;
 | 
						||
  }
 | 
						||
 | 
						||
  if ( error!=-1 )
 | 
						||
  {
 | 
						||
//          request = "GET http://"+oG_host+"/game/index.php?page=messages&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
          request = "GET /game/index.php?page=messages&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
          request+= "Host: "+oG_host+"\r\n";
 | 
						||
          request+= "User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
          request+= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
          request+= "Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
          request+= "Accept-Encoding: gzip,deflate\r\n";
 | 
						||
          request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
          request+= "Keep-Alive: 300\r\n";
 | 
						||
          request+= "Connection: keep-alive\r\n";
 | 
						||
          if ( !oG_Cookie.IsEmpty() )
 | 
						||
                  request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
          request+= "\r\n";
 | 
						||
 | 
						||
          lastRequest = lastRequest_messages;
 | 
						||
          TMemoryStream* out  = new TMemoryStream();
 | 
						||
          error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
          if ( error!=-1 )
 | 
						||
          {
 | 
						||
                error = checkError( out );
 | 
						||
                if ( error!=-1 )
 | 
						||
                {
 | 
						||
                  // Parseamos el listado de mensajes...
 | 
						||
                  out->Position = 0;
 | 
						||
 | 
						||
                  // ######################
 | 
						||
 | 
						||
                  // ######################
 | 
						||
 | 
						||
                  statusBar->SelAttributes->Color = clBlack;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Descarga de mensajes") );
 | 
						||
                } else {
 | 
						||
                  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error descargando mensaje (Sesion caducada)") );
 | 
						||
                  currentState = csLOGIN;
 | 
						||
                  nextUpdateCLK = 0;
 | 
						||
                  error = -1;
 | 
						||
                }
 | 
						||
          } else {
 | 
						||
             statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error descargando mensaje") );
 | 
						||
          }
 | 
						||
 | 
						||
 | 
						||
          delete out;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::checkError(TMemoryStream *html)
 | 
						||
{
 | 
						||
  int error=0;
 | 
						||
 | 
						||
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"Esta cuenta esta suspendida") >= html->Memory ) { error=-1; currentState = csLOGIN; }
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"Problema de base de datos") >= html->Memory )  { error=-1; currentState = csLOGIN; }
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"action=\"/game/logout.php?")>0 )               { error=-1; currentState = csLOGIN; }
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"Tu sesión es inv") >0 )  { error=-1; currentState = csLOGIN; } // "Tu sesi<73>n es inv") >0 )  error=-1;
 | 
						||
 | 
						||
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"Se presento un error") >0 )  { error=-1; currentState = csLOGIN; }
 | 
						||
 | 
						||
  if ( StrPos((char *)(html->Memory)+1,"Esta cuenta no existe o introdujiste una contra") >0 )  { error=-1; currentState = csRESETPASS; }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::ToolButton4Click(TObject *Sender)
 | 
						||
{
 | 
						||
  Close();
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void __fastcall Tmain::btTestClick(TObject *Sender)
 | 
						||
{
 | 
						||
 HINSTANCE HApp;
 | 
						||
 | 
						||
  // Cargar el SpeedSim
 | 
						||
  HApp = ShellExecute(this,	                // handle to parent window
 | 
						||
    NULL,		                        // pointer to string that specifies operation to perform
 | 
						||
    "speedSIM\\speedSIM.exe",	       	// pointer to filename string
 | 
						||
    NULL,		        // pointer to string that specifies executable-file parameters
 | 
						||
    NULL,		                        // pointer to string that specifies default directory
 | 
						||
    SW_SHOWNORMAL	 			                        // whether file is shown when opened
 | 
						||
   );
 | 
						||
 | 
						||
 | 
						||
/*
 | 
						||
  TMemoryStream* out  = new TMemoryStream();
 | 
						||
  HTTPdownloader->descargarHTML("www.infdj.com","GET / HTTP/1.1\r\nHost: infdj.com\r\nAccept-Encoding: gzip,deflate\r\n\r\n",out);
 | 
						||
 | 
						||
//  HTTPdownloader->descargarHTML("localhost","GET / HTTP/1.1\r\nHost: localhost\r\nAccept-Encoding: gzip,deflate\r\n\r\n",out);
 | 
						||
 | 
						||
  delete out;
 | 
						||
*/
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void __fastcall Tmain::btDownloaderClick(TObject *Sender)
 | 
						||
{
 | 
						||
  HTTPdownloader->Show();
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::ToolButton2Click(TObject *Sender)
 | 
						||
{
 | 
						||
  // Guardamos las preferencias...
 | 
						||
  TIniFile *ini;
 | 
						||
 | 
						||
  ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\salvaVidas.ini");
 | 
						||
  ini->WriteBool("avisos","ataqueAutomatico",sndCHK_ataque->Checked);
 | 
						||
  ini->WriteBool("avisos","sondeoAlEnemigo",sndCHK_sondeo->Checked);
 | 
						||
  ini->WriteBool("avisos","atacanteDetectado",sndCHK_peligro->Checked);
 | 
						||
  ini->WriteBool("avisos","erroresGenerales",sndCHK_error->Checked);
 | 
						||
  ini->WriteBool("avisos","sinConexionRed",sndCHK_network->Checked);
 | 
						||
 | 
						||
  ini->WriteBool("avisos","sondeo5min",chkSondeo5min->Checked);
 | 
						||
  ini->WriteBool("avisos","sondeo3min",chkSondeo2min->Checked);
 | 
						||
  ini->WriteBool("avisos","aviso5min",chkAviso5min->Checked);
 | 
						||
  ini->WriteBool("avisos","alarmaPersonal",MenuItem5->Checked);
 | 
						||
 | 
						||
  ini->WriteBool("colaAtaques","colaActiva",activarColaAtaques->Checked);  
 | 
						||
 | 
						||
  delete ini;
 | 
						||
 | 
						||
  nextUpdateCLK = 0;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void __fastcall Tmain::dgEventosDrawCell(TObject *Sender, int ACol,
 | 
						||
      int ARow, TRect &Rect, TGridDrawState State)
 | 
						||
{
 | 
						||
/*
 | 
						||
          dgEventos->Canvas->Brush->Color = clBackground;
 | 
						||
          dgEventos->Canvas->FillRect(Rect);
 | 
						||
*/
 | 
						||
 | 
						||
  if ( ARow==0 )
 | 
						||
  {
 | 
						||
        switch( ACol )
 | 
						||
        {
 | 
						||
                case 0:
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top,"Tiempo");
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,"Ida / Vuelta");
 | 
						||
                  break;
 | 
						||
                case 1:
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top,"[GSP]"   );
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,"Planeta Origen");
 | 
						||
                  break;
 | 
						||
                case 2:
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top,"[GSP]"   );
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,"Planeta Destino");
 | 
						||
                  break;
 | 
						||
                case 3:
 | 
						||
                  dgEventos->Canvas->TextOut(Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size,"Ordenes" );
 | 
						||
                  break;
 | 
						||
        }
 | 
						||
  } else {
 | 
						||
    if ( ARow<=MyEvents->Count ) //numEventos
 | 
						||
    {
 | 
						||
 | 
						||
        int tH,tM,tS;
 | 
						||
        PEventos EStruct;
 | 
						||
        EStruct = (PEventos)MyEvents->Items[ARow-1];
 | 
						||
 | 
						||
        // Fondo del GRID
 | 
						||
        switch( EStruct->mision )
 | 
						||
        {
 | 
						||
                case 'D': dgEventos->Canvas->Brush->Color = 0x00C1E0FF; break;
 | 
						||
                case 'S': dgEventos->Canvas->Brush->Color = 0x007DDBFF; break;
 | 
						||
                case 'T': dgEventos->Canvas->Brush->Color = clSkyBlue; break;
 | 
						||
                case 'A': dgEventos->Canvas->Brush->Color = 0x006262FF; break;
 | 
						||
                case 'r': dgEventos->Canvas->Brush->Color = 0x007282B8; break; /* BGR */
 | 
						||
                default:
 | 
						||
                          dgEventos->Canvas->Brush->Color = clWhite;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
 | 
						||
        switch( ACol )
 | 
						||
        {
 | 
						||
                case 0:
 | 
						||
                  if ( EStruct->ida > 0 )
 | 
						||
                  {
 | 
						||
                          tH = EStruct->ida/3600; tM = EStruct->ida%3600;
 | 
						||
 | 
						||
                          dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+dgEventos->Canvas->Font->Size+4),Rect.Left,Rect.Top,Format("%02.2d:%02.2d:%02.2d",ARRAYOFCONST((tH,(tM/60),(tM%60))) ));
 | 
						||
                  }
 | 
						||
                  if ( EStruct->vuelta > 0 )
 | 
						||
                  {
 | 
						||
                          tH = EStruct->vuelta/3600; tM = EStruct->vuelta%3600;
 | 
						||
                          dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top+dgEventos->Canvas->Font->Size+4,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,Format("%02.2d:%02.2d:%02.2d",ARRAYOFCONST((tH,(tM/60),(tM%60))) ));
 | 
						||
                  }
 | 
						||
                  break;
 | 
						||
                case 1:
 | 
						||
                  dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+dgEventos->Canvas->Font->Size+4),Rect.Left,Rect.Top,"["+AnsiString(EStruct->gO)+":"+AnsiString(EStruct->sO)+":"+AnsiString(EStruct->pO)+"]."+AnsiString(EStruct->tO)   );
 | 
						||
                  dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top+dgEventos->Canvas->Font->Size+4,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,EStruct->planeta_o);
 | 
						||
                  break;
 | 
						||
                case 2:
 | 
						||
                  dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+dgEventos->Canvas->Font->Size+4),Rect.Left,Rect.Top,"["+AnsiString(EStruct->gD)+":"+AnsiString(EStruct->sD)+":"+AnsiString(EStruct->pD)+"]."+AnsiString(EStruct->tD)   );
 | 
						||
                  dgEventos->Canvas->TextRect(TRect(Rect.Left,Rect.Top+dgEventos->Canvas->Font->Size+4,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4,EStruct->planeta_d);
 | 
						||
                  break;
 | 
						||
                case 3:
 | 
						||
                  dgEventos->Canvas->TextRect(Rect,Rect.Left,Rect.Top + dgEventos->Canvas->Font->Size+4, AnsiString(EStruct->mision) + (EStruct->mision=='a'?(AnsiString(" - ")+AnsiString(EStruct->status)):AnsiString("")) );
 | 
						||
                  break;
 | 
						||
        }
 | 
						||
        if (State.Contains(gdFocused))
 | 
						||
               dgEventos->Canvas->DrawFocusRect(Rect);
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::FormDestroy(TObject *Sender)
 | 
						||
{
 | 
						||
  PEventos EStruct;
 | 
						||
  // Clean up <20> must free memory for the items as well as the list
 | 
						||
  for (int i = 0; i < MyEvents->Count; i++)
 | 
						||
  {
 | 
						||
    EStruct = (PEventos) MyEvents->Items[i];
 | 
						||
    delete EStruct;
 | 
						||
  }
 | 
						||
  delete MyEvents;
 | 
						||
 | 
						||
  PPlanetas EPlanetas;
 | 
						||
  // Clean up <20> must free memory for the items as well as the list
 | 
						||
  for (int i = 0; i < MyPlanets->Count; i++)
 | 
						||
  {
 | 
						||
    EPlanetas = (PPlanetas) MyPlanets->Items[i];
 | 
						||
    delete EPlanetas;
 | 
						||
  }
 | 
						||
  delete MyPlanets;
 | 
						||
 | 
						||
  PAtaques EAtaques;
 | 
						||
  // Clean up <20> must free memory for the items as well as the list
 | 
						||
  for (int i = 0; i < MyAttacks->Count; i++)
 | 
						||
  {
 | 
						||
    EAtaques = (PAtaques) MyAttacks->Items[i];
 | 
						||
    delete EAtaques;
 | 
						||
  }
 | 
						||
  delete MyAttacks;
 | 
						||
 | 
						||
  PAtaqueOfensivo AtaqueOfensivo;
 | 
						||
  // Clean up <20> must free memory for the items as well as the list
 | 
						||
  for (int i = 0; i < AtaquesOfensivos->Count; i++)
 | 
						||
  {
 | 
						||
    AtaqueOfensivo = (PAtaqueOfensivo) AtaquesOfensivos->Items[i];
 | 
						||
    delete AtaqueOfensivo;
 | 
						||
  }
 | 
						||
  delete AtaquesOfensivos;
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::sessionKeyPress(TObject *Sender, char &Key)
 | 
						||
{
 | 
						||
  if ( Key==VK_RETURN && session->Text.Length()==12 ) {
 | 
						||
        oG_session    = session->Text;
 | 
						||
        currentState = csREADY;
 | 
						||
  }
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void  __fastcall Tmain::maxResources(TRecursos *RecursosDisp,Hangar *Naves,TRecursos *maxRecursos)
 | 
						||
{
 | 
						||
  long capacidadDeCarga;
 | 
						||
 | 
						||
  // Debemos maximizar la cantidad de recursos cargados, para llevarnos todo lo que podamos.
 | 
						||
  capacidadDeCarga=0;
 | 
						||
  maxRecursos->Metal=0;
 | 
						||
  maxRecursos->Cristal=0;
 | 
						||
  maxRecursos->Deuterio=0;
 | 
						||
 | 
						||
  for ( int h=0;h<14;h++ )
 | 
						||
  {
 | 
						||
    // Seleccionamos todas las naves del planeta (menos los satelites solares)
 | 
						||
    if  ( Naves[h].id>0 && Naves[h].id!=212 )
 | 
						||
        capacidadDeCarga+= (Naves[h].capacity * Naves[h].ship);
 | 
						||
  }
 | 
						||
 | 
						||
  // Prioridad al DEUTERIO / CRISTAL / METAL
 | 
						||
  maxRecursos->Deuterio = min( RecursosDisp->Deuterio, capacidadDeCarga );
 | 
						||
  capacidadDeCarga -= maxRecursos->Deuterio;
 | 
						||
 | 
						||
  maxRecursos->Cristal = min( RecursosDisp->Cristal, capacidadDeCarga );
 | 
						||
  capacidadDeCarga -= maxRecursos->Cristal;
 | 
						||
 | 
						||
  maxRecursos->Metal = min( RecursosDisp->Metal, capacidadDeCarga );
 | 
						||
  capacidadDeCarga -= maxRecursos->Metal;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int  __fastcall Tmain::numNaves(Hangar *Naves)
 | 
						||
{
 | 
						||
  int h,num;
 | 
						||
  num=0;
 | 
						||
  for ( h=0;h<14;h++ )
 | 
						||
  {
 | 
						||
    // Seleccionamos todas las naves del planeta (menos los satelites solares)
 | 
						||
    if  ( Naves[h].id>0 && Naves[h].id!=212 )
 | 
						||
        num += Naves[h].maxship;
 | 
						||
  }
 | 
						||
 | 
						||
  return num;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::cmpNaves(Hangar *A, Hangar *B)
 | 
						||
{
 | 
						||
  int hA, hB;
 | 
						||
  int dev=0;
 | 
						||
  for ( hA=0;hA<13 && dev>=0;hA++ )
 | 
						||
  {
 | 
						||
        if ( A[hA].id>0 && A[hA].id!=212 && A[hA].ship>0 )
 | 
						||
        {
 | 
						||
          for ( hB=0;hB<14;hB++ )
 | 
						||
          {
 | 
						||
                if ( B[hB].id==A[hA].id )
 | 
						||
                {
 | 
						||
                        if ( B[hB].ship > A[hA].ship )
 | 
						||
                        {
 | 
						||
                                dev = -1;
 | 
						||
                                break;
 | 
						||
                        }
 | 
						||
                }
 | 
						||
          }
 | 
						||
        }
 | 
						||
  }
 | 
						||
 | 
						||
  return dev;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
// OBTIENE el total de flota disponible en el planeta
 | 
						||
int  __fastcall Tmain::flota_obtenerFlota(int idPlaneta,TRecursos *RecursosDisp,Hangar *NavesAparcadas)
 | 
						||
{
 | 
						||
 | 
						||
/*****************************/
 | 
						||
    TDateTime start = Time();
 | 
						||
    TDateTime stop;
 | 
						||
/*****************************/
 | 
						||
 | 
						||
    AnsiString request,timeStamp, v;
 | 
						||
    int error = -1;
 | 
						||
 | 
						||
//	request ="GET http://"+oG_host+"/game/index.php?page=flotten1&session="+oG_session+"&cp="+idPlaneta+"&mode=Flotte&gid=&messageziel=&re=0 HTTP/1.1\r\n";
 | 
						||
	request ="GET /game/index.php?page=flotten1&session="+oG_session+"&cp="+idPlaneta+"&mode=Flotte&gid=&messageziel=&re=0 HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://"+oG_host+"/game/index.php?page=flotten1&session="+oG_session+"&mode=Flotte\r\n";
 | 
						||
        if ( !oG_Cookie.IsEmpty() )
 | 
						||
                request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
	request+="\r\n";
 | 
						||
 | 
						||
        lastRequest = lastRequest_flotten1;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
/*****************************/
 | 
						||
        stop=Time();
 | 
						||
/*****************************/
 | 
						||
        if ( error!=-1 )
 | 
						||
        {
 | 
						||
            error = checkError( out );
 | 
						||
            if ( error!=-1 )
 | 
						||
            {
 | 
						||
                    if ( oG_Cookie.IsEmpty() )
 | 
						||
                            oG_Cookie = obtenerOGCookie();
 | 
						||
 | 
						||
                    out->Position=0;
 | 
						||
                    char buffer[255];
 | 
						||
                    char *pos,*posEnd,*aux, *aux1;
 | 
						||
                    pos = StrPos((char *)out->Memory,"Energía"); // "Energ<72>a");
 | 
						||
        	    if ( pos>0 )
 | 
						||
                    {
 | 
						||
                         aux = pos;
 | 
						||
 | 
						||
                         // Extraemos las computaciones ocupadas
 | 
						||
                         pos = StrPos(pos,"Flotas ");
 | 
						||
 | 
						||
                         aux1 = StrPos(pos,"Misión");//"Misi<73>n");
 | 
						||
                         posEnd = StrPos(pos,"</table>"); // v.0.77b
 | 
						||
                         if ( aux1>posEnd ) // v.0.77c
 | 
						||
                          posEnd = StrPos(aux1,"</table>");
 | 
						||
 | 
						||
                         do {
 | 
						||
                          aux1 = pos;
 | 
						||
                          pos = StrPos(pos,"<tr")+4;
 | 
						||
                         } while( pos>0 && pos<posEnd );
 | 
						||
 | 
						||
                         pos = StrPos(aux1,"<th>")+4;
 | 
						||
                         posEnd = StrPos(pos,"<");
 | 
						||
                         StrLCopy(buffer, pos, min( (posEnd-pos), 3) );
 | 
						||
                         computacionesOcupadas = atoi(buffer);
 | 
						||
                         //////////////////////////////////////////////////////
 | 
						||
 | 
						||
                         pos = aux;
 | 
						||
                         pos = extraerRecursos(pos,RecursosDisp);
 | 
						||
 | 
						||
                         /*
 | 
						||
                         pos = extraerYcombinarFlota(pos,Flotas);
 | 
						||
                         */
 | 
						||
 | 
						||
                         pos = extraerNavesAparcadas(pos,NavesAparcadas);
 | 
						||
 | 
						||
 | 
						||
                        /*****************************/
 | 
						||
                                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar (1/4)")+" ["+AnsiString(MilliSecondsBetween(stop,start))+"]");
 | 
						||
                        /*****************************/
 | 
						||
                         error = 0;
 | 
						||
                    } else {
 | 
						||
                         statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar: ParseR ERROR") );
 | 
						||
                         //nextUpdate->Interval = 10000; // Reintenamos logarnos 10segundos
 | 
						||
                         error = -1;
 | 
						||
                    }
 | 
						||
            } else {
 | 
						||
                  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error vision general (Sesion caducada)") );
 | 
						||
            }
 | 
						||
        } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar: CONNECT ERROR") );
 | 
						||
                 //nextUpdate->Interval = 2000; // Reintenamos logarnos 10segundos
 | 
						||
                 nextUpdateCLK = 0;
 | 
						||
//                 nextUpdateTimer(0);
 | 
						||
                 error = -1;
 | 
						||
        }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
// SELECCIONA la flota que va a utilisarse
 | 
						||
int  __fastcall Tmain::flota_seleccionarFlota(Hangar *NavesAparcadas,TRecursos *RecursosDisp)
 | 
						||
{
 | 
						||
/*****************************/
 | 
						||
    TDateTime start = Time();
 | 
						||
    TDateTime stop;
 | 
						||
/*****************************/
 | 
						||
 | 
						||
    AnsiString request,timeStamp, v;
 | 
						||
    int error = -1;
 | 
						||
 | 
						||
//	request ="POST http://"+oG_host+"/game/index.php?page=flotten2&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request ="POST /game/index.php?page=flotten2&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://"+oG_host+"/game/index.php?page=flotten1&session="+oG_session+"&mode=Flotte\r\n";
 | 
						||
        if ( !oG_Cookie.IsEmpty() )
 | 
						||
                request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
        request+="Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
 | 
						||
	AnsiString params;
 | 
						||
        for ( int h=0;h<14;h++ )
 | 
						||
        {
 | 
						||
          // Seleccionamos todas las naves del planeta (menos los satelites solares)
 | 
						||
          if  ( NavesAparcadas[h].id>0 && NavesAparcadas[h].id!=212 )
 | 
						||
          {
 | 
						||
                if ( !params.IsEmpty() )
 | 
						||
                  params+="&";
 | 
						||
                  params+="maxship"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].maxship);
 | 
						||
                  params+="&consumption"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].consumption);
 | 
						||
                  params+="&speed"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].speed);
 | 
						||
                  params+="&capacity"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].capacity);
 | 
						||
                  params+="&ship"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].ship);
 | 
						||
          }
 | 
						||
        }
 | 
						||
	request+="Content-Length: "+AnsiString(params.Length())+"\r\n\r\n";
 | 
						||
        request+=params;
 | 
						||
 | 
						||
        lastRequest = lastRequest_flotten2;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
/*****************************/
 | 
						||
        stop=Time();
 | 
						||
/*****************************/
 | 
						||
        if ( error!=-1 )
 | 
						||
        {
 | 
						||
            char *pos;
 | 
						||
            out->Position=0;
 | 
						||
            pos = StrPos((char *)out->Memory,"Energía");//"Energ<72>a");
 | 
						||
	    if ( pos>0 )
 | 
						||
            {
 | 
						||
                 pos = extraerRecursos(pos,RecursosDisp);
 | 
						||
                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota sel. naves (2/4)")+" ["+AnsiString(MilliSecondsBetween(stop,start))+"]");
 | 
						||
                 error = 0;
 | 
						||
            } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar: ParseR ERROR") );
 | 
						||
                 //nextUpdate->Interval = 2000; // Reintenamos logarnos 2segundos
 | 
						||
                 error = -1;
 | 
						||
            }
 | 
						||
        } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar: CONNECT ERROR") );
 | 
						||
                 //nextUpdate->Interval = 2000; // Reintenamos logarnos 10segundos
 | 
						||
//                 nextUpdateTimer(0);
 | 
						||
                 nextUpdateCLK = 0;
 | 
						||
                 error = -1;
 | 
						||
        }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
// FIJA EL OBJETIVO (tipo Planeta,luna,escombros) y la velocidad
 | 
						||
int  __fastcall Tmain::flota_fijarObjetivo(int gO,int sO,int pO,int tipoO, TRecursos *RecursosDisp,Hangar *NavesAparcadas, int gD,int sD, int pD, int tipoD, int velocidad)
 | 
						||
{
 | 
						||
/*****************************/
 | 
						||
    TDateTime start = Time();
 | 
						||
    TDateTime stop;
 | 
						||
/*****************************/
 | 
						||
 | 
						||
    AnsiString request,timeStamp, v;
 | 
						||
    int error = -1;
 | 
						||
 | 
						||
//	request ="POST http://"+oG_host+"/game/index.php?page=flotten3&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request ="POST /game/index.php?page=flotten3&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://"+oG_host+"/game/index.php?page=flotten2&session="+oG_session+"&mode=Flotte\r\n";
 | 
						||
        if ( !oG_Cookie.IsEmpty() )
 | 
						||
                request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
        request+="Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
 | 
						||
	AnsiString params;
 | 
						||
        params+="thisgalaxy"+AnsiString(gO)+"&thissystem="+AnsiString(sO)+"&thisplanet="+AnsiString(pO);
 | 
						||
        params+="&thisplanettype="+AnsiString(tipoO)+"&speedfactor=1";
 | 
						||
        params+="&thisresource1="+AnsiString(RecursosDisp->Metal)+"&thisresource2="+AnsiString(RecursosDisp->Cristal)+"&thisresource3="+AnsiString(RecursosDisp->Deuterio);
 | 
						||
        for ( int h=0;h<14;h++ )
 | 
						||
        {
 | 
						||
          // Seleccionamos todas las naves del planeta (menos los satelites solares)
 | 
						||
          if  ( NavesAparcadas[h].id>0 && NavesAparcadas[h].id!=212 )
 | 
						||
          {
 | 
						||
                  params+="&ship"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].ship);
 | 
						||
                  params+="&consumption"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].consumption);
 | 
						||
                  params+="&speed"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].speed);
 | 
						||
                  params+="&capacity"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].capacity);
 | 
						||
          }
 | 
						||
        }
 | 
						||
        params+="&galaxy"+AnsiString(gD)+"&system="+AnsiString(sD)+"&planet="+AnsiString(pD)+"&planettype="+AnsiString(tipoD)+"&speed="+AnsiString(velocidad);
 | 
						||
 | 
						||
	request+="Content-Length: "+AnsiString(params.Length())+"\r\n\r\n";
 | 
						||
        request+=params;
 | 
						||
 | 
						||
        lastRequest = lastRequest_flotten3;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
/*****************************/
 | 
						||
        stop=Time();
 | 
						||
/*****************************/
 | 
						||
        if ( error!=-1 )
 | 
						||
        {
 | 
						||
            out->Position=0;
 | 
						||
            /***************************/
 | 
						||
            /* La respuesta no nos interesa */
 | 
						||
            /***************************/
 | 
						||
                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota sel. destino (3/4)") );
 | 
						||
        } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota en hangar: CONNECT ERROR") );
 | 
						||
                 //nextUpdate->Interval = 2000; // Reintenamos logarnos 10segundos
 | 
						||
//                 nextUpdateTimer(0);
 | 
						||
                 nextUpdateCLK = 0;
 | 
						||
                 error = -1;
 | 
						||
        }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
// FIJA LA MISION y RECURSOS
 | 
						||
int  __fastcall Tmain::flota_ejecutarMision(int gO,int sO,int pO,int tipoO, TRecursos *RecursosDisp,Hangar *NavesAparcadas, int gD,int sD, int pD, int tipoD, int velocidad, int mision, TRecursos *RecursosD,bool usarBUGS)
 | 
						||
{
 | 
						||
/*****************************/
 | 
						||
    TDateTime start = Time();
 | 
						||
    TDateTime stop;
 | 
						||
/*****************************/
 | 
						||
 | 
						||
    AnsiString request,timeStamp, v;
 | 
						||
    int error = -1;
 | 
						||
 | 
						||
 | 
						||
//	request ="POST http://"+oG_host+"/game/index.php?page=flottenversand&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request ="POST /game/index.php?page=flottenversand&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
	request+="Host: "+oG_host+"\r\n";
 | 
						||
	request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
	request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
	request+="Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
	request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
	request+="Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
	request+="Keep-Alive: 300\r\n";
 | 
						||
	request+="Connection: keep-alive\r\n";
 | 
						||
	request+="Referer: http://"+oG_host+"/game/index.php?page=flotten3&session="+oG_session+"\r\n";
 | 
						||
        if ( !oG_Cookie.IsEmpty() )
 | 
						||
                request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
        request+="Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
 | 
						||
	AnsiString params;
 | 
						||
        params+="thisgalaxy"+AnsiString(gO)+"&thissystem="+AnsiString(sO)+"&thisplanet="+AnsiString(pO);
 | 
						||
        params+="&thisplanettype="+AnsiString(tipoO)+"&speedfactor=1";
 | 
						||
        params+="&thisresource1="+AnsiString(RecursosDisp->Metal)+"&thisresource2="+AnsiString(RecursosDisp->Cristal)+"&thisresource3="+AnsiString(RecursosDisp->Deuterio);
 | 
						||
        params+="&galaxy="+AnsiString(gD)+"&system="+AnsiString(sD)+"&planet="+AnsiString(pD)+"&planettype="+AnsiString(tipoD);
 | 
						||
        for ( int h=0;h<14;h++ )
 | 
						||
        {
 | 
						||
          // Seleccionamos todas las naves del planeta (menos los satelites solares)
 | 
						||
          if  ( NavesAparcadas[h].id>0 && ( NavesAparcadas[h].id!=212 || usarBUGS) )
 | 
						||
          {
 | 
						||
                  params+="&ship"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].ship);
 | 
						||
                  params+="&consumption"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].consumption);
 | 
						||
                  params+="&speed"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].speed);
 | 
						||
                  params+="&capacity"+AnsiString(NavesAparcadas[h].id)+"="+AnsiString(NavesAparcadas[h].capacity);
 | 
						||
          }
 | 
						||
        }
 | 
						||
        params+="&speed="+AnsiString(velocidad)+"&order="+AnsiString(mision);
 | 
						||
        params+="&resource1="+AnsiString(RecursosD->Metal)+"&resource2="+AnsiString(RecursosD->Cristal)+"&resource3="+AnsiString(RecursosD->Deuterio);
 | 
						||
 | 
						||
	request+="Content-Length: "+AnsiString(params.Length())+"\r\n\r\n";
 | 
						||
        request+=params;
 | 
						||
 | 
						||
        lastRequest = lastRequest_flottenversand;
 | 
						||
        TMemoryStream* out  = new TMemoryStream();
 | 
						||
        error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
/*****************************/
 | 
						||
        stop=Time();
 | 
						||
/*****************************/
 | 
						||
        if ( error!=-1 )
 | 
						||
        {
 | 
						||
//                La flota no ha podido ser enviada
 | 
						||
//                La flota ha sido enviada
 | 
						||
            char *pos;
 | 
						||
            out->Position=0;
 | 
						||
            pos = StrPos((char *)out->Memory,"La flota ha sido enviada");
 | 
						||
            if ( pos>0 )
 | 
						||
            {
 | 
						||
                 error = 0;
 | 
						||
                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota sel. mision (4/4)") );
 | 
						||
            } else {
 | 
						||
                 error = -1;
 | 
						||
                 statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota sel. mision ERROR (4/4)") );
 | 
						||
            }
 | 
						||
        } else {
 | 
						||
                 statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > Flota sel. mission: CONNECT ERROR") );
 | 
						||
                 //nextUpdate->Interval = 2000; // Reintenamos logarnos 10segundos
 | 
						||
//                 nextUpdateTimer(0);
 | 
						||
                 nextUpdateCLK = 0;
 | 
						||
                 error = -1;
 | 
						||
        }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
char * __fastcall Tmain::extraerNavesAparcadas(char *html,Hangar *NavesAparcadas)
 | 
						||
{
 | 
						||
  char buffer[255];
 | 
						||
  char *pos,*posEnd;
 | 
						||
  pos = html;
 | 
						||
 | 
						||
    int h;                 // Vaciamos "nuestro" hangar...
 | 
						||
    for ( h=0;h<14;h++ )
 | 
						||
           NavesAparcadas[h].id=-1;
 | 
						||
 | 
						||
    // Buscamos el punto de inicio
 | 
						||
    pos = StrPos(pos,"elegir naves");
 | 
						||
    if ( pos )
 | 
						||
    {
 | 
						||
        h=0;
 | 
						||
        posEnd=pos;
 | 
						||
        while( pos = StrPos(posEnd,"title=\"Velocidad:") )
 | 
						||
        {
 | 
						||
          if ( h>13 ) { statusBar->SelAttributes->Color = clPurple;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Extraer flota: El n<>mero de naves supera lo esperado." )); break; }
 | 
						||
 | 
						||
          // Extraemos los datos de la nave... [ Asumimos que siempre vienen como CONSUMO/VELOCIDAD/CAPACIDAD//NAVES ]
 | 
						||
          pos = StrPos(pos,"name=\"") + 13; //  name="maxship
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].id = atoi(buffer);
 | 
						||
          /** VALUE **/
 | 
						||
          pos = StrPos(pos,"value=\"") + 7; // value="
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].maxship = atol(buffer);
 | 
						||
 | 
						||
/*
 | 
						||
          pos = StrPos(pos,"name=\"") + 17; //  name="consumption
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].id = atoi(buffer);
 | 
						||
*/
 | 
						||
          /** VALUE **/
 | 
						||
          pos = StrPos(pos,"value=\"") + 7; // value="
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].consumption = atol(buffer);
 | 
						||
 | 
						||
/*
 | 
						||
          pos = StrPos(pos,"name=\"") + 11; //  name="speed
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].id = atoi(buffer);
 | 
						||
*/
 | 
						||
          /** VALUE **/
 | 
						||
          pos = StrPos(pos,"value=\"") + 7; // value="
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].speed = atol(buffer);
 | 
						||
 | 
						||
/*
 | 
						||
          pos = StrPos(pos,"name=\"") + 14; //  name="capacity
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].id = atoi(buffer);
 | 
						||
*/
 | 
						||
          /** VALUE **/
 | 
						||
          pos = StrPos(pos,"value=\"") + 7; // value="
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].capacity = atol(buffer);
 | 
						||
 | 
						||
/*
 | 
						||
          pos = StrPos(pos,"name=\"") + 11; //  name="ship
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].id = atoi(buffer);
 | 
						||
*/
 | 
						||
          /** VALUE **/
 | 
						||
/*
 | 
						||
          pos = StrPos(pos,"value=\"") + 7; // value="
 | 
						||
          posEnd = StrPos(pos,"\"");
 | 
						||
          StrLCopy(buffer,pos,min(posEnd-pos,254));
 | 
						||
          NavesAparcadas[h].ship = atol(buffer);
 | 
						||
*/
 | 
						||
          NavesAparcadas[h].ship = NavesAparcadas[h].maxship;
 | 
						||
 | 
						||
 | 
						||
/*
 | 
						||
   <tr height="20">
 | 
						||
    <th><a title="Velocidad: 220000000">Sonda de espionaje</a></th>
 | 
						||
           ^^^^^^^^^^^^^^^^^
 | 
						||
    <th>56<input type="hidden" name="maxship210" value="56"/></th>
 | 
						||
 | 
						||
<!--    <th>220000000 -->
 | 
						||
     <input type="hidden" name="consumption210" value="1"/>
 | 
						||
     <input type="hidden" name="speed210" value="220000000" /></th>
 | 
						||
     <input type="hidden" name="capacity210" value="5" /></th>
 | 
						||
     <th><a href="javascript:maxShip('ship210');" >m<>x</a> </th>
 | 
						||
     <th><input name="ship210" size="10" value="0" alt="Sonda de espionaje 56"/></th>
 | 
						||
   </tr>
 | 
						||
*/
 | 
						||
 | 
						||
          h++;
 | 
						||
        }
 | 
						||
  }
 | 
						||
 | 
						||
  return pos;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
char * __fastcall Tmain::extraerRecursos(char *html, TRecursos *RecursosDisp)
 | 
						||
{
 | 
						||
  char buffer[255];
 | 
						||
  char *pos,*posEnd;
 | 
						||
  pos = html;
 | 
						||
 | 
						||
                 // Metal / Cristal / Deuterio / Energ<72>aConsumida | EnergiaProducida
 | 
						||
                 //****************************************************************************************
 | 
						||
                 pos = StrPos( StrPos(pos,"<font")+5, ">")+1;
 | 
						||
                 posEnd = StrPos(pos,"<");
 | 
						||
                 StrLCopy(buffer,pos,min(posEnd-pos,15) );
 | 
						||
                 RecursosDisp->Metal = toNumber(buffer);
 | 
						||
 | 
						||
 | 
						||
                 pos = StrPos( StrPos(posEnd,"<font")+5, ">")+1;
 | 
						||
                 posEnd = StrPos(pos,"<");
 | 
						||
                 StrLCopy(buffer,pos,min(posEnd-pos,15) );
 | 
						||
                 RecursosDisp->Cristal = toNumber(buffer);
 | 
						||
 | 
						||
                 pos = StrPos( StrPos(posEnd,"<font")+5, ">")+1;
 | 
						||
                 posEnd = StrPos(pos,"<");
 | 
						||
                 StrLCopy(buffer,pos,min(posEnd-pos,15) );
 | 
						||
                 RecursosDisp->Deuterio = toNumber(buffer);
 | 
						||
 | 
						||
                 RecursosDisp->energiaConsumida = 0;
 | 
						||
                 RecursosDisp->energiaProducida = 0;
 | 
						||
                 //****************************************************************************************
 | 
						||
 | 
						||
  return posEnd;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void __fastcall Tmain::ToolButton5Click(TObject *Sender)
 | 
						||
{
 | 
						||
  char zBuffer[255];
 | 
						||
 | 
						||
  if ( oG_location.IsEmpty() )
 | 
						||
  {
 | 
						||
          StrCopy(zBuffer,"http://");   StrCat(zBuffer,oG_host.c_str());  StrCat(zBuffer,"/game/index.php?page=overview&session=");
 | 
						||
  } else {
 | 
						||
          StrCopy(zBuffer,oG_location.c_str());
 | 
						||
  }
 | 
						||
 | 
						||
 | 
						||
  StrCat(zBuffer,oG_session.c_str());
 | 
						||
  StrCat(zBuffer,"&stat_universo=");                                            StrCat(zBuffer,AnsiString(oG_Universo).c_str());
 | 
						||
  StrCat(zBuffer,"&url=http://localhost/oGame");
 | 
						||
 | 
						||
//68b27494f258
 | 
						||
  ShellExecute(Application->MainForm->Handle, 0, zBuffer, "","", SW_SHOWNOACTIVATE > 32);
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::regresarNaves(PAtaques EAtaque)
 | 
						||
{
 | 
						||
  if ( sndCHK_peligro->Checked )
 | 
						||
     sndPlaySound("snd\\regresarNavesRecursos.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
     statusBar->SelAttributes->Color = clBlack;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Regresando naves ")+"["+EAtaque->gD+":"+EAtaque->sD+":"+EAtaque->pD+"]" );
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
bool __fastcall Tmain::cambiarPlaneta(int g, int s, int p,int t)
 | 
						||
{
 | 
						||
 bool enc;
 | 
						||
 int i,idxP;
 | 
						||
 PPlanetas EPlanetas;
 | 
						||
 | 
						||
     enc = false;
 | 
						||
     // Buscamos el ID del planeta que esta siendo atacado
 | 
						||
     for(i=0;i<MyPlanets->Count;i++ )
 | 
						||
     {
 | 
						||
        EPlanetas = (PPlanetas)MyPlanets->Items[i];
 | 
						||
        if ( EPlanetas->g==g && EPlanetas->s==s && EPlanetas->p==p && EPlanetas->t==t )
 | 
						||
        {
 | 
						||
          idxP=i;
 | 
						||
          enc=true;
 | 
						||
          break;
 | 
						||
        }
 | 
						||
     }
 | 
						||
 | 
						||
     if ( enc )
 | 
						||
     {
 | 
						||
        enc = ( _visionGeneral(idxP)!=-1 );
 | 
						||
        if ( !enc )
 | 
						||
        {
 | 
						||
          statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error cambiando al origen ")+"["+g+":"+s+":"+p+"]."+t );
 | 
						||
        }
 | 
						||
     } else {
 | 
						||
        statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Planeta origen no encontrado ")+"["+g+":"+s+":"+p+"]."+t );
 | 
						||
     }
 | 
						||
 | 
						||
  return enc;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::sondearAtacante(PAtaques EAtaque)
 | 
						||
{
 | 
						||
 int status;
 | 
						||
 | 
						||
 if ( sndCHK_sondeo->Checked )
 | 
						||
     sndPlaySound("snd\\sondearAtacante.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
 | 
						||
 status = sondearPlaneta(EAtaque->gD,EAtaque->sD,EAtaque->pD,EAtaque->tD,EAtaque->gO,EAtaque->sO,EAtaque->pO,EAtaque->tO);
 | 
						||
 | 
						||
 return status;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::sondearPlaneta(int gO,int sO, int pO,int tO,int gD,int sD, int pD,int tD)
 | 
						||
{
 | 
						||
 int status = -1;
 | 
						||
 | 
						||
 TDateTime start=Time();
 | 
						||
 if ( cambiarPlaneta(gO,sO,pO,tO) )
 | 
						||
 {
 | 
						||
        // Cargar la galaxia...
 | 
						||
        cargarGalaxia(gD,sD,pD);
 | 
						||
        status = enviarSondaModoGalaxia(gD,sD,pD,tD);
 | 
						||
        statusBar->SelAttributes->Color = 0x0075BAFF;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Sondeando planeta ")+"["+gD+":"+sD+":"+pD+"]."+tD+" ["+AnsiString(MilliSecondsBetween(Time(),start))+"]" );
 | 
						||
 | 
						||
        // A<>adimos el evento a la cola de eventos...
 | 
						||
        addEvent( gO,sO,pO,tO,"Espionaje",0,0,gD,sD,pD,tD,"lanzado...",0,0,'e' );
 | 
						||
 }
 | 
						||
 return status;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::cargarGalaxia(int g,int s, int p)
 | 
						||
{
 | 
						||
  int error;
 | 
						||
  AnsiString request,post;
 | 
						||
 | 
						||
  if ( (g<1 || g>9) || (s<1 || s>499) || (p<1 || p>15) )
 | 
						||
  {
 | 
						||
    statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error Galaxia (Fuera de rango)") );
 | 
						||
    return 0;
 | 
						||
  }
 | 
						||
 | 
						||
  error = 0;
 | 
						||
  if ( error!=-1 )
 | 
						||
  {
 | 
						||
          request = "GET /game/index.php?page=galaxy&galaxy="+AnsiString(g)+"&system="+AnsiString(s)+"&position="+AnsiString(p)+"&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
          request+= "Host: "+oG_host+"\r\n";
 | 
						||
          request+= "User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
          request+= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
          request+= "Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
          request+= "Accept-Encoding: gzip,deflate\r\n";
 | 
						||
          request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
          request+= "Keep-Alive: 300\r\n";
 | 
						||
          request+= "Connection: keep-alive\r\n";
 | 
						||
          request+= "Referer: http://"+oG_host+"/game/index.php?page=flotten1&session="+oG_session+"&mode=Flotte\r\n";
 | 
						||
          if ( !oG_Cookie.IsEmpty() )
 | 
						||
                  request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
          request+= "\r\n";
 | 
						||
 | 
						||
          lastRequest = lastRequest_galaxy;
 | 
						||
          TMemoryStream* out  = new TMemoryStream();
 | 
						||
          error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
          if ( error!=-1 )
 | 
						||
          {
 | 
						||
                error = checkError( out );
 | 
						||
                if ( error!=-1 )
 | 
						||
                {
 | 
						||
                  // Parseamos el listado de mensajes...
 | 
						||
                  /*
 | 
						||
                  out->Position = 0;
 | 
						||
                  (char *)out->Memory;
 | 
						||
                  */
 | 
						||
                  statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Cargar Galaxia [")+AnsiString(g)+AnsiString(":")+AnsiString(s)+AnsiString("]") );
 | 
						||
                } else {
 | 
						||
                  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error descargando mensaje (Sesion caducada)") );
 | 
						||
                }
 | 
						||
          } else {
 | 
						||
             statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error Galaxia") );
 | 
						||
          }
 | 
						||
          delete out;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
/**** SONDEO DE PLANETA DESDE EL MODO GALAXIA ***********/
 | 
						||
int __fastcall Tmain::enviarSondaModoGalaxia(int g,int s, int p,int pt)
 | 
						||
{
 | 
						||
  int error;
 | 
						||
  AnsiString request,post;
 | 
						||
  // Descargamos la p<>gina de mensajes...
 | 
						||
//        oG_host, oG_session, oG_SSID, oG_Cookie;
 | 
						||
 | 
						||
  if ( (g<1 || g>9) || (s<1 || s>499) || (p<1 || p>15) || (pt<1 || pt>2) )
 | 
						||
  {
 | 
						||
    statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error sondeando planeta (Fuera de rango)") );
 | 
						||
    return 0;
 | 
						||
  }
 | 
						||
 | 
						||
 | 
						||
  error = 0;
 | 
						||
  if ( oG_session=="" )
 | 
						||
  {
 | 
						||
     statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Session vacia") );
 | 
						||
     currentState = csLOGIN;
 | 
						||
     nextUpdateCLK = 0;
 | 
						||
  }
 | 
						||
 | 
						||
  if ( error!=-1 )
 | 
						||
  {
 | 
						||
  /*?session="+oG_session+"*/
 | 
						||
 | 
						||
 | 
						||
//          request = "POST http://"+oG_host+"/game/index.php?ajax=1&page=flottenversand&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
          request = "POST /game/index.php?ajax=1&page=flottenversand&session="+oG_session+" HTTP/1.1\r\n";
 | 
						||
          request+= "Host: "+oG_host+"\r\n";
 | 
						||
          request+= "User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
          request+= "Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
          request+= "Accept-Language: es-es,es;q=0.8\r\n";
 | 
						||
          request+= "Accept-Encoding: gzip,deflate\r\n";
 | 
						||
          request+= "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
          request+= "Keep-Alive: 300\r\n";
 | 
						||
          request+= "Connection: keep-alive\r\n";
 | 
						||
          request+= "Content-Type: application/x-www-form-urlencoded\r\n";
 | 
						||
          request+= "Referer: http://"+oG_host+"/game/index.php?page=galaxy&no_header=1&session="+oG_session+"\r\n";
 | 
						||
//          request+= "Referer: http://"+oG_host+"/game/index.php?page=galaxy&session="+oG_session+"&no_header=1\r\n";
 | 
						||
          post = "session="+oG_session+"&order=6&galaxy="+g+"&system="+s+"&planet="+p+"&planettype="+pt+"&shipcount=2&speed=10&reply=short&rndval="+AnsiString(MilliSecondsBetween(TDateTime::CurrentDateTime(),EncodeDateTime(1970,1,1,0,0,0,0)));
 | 
						||
          request+= "Content-Length: "+AnsiString(post.Length())+"\r\n";
 | 
						||
          if ( !oG_Cookie.IsEmpty() )
 | 
						||
                  request+= "Cookie: "+oG_Cookie+"\r\n";
 | 
						||
          request+= "Pragma: no-cache\r\n";
 | 
						||
          request+= "Cache-Control: no-cache\r\n";
 | 
						||
          request+= "\r\n";
 | 
						||
          request+= post;
 | 
						||
 | 
						||
          lastRequest = lastRequest_galaxyProbe;
 | 
						||
          TMemoryStream* out  = new TMemoryStream();
 | 
						||
          error = HTTPdownloader->descargarHTML(oG_host.c_str(),request.c_str(),out);
 | 
						||
 | 
						||
          if ( error!=-1 )
 | 
						||
          {
 | 
						||
                error = checkError( out );
 | 
						||
                if ( error!=-1 )
 | 
						||
                {
 | 
						||
                  // Parseamos el listado de mensajes...
 | 
						||
                  out->Position = 0;
 | 
						||
 | 
						||
                  // ######################
 | 
						||
                  char buffer[255];
 | 
						||
                  strncpy(buffer,(char *)out->Memory,3);
 | 
						||
 /*
 | 
						||
 *
 | 
						||
 *  600   OK
 | 
						||
 *  601   no planet exists there
 | 
						||
 *  602   no moon exists there
 | 
						||
 *  603   player is in noob protection
 | 
						||
 *  604   player is too strong
 | 
						||
 *  605   player is in u-mode
 | 
						||
 *  610   not enough espionage probes, sending x (parameter is the second return value)
 | 
						||
 *  611   no espionage probes, nothing send
 | 
						||
 *  612   no fleet slots free, nothing send
 | 
						||
 *  613   not enough deuterium to send a probe
 | 
						||
 *
 | 
						||
 */
 | 
						||
 | 
						||
                  error = atoi(buffer);
 | 
						||
                  // ######################
 | 
						||
                  statusBar->SelAttributes->Color = clGreen;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Sondeo de planeta [")+AnsiString(g)+AnsiString(":")+AnsiString(s)+AnsiString(":")+AnsiString(p)+AnsiString("].")+AnsiString(pt)+AnsiString(" <20>")+AnsiString(error)+AnsiString("!") );
 | 
						||
                } else {
 | 
						||
                  statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error descargando mensaje (Sesion caducada)") );
 | 
						||
/*
 | 
						||
                  error = iniciarSesion();
 | 
						||
                  // Deberiamos reintentar descargar los mensajes...
 | 
						||
                  if ( error!=-1 )
 | 
						||
                        sondearPlaneta(g,s,p,1);
 | 
						||
*/
 | 
						||
                }
 | 
						||
          } else {
 | 
						||
             statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Error sondeando planeta") );
 | 
						||
          }
 | 
						||
 | 
						||
 | 
						||
          delete out;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::retirarNavesRecursos(PAtaques EAtaque, bool irAEscombros, int velocidadRec )
 | 
						||
{
 | 
						||
  int error=0;
 | 
						||
 | 
						||
  TRecursos maxRecursos;
 | 
						||
  Hangar NavesAparcadas[14];
 | 
						||
  int velocidad=10; // 10%
 | 
						||
 | 
						||
  int mision=4; // 3 - transportar // 4 - desplegar   // 8 - recolectar
 | 
						||
  int gO,sO,pO,tipoO;
 | 
						||
  int gD,sD,pD,tipoD;
 | 
						||
  tipoD=1;// 1 - planeta  // 2 - Escombros // 3 - Luna
 | 
						||
 | 
						||
  int idPlaneta;
 | 
						||
 | 
						||
  // ######################################
 | 
						||
  gO=EAtaque->gD; sO=EAtaque->sD; pO=EAtaque->pD; tipoO=EAtaque->tD;
 | 
						||
  gD=EAtaque->gD; sD=EAtaque->sD; pD=EAtaque->pD; tipoD=2;  mision=8;
 | 
						||
  velocidad=1;
 | 
						||
  // ######################################
 | 
						||
 | 
						||
  int i;bool enc=false;
 | 
						||
  for ( i=0; i<MyPlanets->Count && !enc; i++ )
 | 
						||
        if ( ((PPlanetas)MyPlanets->Items[i])->g==gO &&
 | 
						||
             ((PPlanetas)MyPlanets->Items[i])->s==sO &&
 | 
						||
             ((PPlanetas)MyPlanets->Items[i])->p==pO &&
 | 
						||
                ((PPlanetas)MyPlanets->Items[i])->t==tipoO ) { enc=true; break; }
 | 
						||
  if ( enc )
 | 
						||
  {
 | 
						||
          idPlaneta=((PPlanetas)MyPlanets->Items[i])->cp;
 | 
						||
 | 
						||
          if ( irAEscombros )
 | 
						||
          {
 | 
						||
                  gD=EAtaque->gD; sD=EAtaque->sD; pD=EAtaque->pD; tipoD=2; mision=8; velocidad=velocidadRec;
 | 
						||
          }else {
 | 
						||
                  buscarRefugio(idPlaneta,&gD,&sD,&pD,&tipoD);
 | 
						||
                  if ( tipoD==2 )
 | 
						||
                  {
 | 
						||
                        mision = 8;
 | 
						||
                        velocidad=9;
 | 
						||
                  } else mision=4;
 | 
						||
          }
 | 
						||
 | 
						||
        error = flota_obtenerFlota(idPlaneta,&RecursosDisp,NavesAparcadas);
 | 
						||
        if ( error!=-1 )
 | 
						||
        {
 | 
						||
          if ( numNaves(NavesAparcadas)<=0 )
 | 
						||
          {
 | 
						||
            statusBar->SelAttributes->Color = 0x0075BAFF;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("<22>No hay naves! ")+"["+EAtaque->gD+":"+EAtaque->sD+":"+EAtaque->pD+"]" );
 | 
						||
            EAtaque->status = ATAQUE_SACAR_NAVES_EN_ULTIMO_SEGUNDO;
 | 
						||
            error = -1;
 | 
						||
          } else {
 | 
						||
 | 
						||
            error = flota_seleccionarFlota(NavesAparcadas,&RecursosDisp);
 | 
						||
            if ( error!=-1 )
 | 
						||
            {
 | 
						||
              error = flota_fijarObjetivo(gO,sO,pO,tipoO,&RecursosDisp,NavesAparcadas,gD,sD,pD,tipoD,velocidad);
 | 
						||
              if ( error!=-1 )
 | 
						||
              {
 | 
						||
                maxResources(&RecursosDisp,NavesAparcadas,&maxRecursos);
 | 
						||
                error = flota_ejecutarMision(gO,sO,pO,tipoO,&RecursosDisp,NavesAparcadas,gD,sD,pD,tipoD,velocidad,mision,&maxRecursos,false);
 | 
						||
 | 
						||
                if ( error!=-1 )
 | 
						||
                {
 | 
						||
                        if ( sndCHK_peligro->Checked )
 | 
						||
                        sndPlaySound("snd\\retirarNavesRecursos.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
                        statusBar->SelAttributes->Color = 0x0075BAFF;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Retirando naves ")+"["+EAtaque->gD+":"+EAtaque->sD+":"+EAtaque->pD+"]" );
 | 
						||
                } // ejecutarMision y seleccion de recursos
 | 
						||
              } // fijarObjetivo
 | 
						||
            } // seleccionarFlota
 | 
						||
 | 
						||
          } // sin naves en el hangar
 | 
						||
 | 
						||
        } // obtenerFlota
 | 
						||
 | 
						||
          if ( error==-1 )
 | 
						||
          {
 | 
						||
            statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Retirando naves ")+"["+EAtaque->gD+":"+EAtaque->sD+":"+EAtaque->pD+"]."+EAtaque->tD );
 | 
						||
            if ( sndCHK_error->Checked )
 | 
						||
            sndPlaySound("snd\\retirarNavesRecursos_error.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
          }
 | 
						||
 | 
						||
  } else {
 | 
						||
        statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Flota: ERROR de ORIGEN ")+"["+EAtaque->gD+":"+EAtaque->sD+":"+EAtaque->pD+"]."+EAtaque->tD );
 | 
						||
        error=-1;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::cron(TObject *Sender)
 | 
						||
{
 | 
						||
  nextUpdateCLK--;
 | 
						||
 | 
						||
  if ( currentState==csREADY ) runREADY();
 | 
						||
 | 
						||
  if ( nextUpdateCLK<=0 ) {
 | 
						||
        switch( currentState ) {
 | 
						||
                case csREADPASS:
 | 
						||
                        if ( recuperarPassword() ) {
 | 
						||
                          currentState = csLOGIN;
 | 
						||
                        } else
 | 
						||
                          nextUpdateCLK = 5;
 | 
						||
                        break;
 | 
						||
                case csRESETPASS:
 | 
						||
                        cambioPassword();
 | 
						||
                        if( sndCHK_network->Checked ) sndPlaySound("snd\\errorConexion.wav", SND_ASYNC | SND_FILENAME | SND_LOOP);
 | 
						||
                        break;
 | 
						||
                case csLOGIN:
 | 
						||
                        iniciarSesion();
 | 
						||
                        break;
 | 
						||
                case csREADY:
 | 
						||
                        int error = visionGeneral();
 | 
						||
                        if ( error==-1 ) {
 | 
						||
                           errorCONEXION++;
 | 
						||
                           if ( errorCONEXION>3 ) {
 | 
						||
                                nextUpdateCLK = 5;
 | 
						||
                                if( sndCHK_network->Checked ) sndPlaySound("snd\\errorConexion.wav", SND_ASYNC | SND_FILENAME | SND_LOOP);
 | 
						||
                           } else {
 | 
						||
                                nextUpdateCLK = 1;
 | 
						||
                           }
 | 
						||
                        } else {
 | 
						||
                           errorCONEXION = 0;
 | 
						||
                           currentState = csREADY;
 | 
						||
                           nextUpdateCLK=20*60 + (rand()%100)*6;
 | 
						||
                        }
 | 
						||
                        break;
 | 
						||
          }
 | 
						||
  }
 | 
						||
  nextUpdateCLOCK->Caption = AnsiString(nextUpdateCLK/60)+" minutos "+AnsiString(nextUpdateCLK%60)+" seg.";
 | 
						||
  dgEventos->Refresh();
 | 
						||
}
 | 
						||
 | 
						||
void __fastcall Tmain::runREADY() {
 | 
						||
 | 
						||
   PEventos EStruct;
 | 
						||
   PAtaques EAtaque;
 | 
						||
 | 
						||
   espacioEntreAtaques--;
 | 
						||
 | 
						||
 | 
						||
   int dev,aux;
 | 
						||
   unsigned long i, t;
 | 
						||
   t=9999999;
 | 
						||
/*
 | 
						||
   // Borramos los ataques marcados para tal...
 | 
						||
   for(i=0;i<MyAttacks->Count;i++)
 | 
						||
   {
 | 
						||
     try { EAtaque = (PAtaques)MyAttacks->Items[i]; } catch(...) { break; }
 | 
						||
     if ( EAtaque->borrar==true ) {
 | 
						||
        if ( EAtaque->status==ATAQUE_NAVES_VOLANDO ) {
 | 
						||
                     regresarNaves(EAtaque);
 | 
						||
        }
 | 
						||
        MyAttacks->Delete(i);
 | 
						||
        delete EAtaque;
 | 
						||
     }
 | 
						||
   }
 | 
						||
   MyAttacks->Pack();
 | 
						||
*/
 | 
						||
 | 
						||
   // Atendemos al resto de ataques...
 | 
						||
   bool pack;
 | 
						||
   pack=false;
 | 
						||
   for(i=0;i<MyAttacks->Count;i++)
 | 
						||
   {
 | 
						||
     try { EAtaque = (PAtaques)MyAttacks->Items[i]; } catch(...) { break; } // Si no podemos llegar a este ataque, abortamos el bucle
 | 
						||
     EAtaque->t--;
 | 
						||
     EAtaque->tDelay++;
 | 
						||
 | 
						||
     if ( EAtaque->borrar==true )
 | 
						||
     {
 | 
						||
        pack=true;
 | 
						||
        // Han cancelado el ataque, pero nuestras naves ya hab<61>an sido desplegadas...
 | 
						||
        if ( EAtaque->status==ATAQUE_NAVES_VOLANDO )
 | 
						||
                     regresarNaves(EAtaque);
 | 
						||
 | 
						||
         MyAttacks->Delete(i);
 | 
						||
         delete EAtaque;
 | 
						||
     } else {
 | 
						||
        t = min( t, EAtaque->t );
 | 
						||
 | 
						||
        // Si estamos dentro del tiempo cr<63>tico, no intentar sondearlo, escapar directamente
 | 
						||
        if ( EAtaque->t <= CFG_tiempoCritico && EAtaque->status==ATAQUE_SONDEAR_ATACANTE ) EAtaque->status=ATAQUE_BUSCAR_RUTA_ESCAPE;
 | 
						||
 | 
						||
        switch( EAtaque->status )
 | 
						||
        {
 | 
						||
          case ATAQUE_SONDEAR_ATACANTE: // Sondear al enemigo
 | 
						||
                // Esperamos 5 Minutos antes de sondear a este atacante...
 | 
						||
                if ( EAtaque->tDelay >= 300 )
 | 
						||
                {
 | 
						||
                        dev = 0;
 | 
						||
                        // Evitar sondeos dobles
 | 
						||
                        // Si ya hemos sondeado al planeta atacante (y hace menos de 5 minutos)
 | 
						||
                        {
 | 
						||
                          PAtaques a;
 | 
						||
                          for (int s=0;s<MyAttacks->Count;s++)
 | 
						||
                          {
 | 
						||
                                try { a=(PAtaques)MyAttacks->Items[s]; } catch(...) { break; }
 | 
						||
                                if ( a->status == ATAQUE_ESCAPAR_A_ESCOMBROS
 | 
						||
                                       && a->gO==EAtaque->gO && a->sO==EAtaque->sO && a->pO==EAtaque->pO )
 | 
						||
                                {
 | 
						||
                                        dev = 600;
 | 
						||
                                        break;
 | 
						||
                                }
 | 
						||
 | 
						||
                          }
 | 
						||
                        }
 | 
						||
 | 
						||
                        EAtaque->status=ATAQUE_ESCAPAR_A_ESCOMBROS;
 | 
						||
                        EAtaque->tDelay = 0;
 | 
						||
 | 
						||
                        if ( dev == 0)
 | 
						||
                        {
 | 
						||
                                dev = sondearAtacante(EAtaque);
 | 
						||
 | 
						||
                                if ( CFG_ejecutarProgama )  ejecutarProgramaAntiSondeo(EAtaque);
 | 
						||
 | 
						||
                                switch(dev)
 | 
						||
                                {
 | 
						||
                                  case 600:
 | 
						||
                                        break; // TODO OK
 | 
						||
                                  default:
 | 
						||
                                        break;
 | 
						||
                                }
 | 
						||
                        }
 | 
						||
                }
 | 
						||
                break;
 | 
						||
          case ATAQUE_ESCAPAR_A_ESCOMBROS: // Retirar el ataque cuando llegue al tiempo cr<63>tico PARA ESCAPE A ESCOMBROS
 | 
						||
                if ( EAtaque->t <= 618 )        // 10 minutos y 18 segundos
 | 
						||
                {
 | 
						||
                        if ( EAtaque->t<=375) aux = 10;     // 6 min y 15 seg
 | 
						||
                        else {  if ( EAtaque->t<=415) aux = 9;     // 6 min y 55 seg
 | 
						||
                          else {  if ( EAtaque->t<=466) aux = 8;     // 7 min y 46 seg
 | 
						||
                            else {  if ( EAtaque->t<=531) aux = 7;     // 8 min y 51 seg
 | 
						||
                              else {  if ( EAtaque->t<=618 ) aux = 6;    // 10 min y 18 seg
 | 
						||
                              }
 | 
						||
                            }
 | 
						||
                          }
 | 
						||
                        }
 | 
						||
 | 
						||
                        dev = retirarNavesRecursos(EAtaque,true,aux);  // Ir a escombros al 60%
 | 
						||
                        if ( dev != -1 )
 | 
						||
                        {
 | 
						||
                                addEvent( EAtaque->gO,EAtaque->sO,EAtaque->pO,EAtaque->tO,"ATAQUE",0,0,EAtaque->gD,EAtaque->sD,EAtaque->pD,EAtaque->tD,"DETECTADO",0,0,'A' );
 | 
						||
 | 
						||
//                                computacionesOcupadas++;
 | 
						||
                                EAtaque->status=ATAQUE_NAVES_VOLANDO;
 | 
						||
                        } else
 | 
						||
                                EAtaque->status=ATAQUE_BUSCAR_RUTA_ESCAPE;      // El siguiente intento sera escapar segun reglas definidas por el usuario
 | 
						||
 | 
						||
                        EAtaque->tDelay = 0;
 | 
						||
                }
 | 
						||
                break;
 | 
						||
          case ATAQUE_BUSCAR_RUTA_ESCAPE: // Retirar el ataque cuando llegue al tiempo cr<63>tico
 | 
						||
                if ( EAtaque->t <= CFG_tiempoCritico )
 | 
						||
                {
 | 
						||
                        dev = retirarNavesRecursos(EAtaque,false,0);
 | 
						||
                        if ( dev != -1 )
 | 
						||
                        {
 | 
						||
                                addEvent( EAtaque->gO,EAtaque->sO,EAtaque->pO,EAtaque->tO,"ATAQUE",0,0,EAtaque->gD,EAtaque->sD,EAtaque->pD,EAtaque->tD,"DETECTADO",0,0,'A' );
 | 
						||
//                                computacionesOcupadas++;
 | 
						||
                                EAtaque->status=ATAQUE_NAVES_VOLANDO;
 | 
						||
                        } else
 | 
						||
                                EAtaque->status = ATAQUE_SACAR_NAVES_EN_ULTIMO_SEGUNDO;
 | 
						||
 | 
						||
                        EAtaque->tDelay = 0;
 | 
						||
                }
 | 
						||
                break;
 | 
						||
          case ATAQUE_SACAR_NAVES_EN_ULTIMO_SEGUNDO:
 | 
						||
                if ( EAtaque->t <= 6 )
 | 
						||
                {
 | 
						||
                        dev = retirarNavesRecursos(EAtaque,false,0);
 | 
						||
                        if ( dev != -1 )
 | 
						||
                        {
 | 
						||
                                addEvent( EAtaque->gO,EAtaque->sO,EAtaque->pO,EAtaque->tO,"ATAQUE",0,0,EAtaque->gD,EAtaque->sD,EAtaque->pD,EAtaque->tD,"DETECTADO",0,0,'A' );
 | 
						||
//                                computacionesOcupadas++;
 | 
						||
                                EAtaque->status=ATAQUE_NAVES_VOLANDO;
 | 
						||
                                EAtaque->tDelay = 0;
 | 
						||
                        }
 | 
						||
                }
 | 
						||
                break;
 | 
						||
        }
 | 
						||
     }
 | 
						||
   }
 | 
						||
   if ( pack ) MyAttacks->Pack();
 | 
						||
 | 
						||
   // Control de la flota en vuelo (VISION GENERAL)
 | 
						||
   for(i=0;i<numEventos;i++)
 | 
						||
   {
 | 
						||
     EStruct = (PEventos) MyEvents->Items[i];
 | 
						||
     EStruct->ida--;
 | 
						||
     EStruct->vuelta--;
 | 
						||
 | 
						||
     if ( /* t==9999999 && */ EStruct->ida<=-30 && EStruct->vuelta<=-30 ) nextUpdateCLK=0;
 | 
						||
   }
 | 
						||
   computaciones->Caption = (computacionesOcupadas<0?AnsiString("n/a"):AnsiString(computacionesOcupadas))+" / "+AnsiString(CFG_ocuparMaxComputaciones)+" Ev.("+AnsiString(numEventos)+")";
 | 
						||
 | 
						||
 | 
						||
   // Hay un ataque en curso, asi que programamos la proxima actualizacion
 | 
						||
   // para dentro de la mitad de tiempo que quede para llegar el ataque
 | 
						||
   if ( t!=9999999 )
 | 
						||
   {
 | 
						||
       t = (t/2); if ( t<=0 ) t=10; // Grantizamos poder conectar incluso en el <20>ltimo segundo...
 | 
						||
 | 
						||
       if ( t>0 && nextUpdateCLK>t )
 | 
						||
                        nextUpdateCLK = t;
 | 
						||
   } else {
 | 
						||
      // Si esta activada la opci<63>n de sondeo autom<6F>tico...
 | 
						||
      if ( ( chkSondeo5min->Checked || chkSondeo2min->Checked || chkAviso5min->Checked )
 | 
						||
//             computacionesOcupadas<=CFG_ocuparMaxComputaciones
 | 
						||
       )
 | 
						||
      {
 | 
						||
        PEventos EStruct;
 | 
						||
        for ( i=0;i<MyEvents->Count;i++ )
 | 
						||
        {
 | 
						||
          EStruct = (PEventos)MyEvents->Items[i];
 | 
						||
          if (  EStruct->mision=='a' &&                         // Ataque nuestro
 | 
						||
                EStruct->ida>0                                  // Que aun no ha llegado
 | 
						||
             )
 | 
						||
          {
 | 
						||
            // Sondeo de los 5 minutos 25 segundos ...
 | 
						||
            if ( EStruct->ida>46 && EStruct->ida<325 )
 | 
						||
            {
 | 
						||
                // Aviso 25 segundos despues de lanzar el sondeo...
 | 
						||
                if ( chkAviso5min->Checked && EStruct->avisado == false && EStruct->ida<300 )   { EStruct->avisado = true;
 | 
						||
                                                                              sndPlaySound("snd\\alarmaAtaquePropio.wav", SND_ASYNC | SND_FILENAME | SND_LOOP);
 | 
						||
                                                                              InfoBox->Visible=true;
 | 
						||
                                                                            }
 | 
						||
 | 
						||
                // Sondeo de los 2 minutos...
 | 
						||
                if ( EStruct->ida>55 && computacionesOcupadas<=CFG_ocuparMaxComputaciones )
 | 
						||
                {
 | 
						||
                  if ( EStruct->status!=12 && chkSondeo2min->Checked && EStruct->ida<120 ) {  EStruct->status=12; sondearPlaneta(EStruct->gO,EStruct->sO,EStruct->pO,EStruct->tO,EStruct->gD,EStruct->sD,EStruct->pD,EStruct->tD); break; }
 | 
						||
 | 
						||
                  if ( EStruct->status==00 && chkSondeo5min->Checked )        {  EStruct->status=15; sondearPlaneta(EStruct->gO,EStruct->sO,EStruct->pO,EStruct->tO,EStruct->gD,EStruct->sD,EStruct->pD,EStruct->tD); break; }
 | 
						||
                }
 | 
						||
            }
 | 
						||
          }
 | 
						||
        }
 | 
						||
      }
 | 
						||
 | 
						||
      // Si no estamos siendo atacados,
 | 
						||
      // - hay una computaci<63>n libre
 | 
						||
      // - y tenemos una lista de ataques (con ataques pendientes)
 | 
						||
      // - y hay un margen entre el <20>timo ataque y este prudencial...
 | 
						||
      // ...lanzamos el siguiente ataque.
 | 
						||
 | 
						||
//      if (      activarColaAtaques->Checked &&
 | 
						||
        if (
 | 
						||
                computacionesOcupadas<CFG_ocuparMaxComputaciones &&
 | 
						||
                espacioEntreAtaques <= 0
 | 
						||
         )
 | 
						||
      {
 | 
						||
        // Las colas de sondeo tienen prioridad frente a las de ataque...
 | 
						||
        if ( activarSondeo->Checked )
 | 
						||
        {
 | 
						||
                if ( sondeoMasivo->Lines->Count == 0 ) activarSondeo->Checked = false;
 | 
						||
                else {
 | 
						||
                        int gD,sD,pD,tD;
 | 
						||
                        tD = 1;
 | 
						||
 | 
						||
                        // Computaciones ocupadas==-1 // Justo despues de una vision general, cuando todas las computaciones ocupadas
 | 
						||
                        if ( computacionesOcupadas<0 )
 | 
						||
                        {
 | 
						||
                                Hangar NavesAparcadas[14];
 | 
						||
                                flota_obtenerFlota(((PPlanetas)MyPlanets->Items[ (int)planetasOrigenSondeo->Items->Objects[planetasOrigenSondeo->ItemIndex] ])->cp,&RecursosDisp,NavesAparcadas);
 | 
						||
                        }
 | 
						||
 | 
						||
                        if ( computacionesOcupadas<CFG_ocuparMaxComputaciones )
 | 
						||
                        {
 | 
						||
                                // Parseamos la primera linea de ataque...
 | 
						||
                                sscanf(sondeoMasivo->Lines->Strings[0].c_str(),"%d:%d:%d",&gD,&sD,&pD);
 | 
						||
 | 
						||
                                // Para sondear modo galaxia, hay que estar previamente en "modo galaxia"
 | 
						||
                                if ( !(lastRequest==lastRequest_galaxy || lastRequest==lastRequest_galaxyProbe) ) cargarGalaxia(gD,sD,pD);
 | 
						||
 | 
						||
                                sondeoMasivo->Lines->Delete(0);
 | 
						||
                                espacioEntreAtaques = 2+ (rand()%5);
 | 
						||
 | 
						||
                                tD =  enviarSondaModoGalaxia(gD,sD,pD,tD);
 | 
						||
                                if ( tD<600 ) lastRequest = lastRequest_galaxyProbeError;
 | 
						||
                                else {
 | 
						||
                                        // A<>adimos el evento a la cola de eventos...
 | 
						||
                                        addEvent( 0,0,0,0,"Espionaje",0,0,gD,sD,pD,tD,"lanzado...",0,0,'e' );
 | 
						||
 | 
						||
                                        // Lanzado un bloque de espionaje, esperamos 100 segundos, antes de actualizar la vision general
 | 
						||
                                        if ( computacionesOcupadas>=CFG_ocuparMaxComputaciones ) nextUpdateCLK = 100;
 | 
						||
                                }
 | 
						||
                        }
 | 
						||
                }
 | 
						||
        } else
 | 
						||
        if ( activarColaAtaques->Checked )
 | 
						||
        {
 | 
						||
                espacioEntreAtaques = 20; // Dejamos entre este ataque y el siguiente, almenos 20segundos de margen.
 | 
						||
 | 
						||
                // Localizamos el siguiente objetivo (no atacado) de nuestra "cola de ataques"
 | 
						||
                bool enc = false;
 | 
						||
                for (i=0;i<AtaquesOfensivos->Count;i++)
 | 
						||
                {
 | 
						||
                        enc = ((TAtaqueOfensivo *)AtaquesOfensivos->Items[i])->lanzado == false;
 | 
						||
                        if (enc) break;
 | 
						||
                }
 | 
						||
 | 
						||
                if ( enc==true )
 | 
						||
                {
 | 
						||
                  int error;
 | 
						||
 | 
						||
                  error = siguienteAtaque( ((TAtaqueOfensivo *)AtaquesOfensivos->Items[i]) );
 | 
						||
                  if ( error>=0 )
 | 
						||
                          nextUpdateCLK = 5;
 | 
						||
                } else {
 | 
						||
                  // Cola de ataques vacia...
 | 
						||
                  activarColaAtaques->Checked = btAutoReiniciarCola->Down;      // Modo repetici<63>n activado ?
 | 
						||
                  if ( activarColaAtaques->Checked )
 | 
						||
                  {
 | 
						||
                        // Marcamos a toda la cola como NO ATACADOS
 | 
						||
                        for (i=0;i<AtaquesOfensivos->Count;i++)
 | 
						||
                          ((TAtaqueOfensivo *)AtaquesOfensivos->Items[i])->lanzado = false;
 | 
						||
                  }
 | 
						||
                }
 | 
						||
        } // Sondeo / Cola de Ataque
 | 
						||
      }
 | 
						||
   }
 | 
						||
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::addEvent(int gO,int sO,int pO,int tO,char *nO,long ida,long start, int gD,int sD,int pD,int tD,char *nD,long vuelta,long stop,char mision)
 | 
						||
{
 | 
						||
  // A<>adimos este ataque al control de vuelo de flota...
 | 
						||
  TEventos *EStruct;
 | 
						||
  if ( MyEvents->Count<=numEventos )
 | 
						||
  {
 | 
						||
        EStruct = new TEventos;
 | 
						||
        MyEvents->Add(EStruct);
 | 
						||
  } else
 | 
						||
        EStruct = (PEventos)MyEvents->Items[numEventos];
 | 
						||
 | 
						||
  EStruct->ida=ida;
 | 
						||
  EStruct->start=start;
 | 
						||
 | 
						||
  EStruct->vuelta=vuelta;
 | 
						||
  EStruct->stop=stop;
 | 
						||
 | 
						||
  EStruct->gO = gO;  EStruct->sO = sO;  EStruct->pO = pO;  EStruct->tO = tO;
 | 
						||
  strcpy(EStruct->planeta_o,nO);
 | 
						||
  EStruct->gD = gD;  EStruct->sD = sD;  EStruct->pD = pD;  EStruct->tD = tD;
 | 
						||
  strcpy(EStruct->planeta_d,nD);
 | 
						||
 | 
						||
  EStruct->mision=mision;
 | 
						||
 | 
						||
  
 | 
						||
 | 
						||
  dgEventos->RowCount++;
 | 
						||
  numEventos++;
 | 
						||
  computacionesOcupadas++;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
long __fastcall Tmain::toNumber(char *n)
 | 
						||
{
 | 
						||
 long dev = 0;
 | 
						||
 for( ; *n!=0; n++ )
 | 
						||
 {
 | 
						||
   if ( *n>='0' && *n<='9' )
 | 
						||
           dev = dev*10 + (*n-'0');
 | 
						||
 }
 | 
						||
 return dev;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
char * __fastcall Tmain::strRTrim(char *string)
 | 
						||
{
 | 
						||
  char *pos;
 | 
						||
 | 
						||
  if ( pos=StrRScan(string,' ') )
 | 
						||
        do { *pos='\0'; pos--; } while( *pos==' ' || *pos=='\t' );
 | 
						||
 | 
						||
  return string;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
bool __fastcall Tmain::buscarRefugio(int idPlaneta,int *gD,int *sD,int *pD,int *tipoD)
 | 
						||
{
 | 
						||
 bool enc;
 | 
						||
 | 
						||
 enc = false;
 | 
						||
 | 
						||
 return enc;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::siguienteAtaque(TAtaqueOfensivo *tropas)
 | 
						||
{
 | 
						||
  int error,idPlaneta,velocidad=10;
 | 
						||
  TRecursos maxRecursos;
 | 
						||
  Hangar NavesAparcadas[14];
 | 
						||
 | 
						||
 | 
						||
  int i,n;bool enc=false;
 | 
						||
  for ( i=0; i<MyPlanets->Count && !enc; i++ )
 | 
						||
        if ( ((PPlanetas)MyPlanets->Items[i])->g==tropas->evento.gO &&
 | 
						||
             ((PPlanetas)MyPlanets->Items[i])->s==tropas->evento.sO &&
 | 
						||
             ((PPlanetas)MyPlanets->Items[i])->p==tropas->evento.pO &&
 | 
						||
                ((PPlanetas)MyPlanets->Items[i])->t==tropas->evento.tO ) { enc=true; break; }
 | 
						||
  if ( enc )
 | 
						||
  {
 | 
						||
    velocidad = tropas->velocidadFactor;
 | 
						||
                // falseamos las velocidades base
 | 
						||
                if ( tropas->velocidadBase>0 )
 | 
						||
                {
 | 
						||
                  for( n=0; n<14; n++ )
 | 
						||
                     tropas->naves[n].speed = tropas->velocidadBase;
 | 
						||
                }
 | 
						||
 | 
						||
 | 
						||
    idPlaneta=((PPlanetas)MyPlanets->Items[i])->cp;
 | 
						||
 | 
						||
 | 
						||
    error = flota_obtenerFlota(idPlaneta,&RecursosDisp,NavesAparcadas);
 | 
						||
    if ( error!=-1 )
 | 
						||
    {
 | 
						||
        if ( computacionesOcupadas>=0 && computacionesOcupadas<CFG_ocuparMaxComputaciones )
 | 
						||
        {
 | 
						||
              if ( cmpNaves(NavesAparcadas,tropas->naves)<0 )
 | 
						||
              {
 | 
						||
                 statusBar->SelAttributes->Color = 0x0075BAFF;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("<22>No hay suficientes naves en ")+"["+tropas->evento.gO+":"+tropas->evento.sO+":"+tropas->evento.pO+"]."+tropas->evento.tO+"!" );
 | 
						||
                 // DEBERIA MARCARSE COMO ESTADO DE ERROR
 | 
						||
                 tropas->lanzado=true;
 | 
						||
                 error = -1;
 | 
						||
              } else {
 | 
						||
                    error = flota_seleccionarFlota(tropas->naves,&RecursosDisp);
 | 
						||
                    if ( error!=-1 )
 | 
						||
                    {
 | 
						||
                      error = flota_fijarObjetivo(tropas->evento.gO,tropas->evento.sO,tropas->evento.pO,tropas->evento.tO,&RecursosDisp,tropas->naves,tropas->evento.gD,tropas->evento.sD,tropas->evento.pD,tropas->evento.tD,velocidad);
 | 
						||
                      if ( error!=-1 )
 | 
						||
                      {
 | 
						||
                        maxRecursos.Metal=0;
 | 
						||
                        maxRecursos.Cristal=0;
 | 
						||
                        maxRecursos.Deuterio=0;
 | 
						||
 | 
						||
                        RecursosDisp.Metal = min( labs(RecursosDisp.Metal),labs(maxRecursos.Metal) );
 | 
						||
                        RecursosDisp.Cristal = min( labs(RecursosDisp.Cristal),labs(maxRecursos.Cristal) );
 | 
						||
                        RecursosDisp.Deuterio = min( labs(RecursosDisp.Deuterio),labs(maxRecursos.Deuterio) );
 | 
						||
 | 
						||
                        maxResources(&RecursosDisp,tropas->naves,&maxRecursos);
 | 
						||
                        error = flota_ejecutarMision(tropas->evento.gO,tropas->evento.sO,tropas->evento.pO,tropas->evento.tO,&RecursosDisp,tropas->naves,tropas->evento.gD,tropas->evento.sD,tropas->evento.pD,tropas->evento.tD,velocidad,oG_mision(tropas->evento.mision),&maxRecursos,tropas->usarSatelites);
 | 
						||
 | 
						||
                        if ( error!=-1 )
 | 
						||
                        {
 | 
						||
                                tropas->lanzado = true;
 | 
						||
                                if ( sndCHK_ataque->Checked )
 | 
						||
                                sndPlaySound("snd\\ataqueLanzado.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
 | 
						||
                                addEvent( tropas->evento.gO,tropas->evento.sO,tropas->evento.pO,tropas->evento.tO,"Ataque",0,0,tropas->evento.gD,tropas->evento.sD,tropas->evento.pD,tropas->evento.tD,"lanzado...",0,0,'a' );
 | 
						||
 | 
						||
                                statusBar->SelAttributes->Color = 0x0075BAFF;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Ataque encolado [")+tropas->evento.gO+":"+tropas->evento.sO+":"+tropas->evento.pO+"]."+tropas->evento.tO+" -> ["+tropas->evento.gD+":"+tropas->evento.sD+":"+tropas->evento.pD+"]"+tropas->evento.tD );
 | 
						||
 | 
						||
                        } // ejecutarMision y seleccion de recursos
 | 
						||
                      } // fijarObjetivo
 | 
						||
                    } // seleccionarFlota
 | 
						||
              } // sin naves en el hangar
 | 
						||
        } else error=-2;// computaciones disponibles
 | 
						||
    } // obtenerFlota
 | 
						||
 | 
						||
    if ( error==-1 )
 | 
						||
    {
 | 
						||
        // DEBERIA MARCARSE COMO ESTADO DE ERROR
 | 
						||
        tropas->lanzado = true;
 | 
						||
        statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Encolando ataque [")+tropas->evento.gO+":"+tropas->evento.sO+":"+tropas->evento.pO+"]."+tropas->evento.tO+" -> ["+tropas->evento.gD+":"+tropas->evento.sD+":"+tropas->evento.pD+"]"+tropas->evento.tD );
 | 
						||
        if ( sndCHK_error->Checked )
 | 
						||
        sndPlaySound("snd\\retirarNavesRecursos_error.wav", SND_ASYNC | SND_FILENAME );
 | 
						||
    }
 | 
						||
 | 
						||
  } else {
 | 
						||
    // DEBERIA MARCARSE COMO ESTADO DE ERROR
 | 
						||
    tropas->lanzado = true;
 | 
						||
    statusBar->SelAttributes->Color = clRed;statusBar->Lines->Add(AnsiString(Now())+AnsiString(" > ")+AnsiString("Ataque encolado -ERROR de origen ")+"["+tropas->evento.gO+":"+tropas->evento.sO+":"+tropas->evento.pO+"]" );
 | 
						||
    error=-1;
 | 
						||
  }
 | 
						||
 | 
						||
  return error;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
void __fastcall Tmain::btEditarAtaqueOfensivoClick(TObject *Sender)
 | 
						||
{
 | 
						||
// cargarPlanetasEnVisorAtaques();
 | 
						||
 | 
						||
 visorAtaques->AtaquesOfensivos=AtaquesOfensivos;
 | 
						||
 | 
						||
 //>> visorAtaques->nuevoAtaque();
 | 
						||
 | 
						||
 | 
						||
// visorAtaques->Visible=true;
 | 
						||
  visorAtaques->ShowModal();
 | 
						||
 | 
						||
  dgAtaques->RowCount = AtaquesOfensivos->Count+1;
 | 
						||
  if ( dgAtaques->RowCount>1 ) dgAtaques->FixedRows=1;
 | 
						||
 
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::cargarPlanetasEnColaSondeos(void)
 | 
						||
{
 | 
						||
 int i;
 | 
						||
 // Completa la lista de planetas en el desplegable...
 | 
						||
        TPlanetas *planeta;
 | 
						||
        planetasOrigenSondeo->Items->Clear();
 | 
						||
        for ( i=0;i<MyPlanets->Count;i++ )
 | 
						||
        {
 | 
						||
                planeta = (TPlanetas *)MyPlanets->Items[i];
 | 
						||
                planetasOrigenSondeo->Items->AddObject(Format("%d:%.3d:%.2d -%d- %s",ARRAYOFCONST((planeta->g,planeta->s,planeta->p,planeta->t,planeta->planeta)) ), (TObject *)i );
 | 
						||
        }
 | 
						||
        planetasOrigenSondeo->ItemIndex=0;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::cargarPlanetasEnVisorAtaques(void)
 | 
						||
{
 | 
						||
 int i;
 | 
						||
 // Completa la lista de planetas en el desplegable...
 | 
						||
 if ( visorAtaques->planetasOrigen->Items->Count < MyPlanets->Count )
 | 
						||
 {
 | 
						||
        TPlanetas *planeta;
 | 
						||
        visorAtaques->planetasOrigen->Items->Clear();
 | 
						||
        for ( i=0;i<MyPlanets->Count;i++ )
 | 
						||
        {
 | 
						||
                planeta = (TPlanetas *)MyPlanets->Items[i];
 | 
						||
                visorAtaques->planetasOrigen->Items->Add(Format("%d:%.3d:%.2d -%d- %s",ARRAYOFCONST((planeta->g,planeta->s,planeta->p,planeta->t,planeta->planeta)) ) );
 | 
						||
        }
 | 
						||
        visorAtaques->planetasOrigen->ItemIndex=0;
 | 
						||
 }
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::dgAtaquesDrawCell(TObject *Sender, int ACol,
 | 
						||
      int ARow, TRect &Rect, TGridDrawState State)
 | 
						||
{
 | 
						||
  if ( ARow==0 )
 | 
						||
  {
 | 
						||
    dgAtaques->Canvas->Font->Style = TFontStyles();
 | 
						||
    switch(ACol)
 | 
						||
    {
 | 
						||
      case 0:
 | 
						||
                  dgAtaques->RowHeights[0]=18;
 | 
						||
 | 
						||
                  dgAtaques->Canvas->TextOut(Rect.Left,Rect.Top," Planeta Origen");
 | 
						||
                  dgAtaques->Canvas->TextOut(Rect.Left+120,Rect.Top," [GSP] Destino"   );
 | 
						||
                  dgAtaques->Canvas->TextOut(Rect.Left+240,Rect.Top," Ord"   );
 | 
						||
        break;
 | 
						||
      case 1:
 | 
						||
        break;
 | 
						||
    }
 | 
						||
  } else {
 | 
						||
    if ( ARow <= AtaquesOfensivos->Count )
 | 
						||
    {
 | 
						||
        PAtaqueOfensivo EAtaque;
 | 
						||
        EAtaque = (PAtaqueOfensivo)AtaquesOfensivos->Items[ARow-1];
 | 
						||
 | 
						||
        if ( EAtaque->lanzado==true )
 | 
						||
                dgAtaques->Canvas->Font->Style = TFontStyles()<< fsStrikeOut;
 | 
						||
        else
 | 
						||
                dgAtaques->Canvas->Font->Style = TFontStyles();
 | 
						||
 | 
						||
        switch(ACol)
 | 
						||
        {
 | 
						||
              case 0:
 | 
						||
                int tH,tM,tS;
 | 
						||
 | 
						||
                // Fondo del GRID
 | 
						||
                if (!State.Contains(gdFocused))
 | 
						||
                {
 | 
						||
                  switch( EAtaque->evento.mision )
 | 
						||
                  {
 | 
						||
                        case 's': dgAtaques->Canvas->Brush->Color = 0x007DDBFF; break;
 | 
						||
                        case 't': dgAtaques->Canvas->Brush->Color = clSkyBlue;  break;
 | 
						||
                        case 'A': dgAtaques->Canvas->Brush->Color = 0x006262FF; break;
 | 
						||
                        case 'r': dgAtaques->Canvas->Brush->Color = 0x007282B8; break; /* BGR */
 | 
						||
                        default:
 | 
						||
                                  dgAtaques->Canvas->Brush->Color = clWhite;
 | 
						||
                  }
 | 
						||
                }
 | 
						||
                dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left,Rect.Top,"["+AnsiString(EAtaque->evento.gO)+":"+AnsiString(EAtaque->evento.sO)+":"+AnsiString(EAtaque->evento.pO)+"]."+AnsiString(EAtaque->evento.tO));
 | 
						||
                dgAtaques->Canvas->TextRect(TRect(Rect.Left+120,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+120,Rect.Top,"["+AnsiString(EAtaque->evento.gD)+":"+AnsiString(EAtaque->evento.sD)+":"+AnsiString(EAtaque->evento.pD)+"]."+AnsiString(EAtaque->evento.tD));
 | 
						||
                dgAtaques->Canvas->TextRect(TRect(Rect.Left+240,Rect.Top,Rect.Right,Rect.Top+16),Rect.Left+240,Rect.Top, AnsiString(EAtaque->evento.mision) + (EAtaque->evento.mision=='a'?(AnsiString(" - ")+AnsiString(EAtaque->evento.status)):AnsiString("")) );
 | 
						||
                dgAtaques->Canvas->TextRect(TRect(Rect.Left,Rect.Top+16,Rect.Right,Rect.Bottom),Rect.Left,Rect.Top + 16, digerirFlota(EAtaque->naves,EAtaque->numNaves) );
 | 
						||
 | 
						||
                break;
 | 
						||
              case 1:
 | 
						||
                // ESTADO actual del ataque...
 | 
						||
                break;
 | 
						||
        }
 | 
						||
        if (State.Contains(gdFocused))
 | 
						||
               dgAtaques->Canvas->DrawFocusRect(Rect);
 | 
						||
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
int __fastcall Tmain::oG_mision(char m)
 | 
						||
{
 | 
						||
 int ogM;
 | 
						||
 | 
						||
 switch( m )
 | 
						||
 {
 | 
						||
   case 'a': ogM=1; break;
 | 
						||
   case 'd': ogM=4; break;
 | 
						||
   case 't': ogM=3; break;
 | 
						||
   case 'r': ogM=8; break;
 | 
						||
   case 'e': ogM=6; break;
 | 
						||
 }
 | 
						||
 | 
						||
 return ogM;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
AnsiString __fastcall Tmain::digerirFlota(THangar *naves,int numNaves)
 | 
						||
{
 | 
						||
  AnsiString dev;
 | 
						||
  int i;
 | 
						||
 | 
						||
  for ( i=0; i<numNaves; i++ )
 | 
						||
  {
 | 
						||
    switch( naves[i].id )
 | 
						||
    {
 | 
						||
        case 202: dev += AnsiString(naves[i].ship)+AnsiString("c "); break;
 | 
						||
        case 203: dev += AnsiString(naves[i].ship)+AnsiString("C "); break;
 | 
						||
        case 204: dev += AnsiString(naves[i].ship)+AnsiString("lg "); break;
 | 
						||
        case 205: dev += AnsiString(naves[i].ship)+AnsiString("ps "); break;
 | 
						||
        case 206: dev += AnsiString(naves[i].ship)+AnsiString("cr "); break;
 | 
						||
        case 207: dev += AnsiString(naves[i].ship)+AnsiString("nb "); break;
 | 
						||
        case 208: dev += AnsiString(naves[i].ship)+AnsiString("col "); break;
 | 
						||
        case 209: dev += AnsiString(naves[i].ship)+AnsiString("R "); break;
 | 
						||
        case 210: dev += AnsiString(naves[i].ship)+AnsiString("S "); break;
 | 
						||
        case 211: dev += AnsiString(naves[i].ship)+AnsiString("B "); break;
 | 
						||
        case 212: dev += AnsiString(naves[i].ship)+AnsiString("sat "); break;
 | 
						||
        case 213: dev += AnsiString(naves[i].ship)+AnsiString("D "); break;
 | 
						||
        case 214: dev += AnsiString(naves[i].ship)+AnsiString("EdlM "); break;
 | 
						||
        case 215: dev += AnsiString(naves[i].ship)+AnsiString("A "); break;
 | 
						||
    }
 | 
						||
  }
 | 
						||
  return dev;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::btLoginClick(TObject *Sender)
 | 
						||
{
 | 
						||
  // Guardar LOG a disco...
 | 
						||
  if (SaveDialog1->Execute())
 | 
						||
      statusBar->Lines->SaveToFile(SaveDialog1->FileName);
 | 
						||
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::setComputacionesClick(TObject *Sender, TUDBtnType Button)
 | 
						||
{
 | 
						||
  CFG_ocuparMaxComputaciones = setComputaciones->Position;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::ToolButton8Click(TObject *Sender)
 | 
						||
{
 | 
						||
   MessageDlg("Programador de Ataques en prueba. \n -no disponible en esta versi<73>n-",mtInformation, TMsgDlgButtons() << mbOK, 0);
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::ToolButton9Click(TObject *Sender)
 | 
						||
{
 | 
						||
recuperarPassword();
 | 
						||
   MessageDlg("Cola de Construcci<63>n en pruebas. \n -no disponible en esta versi<73>n-",mtInformation, TMsgDlgButtons() << mbOK, 0);
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::SpeedButton1Click(TObject *Sender)
 | 
						||
{
 | 
						||
  // Activar / Desactivar, comprobador de actividad...
 | 
						||
  comprobadorActividad->Show();        
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
/* Magnetic Form */
 | 
						||
/*****************/
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::SettingChanged(TMessage &msg)
 | 
						||
{
 | 
						||
  UpdateWorkArea();
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::WMWindowPosChanging(TWMWindowPosChanging &msg)
 | 
						||
{
 | 
						||
  RECT sr;
 | 
						||
  snapped=false;
 | 
						||
  //test window
 | 
						||
  if (snapwin && IsWindowVisible(snapwin))
 | 
						||
  {
 | 
						||
    if (GetWindowRect(snapwin,&sr))
 | 
						||
    {
 | 
						||
      if ( (msg.WindowPos->x <= (sr.right+thresh)) &&
 | 
						||
           (msg.WindowPos->x >= (sr.right-thresh)) ) {
 | 
						||
        if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) {
 | 
						||
          snapped=true;
 | 
						||
          msg.WindowPos->x = sr.right;
 | 
						||
        }
 | 
						||
      }
 | 
						||
      else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.left-thresh) &&
 | 
						||
               (msg.WindowPos->x + msg.WindowPos->cx) <= (sr.left+thresh)) {
 | 
						||
        if ((msg.WindowPos->y > sr.top) && (msg.WindowPos->y < sr.bottom)) {
 | 
						||
          snapped=true;
 | 
						||
          msg.WindowPos->x = sr.left-msg.WindowPos->cx;
 | 
						||
        }
 | 
						||
      }
 | 
						||
 | 
						||
      if ( (msg.WindowPos->y <= (sr.bottom+thresh)) &&
 | 
						||
           (msg.WindowPos->y >= (sr.bottom-thresh)) ) {
 | 
						||
        if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) {
 | 
						||
          snapped=true;
 | 
						||
          msg.WindowPos->y = sr.bottom;
 | 
						||
        }
 | 
						||
      }
 | 
						||
      else if ((msg.WindowPos->y + msg.WindowPos->cy) <= (sr.top+thresh) &&
 | 
						||
               (msg.WindowPos->y + msg.WindowPos->cy) >= (sr.top-thresh)) {
 | 
						||
        if ((msg.WindowPos->x > sr.left) && (msg.WindowPos->x < sr.right)) {
 | 
						||
          snapped=true;
 | 
						||
          msg.WindowPos->y = sr.top-msg.WindowPos->cy;
 | 
						||
        }
 | 
						||
      }
 | 
						||
    }
 | 
						||
  }
 | 
						||
 | 
						||
  //test screen
 | 
						||
  sr = work_area;
 | 
						||
  if (abs(msg.WindowPos->x) <= (sr.left+thresh)) {
 | 
						||
    snapped=true;
 | 
						||
    msg.WindowPos->x = sr.left;
 | 
						||
  }
 | 
						||
  else if ((msg.WindowPos->x + msg.WindowPos->cx) >= (sr.right-thresh) &&
 | 
						||
           (msg.WindowPos->x + msg.WindowPos->cx) <= (sr.right+thresh)) {
 | 
						||
    snapped=true;
 | 
						||
    msg.WindowPos->x = sr.right-msg.WindowPos->cx;
 | 
						||
  }
 | 
						||
 | 
						||
  if (abs(msg.WindowPos->y) <= (sr.top+thresh)) {
 | 
						||
    snapped=true;
 | 
						||
    msg.WindowPos->y = sr.top;
 | 
						||
  }
 | 
						||
  else if ((msg.WindowPos->y+msg.WindowPos->cy) >= (sr.bottom-thresh) &&
 | 
						||
           (msg.WindowPos->y+msg.WindowPos->cy) <= (sr.bottom+thresh)) {
 | 
						||
    snapped=true;
 | 
						||
    msg.WindowPos->y = sr.bottom-msg.WindowPos->cy;
 | 
						||
  }
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::UpdateWorkArea()
 | 
						||
{
 | 
						||
  SystemParametersInfo(SPI_GETWORKAREA, 0, &work_area, 0);
 | 
						||
  //get the size of the desktop or whatever
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::FormClose(TObject *Sender, TCloseAction &Action)
 | 
						||
{
 | 
						||
  // Guardamos las preferencias...
 | 
						||
  TIniFile *ini;
 | 
						||
 | 
						||
  ini = new TIniFile(ExtractFileDir(Application->ExeName)+"\\salvaVidas.ini");
 | 
						||
  ini->WriteInteger("window","TOP",this->Top);
 | 
						||
  ini->WriteInteger("window","LEFT",this->Left);
 | 
						||
  ini->WriteInteger("window","WIDTH",this->Width);
 | 
						||
  ini->WriteInteger("window","HEIGHT",this->Height);
 | 
						||
 | 
						||
  ini->WriteBool("colaAtaques","colaActiva",activarColaAtaques->Checked);
 | 
						||
 | 
						||
  int i; bool enc = false;
 | 
						||
  for (i=0;i<AtaquesOfensivos->Count;i++)
 | 
						||
  {
 | 
						||
     enc = ((TAtaqueOfensivo *)AtaquesOfensivos->Items[i])->lanzado == false;
 | 
						||
     if (enc) break;
 | 
						||
  }
 | 
						||
  ini->WriteInteger("colaAtaques","siguienteAtaque",enc?i:0);
 | 
						||
 | 
						||
  ShortDateFormat = "yyyy/mm/dd";
 | 
						||
  DateSeparator	= '-';
 | 
						||
  TimeSeparator	= ';';
 | 
						||
 | 
						||
 | 
						||
  statusBar->Lines->SaveToFile( ExtractFilePath(Application->ExeName)+"log\\"+DateTimeToStr(Now())+".rtf" );
 | 
						||
 | 
						||
  delete ini;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
bool __fastcall Tmain::cargarAtaques(AnsiString filename)
 | 
						||
{
 | 
						||
  float aux;
 | 
						||
  bool dev;
 | 
						||
 | 
						||
  dev=false;
 | 
						||
 | 
						||
    FILE *in;
 | 
						||
    if ((in = fopen(filename.c_str(), "rt")) != NULL)
 | 
						||
    {
 | 
						||
      TAtaqueOfensivo *Ataque;
 | 
						||
 | 
						||
      // BEGIN -- Limpiamos la cola actual
 | 
						||
      int i;
 | 
						||
      for (i=0;i<AtaquesOfensivos->Count;i++)
 | 
						||
      {
 | 
						||
        Ataque = (TAtaqueOfensivo *)AtaquesOfensivos->Items[i];
 | 
						||
        delete Ataque;
 | 
						||
      }
 | 
						||
      AtaquesOfensivos->Clear();
 | 
						||
      // END  -- Limpiamos la cola actual
 | 
						||
 | 
						||
      int _usarSatelites;
 | 
						||
      i=0;
 | 
						||
      Ataque = new TAtaqueOfensivo;
 | 
						||
      do
 | 
						||
      {
 | 
						||
        i = fscanf(in,"%d:%d:%d.%d,%c,%d:%d:%d.%d,%d,%ld,%d,%d,%d,%d,%d,%d,%d,%d:{%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d,%d:%d}",
 | 
						||
                        &Ataque->evento.gO,&Ataque->evento.sO,&Ataque->evento.pO,&Ataque->evento.tO,
 | 
						||
                        &Ataque->evento.mision,
 | 
						||
                        &Ataque->evento.gD,&Ataque->evento.sD,&Ataque->evento.pD,&Ataque->evento.tD,
 | 
						||
                        &Ataque->velocidadFactor,&Ataque->velocidadBase,
 | 
						||
                        &aux,&aux,&aux,&aux,&aux,&aux,
 | 
						||
                        &_usarSatelites,
 | 
						||
                        &Ataque->numNaves,
 | 
						||
                        &Ataque->naves[0].id,&Ataque->naves[0].ship,
 | 
						||
                        &Ataque->naves[1].id,&Ataque->naves[1].ship,
 | 
						||
                        &Ataque->naves[2].id,&Ataque->naves[2].ship,
 | 
						||
                        &Ataque->naves[3].id,&Ataque->naves[3].ship,
 | 
						||
                        &Ataque->naves[4].id,&Ataque->naves[4].ship,
 | 
						||
                        &Ataque->naves[5].id,&Ataque->naves[5].ship,
 | 
						||
                        &Ataque->naves[6].id,&Ataque->naves[6].ship,
 | 
						||
                        &Ataque->naves[7].id,&Ataque->naves[7].ship,
 | 
						||
                        &Ataque->naves[8].id,&Ataque->naves[8].ship,
 | 
						||
                        &Ataque->naves[9].id,&Ataque->naves[9].ship,
 | 
						||
                        &Ataque->naves[10].id,&Ataque->naves[10].ship,
 | 
						||
                        &Ataque->naves[11].id,&Ataque->naves[11].ship,
 | 
						||
                        &Ataque->naves[12].id,&Ataque->naves[12].ship/*,
 | 
						||
                        &Ataque->naves[13].id,&Ataque->naves[13].ship   */
 | 
						||
                );
 | 
						||
        if ( i>0 )
 | 
						||
        {
 | 
						||
              Ataque->usarSatelites = (_usarSatelites==1);
 | 
						||
              Ataque->lanzado = false;
 | 
						||
              Ataque->evento.status=12;Ataque->evento.avisado=true;
 | 
						||
 | 
						||
              if ( Ataque->numNaves>14 ) Ataque->numNaves=14;
 | 
						||
              fixParams(Ataque->naves);
 | 
						||
              AtaquesOfensivos->Add(Ataque);
 | 
						||
              Ataque = new TAtaqueOfensivo;
 | 
						||
        }
 | 
						||
      }while( i>0 );
 | 
						||
      delete Ataque;
 | 
						||
 | 
						||
 | 
						||
      fclose(in);
 | 
						||
 | 
						||
      dev = true;
 | 
						||
    }
 | 
						||
 | 
						||
    return dev;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::fixParams(THangar *naves)
 | 
						||
{
 | 
						||
  int i;
 | 
						||
 | 
						||
  for ( i=0; i<14; i++ )
 | 
						||
  {
 | 
						||
        switch( naves[i].id )
 | 
						||
        {
 | 
						||
                // Nave peque<75>a de carga
 | 
						||
                case 202:
 | 
						||
                            naves[i].consumption=20;
 | 
						||
                            naves[i].speed=30000;
 | 
						||
                            naves[i].capacity=5000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Nave grande de carga
 | 
						||
                case 203:
 | 
						||
                            naves[i].consumption=50;
 | 
						||
                            naves[i].speed=16500;
 | 
						||
                            naves[i].capacity=25000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Cazador ligero
 | 
						||
                case 204:
 | 
						||
                            naves[i].consumption=20;
 | 
						||
                            naves[i].speed=27500;
 | 
						||
                            naves[i].capacity=50;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Cazador Pesado
 | 
						||
                case 205:
 | 
						||
                            naves[i].consumption=75;
 | 
						||
                            naves[i].speed=30000;
 | 
						||
                            naves[i].capacity=100;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Crucero
 | 
						||
                case 206:
 | 
						||
                            naves[i].consumption=300;
 | 
						||
                            naves[i].speed=45000;
 | 
						||
                            naves[i].capacity=800;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Nave de Batalla
 | 
						||
                case 207:
 | 
						||
                            naves[i].consumption=500;
 | 
						||
                            naves[i].speed=31000;
 | 
						||
                            naves[i].capacity=1500;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Colonizador
 | 
						||
                case 208:
 | 
						||
                            naves[i].consumption=1000;
 | 
						||
                            naves[i].speed=7500;
 | 
						||
                            naves[i].capacity=7500;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Reciclador
 | 
						||
                case 209:
 | 
						||
                            naves[i].consumption=300;
 | 
						||
                            naves[i].speed=4400;
 | 
						||
                            naves[i].capacity=20000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Sonda
 | 
						||
                case 210:
 | 
						||
                            naves[i].consumption=1;
 | 
						||
                            naves[i].speed=220000000;
 | 
						||
                            naves[i].capacity=5;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Bombardero
 | 
						||
                case 211:
 | 
						||
                            naves[i].consumption=1000;
 | 
						||
                            naves[i].speed=12000;
 | 
						||
                            naves[i].capacity=500;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // 
 | 
						||
                case 212:
 | 
						||
                            naves[i].consumption=1;
 | 
						||
                            naves[i].speed=100000000;
 | 
						||
                            naves[i].capacity=10000000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Destructor
 | 
						||
                case 213:
 | 
						||
                            naves[i].consumption=1000;
 | 
						||
                            naves[i].speed=15500;
 | 
						||
                            naves[i].capacity=2000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // EdM
 | 
						||
                case 214:
 | 
						||
                            naves[i].consumption=1;
 | 
						||
                            naves[i].speed=100;
 | 
						||
                            naves[i].capacity=1000000;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                // Acorazado
 | 
						||
                case 215:
 | 
						||
                            naves[i].consumption=250;
 | 
						||
                            naves[i].speed=31000;
 | 
						||
                            naves[i].capacity=750;
 | 
						||
 | 
						||
                            naves[i].maxship = naves[i].ship;
 | 
						||
                            break;
 | 
						||
                default:
 | 
						||
                            naves[i].id = 0;
 | 
						||
                            naves[i].maxship = naves[i].ship = 0;
 | 
						||
                            break;
 | 
						||
 | 
						||
 | 
						||
        }
 | 
						||
  }
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
void __fastcall Tmain::ejecutarProgramaAntiSondeo(PAtaques a)
 | 
						||
{
 | 
						||
 HINSTANCE HApp;
 | 
						||
 AnsiString params;
 | 
						||
 | 
						||
 params = AnsiString("\"[")+AnsiString(a->gO)+AnsiString(":")+AnsiString(a->sO)+AnsiString(":")+AnsiString(a->pO)+AnsiString("].")+AnsiString(a->tO)+AnsiString("\"");
 | 
						||
 params+= AnsiString(" ");
 | 
						||
 params+= AnsiString("\"[")+AnsiString(a->gD)+AnsiString(":")+AnsiString(a->sD)+AnsiString(":")+AnsiString(a->pD)+AnsiString("].")+AnsiString(a->tD)+AnsiString("\"");
 | 
						||
 params+= AnsiString(" ");
 | 
						||
 params+= AnsiString(a->start);
 | 
						||
 params+= AnsiString(" ");
 | 
						||
 params+= AnsiString(a->t);
 | 
						||
 | 
						||
 | 
						||
  HApp = ShellExecute(this,	                // handle to parent window
 | 
						||
    NULL,		                        // pointer to string that specifies operation to perform
 | 
						||
    (char*)(CFG_programSondeo.data()),	       	// pointer to filename string
 | 
						||
    (char*)(params.data()),		        // pointer to string that specifies executable-file parameters
 | 
						||
    NULL,		                        // pointer to string that specifies default directory
 | 
						||
    0 			                        // whether file is shown when opened
 | 
						||
   );
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
void __fastcall Tmain::PHPSESSIDKeyPress(TObject *Sender, char &Key)
 | 
						||
{
 | 
						||
//  if ( Key==VK_RETURN && PHPSESSID->Text.Length()==32 )
 | 
						||
                                  oG_Cookie    = PHPSESSID->Text;
 | 
						||
}
 | 
						||
//---------------------------------------------------------------------------
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
 | 
						||
// BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -
 | 
						||
// BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -
 | 
						||
// BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -
 | 
						||
// BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -
 | 
						||
// BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -BORRAME -
 | 
						||
int __fastcall Tmain::getGameServer(AnsiString *oG_server, AnsiString *oG_v)
 | 
						||
{
 | 
						||
  lastRequest = lastRequest_getServer;
 | 
						||
  
 | 
						||
  int error = -1;
 | 
						||
  AnsiString request;
 | 
						||
  AnsiString loginHost="ogame.com.es";
 | 
						||
 | 
						||
  request ="GET http://"+loginHost+"/home.php HTTP/1.1\r\n";
 | 
						||
  request+="Host: "+loginHost+"\r\n";
 | 
						||
  request+="User-Agent: "+oG_userAgent+"\r\n";
 | 
						||
  request+="Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
 | 
						||
  request+="Accept-Language: es,es-ar;q=0.8,en-us;q=0.5,en;q=0.3\r\n";
 | 
						||
  request+="Accept-Encoding: gzip,deflate\r\n";
 | 
						||
  request+="Accept-Charset: windows-1252,utf-8;q=0.7,*;q=0.7\r\n";
 | 
						||
  request+="Keep-Alive: 300\r\n";
 | 
						||
  request+="Connection: keep-alive\r\n\r\n";
 | 
						||
 | 
						||
  TMemoryStream* out  = new TMemoryStream();
 | 
						||
  error = HTTPdownloader->descargarHTML(loginHost.c_str(),request.c_str(),out);
 | 
						||
  if ( error!=-1 )
 | 
						||
  {
 | 
						||
        char *pos,buffer[255];
 | 
						||
 | 
						||
        oG_Cookie=obtenerOGCookie();
 | 
						||
 | 
						||
        out->Position=0;
 | 
						||
        error=-1;
 | 
						||
 | 
						||
	pos=StrPos((char *)out->Memory,"ame=\"v\"");
 | 
						||
	if ( pos>0 )
 | 
						||
	{
 | 
						||
		pos=StrPos(pos,"value=\"");
 | 
						||
                StrLCopy(buffer,pos+7,1);
 | 
						||
                *oG_v=buffer;
 | 
						||
        }
 | 
						||
 | 
						||
 | 
						||
	pos=StrPos((char *)out->Memory, "name='universe'");
 | 
						||
	if ( pos>0 )
 | 
						||
	{
 | 
						||
                if ( oG_Universo>1 )
 | 
						||
                	pos=StrPos((char *)out->Memory, AnsiString(AnsiString( (oG_Universo-1) )+". Universo").c_str() );
 | 
						||
 | 
						||
        	if ( pos>0 )
 | 
						||
        	{
 | 
						||
        		pos=StrPos(pos,"value=\"") + 7;
 | 
						||
                        StrLCopy(buffer,pos, StrPos(pos+7,"\"") - pos );
 | 
						||
                        *oG_server=buffer;
 | 
						||
                        error = 0;
 | 
						||
                }
 | 
						||
        }
 | 
						||
 | 
						||
  }
 | 
						||
  return error;
 | 
						||
}
 |