PHP Ogame bot

McMarco

Użytkownik
Dołączył
Luty 2, 2008
Posty
17
hmm wszystko by gralo tyle dalej cos
<


Not Found

The requested URL /game/reg/login2.php was not found on this server.[/b]

Nie wiem jak ale musze uruchomić tego bota
<
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
Not Found

The requested URL /game/reg/login2.php was not found on this server.[/b]
nie zgrałeś wszystkiego! plik /game/reg/login2.php jest w instalce, czy wypakowanie plików przekracza twoje możliwości? ;] myślę że raczej nie
 

Ford.

Użytkownik
Dołączył
Luty 17, 2008
Posty
13
Próbuje napisać skrypt który budowałby budynki na różnych planetach (osobny plik dla każdej planety) i wiem jak wygląda url, ale nie wiem jak to napisać... Jeżeli masz chwile ... ;]
ugamela1.home.pl/ugamela2/buildings.php?cp=[id planety]&mode=&gid=&messageziel=&re=0&bau=[id budynku]
Dzięki =]
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
1) funkcją ereg pobierasz to tablicy numery planet
2) dla każdej planety otwierasz plik z kolejką zadań
3) jeśli da się wybudować to budujesz i wyrzucasz z kolejki
4) jeśli nie nie robisz nic

Kod:
//pobranie listy planet

ereg('?cp=[[:digit:]]+', $podglad, $planety);

$planety=str_replace('?cp=', '', $planety);
Kod:
//kolejka budowy

foreach($planety as $planeta){

    $status.="Planeta $planeta: ";

    if(file_exists("$planeta.txt"))

    {

        $plik=file_get_contents("$planeta.txt");

        if(!empty($plik))

        {

            $budynki=explode(',', $plik);

            if(buduj($budynki[0], $planeta))

            {

                $status.='Rozpoczęto budowe: '.budynek_nazwa($budynki[0]).'.';

                array_shift($budynki);

            }

            else

            {

                $status.='Oczekuje na rozpoczęcie budowy: '.budynek_nazwa($budynki[0]).'.';

            }

            $plik=implode(',', $budynki);

            file_put_contents("$planeta.txt", $plik);

        }

        else

        {

            $status.='Plik z kolejką budynków planety jest pusty.';

        }

    }

    else

    {

        $status.='Plik("'.$planeta.'.txt") z kolejką budynków planety nie został odnaleziony.';

    }

    $status.="
n";

}



echo $status;

teraz tylko napisz funkcje buduj i gotowe
 

Ford.

Użytkownik
Dołączył
Luty 17, 2008
Posty
13
Eh... Teraz w ogóle nie działa, pisze "Planeta xxx oczekuje na budowe coś tam" i tak cały czas, mimo, że mam surke, nic sie nie buduje, w ogóle nie wiem o co chodzi, przepisałem wszystko od nowa i to samo.. Nie wiem już co zrobić, wrzuciłem co mam, może będziesz miał chwile, bo badania działają w 100%, ale budynki nie.. Co mam to wrzucam: www.ford.dyn.pl/ugame1.rar

Hm, taka mała uwaga, jeżeli z funkcje_budynki.php wywale:
.'&cp='.$planeta;[/b]
Buduje, ale leci równo, nie czeka aż poprzednie budynki sie wybudują, bo nie wiadomo która planeta jest zabudowywana. Może to da jakąś wskazówkę.
 

Dominn

Użytkownik
Dołączył
Marzec 17, 2008
Posty
3
jak?

ja nie rozumiem jak budować na innych planetach niż planeta matka może ktoś wytłumaczyć?
 

ogamefan

Użytkownik
Dołączył
Marzec 29, 2008
Posty
1
Witam nowy_me!

Mam do Ciebie kilka pytań.
Po pierwsze czy mógłbyś mi pokazać jak wygląda plik cookie ustawiany po logowaniu na ogame, boe ni wiem jak mam bo 'zasymulowac' a jakoś nie mogę tego wyciągnąć z firefoxa.

