Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Skrypt do demek
#1
Napisano 20.05.2009 20:54
coś takiego jak to : http://hltv.1shot1kill.pl/772
Wiem że firmy robią to na własny użytek, ale może ktoś zna jakiś gotowy na którym można się oprzeć przerabiając pod siebie.
#2
Napisano 21.05.2009 00:42
#3
Napisano 21.05.2009 10:51
Powiedz tylko jaka ścieżka do katalogu.
#5
Napisano 21.05.2009 12:16
Wizu, daj obojętnie jaką ja sobie ustawie. Chodzi mi właśnie o taki sposób prezentacji tych demek jak jest na tej stronie
wizu, mu bardziej chyba rozchodzi sie o skrypt który pakuje demka z hltv, wysyła je na dany serwer www
To już sobie zrobiłem :>
#6
Napisano 21.05.2009 12:20
#8
Napisano 21.05.2009 13:17
Podejrzewam że dałoby się również wysłać na zewnątrz przez wudowanego klienta ftp z dedyka. Kwestia pokombinowania
Jak chcesz to napisz na pw ścieżki skąd dokąd ma wysyłać i jakie pliki to moge coś pomyśleć
[ Dodano: 21-05-2009, 19:22 ]
OK, dzisiaj potestowałem trochę, muszę tylko poskładać wszystko do kupy i wrzucę skrypcik zgrywający, pakujący i wysyłający na serwer ftp.
#9
Napisano 21.05.2009 19:59
#10
Napisano 21.05.2009 23:47
#11
Napisano 22.05.2009 10:39
<? //folder w którym mam demka $folder = "dema"; $dir = opendir($folder); $sciezka = pathinfo($_SERVER['PHP_SELF']); $adres = 'http://'.$_SERVER['HTTP_HOST'].$sciezka['dirname'].'/'; echo '<table> <tr><td>Kopiuj link</td><td>Mapa</td><td>Czas rozpoczęcia</td><td>Czas trwania</td><td>Rozmiar</td><td>Pobierz</td></tr>'; while($nazwa = readdir($dir)) { $demo = $folder.'/'.$nazwa; $rozsz = pathinfo($demo, PATHINFO_EXTENSION); if(($rozsz == 'zip') or ($rozsz == 'rar')) { $dane = explode('-', $nazwa); $data = $dane[1]; $rok = substr($data, 0, 2); $mies = substr($data, 2, 2); $dzien = substr($data, 4, 2); $godz = substr($data, 6, 2); $min = substr($data, 8, 2); $datarozpoczecia = '20'.$rok.'-'.$mies.'-'.$dzien.' '.$godz.':'.$min; $datazakonczenia = date ("Y-m-d H:i", filemtime($demo)); $trwalo = (strtotime($datazakonczenia) - strtotime($datarozpoczecia)) / 60; $mapa = $dane[2]; $mapa = explode('.', $mapa); $mapa = $mapa[0]; $rozmiar = round( filesize($demo) / 1024 / 1024, 2); echo '<tr> <td><input type="text" value="'.$adres.$demo.'" readonly="yes" onclick="this.select()" /></td> <td>'.$mapa.'</td> <td>'.$datarozpoczecia.'</td> <td>'.date ("H:i", $trwalo).'</td> <td>'.$rozmiar.' MB</td> <td>[url="'.$adres.$demo."]Pobierz[/url]</td> </tr>'; } } closedir($dir); ?>
Ważne
Aby skrypt działał tak jak powinien, nazwa demka musi być w odpowiednim formacie. Zrobiłem dla takich nazw jak na http://hltv.1shot1kill.pl/772
Czyli. Np demko HLTV_Tower1-0905221042-de_cpl_strike.dem.zip
nazwa hltv-data w takim formacie jak wyżej (rok, miesiąc, dzień, godzina, minuty)-mapa.dem. zip lub rar
Jeśli będziesz chciał coś zmienić, to pisz przerobie. Pamiętaj, żeby nie używać w nazwie dem więc niż tych dwóch pogrubionych pauz.
Długość demka jest obliczana na podstawie różnicy daty ostatniej modyfikacji i utworzenia (pobieranej z nazwy pliku).
Pamiętaj aby wrzucić Twój skrypt, może też się komuś przyda
#12
Napisano 22.05.2009 12:00
#13
Napisano 22.05.2009 15:51
Instalacja:
Ściągamy załącznik, wrzucamy na serwer, ustawiamy chmody (chmod +x ./wysylanie.sh). Wiadomo że nie ma sensu odpalać go ręcznie co chwilę więc dodajemy do crona wpis uruchamiający powiedzmy co 10 minut (dema będą dodawane min. 2 a max 10 minut po zakończeniu mapy).
crontab -e > insert
*/10 * * * * ./wysylanie.shesc > shift+zz
> Należy ustawić adres serwera ftp, użytkownika ftp i hasło na ftp
oraz docelowy folder na ftp do którego będą wrzucane dema
Działanie:
1.Szukamy dem w katalogu cstrike do którego należy podać scieżkę
2. Pliki które zostały zmodyfikowane ostatnio później niż 2 minuty zostają przenoszone do katalogu "outbox" (katalog sam się utworzy, nie trzeba nic robić a po wysłaniu demek zostanie usunięty wraz z zawartością). Warunek modyfikacji > 2 min chroni przed kopiowaniem dem które się aktualnie nagrywają.
3. Po przeniesieniu plików .dem do tymczasowego katalogu zostają one spakowane gzipem.
4. Następnie następuje połączenie z serwerem ftp i upload spakowanych plików.
5. Po wysłaniu dema z tymczasowego folderu wraz z nim są usuwane.
Do działania oczywiście wymagany jest zainstalowany klient ftp, oraz gzip (ja zrobilem na podstawowym ftp bo najczęściej jest on wbudowany w podstawową instalację linuksa ale mozna po małych modyfikacjach skorzystać z innych). Katalog w którym znajduje się wysylanie.sh musi miec prawa zapisu - proponuje w $home go zostawić
_host="host"
_user="uzytkownik"
_pass="haslo"
_pliki="*.zip"
katalog_zdalny="dema"
katalog_lokalny="outbox"
katalog_cstrike="$HOME/hlds_l/cstrike/*.dem"
mkdir $katalog_lokalny
find $katalog_cstrike -mmin +2 -exec mv {} $katalog_lokalny ;
gzip -1f -S .zip $katalog_lokalny/*.dem
cd $katalog_lokalny
ftp -in $_host << KONIEC
user $_user $_pass
binary
mkdir $katalog_zdalny
cd $katalog_zdalny
send $_pliki
close
KONIEC
rm -f $katalog_lokalny
Jak sprawdzałem u siebie to działa. W razie problemów > PW.
Załączone pliki
#14
Napisano 23.05.2009 09:50
<? //folder w którym mam demka $folder = "dema"; $ext = array('zip', 'rar'); $sciezka = pathinfo($_SERVER['PHP_SELF']); $adres = 'http://'.$_SERVER['HTTP_HOST'].$sciezka['dirname'].'/'; $files = scandir($folder); $list = array(); foreach($files as $file) { $file = pathinfo($file); if (in_array($file['extension'], $ext)) { $list[filectime($folder.'/'.$file['basename'])] = $file['basename']; } } arsort($list); echo '<table> <tr><td>Kopiuj link</td><td>Mapa</td><td>Data</td><td>Godzina</td><td>Rozmiar</td><td>Pobierz</td></tr>'; foreach ($list as $nazwa) { $demo = $folder.'/'.$nazwa; $dane = explode('-', $nazwa); $data = $dane[1]; $rok = substr($data, 0, 2); $mies = substr($data, 2, 2); $dzien = substr($data, 4, 2); $godz = substr($data, 6, 2); $min = substr($data, 8, 2); $data = '20'.$rok.'-'.$mies.'-'.$dzien; $godzina = $godz.':'.$min; $mapa = $dane[2]; $mapa = explode('.', $mapa); $mapa = $mapa[0]; $rozmiar = round( filesize($demo) / 1024 / 1024, 2); echo '<tr> <td><input type="text" value="'.$adres.$demo.'" readonly="yes" onclick="this.select()" /></td> <td>'.$mapa.'</td> <td>'.$data.'</td> <td>'.$godzina.'</td> <td>'.$rozmiar.' MB</td> <td>[url="'.$adres.$demo."]Pobierz[/url]</td> </tr>'; } ?>
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych