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

[DL] Automatyczny Zmieniacz Pongów


Rekomendowane odpowiedzi

Opublikowano

Cześć,

dosyć stary skrypt, nie widzę zastosowania dla niego u siebie, więc udostępniam, może komuś się przyda, jak nie to trudno.

Uprzedzając komentarze - wiem, że jest chujowo napisany i nieprzemyślany, ale jest to pierwszy szkic i nie będzie dopracowywany.

Wymagane jest zainstalowane na serwerze PHP, goły game i goły exe'k od klienta, 2010tki z pongami, które musicie znać.

Co skrypt potrafi robić?

Losować nowy pong i zmieniać go we wskazanych gejmie i exeku.

Np. co tydzień automatycznie zmieniany pong w gejmie gry(najpierw musicie wyłączyć serwer rzecz jasna, ale chyba zabić proces potraficie) i w exeku wystawionym w Waszym patcherze.

Skrypt jest przystosowany do plików 2010 - NIEROZPAKOWANYCH, jeżeli zadawala was UPX to instalujecie z portów i do skryptu dorzucacie rozpakowanie UPX'em a po wszystkim pakowanie.

Jak to ustawić?

No więc otwieramy naszego gejma i binarkę jakimś edytorem hex i szukamy w nich aktualnego pong'a(to musicie znać) i sprawdzacie w którym miejscu się on zaczyna: przykłady:

gejm:

http://img38.imageshack.us/img38/3912/gejm.png

Jak widać mamy:

2E8CA9

klient:

http://img189.imageshack.us/img189/5756/klient.png

Jak widać mamy:

1C1CD0

Teraz fajnie by było zamienić to na wartości dziesiętne, więc wchodzimy tu:

http://easycalculation.com/hex-converter.php

i w polu HEX wpisujemy tamte cuda.

Otrzymujemy:

gejm:3050648

klient:1842384

Więc ustawiamy zmienne w skrypcie zgodnie z wynikiem, np.:

$pos_game = 3050665;
$pos_client = 1842384;

 

Dobra, teraz ustawiamy ścieżki do plików prawidłowe, tj. zamieniamy np.:

$handle = fopen('/home/game/share/game', "rb");
$tresc = fread($handle, filesize('/home/game/share/game'));
fclose($handle);
$old = substr($tresc, $pos_game, 16);
$wynik = str_replace($old, $new, $tresc);
system("rm /home/game/share/game");
$handle3 = fopen('/home/game/share/game', "a+");

Na nasze ścieżki do pliku game.

Tak samo robimy w przypadku metin2client'a.

Co dalej?

No przydałby się skrypt, który potrafi odczytać z istniejących plików pong'a, żeby widzieć jaki aktualnie obowiązuje u nas na serwerze.

Ustawiamy zmienne i ściezki w nim tak samo i wsio.

Zmianę pongów wywołujemy przez:

php testowy.php

a wyświetlenie przez:

php sprawdzacz.php

 

Podkreślam, że skrypt zadziała tylko z plikami niespakowanymi i niczym nie zaszyfrowanymi. Ewentualne szyfrowanie możecie dorzucić do skryptu we własnym zakresie.

Więc przechodząc do sedna.

Skrypt testowy.php:


<?php
date_default_timezone_set('Europe/Warsaw');
ini_set('memory_limit', '1G');
$pos_game = 3050665;
$pos_client = 1842384;
$new = substr(md5(time()),0,16);
echo $new;


$handle = fopen('/home/game/share/game', "rb");
$tresc = fread($handle, filesize('/home/game/share/game'));
fclose($handle);
$old = substr($tresc, $pos_game, 16);
$wynik = str_replace($old, $new, $tresc);
system("rm /home/game/share/game");
$handle3 = fopen('/home/game/share/game', "a+");
fwrite($handle3, $wynik);
fclose($handle3);



$handle2 = fopen('/home/www/patcher/metin2client.exe', "rb");
$tresc2 = fread($handle2, filesize('/home/www/patcher/metin2client.exe'));
fclose($handle2);
#echo $tresc;
$wynik2 = str_replace($old, $new, $tresc2);
system("rm /home/www/patcher/metin2client.exe");
$handle3 = fopen('/home/www/patcher/metin2client.exe', "a+");
fwrite($handle3, $wynik2);
fclose($handle3);




?>

Skrypt sprawdzacz.php:

<?php
date_default_timezone_set('Europe/Warsaw');
ini_set('memory_limit', '172M');
$pos_game = 3050665;
$pos_client = 1842384;

$handle = fopen('/home/game/share/game', "rb");
$tresc = fread($handle, filesize('/home/game/share/game'));
fclose($handle);
$old = substr($tresc, $pos_game, 16);
echo "\n".'GAME TO: '.$old;



$handle2 = fopen('/home/www/patcher/metin2client.exe', "rb");
$tresc2 = fread($handle2, filesize('/home/www/patcher/metin2client.exe'));
fclose($handle2);
$old2 = substr($tresc2, $pos_client, 16);
echo "\n".'KLIENT TO: '.$old2;



?>

 

Wartości podane w zmiennych są przykładowe, akurat u mnie one tyle wynoszą, co nie oznacza, że u Was też będą działać.

Skrypt jest mojego autorstwa, ale w sumie taka w nim kaszana jest, że w sumie lepiej się do niego nie przyznawać, he. W każdym razie u mnie działa i nie jest to żadna kopia z pvpersów czy innych cudów.

Opublikowano

Żeby wszystko ładnie działało potrzebny patcher.

Do skryptu trzeba dopisać żeby aktualizował wersje patcha (przynajmniej w moim przypadku).

Można też edytować go w taki sposób żeby automatycznie co np. 7 dni wyłączał serwa, podmieniał pong i znów go włączył.

Myślę że dam sobie z tym radę.

Ty odwaliłeś kawał dobrej roboty bo osobiście nie wiedziałem jak się za to zabrać :)

Wielkie dzięki, jeśli uda mi się poprawić to może podeśle.

02758850976702993171.png
Opublikowano

 

Można też edytować go w taki sposób żeby automatycznie co np. 7 dni wyłączał serwa, podmieniał pong i znów go włączył.

 

 

 

Do crontaba:


0       *       *       0       root    /usr/local/bin/php /home/testowy.php

W skrypcie dorzucasz przed:

system("rm /home/game/share/game");

np.

system("sh /home/game/turnoff.sh");

(zależnie od tego w jaki sposób kładziesz serwer)

i po:

fclose($handle3);

dorzucasz np.

system("sh /home/game/start.sh")

Co do wersji patchera to zależy od tego w jaki sposób jest trzymana ta wersja w pliku, pewnie wystarczy go otworzyć, dodać liczbę(może być potrzeba rozbicia wersji na kilka[jeżeli jest dzielona kropkami]) i zapisać.

Pozdr.

Zarchiwizowany

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

×
×
  • Dodaj nową pozycję...