1. Witaj na forum! Jesteś tu nowy(a)?
    Aby wziąć udział w dyskusji, potrzebujesz konta. Zarejestruj się tutaj!
    Masz już konto? Zaloguj się.
    Dismiss Notice

Niezbędnik programisty

Dyskusja w 'Skrypty i programy do Grepolis' rozpoczęta przez użytkownika Shannqa, 23. Paź 2012.

  1. Shannqa

    Shannqa

    Dołączył:
    5. Lut 2010
    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! :)
     
  2. Shannqa

    Shannqa

    Dołączył:
    5. Lut 2010
    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.

     
  3. Marqin

    Marqin 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: 26. Paź 2012
  4. gildon

    gildon

    Dołączył:
    21. Wrz 2012
    Odp: Niezbędnik programisty

    Wasze serwery da się przeciążyć?
     
  5. TheBest

    TheBest

    Dołączył:
    17. Lut 2010
    Odp: Niezbędnik programisty

    jak wczoraj bylo widac na Phi - da sie
     
  6. 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.
     
  7. KonfiLikt

    KonfiLikt Guest

    Odp: Niezbędnik programisty

    ... 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