Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[MegaTut/UW/C#]Program czytający dane konta


Gość Pan Szymek

Rekomendowane odpowiedzi

Gość Pan Szymek
Opublikowano

Ponieważ jestem istotą leniwą, a poradnik będzie długi zamierzam podzielić go na części.

 

 

#1 Wstęp

Aplikacja będzie mieściła się w konsoli, będzie wypisywała firmę, poziom, PD, poważanie itd.

 

Do jej napisania będziemy potrzebowali

  • Visual Studio/Visual C# 2008/2010/12
  • Działające konto na Uridium Wars
  • Trochę czasu

Dodam też, że nie powinieneś brać się za pisanie programu jeżeli wcześniej nie miałeś styczności z jakimkolwiek językiem programowania.

 

 

#2 Zaczynamy pisać

Tworzymy nowy projekt Console Application i dodajemy zmienne

static int akcja;
static string aktualneIP;
static string WersjaKlienta = "2.7.5";
static string id;
static string sid;
static Socket socket;
static int idMapy;
static Thread trd_polaczenie;

Teraz w metodzie Main dodajmy inicjalizację zmiennych id, sid, idMapy oraz trd_polaczenie

Console.WriteLine("Witaj w programie!\nPodaj ID");
id = Console.ReadLine();
Console.WriteLine("Podaj SID");
sid = Console.ReadLine();
Console.WriteLine("Podaj ID mapy, na której się znajdujesz");
idMapy = int.Parse(Console.ReadLine());
Console.WriteLine("Logowanie...");
trd_polaczenie = new Thread(new ThreadStart(Polaczenie));
trd_polaczenie.Start();

Zanim przejdziemy do funkcji Polaczenie dodajmy wszystkie metody, które przydadzą nam się wcześniej

static string pomiedzy(string str1, string str2, string str3)
{
int start = str1.IndexOf(str2);
int end = str1.IndexOf(str3, start);
return str1.Substring(start + str2.Length, end - start - str2.Length);
}
static string pobierzIpMapy(int idMapy)
{
string kod = new WebClient().DownloadString("http://fb.darkorbit.bigpoint.com/src/swf/spacemap/xml/maps.php");
return pomiedzy(pomiedzy(kod, string.Format("<map id=\"{0}\"", idMapy), "</map"), "<gameserverIP>", "</gameserverIP");
}

////////////////////////////////

static void WyslijPakiet(string pak)
{
try
{
pak += "\n\0";
Byte[] pakiet = Encoding.UTF8.GetBytes(pak);
if (socket.Connected)
socket.Send(pakiet, pak.Length, SocketFlags.None);
}
catch (Exception) { Console.WriteLine("Wystąpił błąd!"); }
}

////////////////////////////////////

static Byte[] pakiety;
static int _obpoz;
static int _dlugosc;
static int PrzetworzPakiet(out string pak)
{
int pl = 0;
int pp = 0;
bool cont = true;
Byte[] pakiet = new Byte[5000];
try
{
while (cont)
{
if (_obpoz == _dlugosc)
{
_obpoz = 0;
pakiety = new Byte[1000];
_dlugosc = socket.Receive(pakiety, 1000, SocketFlags.None);
}
if (_dlugosc == 0)
throw new SocketException(-1);
for (; _obpoz < _dlugosc; _obpoz++)
{
if (pakiety[_obpoz] == 10)
{
pl = pp+1;
pakiet[pp] = 13;
_obpoz++;
cont = false;
break;
}
else if (pakiety[_obpoz] == 0)
pakiet[pp] = 13;
else
pakiet[pp] = pakiety[_obpoz];
pp++
}
}
Byte[] npp = new Byte[pl];
for (int i = 0; i < pl; i++)
npp[i] = pakiet[i];
pak = Encoding.UTF8.GetString(npp).Replace("\r\r\r", "");
}
catch (Exception) { Console.WriteLine("Wystąpił błąd"); pak = "-1"; return -1; }
return 0;
}

/////////////////////////////////

void HandlerPakietow(string pakiet)
{
string[] args = pakiet.Split('|');
if (args.Length >= 2)
{
if (args[1].Equals("m"))
{
idMapy = int.Parse(args[2]);
return;
}
if (args[1].Equals("I"))
{
/*
args[2] == id;
args[3] == nick;
args[4] == id statku;
args[5] == predkosc
args[6] == oslona
args[7] == maxoslona
args[8] == hp
args[9] == maxhp
args[10] == cargo
args[11] == maxcargo
args[12] == pozx
args[13] == pozy
args[14] == ostatnia mapa ?
args[15] == firma
args[16] == id klanu
args[17] == MaxLaserAmmo
args[18] == MaxRocketAmmo
args[19] == ?
args[20] == Premium (true/false) w int (1/0)
args[21] == pd
args[22] == powazanie
args[23] == poziom
args[24] == kredyty
args[25] == uridium
args[26] == jackpot (float)
args[27] == admin (21==admin)
args[28] == klan (string)
args[29] == galaxy gates zrobione
args[30] == niewidzialny (int do bool)

*/
Console.WriteLine("ID: " + args[2]);
Console.WriteLine("Nick: " + args[3]);
Console.WriteLine("ID Statku: " + args[4]);
Console.WriteLine("Prędkość: " + args[5]);
Console.WriteLine("Osłona: " + args[6]);
Console.WriteLine("Maks. Osłona: " + args[7]);
Console.WriteLine("HP: " + args[8]);
Console.WriteLine("Maks. HP: " + args[9]);
Console.WriteLine("Ładownia: " + args[10]);
Console.WriteLine("Maks. Ładownia: " + args[11]);
//sprawdzanie firmy
string firma = "";
int idFirmy = int.Parse(args[15]);
if (idFirmy == 1)
firma = "MMO";
else if (idFirmy == 2)
firma = "EIC";
else if (idFirmy == 3)
firma = "VRU";
//sprawdzanie premium
string premium = "";
if (int.Parse(args[20]) == 1)
premium = "Tak";
else
premium = "Nie";
Console.WriteLine("Firma: " + firma);
Console.WriteLine("Premium: " + premium);
Console.WriteLine("Pkt. Doświadczenia: " + args[21]);
Console.WriteLine("Poważanie: " + args[22]);
Console.WriteLine("Poziom: " + args[23]);
Console.WriteLine("Kredyty: " + args[24]);
Console.WriteLine("Uridium: " + args[25]);
Console.WriteLine("Klan: " + args[28]);}
}
}

 

 

#3 Funkcja Polaczenie

void Polaczenie()
{
int port = 8080;
akcja = 0;
while (true)
{
if (akcja == 0)
aktualneIP = pobierzIpMapy(idMapy);
akcja = 1;
}
else if (akcja == 1)
{
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Protocol.Tcp);
int proby = 0, maksProby = 101;
while (true)
{
try
{
socket.Connect(aktualneIP, port);
}
catch (Exception) { }
if (socket.Connected)
break;
else
{
proby++;
if (proby == maksProby)
{
Console.WriteLine("Wystąpił błąd");
return;
}
}
WyslijPakiet(string.Format("LOGIN|{0}|{1}|{2}", id, sid, WersjaKlienta));
WyslijPakiet("PNG");
WyslijPakiet("LAB|UPD|GET");
WyslijPakiet("RDY|MAP");
akcja = 2;
}
else if (akcja == 2)
{
try
{
string p = "";
if (PrzetworzPakiet(out p) != 0)
throw new SocketException(1);
HandlerPakietow(p);
}
catch (Exception)
{
//polaczenie stracone
akcja = 0;
Thread.Sleep(100);
socket.Close();
Thread.Sleep(new Random().Next(1000, 2000));
}
}
}
}

Opublikowano

Chociaż nic prawie nie rozumiem, dam Ci like.

Ale wydaje mi się, że za pisanie takiego programu nie ma co się brac jak się nie zna języka, a jak się zna to lepiej wszystko napisać po swojemu.

obraz24.png


Opublikowano

W skromniejszej minimalnie wersji działało, bo mi szymon wysyłał :P

Mimo to troche useless, chyba, że do nauki :)

Gość Pan Szymek
Opublikowano

W skromniejszej minimalnie wersji działało, bo mi szymon wysyłał :P

Mimo to troche useless, chyba, że do nauki :)

Przypomina mi to rok 2011 :D

snap2011061821h25m14s00.png

 

@Topic

Dzisiaj się postaram dokończyć.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...