Niezbędnik programisty

  • Rozpoczynający wątek DeletedUser5
  • Data rozpoczęcia

DeletedUser5

Guest
W tym temacie znajdą się najróżniejsze linki, strony i poradniki, które mogą przydać się programistom. Jeśli posiadacie jakieś wskazówki dla nowych skrypciarzy, nie wahajcie się mieścić ich w tym miejscu! :)
 

DeletedUser5

Guest
Odp: Niezbędnik programisty

Dane serwerowe Grepolis

Aby pobrać dane z innego świata wystarczy w miejsce 1 w linku (np. http://pl1.grepolis.com/data/players.txt.gz) wstawić numer interesującego nas świata (np. http://pl2.grepolis.com/data/players.txt.gz prowadzi do listy graczy ze świata Beta).

Uwaga! Postaraj się nie ściągać plików zbyt często, ponieważ prowadzi to do przeciążenia serwerów.

 

DeletedUser

Guest
Odp: Niezbędnik programisty

Jak często to "zbyt często" dla waszych serwerów?

---
A, żeby post nie był bez produktywny, to tylko doradzę "must-be" dla chętnych do pisania w JS:
http://docs.jquery.com/
 
Ostatnio edytowane przez moderatora:

DeletedUser

Guest
Odp: Niezbędnik programisty

Warto też dodać że oprócz podanych tu odnośników do plików z końcówką *.gz
np: http://pl21.grepolis.com/data/players.txt.gz
istnieją też ich odpowiedniki bez końcówki *.gz
np: http://pl21.grepolis.com/data/players.txt

... czyli w tym przypadku plik players.txt.gz to zwykły plik players.txt tylko spakowany zipem.
Plik ten zawiera informacje w stylu:

...
869804,STANISLOPULOS,,0,1624,0
423199,Potusek,263,562841,309,42
493411,Prision,2544,8757,1044,2
...

dane są przedstawiane następująco:
id_gracza , nazwa_gracza , id_sojuszu_gracza , punkty_gracza , ranking_gracza , liczba_miast_gracza

przykładowa procedura wczytująca informacje o graczach do tablicy players
w formie skryptu przedstawia się następująco:

$.ajax({type:"GET",url:"http://pl21.grepolis.com/data/players.txt",dataType:"text",
success:function(data)
{
data=data.replace(/\+/g,' ')+"\n";
tmp=data.split("\n");
players=new Array();
for (e in tmp)
if (e!="")
{
tmp[e]+=",";
t=tmp[e].split(",");
players[t[0]]=new Array();
players[t[0]]['id']=t[0];
players[t[0]]['name']=decodeURIComponent(t[1]);
players[t[0]]['allianceID']=t[2];
players[t[0]]['points']=t[3];
players[t[0]]['rank']=t[4];
players[t[0]]['towns']=t[5];
}
}});

Wszystkim polecam używanie tej metody w swoich skryptach, gdyż lepiej wczytać od razu wszystkie informacje
niż wypytywać serwer pojedynczo o każdego gracza, jak robi to jeden z dość powszechnych skryptów
korzystając z metody która zwraca całą stronę internetową z informacją o profilu gracza (i paru innych)
a dodatkowo musi jeszcze tą kupę śmieci przeszukać w celu znalezienia jedynej potrzebnej informacji np. nazwa sojuszu.
Lepiej wczytać raz i mieć cały czas pod ręką (czyli po stronie przeglądarki)
niż obciążać serwery gry ciągłymi niepotrzebnymi (i sporo ważącymi) zapytaniami.
 

DeletedUser

Guest
Odp: Niezbędnik programisty

Warto też dodać że ...
players[t[0]]['id']=t[0];
players[t[0]]['name']=decodeURIComponent(t[1]);
players[t[0]]['allianceID']=t[2];
players[t[0]]['points']=t[3];
players[t[0]]['rank']=t[4];
players[t[0]]['towns']=t[5];

... z tym że wartości liczbowe warto przechowywać jako int a nie jako string.
Wiadomo że string('128') zajmuje 3 bajty a int(128) tylko 1 bajt.
Tak więc przy dużej liczbie graczy / sojuszy / miast / itd.
zaoszczędzona pamięć może sięgać nawet kilkuset megabajtów !!!

Czyli dla powyższego przykładu taki kod:
players[t[0]]['id']=parseInt(t[0]);
players[t[0]]['name']=decodeURIComponent(t[1]);
players[t[0]]['allianceID']=parseInt(t[2]);
players[t[0]]['points']=parseInt(t[3]);
players[t[0]]['rank']=parseInt(t[4]);
players[t[0]]['towns']=parseInt(t[5]);
 
Do góry