Skocz do zawartości

PrzMas

Użytkownik
  • Zawartość

    878
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    55

Aktywność reputacji

  1. Like
    PrzMas otrzymał reputację od trevor3GeoIp (API)   
    W niniejszym temacie publikuję skrypt na pozyskiwanie geolokalizacji adresu IP
    z bazy danych serwisu ip-api.com, za pośrednictwem API.
     
    Implementacje użytych funkcji:
     
    Skrypt właściwy:
     
    Sposób użycia:
    Myślę, że choć jest trochę kodu to nie ma tu czego objaśniać, skoro sposób użycia jest dość prosty i skuteczny.
    Proszę o wspomnienie mnie jako autora niniejszego skryptu
    Skrypt alternatywny
  2. Like
    PrzMas przyznał reputację dla DaGaXeRSerwer RolePlay w BaySide   
    Rób jak chcesz. Jak nie masz pomysłu i chęci to nawet się za to nie zabieraj. Jak myślisz - dlaczego serwery upadają? Głównie nie mają celu i pomysłów, tylko liczą na propozycje graczy i ich pieniążki.
  3. Like
    PrzMas otrzymał reputację od DaGaXeRSerwer RolePlay w BaySide   
    Wymyśl coś lepszego
  4. Like
    PrzMas otrzymał reputację od DaGaXeRJaką macie ratę kredytu na mieszkanie?   
    Ban ban ban!
     
  5. Like
    PrzMas otrzymał reputację od silipek1Poszukuje Pawnera   
    W takim razie szukasz frajera a nie Pawnera, sam nie masz pojęcia o programowaniu to jeszcze nie szanujesz cudzych umiejętności.
    A do tego jesteś złodziejem, bo chcesz zarabiać na graczach i na umiejętnościach w/w frajera.
    W takim razie kup sobie saturator (jak masz za dużo pieniędzy) albo targaj z ulotkami, bo SA-MP to jest hobby, a nie źródło dochodu.
    Uprawnienia powinny być stosowne do roli w tworzeniu serwera i umiejętności danej osoby, a nie wedle czyjegoś życzenia na zasadzie tego lubię bardziej to dam mu admina a tego wcale nie lubię. Jeżeli programista jest od całego kodu, to musi mieć pełen dostęp do serwera.
    Nie szukaj człowieka, któremu ty będziesz zlecał a on będzie dla ciebie pisał, bo na kogoś takiego cię po prostu nie stać - ani z VIP-ów ani w ogóle z serwera nie wyciągniesz wystarczająco kasy, aby takiemu kompetentnemu programiście zapłacić za jego pracę.
  6. Like
    PrzMas otrzymał reputację od silipek1Poszukuje Pawnera   
    W takim razie szukasz frajera a nie Pawnera, sam nie masz pojęcia o programowaniu to jeszcze nie szanujesz cudzych umiejętności.
    A do tego jesteś złodziejem, bo chcesz zarabiać na graczach i na umiejętnościach w/w frajera.
    W takim razie kup sobie saturator (jak masz za dużo pieniędzy) albo targaj z ulotkami, bo SA-MP to jest hobby, a nie źródło dochodu.
    Uprawnienia powinny być stosowne do roli w tworzeniu serwera i umiejętności danej osoby, a nie wedle czyjegoś życzenia na zasadzie tego lubię bardziej to dam mu admina a tego wcale nie lubię. Jeżeli programista jest od całego kodu, to musi mieć pełen dostęp do serwera.
    Nie szukaj człowieka, któremu ty będziesz zlecał a on będzie dla ciebie pisał, bo na kogoś takiego cię po prostu nie stać - ani z VIP-ów ani w ogóle z serwera nie wyciągniesz wystarczająco kasy, aby takiemu kompetentnemu programiście zapłacić za jego pracę.
  7. Like
    PrzMas otrzymał reputację od silipek1Poszukuje Pawnera   
    W takim razie szukasz frajera a nie Pawnera, sam nie masz pojęcia o programowaniu to jeszcze nie szanujesz cudzych umiejętności.
    A do tego jesteś złodziejem, bo chcesz zarabiać na graczach i na umiejętnościach w/w frajera.
    W takim razie kup sobie saturator (jak masz za dużo pieniędzy) albo targaj z ulotkami, bo SA-MP to jest hobby, a nie źródło dochodu.
    Uprawnienia powinny być stosowne do roli w tworzeniu serwera i umiejętności danej osoby, a nie wedle czyjegoś życzenia na zasadzie tego lubię bardziej to dam mu admina a tego wcale nie lubię. Jeżeli programista jest od całego kodu, to musi mieć pełen dostęp do serwera.
    Nie szukaj człowieka, któremu ty będziesz zlecał a on będzie dla ciebie pisał, bo na kogoś takiego cię po prostu nie stać - ani z VIP-ów ani w ogóle z serwera nie wyciągniesz wystarczająco kasy, aby takiemu kompetentnemu programiście zapłacić za jego pracę.
  8. Like
    PrzMas otrzymał reputację od DaGaXeR[ROZWIĄZANY]Losowanie stocków   
    Podpowiedź:
    switch(random(3)) // 0-2 { case 0: // ... case 1: // ... case 2: // ... default: // ... } Klamry dla poszczególnych opcji (case) są niekonieczne jeżeli wykonywana jest tylko jedna operacja (w danej opcji).
  9. Like
    PrzMas otrzymał reputację od DaGaXeR[ROZWIĄZANY]Pytanko   
    Jakbyś potrafił zmodyfikować to co wymieniłeś to wiedziałbyś, że jest taka możliwość.
    Zapewne twój problem polega na tym, że nie chcesz brać się za coś, co w trakcie odechce ci się robić, bo okaże się, że jest przy tym w ciul roboty, a twój zapał był słomiany. Trochę średni pomysł pytać o radę ludzi, którzy nie wiedzą o czym mowa, bo nie widzą kodu. W gruncie rzeczy twój wysiłek, twój czas, twoja sprawa, dlatego to ty sam powinieneś obejrzeć kod, ocenić swoje siły na zamiary i podjąć samodzielną decyzję. Skoro wiesz co chcesz osiągnąć, to zacznij zastanawiać się w jaki sposób i na czym.
    Bądź mężczyzną do k...y nędzy
  10. Like
    PrzMas otrzymał reputację od silipek1Poszukuje Pawnera   
    W takim razie szukasz frajera a nie Pawnera, sam nie masz pojęcia o programowaniu to jeszcze nie szanujesz cudzych umiejętności.
    A do tego jesteś złodziejem, bo chcesz zarabiać na graczach i na umiejętnościach w/w frajera.
    W takim razie kup sobie saturator (jak masz za dużo pieniędzy) albo targaj z ulotkami, bo SA-MP to jest hobby, a nie źródło dochodu.
    Uprawnienia powinny być stosowne do roli w tworzeniu serwera i umiejętności danej osoby, a nie wedle czyjegoś życzenia na zasadzie tego lubię bardziej to dam mu admina a tego wcale nie lubię. Jeżeli programista jest od całego kodu, to musi mieć pełen dostęp do serwera.
    Nie szukaj człowieka, któremu ty będziesz zlecał a on będzie dla ciebie pisał, bo na kogoś takiego cię po prostu nie stać - ani z VIP-ów ani w ogóle z serwera nie wyciągniesz wystarczająco kasy, aby takiemu kompetentnemu programiście zapłacić za jego pracę.
  11. Like
    PrzMas otrzymał reputację od DaGaXeR[ROZWIĄZANY]Pytanko   
    Jakbyś potrafił zmodyfikować to co wymieniłeś to wiedziałbyś, że jest taka możliwość.
    Zapewne twój problem polega na tym, że nie chcesz brać się za coś, co w trakcie odechce ci się robić, bo okaże się, że jest przy tym w ciul roboty, a twój zapał był słomiany. Trochę średni pomysł pytać o radę ludzi, którzy nie wiedzą o czym mowa, bo nie widzą kodu. W gruncie rzeczy twój wysiłek, twój czas, twoja sprawa, dlatego to ty sam powinieneś obejrzeć kod, ocenić swoje siły na zamiary i podjąć samodzielną decyzję. Skoro wiesz co chcesz osiągnąć, to zacznij zastanawiać się w jaki sposób i na czym.
    Bądź mężczyzną do k...y nędzy
  12. Like
    PrzMas otrzymał reputację od silipek1Poszukuje Pawnera   
    W takim razie szukasz frajera a nie Pawnera, sam nie masz pojęcia o programowaniu to jeszcze nie szanujesz cudzych umiejętności.
    A do tego jesteś złodziejem, bo chcesz zarabiać na graczach i na umiejętnościach w/w frajera.
    W takim razie kup sobie saturator (jak masz za dużo pieniędzy) albo targaj z ulotkami, bo SA-MP to jest hobby, a nie źródło dochodu.
    Uprawnienia powinny być stosowne do roli w tworzeniu serwera i umiejętności danej osoby, a nie wedle czyjegoś życzenia na zasadzie tego lubię bardziej to dam mu admina a tego wcale nie lubię. Jeżeli programista jest od całego kodu, to musi mieć pełen dostęp do serwera.
    Nie szukaj człowieka, któremu ty będziesz zlecał a on będzie dla ciebie pisał, bo na kogoś takiego cię po prostu nie stać - ani z VIP-ów ani w ogóle z serwera nie wyciągniesz wystarczająco kasy, aby takiemu kompetentnemu programiście zapłacić za jego pracę.
  13. Like
    PrzMas przyznał reputację dla DaGaXeR[ROZWIĄZANY]Pytanko   
    Witam, mam śrubkę krzyżakową z możliwością otwierania płaskim śrubokrętem, przeważnie otwierałem ją płaskim śrubokrętem, ale planuje zmienić śrubokręt na krzyżakowy. Jest sens? Ta sama odpowiedź. Sens jest zawsze. Pytanie powinno być inne. Do jakich celów potrzebujesz zmiany na zcmd, co planujesz dalej robić z tą mapą et cetera et cetera..
  14. Like
    PrzMas otrzymał reputację od RebelianT[TRUCK]Polish Truck Maxing   
    Otóż na tym forum pod niemal każdą prezentacją serwera można znaleźć takie posty jak twoje, co jest już żenująco nudne.
    Prawda jest taka, że nie ważne czy ten gamemod jest z neta czy jego właściciel pisał go miesiącami czy latami, nie ważne czy ma on 1000 czy 100.000 linijek kodu, bo jeżeli na tym serwerze będzie po prostu nudno to prędzej czy później i tak pier***nie - nie on pierwszy i nie ostatni.
    Czy tego typu wpisy:
    o czymkolwiek przesądzają? - Nie, więc nie są warte ani pisania ani czytania, są tylko degustujące, pragmatycznie rzecz ujmując
  15. Like
    PrzMas otrzymał reputację od RebelianT[TRUCK]Polish Truck Maxing   
    Pańskie czepianie się wygląda mniej/więcej tak:
    Ja myślę, że pan wie o czym ja mówię...
  16. Like
    PrzMas otrzymał reputację od RebelianTZepsuł się Ipleo TD editor   
    Pozbądź się szkodliwego dla komputera (i użytkownika) oprogramowania wirusowego - odinstaluj Windows 10.
     
    @RebelianT Nie kuś losu. Mnie już kusi
  17. Like
    PrzMas otrzymał reputację od KreizCzas uniksowy   
    Jak wiadomo SA-MP'owa funkcja gettime (wywołana bez przekazywania do niej argumentów) zwraca czas uniksowy aktualny w danym systemie operacyjnym, jednak bez uwzględnienia strefy czasowej oraz czasu letniego. W niniejszym temacie publikuję funkcje operujące na niniejszym czasie, jedna przelicza podaną datę i godzinę na znacznik (z możliwością odliczenia strefy czasowej oraz czasu letniego):

    a druga znacznik na datę, godzinę oraz dzień tygodnia (wartość 1-7) z uwzględnieniem strefy czasowej oraz czasu letniego:

    Dodatkowo prosta funkcja wyliczająca ilość dni, godzin, minut i sekund z podanej różnicy dwóch znaczników:
     
    [kompletny_kod_źródłowy]

    Najczęściej zadawane pytania (FAQ)
     
    1. Jak zorganizować prosty algorytm czasowej rangi VIP na serwerze z wykorzystaniem znacznika czasu uniksowego?
    Należy zapisać zwrócony przez funkcję gettime() znacznik zwiększony o określony czas:
    new vip_expiry= gettime() +3*86400; // 86400 = 1 [doba/dzień] do bazy danych albo systemu plików.
    Sprawdzanie czy ranga VIP jest nadal aktywna może wyglądać następująco:
    if (vip_expiry != 0) // 0 oznacza, że należy pominąć sprawdzanie rangi VIP { new timenow= gettime(); // posix timestamp if (timenow < vip_expiry) // ranga aktywna { // wyświetlenie czasu do wygaśnięcia VIP-a new d,h,m,s; timediff(vip_expiry-timenow, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Do wygaśnięcia rangi VIP pozostało: %dd, %dg, %dm, %ds.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); } else // ranga nieaktywna { // wyświetlenie informacji dla gracza o wygaśnięciu rangi new d,h,m,s; timediff(timenow-vip_expiry, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygasła: %dd, %dg, %dm, %ds temu.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); // w bazie danych dla pola 'vip_expiry' należy zapisać wartość 0, // aby pominąć przyszłą-zbędną informację o wygaśnięciu VIP-a przy następnym sprawdzaniu } } Zmienna vip_expiry reprezentuje odpowiednią wartość pobraną z bazy danych lub systemu plików.
    2. Jak wyświetlić aktualną datę, godzinę i dzień tygodnia na podstawie znacznika uniksowego?
    main() { new Y,M,D, h,m,s, w= unix2date(gettime(), Y,M,D, h,m,s, TIMEZONE, true); new const wd[][]= { {"poniedzialek"}, {"wtorek"}, {"sroda"}, {"czwartek"}, {"piatek"}, {"sobota"}, {"niedziela"} }; new buff[32]; format(buff, sizeof(buff), "%04d-%02d-%02d %02d:%02d:%02d %s", Y,M,D, h,m,s, wd[w-1]); print(buff); } 3. Jak sprawdzić czy określona data jest zgodna z kalendarzem oraz czasem uniksowym?
    Dla przykładu można utworzyć funkcję isvaliddate(), która zwróci prawdę (1) dla poprawnej daty:
    stock isvaliddate(Y,M,D, h=0,m=0,s=0) { new ts= date2unix(Y,M,D, h,m,s); if (ts < 0) return false; new Y2,M2,D2, h2,m2,s2; unix2date(ts, Y2,M2,D2, h2,m2,s2); return (s2 != s || m2 != m || h2 != h || D2 != D || M2 != M || Y2 != Y)?(false):(true); } Nieprawidłowe daty to: 30 lutego (luty ma najwyżej 29 dni, jeśli jest w roku przestępnym), 32 stycznia (miesiąc ma najwyżej 31 dni), 1 stycznia 2039 roku (limit czasu uniksowego to 19 stycznia 2038 roku o godzinie 03:14:07 dla liczb ze znakiem - signed integer).
    Uwagi ogólne
    Porównywane znaczniki powinny być względem siebie w jednakowej postaci (nie w sensie równe), czyli jeżeli jeden jest ze strefy czasowej GMT +1:00 a drugi GMT +0:00 to należy od pierwszego odjąć jedną godzinę i dopiero wówczas porównywać obydwa znaczniki. Funkcja gettime() celowo zwraca wartość/znacznik bez uwzględniania strefy czasowej i czasu letniego, bowiem w takiej postaci nie zajdą rozbieżności podczas porównań i obliczania różnic, zwłaszcza jeśli chodzi o czas letni. Strefy czasowej i czasu letniego należy używać jedynie podczas wyświetlania danego znacznika przeliczonego do postaci sformatowanej i czytelnej dla człowieka.
    Jeżeli ma być przeliczana (do późniejszych operacji) data (i godzina) podana ręcznie przez użytkownika (sczytana np sscanf-em) to dla funkcji date2unix() należy uwzględnić argumenty timezone oraz auto_dst.
  18. Like
    PrzMas otrzymał reputację od KreizCzas uniksowy   
    Jak wiadomo SA-MP'owa funkcja gettime (wywołana bez przekazywania do niej argumentów) zwraca czas uniksowy aktualny w danym systemie operacyjnym, jednak bez uwzględnienia strefy czasowej oraz czasu letniego. W niniejszym temacie publikuję funkcje operujące na niniejszym czasie, jedna przelicza podaną datę i godzinę na znacznik (z możliwością odliczenia strefy czasowej oraz czasu letniego):

    a druga znacznik na datę, godzinę oraz dzień tygodnia (wartość 1-7) z uwzględnieniem strefy czasowej oraz czasu letniego:

    Dodatkowo prosta funkcja wyliczająca ilość dni, godzin, minut i sekund z podanej różnicy dwóch znaczników:
     
    [kompletny_kod_źródłowy]

    Najczęściej zadawane pytania (FAQ)
     
    1. Jak zorganizować prosty algorytm czasowej rangi VIP na serwerze z wykorzystaniem znacznika czasu uniksowego?
    Należy zapisać zwrócony przez funkcję gettime() znacznik zwiększony o określony czas:
    new vip_expiry= gettime() +3*86400; // 86400 = 1 [doba/dzień] do bazy danych albo systemu plików.
    Sprawdzanie czy ranga VIP jest nadal aktywna może wyglądać następująco:
    if (vip_expiry != 0) // 0 oznacza, że należy pominąć sprawdzanie rangi VIP { new timenow= gettime(); // posix timestamp if (timenow < vip_expiry) // ranga aktywna { // wyświetlenie czasu do wygaśnięcia VIP-a new d,h,m,s; timediff(vip_expiry-timenow, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Do wygaśnięcia rangi VIP pozostało: %dd, %dg, %dm, %ds.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); } else // ranga nieaktywna { // wyświetlenie informacji dla gracza o wygaśnięciu rangi new d,h,m,s; timediff(timenow-vip_expiry, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygasła: %dd, %dg, %dm, %ds temu.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); // w bazie danych dla pola 'vip_expiry' należy zapisać wartość 0, // aby pominąć przyszłą-zbędną informację o wygaśnięciu VIP-a przy następnym sprawdzaniu } } Zmienna vip_expiry reprezentuje odpowiednią wartość pobraną z bazy danych lub systemu plików.
    2. Jak wyświetlić aktualną datę, godzinę i dzień tygodnia na podstawie znacznika uniksowego?
    main() { new Y,M,D, h,m,s, w= unix2date(gettime(), Y,M,D, h,m,s, TIMEZONE, true); new const wd[][]= { {"poniedzialek"}, {"wtorek"}, {"sroda"}, {"czwartek"}, {"piatek"}, {"sobota"}, {"niedziela"} }; new buff[32]; format(buff, sizeof(buff), "%04d-%02d-%02d %02d:%02d:%02d %s", Y,M,D, h,m,s, wd[w-1]); print(buff); } 3. Jak sprawdzić czy określona data jest zgodna z kalendarzem oraz czasem uniksowym?
    Dla przykładu można utworzyć funkcję isvaliddate(), która zwróci prawdę (1) dla poprawnej daty:
    stock isvaliddate(Y,M,D, h=0,m=0,s=0) { new ts= date2unix(Y,M,D, h,m,s); if (ts < 0) return false; new Y2,M2,D2, h2,m2,s2; unix2date(ts, Y2,M2,D2, h2,m2,s2); return (s2 != s || m2 != m || h2 != h || D2 != D || M2 != M || Y2 != Y)?(false):(true); } Nieprawidłowe daty to: 30 lutego (luty ma najwyżej 29 dni, jeśli jest w roku przestępnym), 32 stycznia (miesiąc ma najwyżej 31 dni), 1 stycznia 2039 roku (limit czasu uniksowego to 19 stycznia 2038 roku o godzinie 03:14:07 dla liczb ze znakiem - signed integer).
    Uwagi ogólne
    Porównywane znaczniki powinny być względem siebie w jednakowej postaci (nie w sensie równe), czyli jeżeli jeden jest ze strefy czasowej GMT +1:00 a drugi GMT +0:00 to należy od pierwszego odjąć jedną godzinę i dopiero wówczas porównywać obydwa znaczniki. Funkcja gettime() celowo zwraca wartość/znacznik bez uwzględniania strefy czasowej i czasu letniego, bowiem w takiej postaci nie zajdą rozbieżności podczas porównań i obliczania różnic, zwłaszcza jeśli chodzi o czas letni. Strefy czasowej i czasu letniego należy używać jedynie podczas wyświetlania danego znacznika przeliczonego do postaci sformatowanej i czytelnej dla człowieka.
    Jeżeli ma być przeliczana (do późniejszych operacji) data (i godzina) podana ręcznie przez użytkownika (sczytana np sscanf-em) to dla funkcji date2unix() należy uwzględnić argumenty timezone oraz auto_dst.
  19. Like
    PrzMas otrzymał reputację od KreizCzas uniksowy   
    Jak wiadomo SA-MP'owa funkcja gettime (wywołana bez przekazywania do niej argumentów) zwraca czas uniksowy aktualny w danym systemie operacyjnym, jednak bez uwzględnienia strefy czasowej oraz czasu letniego. W niniejszym temacie publikuję funkcje operujące na niniejszym czasie, jedna przelicza podaną datę i godzinę na znacznik (z możliwością odliczenia strefy czasowej oraz czasu letniego):

    a druga znacznik na datę, godzinę oraz dzień tygodnia (wartość 1-7) z uwzględnieniem strefy czasowej oraz czasu letniego:

    Dodatkowo prosta funkcja wyliczająca ilość dni, godzin, minut i sekund z podanej różnicy dwóch znaczników:
     
    [kompletny_kod_źródłowy]

    Najczęściej zadawane pytania (FAQ)
     
    1. Jak zorganizować prosty algorytm czasowej rangi VIP na serwerze z wykorzystaniem znacznika czasu uniksowego?
    Należy zapisać zwrócony przez funkcję gettime() znacznik zwiększony o określony czas:
    new vip_expiry= gettime() +3*86400; // 86400 = 1 [doba/dzień] do bazy danych albo systemu plików.
    Sprawdzanie czy ranga VIP jest nadal aktywna może wyglądać następująco:
    if (vip_expiry != 0) // 0 oznacza, że należy pominąć sprawdzanie rangi VIP { new timenow= gettime(); // posix timestamp if (timenow < vip_expiry) // ranga aktywna { // wyświetlenie czasu do wygaśnięcia VIP-a new d,h,m,s; timediff(vip_expiry-timenow, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Do wygaśnięcia rangi VIP pozostało: %dd, %dg, %dm, %ds.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); } else // ranga nieaktywna { // wyświetlenie informacji dla gracza o wygaśnięciu rangi new d,h,m,s; timediff(timenow-vip_expiry, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygasła: %dd, %dg, %dm, %ds temu.", d,h,m,s); SendClientMessage(playerid, 0xffffffff, msg); // w bazie danych dla pola 'vip_expiry' należy zapisać wartość 0, // aby pominąć przyszłą-zbędną informację o wygaśnięciu VIP-a przy następnym sprawdzaniu } } Zmienna vip_expiry reprezentuje odpowiednią wartość pobraną z bazy danych lub systemu plików.
    2. Jak wyświetlić aktualną datę, godzinę i dzień tygodnia na podstawie znacznika uniksowego?
    main() { new Y,M,D, h,m,s, w= unix2date(gettime(), Y,M,D, h,m,s, TIMEZONE, true); new const wd[][]= { {"poniedzialek"}, {"wtorek"}, {"sroda"}, {"czwartek"}, {"piatek"}, {"sobota"}, {"niedziela"} }; new buff[32]; format(buff, sizeof(buff), "%04d-%02d-%02d %02d:%02d:%02d %s", Y,M,D, h,m,s, wd[w-1]); print(buff); } 3. Jak sprawdzić czy określona data jest zgodna z kalendarzem oraz czasem uniksowym?
    Dla przykładu można utworzyć funkcję isvaliddate(), która zwróci prawdę (1) dla poprawnej daty:
    stock isvaliddate(Y,M,D, h=0,m=0,s=0) { new ts= date2unix(Y,M,D, h,m,s); if (ts < 0) return false; new Y2,M2,D2, h2,m2,s2; unix2date(ts, Y2,M2,D2, h2,m2,s2); return (s2 != s || m2 != m || h2 != h || D2 != D || M2 != M || Y2 != Y)?(false):(true); } Nieprawidłowe daty to: 30 lutego (luty ma najwyżej 29 dni, jeśli jest w roku przestępnym), 32 stycznia (miesiąc ma najwyżej 31 dni), 1 stycznia 2039 roku (limit czasu uniksowego to 19 stycznia 2038 roku o godzinie 03:14:07 dla liczb ze znakiem - signed integer).
    Uwagi ogólne
    Porównywane znaczniki powinny być względem siebie w jednakowej postaci (nie w sensie równe), czyli jeżeli jeden jest ze strefy czasowej GMT +1:00 a drugi GMT +0:00 to należy od pierwszego odjąć jedną godzinę i dopiero wówczas porównywać obydwa znaczniki. Funkcja gettime() celowo zwraca wartość/znacznik bez uwzględniania strefy czasowej i czasu letniego, bowiem w takiej postaci nie zajdą rozbieżności podczas porównań i obliczania różnic, zwłaszcza jeśli chodzi o czas letni. Strefy czasowej i czasu letniego należy używać jedynie podczas wyświetlania danego znacznika przeliczonego do postaci sformatowanej i czytelnej dla człowieka.
    Jeżeli ma być przeliczana (do późniejszych operacji) data (i godzina) podana ręcznie przez użytkownika (sczytana np sscanf-em) to dla funkcji date2unix() należy uwzględnić argumenty timezone oraz auto_dst.
  20. Like
    PrzMas przyznał reputację dla Sim00n[ROZWIĄZANY]System VIP   
    https://www.youtube.com/watch?v=P9MWYQqXz3Q
  21. Like
    PrzMas otrzymał reputację od The_Crew[ROZWIĄZANY]System VIP   
    [źródło]
    Nie dość, że nie wkleiłeś kodu to jeszcze pytasz o kod? Jeśli to żart... to już przestaje być śmieszne, bo zdarza się coraz częściej w tym dziale.
    Uczenie się pozostawia sentyment do zdobytych doświadczeń, im więcej doświadczeń tym większy sentyment. Trzeba przyznać, że choć twoje pytania są dość precyzyjnie zadane, to jednak świadczą o braku podstawowej wiedzy. Najpierw naucz się czegokolwiek porządnie, a potem (ewentualnie) proś o pomoc, bo póki co nie ma z tobą pola do otwartej dyskusji, a za tydzień powiesz, że masz to w d***e, bo ci się nie chce czegokolwiek pisać (albo nikt ci nie pomaga) - słomiany zapał. Chcesz uchodzić za snoba? Bardzo modna cecha w różnych dziedzinach życia.
    Jak widać styl się zmienił, a reszta po staremu.
  22. Like
    PrzMas otrzymał reputację od The_Crew[ROZWIĄZANY]System VIP   
    [źródło]
    Nie dość, że nie wkleiłeś kodu to jeszcze pytasz o kod? Jeśli to żart... to już przestaje być śmieszne, bo zdarza się coraz częściej w tym dziale.
    Uczenie się pozostawia sentyment do zdobytych doświadczeń, im więcej doświadczeń tym większy sentyment. Trzeba przyznać, że choć twoje pytania są dość precyzyjnie zadane, to jednak świadczą o braku podstawowej wiedzy. Najpierw naucz się czegokolwiek porządnie, a potem (ewentualnie) proś o pomoc, bo póki co nie ma z tobą pola do otwartej dyskusji, a za tydzień powiesz, że masz to w d***e, bo ci się nie chce czegokolwiek pisać (albo nikt ci nie pomaga) - słomiany zapał. Chcesz uchodzić za snoba? Bardzo modna cecha w różnych dziedzinach życia.
    Jak widać styl się zmienił, a reszta po staremu.
  23. Like
    PrzMas otrzymał reputację od Shady.PAWN, a C++   
    W tej książce znalazłem parę słów na temat podobieństwa do języka C, ale o C++ nie pisali. Takie coś jak obiektowość w Pawn nie istnieje, który jest zdecydowanie językiem strukturalnym albo raczej proceduralnym (zdarzeniowym), natomiast nie ma nic wspólnego z programowaniem obiektowym.
    Niedługo w tym dziale będą powstawały tematy typu moja dziewczyna puszcza się z inną albo chciałbym zostać księdzem... czy warto?.
    //DOWN
    SA-MP GDK i C++ pojęciowo i merytorycznie mają tyle wspólnego z działem Programowanie PAWN, co puszczająca się dziewczyna.
  24. Like
    PrzMas otrzymał reputację od RebelianT[PYTANIE] Czym się różni Filterscripts od Gamemode? Kiedy używać Filterscripts?   
    Rozsądnie jest pisać gamemode-a składającego się z zespolonych modułów (filterscript-ów) i skryptu głównego (gamemode-a). Największe znaczenie to ma dla czytelności i porządku w kodzie, a jednocześnie nie trzeba znać całej struktury gamemode-a żeby zmodyfikować w nim np system pojazdów. Jeżeli wszystko jest w jednym pliku gamemode-a to zedytowanie wyłącznie systemu pojazdów staje się kłopotliwe, ponieważ istnieje obawa, że można zepsuć coś innego, toteż trzeba przeanalizować znacznie większą ilość kodu niż mogłoby to być konieczne.
    W związku z powyższym oraz w odpowiedzi na pytanie:
    przy modułowo napisanym gamemode można wyłączyć (unload) na jakiś czas konkretny moduł, ale nie można załadować modułu, którego nie ma na liście w pliku server.cfg w sekcji scriptfiles, jednak podmiana modułu (konkretnego pliku) na ten ze zmodyfikowanym kodem będzie bezskuteczna, bowiem moduł (jego kod) jest ładowany do pamięci z chwilą uruchomienia serwera; w przypadku, gdy administrator stwierdzi, że np system domków działa nieprawidłowo to można zrestartować (reload) określony moduł bez konieczności restartowania całego serwera; callback-i są wywoływane kolejno w filterscript-ach z zachowaniem porządku, określonego w pliku server.cfg; callback-i zachowują się inaczej w filterscript-cie niż w skrypcie głównym (gamemode), dla przykładu jeżeli w filterscript-cie w callback-u OnPlayerCommandText() zostanie zwrócona wartość 0 (false) to nie zostanie on wywołany w kolejnych filterscript-ach i w gamemode, co pozwala na rozbicie również komend na poszczególne moduły, zamiast pozostawiać je w jednym pliku gamemode-a; moduł nie ma dostępu do zmiennych zadeklarowanych w innych modułach (osobna przestrzeń nazw i pamięć) - każdy z nich jest osobnym tworem - dlatego też zostały skonstruowane PVar-y, które są zmiennymi globalnymi dla całego gamemode-a. Idea jest taka, że gamemod zadeklarowany w pliku server.cfg w sekcji gamemode powinien odpowiadać za tryb rozgrywki (DM, TDM, RP, Truck, itp), natomiast filterscript-y (moduły, sekcja scriptfiles) powinny odpowiadać za dodatki do skryptu głównego (np pojazdy, domki, obiekty, radio, itp) lub zawierać kod niezbędny, z którego (globalnie, pośrednio) korzysta skrypt główny i inne moduły (np rejestracja, logowanie i dostęp do danych konta, zabezpieczenia serwera tj anty spam-y/flood-y/cheat-y, itp).
    *** Pojęcie gamemode ma dwa znaczenia, które odnosi się relatywnie (kontekstowo) do:
    skryptu głównego, zadeklarowanego w pliku server.cfg w sekcji gamemode, który to skrypt  w określonym czasie może być aktywny tylko jeden; wszystkich plików serwera tj skryptu głównego, filterscript-ów i niektórych plików include.
      Pliki include zawierają funkcje (kod), które są wstawiane podczas kompilacji do pliku wynikowego. Mogą stanowić bibliotekę różnych przydatnych funkcji (stock-ów) lub też zawierać nagłówki funkcji (natywne) lub callback-ów (forward-owane, publiczne) udostępnianych przez jakiś plugin wraz z niezbędnymi definicjami (define), makrami i innym kodem. To są biblioteki i ich samych nie kompiluje się do postaci kodu maszynowego (amx), stanowią one raczej część środowiska niż konkretny program, jakim jest gamemod. Pliki INC nie dostarczone ze środowiskiem SA-MP lub dostarczone do plugun-a powinno umieszczać się w katalogu include w głównym katalogu serwera, a nie w pawno/include, tak jak to źle robi masa ludziów.
  25. Like
    PrzMas otrzymał reputację od DaGaXeRPobieranie daty i godziny z bazy danych   
    Miło, ale ja to jakiś już czas temu napisałem, a teraz odgrzebałem ze swojego archiwum X, w nawiązaniu do postu @DaGaXeR
    W twoim przypadku wykorzystanie tego znacznika będzie bardzo proste.
    Przydzielenie rangi VIP-a na 3 dni:
    new vipto= gettime() + (3*86400); // tak uzyskaną wartość należy zapisać w bazie jako datę wygaśnięcia usługi new Y,M,D, h,m,s; unix2time(vipto, Y,M,D, h,m,s); new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygaśnie: %02d-%02d-%04d %02d:%02d:%02d.", Y,M,D, h,m,s); Sprawdzanie terminu przydatności do spożycia rangi VIP:
    stock timediff(seconds, &d,&h,&m,&s) { d= seconds; s= d % 60; d -= s; m= d % 3600; d -= m; h= d % 86400; d -= h; m /= 60; h /= 3600; d /= 86400; } if (vipto != 0) // 0 oznacza, że należy pominąć sprawdzanie rangi VIP { new timenow= gettime(); // posix timestamp if (timenow < vipto) // ranga przydatna do spożycia { // wyświetlenie czasu do wygaśnięcia VIP-a new d,h,m,s; timediff(vipto-timenow, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Do wygaśnięcia rangi VIP pozostało: %dd, %dg, %dm, %ds.", d,h,m,s); //albo... //new Y,M,D, h,m,s; unix2date(vipto, Y,M,D, h,m,s); //new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygaśnie: %02d-%02d-%04d %02d:%02d:%02d.", Y,M,D, h,m,s); SendClientMessage(playerid, 0xffffffff, msg); } else // ranga przeterminowana { // wyświetlenie informacji dla gracza o wygaśnięciu rangi new d,h,m,s; timediff(timenow-vipto, d,h,m,s); new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygasła: %dd, %dg, %dm, %ds temu.", d,h,m,s); //albo... //new Y,M,D, h,m,s; unix2date(vipto, Y,M,D, h,m,s); //new msg[144]; format(msg, sizeof(msg), "Ranga VIP wygasła: %02d-%02d-%04d %02d:%02d:%02d.", Y,M,D, h,m,s); SendClientMessage(playerid, 0xffffffff, msg); // w bazie danych dla pola 'vipto' należy zapisać wartość 0, // aby pominąć kolejną informację o wygaśnięciu VIP-a przy następnym sprawdzaniu } } W zasadzie funkcja date2unix() nie jest potrzebna, chyba że chcesz przydzielać rangę VIP graczowi do określonego (przez administratora nadającego rangę) dnia, podawanego (jako string) w poleceniu według określonego formatu np:
    /setvip [id gracza] [data godzina] /setvip 0 10-04-2016 12:00:00 albo można pominąć podawanie godziny, wówczas byłaby ustawiana data (podana przez administratora) i godzina, ale z chwili wywołania polecenia.
     
    Niektórym warto dać gotowca, bo zrobią z niego lepszy użytek niż kopiuj-wklej,
    bo reagują adekwatnie do tego, co się do nich pisze i współpracują.
    Tacy ludzie rokują.
×