Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: TOP10 wyswietlane z plikow txt
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
Gość_Fred
Witam, jestem ciekawy czy istnieje taki skrypt ktory wyswietla niektore informacje z plikow tekstowych, jest mi taki skrypt potrzebny do gry.
Przykladowo
mam w folderze accounts, konta z graczami ktore sa zatytulowane nick.ini
a w kazdym z tych plikow sa informacje o postaci, np. level = 10
I chcialbym taki skrypt ktory by wyswietlal TOP 10 (albo wiecej jak sie da:)) leveli z tych plikow. Bardzo prosze o wskazowki skad moglbym wziac taki skrypt i ewentualnie go przerobic do moich potrzeb.
strife
Witam,

Zasada tworzenia czegoś takiego jest taka, tworzysz sobie swój katalog accouts, w którym trzymasz powiedzmy wszystkie osoby uczestniczące w grze. Wszystkie osoby będą się charekteryzowały zapisem w postaci ^nick.ini. Zawartość takiego pliku będzie wyglądać przykładowo:
  1. level = "10"
  2. power = "100"
  3. armor = "20"
  4. attack = "10"
  5. defend = "30"

Potem tworzysz sobie plik, który to wszystko ładnie obsłuży i wyświetli, zaczynając od zeskanowania katalogów w poszukiwaniu plików *.ini, następne ich przeparsowanie, wyciągnięcie odpowiednich interesujących Cię danych i wyświetlenie w TOP10 jaka postać charekteryzuje się największym poziomem. smile.gif

Stwórz sobie np. plik general.php, a w nim utwórz po koleji linijki kodu odpowiadające za:
- wczytanie wszystkich plików *.ini ( php5 - scandir" title="Zobacz w manualu php" target="_manual, php4 - opendir" title="Zobacz w manualu php" target="_manual, readfile" title="Zobacz w manualu php" target="_manual ).
- nie dotyczy php5: w pętli, którą stworzysz zapisanie wszystkich nazw plików do tablicy.
- pętla foreach" title="Zobacz w manualu php" target="_manual, która przeleci Ci każdy plik, w pętli wczytujesz dany plik *.ini ( parse_ini_file" title="Zobacz w manualu php" target="_manual ) i ponownie zapisujesz do tablicy.
- Z ostatniej tablicy ponownie foreach" title="Zobacz w manualu php" target="_manual z tym, że teraz wyciągamy interesujące nas wartości, sortujemy nowe powstałe w ten sposób tablice ( patrz manual ) i poprzez instrukcje echo, print wyświetlamy smile.gif

Być może wydaje się to skomplikowane, ale nie jest. Tak na marginesie, jeśli taki skrypt potrzebny Ci jest do gry ( w php? ) to nie powinieneś szukać gotowych skryptów tylko zacząć pisać samemu winksmiley.jpg

Jeśli będziesz miał problemy z tworzeniem pisz na forum, jak nie ja pomoże Ci ktoś inny winksmiley.jpg

^ chodź nie wiem czy takie rozwiązanie jest dobre, co będzie gdy plik będzie zawierał polskie znaki, kropki i znaki niedozwolone? Lepiej dodać unikalny numer zamiast nick'a ( 2432.ini ), i dodać wartość nick w pliku ini. :-)

Pozdrawiam! smile.gif
Gość_Fred
Niestety pomysl z plikami 1332.ini odpada bo nazwa musi byc koniecznie taka sama jak nick.ini
Wlasnie hmm, o to chodzi zebym nie musial tworzyc tego pliku od nowa bo nie za bardzo znam sie na php prawde mowiac:( Moze sa jakies przyklady czy cos w tym styluktore mozna zmodyfikowac do wlasnych potrzeb?
Znalazlem jeden taki skrypt tylko ze on jest przeznaczony do gry Helbreath:

  1. <?php
  2. /* ---------------------------------------------------------------------------------------
  3.  
  4. */
  5. /*-----------Edit the line below this-------------*/
  6. $chardir = "C:\\Example\\Character";
  7. /*-----------Edit the line above this-------------*/
  8. $asc = 65;
  9. while($asc < 122){
  10. $handle = $chardir;
  11. $handle .= '\\ASCII';
  12. $handle .= $asc;
  13. $filename = $handle;
  14. if(!is_readable($filename)){ }
  15. elseif($handle = opendir($filename)){
  16. while($file = readdir($handle)){ 
  17. if ($file != "." && $file != ".." && $file != "" && $file != ".txt") { 
  18. $filename = ''.$chardir.'\\ASCII'.$asc.'\\'.$file.'';
  19. $filepath = $filename;
  20. $moo = ereg_replace(".bak","\n",$filepath);
  21. if(!is_readable($moo)){ }
  22. else{
  23. $lines = file($filepath);
  24. $aexp = substr($lines[32], 20);
  25. $aname = ereg_replace("= ","",substr($lines[6], 20));
  26. $alevel = ereg_replace(" ","",substr($lines[23], 20));
  27. $alocation = substr($lines[12], 23, 7);
  28. $blocation = substr($lines[12], 23, 6);
  29. $aek = ereg_replace("character-EK-Count =","\n",$lines[39]);
  30. if($alocation == "aresden"){
  31. $arexp = array_merge($arexp,$aexp);
  32. $arlevel = array_merge($arlevel, $alevel);
  33. $arname = array_merge($arname, $aname);
  34. $arek = array_merge($arek, $aek);
  35. }
  36. elseif($blocation == "elvine"){
  37. $elexp = array_merge($elexp,$aexp);
  38. $ellevel = array_merge($ellevel, $alevel);
  39. $elname = array_merge($elname, $aname);
  40. $elek = array_merge($elek, $aek);
  41. }
  42. }
  43. }
  44. }
  45. }
  46. $asc = $asc + 1;
  47. }
  48. if(!$arexp){ }
  49. elseif(!$elexp){ }
  50. else{
  51. array_multisort($arexp, SORT_DESC, SORT_NUMERIC, $arlevel, $arname, $arek);
  52. array_multisort($elexp, SORT_DESC, SORT_NUMERIC, $ellevel, $elname, $elek);
  53. }
  54. /*--------Edit below this is you wish to change how the top 10 list looks------*/
  55. echo "<body bgcolor=\"#666666\" text=\"#CCCCCC\" link=\"#000000\">
  56. <font face=arial>
  57. <p align=center>Top 10 Aresden Players
  58. <table width=\"90\" border=\"2\">
  59. </em>
  60. <tr>
  61. <td>Position</td>
  62. <td>Player</td>
  63. <td>Level</td>
  64. <td>Experience</td>
  65. <td>EK Count</td>
  66. </tr>
  67. <tr>
  68. <td>1</td>
  69. <td>$arname[0]</td>
  70. <td>$arlevel[0]</td>
  71. <td>$arexp[0]</td>
  72. <td>$arek[0]</td>
  73. </tr>
  74. <tr>
  75. <td>2</td>
  76. <td>$arname[1]</td>
  77. <td>$arlevel[1]</td>
  78. <td>$arexp[1]</td>
  79. <td>$arek[1]</td>
  80. </tr>
  81. <tr>
  82. <td>3</td>
  83. <td>$arname[2]</td>
  84. <td>$arlevel[2]</td>
  85. <td>$arexp[2]</td>
  86. <td>$arek[2]</td>
  87. </tr>
  88. <tr>
  89. <td>4</td>
  90. <td>$arname[3]</td>
  91. <td>$arlevel[3]</td>
  92. <td>$arexp[3]</td>
  93. <td>$arek[3]</td>
  94. </tr>
  95. <tr>
  96. <td>5</td>
  97. <td>$arname[4]</td>
  98. <td>$arlevel[4]</td>
  99. <td>$arexp[4]</td>
  100. <td>$arek[4]</td>
  101. </tr>
  102. <tr>
  103. <td>6</td>
  104. <td>$arname[5]</td>
  105. <td>$arlevel[5]</td>
  106. <td>$arexp[5]</td>
  107. <td>$arek[5]</td>
  108. </tr>
  109. <tr>
  110. <td>7</td>
  111. <td>$arname[6]</td>
  112. <td>$arlevel[6]</td>
  113. <td>$arexp[6]</td>
  114. <td>$arek[6]</td>
  115. </tr>
  116. <tr>
  117. <td>8</td>
  118. <td>$arname[7]</td>
  119. <td>$arlevel[7]</td>
  120. <td>$arexp[7]</td>
  121. <td>$arek[7]</td>
  122. </tr>
  123. <tr>
  124. <td>9</td>
  125. <td>$arname[8]</td>
  126. <td>$arlevel[8]</td>
  127. <td>$arexp[8]</td>
  128. <td>$arek[8]</td>
  129. </tr>
  130. <tr>
  131. <td>10</td>
  132. <td>$arname[9]</td>
  133. <td>$arlevel[9]</td>
  134. <td>$arexp[9]</td>
  135. <td>$arek[9]</td>
  136. </tr>
  137. </table>
  138. <body bgcolor=\"#666666\" text=\"#CCCCCC\" link=\"#000000\">
  139. <font face=arial>
  140. <p align=center>Top 10 Elvine Players
  141. <table width=\"90\" border=\"2\">
  142. </em>
  143. <tr>
  144. <td>Position</td>
  145. <td>Player</td>
  146. <td>Level</td>
  147. <td>Experience</td>
  148. <td>EK Count</td>
  149. </tr>
  150. <tr>
  151. <td>1</td>
  152. <td>$elname[0]</td>
  153. <td>$ellevel[0]</td>
  154. <td>$elexp[0]</td>
  155. <td>$elek[0]</td>
  156. </tr>
  157. <tr>
  158. <td>2</td>
  159. <td>$elname[1]</td>
  160. <td>$ellevel[1]</td>
  161. <td>$elexp[1]</td>
  162. <td>$elek[1]</td>
  163. </tr>
  164. <tr>
  165. <td>3</td>
  166. <td>$elname[2]</td>
  167. <td>$ellevel[2]</td>
  168. <td>$elexp[2]</td>
  169. <td>$elek[2]</td>
  170. </tr>
  171. <tr>
  172. <td>4</td>
  173. <td>$elname[3]</td>
  174. <td>$ellevel[3]</td>
  175. <td>$elexp[3]</td>
  176. <td>$elek[3]</td>
  177. </tr>
  178. <tr>
  179. <td>5</td>
  180. <td>$elname[4]</td>
  181. <td>$ellevel[4]</td>
  182. <td>$elexp[4]</td>
  183. <td>$elek[4]</td>
  184. </tr>
  185. <tr>
  186. <td>6</td>
  187. <td>$elname[5]</td>
  188. <td>$ellevel[5]</td>
  189. <td>$elexp[5]</td>
  190. <td>$elek[5]</td>
  191. </tr>
  192. <tr>
  193. <td>7</td>
  194. <td>$elname[6]</td>
  195. <td>$ellevel[6]</td>
  196. <td>$elexp[6]</td>
  197. <td>$elek[6]</td>
  198. </tr>
  199. <tr>
  200. <td>8</td>
  201. <td>$elname[7]</td>
  202. <td>$ellevel[7]</td>
  203. <td>$elexp[7]</td>
  204. <td>$elek[7]</td>
  205. </tr>
  206. <tr>
  207. <td>9</td>
  208. <td>$elname[8]</td>
  209. <td>$ellevel[8]</td>
  210. <td>$elexp[8]</td>
  211. <td>$elek[8]</td>
  212. </tr>
  213. <tr>
  214. <td>10</td>
  215. <td>$elname[9]</td>
  216. <td>$ellevel[9]</td>
  217. <td>$elexp[9]</td>
  218. <td>$elek[9]</td>
  219. </tr>
  220. </table>";
  221. ?>



a tam sa zmienne mi niepotrzebne, czyli: niepotrzebne mi sprawdzanie folderow ASCIIxx (xx=numer) bo wszystko mam w jednym katalogu, niepotrzebne tez jest sprawdzanie miast (aresden, elvine) bo w mojej grze nie ma przynaleznosci na stale do miasta. A takze nazwa postaci jest inna bo u mnie postacie sa w katalogu accounts w plikach nick.ini, no i zmienne ktore sprawdza w pliku u mnie bedzie to Level = x, i chcialbym tez PlayerKill=x, napewno sa tam tez inne niepotrzbne zmienne ktorych nie potrzebuje ale niestety nie potrafie ich odczytac.
Moze ma ktos jakis pomysl jak zmodyfikowac ten skrypt do moich potrzeb?smile.gif


Poprawiłem
~mike_mech
strife
Dobra napiszę Ci mniej więcej jak to powinno wyglądać, co do skryptu, który podałeś jest trochę za duży jak na Twoje potrzeby i myślę, że lepiej było by napisać od nowa. Aby nie być gołosłownym
  1. <?php
  2.  
  3.  
  4. // katalog ktory skanujemy
  5. $rDir = 'accounts/';
  6. $aFiles = scandir( $rDir );
  7.  
  8. // usuniecie zbednych kropek
  9. unset( $aFiles[ 0 ] ); 
  10. unset( $aFiles[ 1 ] ); 
  11.  
  12. // gdy juz mamy wszystkie pliki petla ...
  13. foreach( $aFiles as $val )
  14. {
  15. // usuwa 4 ostatnie znaki pozostawiajac
  16. // tym samym tylko ich nazwy
  17. $name = substr( $val, 0, -);
  18.  
  19. // wczytanie zawartosci plikow ini do tablicy
  20. $aAccounts[ $name ] = parse_ini_file( $rDir . $val );
  21.  
  22. // stworzneie tablicy z 'levelami'
  23. $aTop10[ $name ] = $aAccounts[ $name ][ 'level' ];
  24. }
  25.  
  26. // sortowanie top10 
  27. arsort( $aTop10 );
  28.  
  29. // wyswietlanie top10
  30. foreach( $aTop10 as $k => $v )
  31. {
  32. echo $k . ' => ' . $v . '<br />'; 
  33. }
  34.  
  35.  
  36. ?>


Pamiętaj, że scandir działa tylko pod php5.

Skrypt nie wyświetla ostatnich 10 wpisów tylko wszystkie, jeżeli chcesz ustawić limit, możesz skorzystać z pętli for.

Polecam Ci przeanalizowanie skryptu i na jego podstawie tworzenie dalej smile.gif Jeżeli naprawdę nie masz pojęcia o php zainstaluj sobie np. WAMP'a i testuj na nim wszystkie skrypty, a uwierz mi że już po kilku dniach pracy będziesz miał swój skrypt w pełni sprawy.

Jeżeli masz jakieś pytania chętnie odpowiem.

Pozdrawiam winksmiley.jpg
Gość_Fred
STRIFE exclamation.gif! Wielkie dzieki exclamation.gif!!
Twoj skrypt dziala jak sie patrzy, na poczatku sie zdziwilem ze nie chcial dzialac ale zainstalowalem program WAMP o ktorym pisales i wszystko chodzi swietnie!
Ladnie mi wczytuje levele graczy i nawet pokazuje jakie dokladnie maja.
Jestem Ci bardzo wdzieczny za pomoc.
A dzieki temu, ze wyswietla wszystkich graczy, a nie tylko top10 wpadlem na pomysl zeby na jednej stronie zrobic ranking tylko top10 osob, a na innej wszystkich postaci ktore sa w accounts. Ale do tego fajny by byl skrypt ktory pokazuje miejsce gracza na liscie. Chodzi o to zeby przed nim byl numerek np. ten ktory ma najwiekszy level mial by numer 1. Aby to wygladalo tak

1. Nick => 75
2. Nick => 68
3. Nick => 55
itd.

Probowalem uzyc tej opcji for, ale na tej stronce ktora podales, jest to tak dziwnie wytlumaczone, ze nie za bardzo rozumiem o co tam chodzi. Sa moze jakies jeszcze stronki, ktore dokladniej opisuja dzialanie tej funkcji?

A jeszcze takie pytanie... ktory argument odpowiada za wyswietlanie leveli? Tak na wypadek jakbym chcial ta opcje wylaczyc?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.