Jako, że nigdy nie zajmowałem się pisaniem skryptów rozbudowanych w php i nie znam tego języka to mój bot który ograniczał się do logowania na konto co jakiś czas działał na zasadzie wykorzystania funkcji file(), tak szczytywałem stronę. Nie bawiłem się w nic innego. I tu pytanie. Czy było to możliwe do wykrycia? Bo założyłem, że zastosowanie takiego mechanizmu będzie widoczne jako zwykłe kliknięcie na link.

Czy w logach zastosowanie takiego mechanizku będzie widziane jako przeglądarka czy jak to zupełnie innego? Bo tu chyba nie ma przekazywania nagłówków, a przynajmniej ja tego nie kontroluje.

Pozdrawiam.
 

Earth

Użytkownik
Dołączył
Maj 24, 2008
Posty
3
Rozpoczelem pisanie wlasnego bota. Narazie sie jedynie loguje, sprawdza czy ktos nie atakuje i wysyla SMS'a. Dziala na wszystkich operatorow. Kod jest oparty na klasach, a budowa pozwala na dalsza rozbudowe. Teraz probuje zrobic cos by skrypt uruchamial sie automatycznie. Kombinuje z cronjobs, moze przez 3 miesiece znelezliscie jakas inna metode?
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
jak ci się udało wysyłać sms do innych sieci? mógł byś wrzucić kod który wysyła sms do Orange i do Ery
co do automatycznego uruchamiania to zacząłem przepisywać bota na C, ale zaprzestałem tego pomysłu gdyż jak sie okazało musiał bym najpierw napisać kilka dość trudnych funkcji operujących na tekście no i przestałem grać w ogame więc też przestało mi aż tak zależeć
 

Earth

Użytkownik
Dołączył
Maj 24, 2008
Posty
3
Tylko nie wiem, co C ma do auto:( Trzeba wykorzystywac i chwalic prace innych programistow:) Zainteresuj sie skryptem PHPsms. Tobie zreszta moge wyslac swojego bota:)
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
bot mi nie jest potrzebny ale dzięki za propozycje, korzystałem z PHPsms ale ponieważ chciałem aby mój bot to był opensource to musiałem przepisać funkcje sms, a ponieważ mam telefon w plusie to to zrobiłem tylko do plusa, ale nadal mnie interesuje jak obchodzisz tokeny na Orange, skrtypt PHPsms tylko wyświetlał obrazek sam go nie przepisywał
a co do C to wrzucasz to do autostartu np. w szkole lub na uczelni, plik php ciężko wrzucić do autostartu bo bez serwera i tak nie zadziała i ktoś by mógł hasła odczytać, a tu wrzucasz mały programik, 2-3 dll'ki i po sprawie, a u mnie na uczelni niektórych kompów sie w ogóle się nie wyłącza
 

Earth

Użytkownik
Dołączył
Maj 24, 2008
Posty
3
No masz dobrze u mnie z uczelnia nie wypali:(

Przelecialem kod nie widze by bylo trzeba wpisywac tokeny, ale nie wiem czy dla orange dziala. Sprawdzic trzeba.
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
niestety na Orange jest token, natomiast jeśli chodzi o Erę to aby skrypt wysyłał sms trzeba mieć konto Era Omnix
Kod:
function wyslij_sms($numer,$tekst,$podpis,$idea_kod="",$era_login="",$era_haslo="")
 

Ford.

Użytkownik
Dołączył
Luty 17, 2008
Posty
13
Nie masz może jeszcze tego bota na oficjalne ogame? Bo link już nie działa..
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
link nie działa bo bot i tak nie działa z Ogame v0.80, co więcej powoduje wykrycie używania bota, dlatego skasowałem linka
 

Draker9

Użytkownik
Dołączył
Grudzień 19, 2008
Posty
1
sory za odswiezanie starego tematu ale żadne linki do downloadu nie działają... Czy mógłby ktoś je wstawić na nowo? Najmilej widziane by były wszystkie wersje... Bota przerobię pod inną grę. Sam nie wiem jak się za to zabrać. Jeżeli już twórca bota już go usunął, to prosiłbym o jakieś wskazówki jak samemu napisać takiego fajnego bocika pod przeglądarkę
smile.gif
 

test30

Użytkownik
Dołączył
Luty 19, 2008
Posty
1
no fajnie, ze udostepniasz,
ale jedna rzecz nasunela mi sie dot. tego wszystkiego,
jak to mozliwe, ze w tym temacie nie padla nazwa CRON?

x10hosting, izfree dla zainteresowanych to najlepsze jakie znam
ps jesli jestes nowy w tym, ale ogarniasz to, to odrazu odpowiem, ze tworzac komendy adresujcie pelne bezwzgledne sciezki,
jesli sadzisz, ze cron nie dziala - stworz sobie jakis skrypt php na innym serverze, a w cronie dodaj komende
Kod:
wget [url]http://server.com/skrypt.php[/url]
, dowod, ze bedzie dzialac; d

ps chyba az napisze wlasne API do ogame
<
 

dzoszula

Użytkownik
Dołączył
Wrzesień 19, 2009
Posty
1
Jeśli mowa o ogame i botach :)
Napisałem własnego bota do ogame, obsłguje uniwersa z ogame.org i ogame.pl w wersjach. 0.84. Bot ma funkcjonalność FleetSave i szlaki handlowe.
Jego zaletą jest to że nie musisz na własnym kompie instalować żadnego oprogramowania jedynie co to rejestrujesz się w serwisie i konfigurujesz bota.
Bot działa na serwerze 24 godziny na dobe. Zapraszam do używania przetestowania i zgłaszania uwag.

Adres http://ogamebot.rox.pl

Pozdrawiam
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
Wiem że temat stary jak świat, ale znajomy mnie poprosił o napisanie prostego Bota do Ogame, właściwie chodziło mu o ogarnięcie logowania, a ponieważ już napisałem to stwierdziłem że tu też wrzucę może komuś się przyda? Albo przerobi to na coś więcej niż logowanie i budowanie budynków.

Plik index.php
PHP:
<?php
session_start();
require_once('narzedzia.php');
require_once('ogame.php');

if(!ogame_czy_zalogowany())
{
  $_SESSION['ogame_sesja']=ogame_logowanie();
  if(strlen($_SESSION['ogame_sesja'])==0)
    exit('Złe hasło');
  $strona['js']=wyswietl_przekierowanie('./', 0);
  $_SESSION['status']=wyswietl_linie(wyswietl_date(time()).' Logowanie');
}
else
{

  //odświeżanie bota
  $strona['js']=wyswietl_przekierowanie('./', 5*60+rand(-60, 60));

  //adresy
  $adresy=array('podglad'=>'http://uni'.uni.'.ogame.pl/game/index.php?page=overview&session='.$_SESSION['ogame_sesja'],
  'surowce'=>'http://uni'.uni.'.ogame.pl/game/index.php?page=resources&session='.$_SESSION['ogame_sesja'],
  );

  //budynki
  $budynki=curl_pobierz(array('adres'=>$adresy['surowce'], 'odsylajacy'=>$adresy['podglad']));

  //token
  $token=wyszukaj_jeden($budynki, 'value=\'', '\'');

  //sprawdzam czy wolne
  if(strstr($budynki, 'Brak budynków w kolejce'))
  {
    $baza=baza_lacz();
    $co=baza_rekord($baza, 'select * from budynki order by id');
    curl_pobierz(array('adres'=>$adresy['surowce'], 'odsylajacy'=>$adresy['surowce'], 'post'=>'token='.$token.'&modus=1&type='.$co['co']));
    baza_zapytanie($baza, 'delete from budynki where id='.$co['id']);
    $_SESSION['status'].=wyswietl_linie(wyswietl_date(time()).' Buduje: '.wyswietl_wazne($co['co']));
  }
  else
    $_SESSION['status'].=wyswietl_linie(wyswietl_date(time()).' Trwa budowa');

  echo $_SESSION['status'];
}
wyswietl_szablon('ogame', $strona);
?>
Plik narzedzia.php:
PHP:
<?php
function wyswietl_szablon($nazwa, $dane)
{
  $szablon=@file_get_contents('html/'.$nazwa.'.html') or exit('Plik z szablonem nie istnieje.');
  foreach($dane as $klucz => $wartosc)
    $szablon=str_replace('{'.$klucz.'}', $wartosc, $szablon);
  echo preg_replace('/{[a-z]+}/', '', $szablon);
}

function wyswietl_url($adres, $nazwa)
{
  return '<a href="'.$adres.'">'.$nazwa.'</a>';
}

function wyswietl_date($data)
{
  return date('d.m.Y G:i', $data);
}

function wyswietl_obrazek($obrazek, $typ='png')
{
  return '<img src="html/'.$obrazek.'.'.$typ.'" alt="'.ucfirst(str_replace('_', ' ', $obrazek)).'" />';
}

function wyswietl_wazne($tekst, $wazne=1)
{
  return ($wazne==-1)?'<small>'.$tekst.'</small>':'<strong>'.$tekst.'</strong>';
}

function wyswietl_tabele($dane)
{
  for($i=0, $tabela='<table>';$i<count($dane);$i++)
  {
    for($j=0, $tabela.='<tr>';$j<count($dane[$i]);$j++)
      $tabela.='<td>'.$dane[$i][$j].'</td>';
    $tabela.='</tr>';
  } 
  return $tabela.'</table>';
}

function wyswietl_liste($dane, $typ='u')
{
  for($i=0, $lista='<'.$typ.'l>';$i<count($dane);$i++)
    $lista.='<li>'.$dane[$i].'</li>';
  return $lista.'</'.$typ.'l>';
}

function wyswietl_emotikony($tekst)
{
  $znaki=array('!!', '??', ':D', ':P', ':)', ':(');
  $ikony=array('wykrzyknik', 'pytajnik', 'zeby', 'jezyk', 'usmiech', 'smutny');
  for($i=0;$i<count($ikony);$i++)
    $ikony[$i]=wyswietl_obrazek($ikony[$i], 'gif" style="vertical-align: middle;');
  return nl2br(str_replace($znaki, $ikony, $tekst));
}

function wyswietl_skrypt($skrypt)
{
  return '<script type="text/javascript" src="html/'.$skrypt.'.js"></script>';
}

function wyswietl_przekierowanie($adres, $czas=10)
{
  return '<meta http-equiv="refresh" content="'.$czas.';url='.$adres.'" />';
}

function wyswietl_linie($tekst='')
{
  return $tekst.'<br />';
}

function baza_lacz()
{
  $baza=@mysqli_connect('localhost', 'user', 'haslo', 'baza') or exit('Nie można się połączyć z bazą danych: '.mysqli_connect_error().'.');
  return $baza;
}

function baza_zapytanie($baza, $zapytanie)
{
  @mysqli_query($baza, $zapytanie) or exit('Błąd w zapytaniu: '.$zapytanie.': '.mysqli_error($baza).'.');
  return mysqli_affected_rows($baza);
}

function baza_rekord($baza, $zapytanie)
{
  $wynik=@mysqli_query($baza, $zapytanie) or exit('Błąd w zapytaniu: '.$zapytanie.': '.mysqli_error($baza).'.');
  return mysqli_fetch_assoc($wynik);
}

function baza_dane($baza, $zapytanie)
{
  $dane=array();
  $wynik=@mysqli_query($baza, $zapytanie) or exit('Błąd w zapytaniu: '.$zapytanie.': '.mysqli_error($baza).'.');
  while($rekord=mysqli_fetch_assoc($wynik))
    $dane[]=$rekord;
  return $dane;
}

function filtruj_liczbe($liczba, $min=0, $max=0)
{
  $liczba=intval($liczba);
  if($max>$min)
    $liczba=min($liczba, $max);
  return max($liczba, $min);
}

function filtruj_tekst($tekst)
{
  if(get_magic_quotes_gpc())
    $tekst=stripslashes($tekst);
  return addslashes(htmlspecialchars(trim($tekst), ENT_QUOTES));
}
?>
Plik ogame.php
PHP:
<?php
define('uni', '108');
define('login', 'nowyme');
define('haslo', 'haslo');

function wyszukaj_jeden($ciag, $poczatek, $koniec)
{
  $znalezione=explode($poczatek, $ciag);
  $znaleziony=substr($znalezione[1], 0, strpos($znalezione[1], $koniec));
  return $znaleziony;
}

function wyszukaj_wszystkie($ciag, $poczatek, $koniec)
{
  $znalezione=explode($poczatek, $ciag);
  array_shift($znalezione);
  for ($i=0;$i<count($znalezione);$i++)
  {
    $znalezione[$i]=substr($znalezione[$i], 0, strpos($znalezione[$i], $koniec));
  }
  return $znalezione;
}

function curl_pobierz($dane)
{
  $przegladarka='Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8';
  $naglowki=array('Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language: pl,en-us;q=0.7,en;q=0.3', 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7');

  $link=curl_init($dane['adres']);
  curl_setopt($link, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($link, CURLOPT_USERAGENT, $przegladarka);
  curl_setopt($link, CURLOPT_ENCODING, '');
  if(strlen($dane['odsylajacy']))
     curl_setopt($link, CURLOPT_REFERER, $dane['odsylajacy']);
  curl_setopt($link, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookies.txt'); //odczyt ciasteczek z pliku
  curl_setopt($link, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookies.txt'); //zapis otrzymanych ciasteczek
  curl_setopt($link, CURLOPT_HTTPHEADER, $naglowki);
  if(strlen($dane['post']))
    curl_setopt($link, CURLOPT_POSTFIELDS, $dane['post']);
  curl_setopt($link, CURLOPT_HEADER, 1);
  $strona=curl_exec($link);
  curl_close($link);

  return $strona;
}

function ogame_logowanie()
{
  $dane=array(
  'adres'=>'http://uni'.uni.'.ogame.pl/game/reg/login2.php',
  'odsylajacy'=>'http://ogame.pl/',
  'post'=>'uni_id=&v=2&is_utf8=0&uni_url=uni'.uni.'.ogame.pl&login='.login.'&pass='.haslo,
  );

  $strona=curl_pobierz($dane);
  $sesja=wyszukaj_jeden($strona, 'session=', '&lgn=1');
  return $sesja;
}

function ogame_czy_zalogowany()
{
  $adres='http://uni'.uni.'.ogame.pl/game/index.php?page=overview&session='.$_SESSION['ogame_sesja'];
  $dane=array(
  'adres'=>$adres,
  'odsylajacy'=>$adres,
  );

  $strona=curl_pobierz($dane);
  return strstr($strona, 'Surowce');
}
?>
Plik html/ogame.html
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Ogame Bot</title>
{js}
</head>
<body>
{tresc}
</body>
</html>
Schemat bazy, id kolejność, co budynek(np. 1 - Kopalnia Metalu)
Kod:
CREATE TABLE IF NOT EXISTS `budynki` (
  `id` int(11) NOT NULL auto_increment,
  `co` tinyint(4) NOT NULL,
  PRIMARY KEY  (`id`)
)
tak wiem, lepiej przy tak prostej strukturze korzystać z pliku, ale byłem zbyt leniwy
 
Do góry Bottom