Skocz do zawartości

Rekomendowane odpowiedzi

Witam. Przeglądałem różne tematy na forum i natknąłem się na ciekawe rzeczy które jako początkujący stosuje lecz praktycznie nic o nich nie wiem. A więc

1.Jaki jest najlepszy system KOMEND ( nie licząc tego stockowego if(strcmp... ) [było plików .. wiem! moja pomyłka]

2.Co lepiej uzywać do komend z jednym argumentem np ( /cos [iD] )

sscanfa? isnull(params)? isnull(cmdtext) ? strtok? if(!strlen ...

2.1 są jeszcze jakies inne rzeczy tego typu?

2.2 które z tych funkcji jest najoptymalniejsze ?

2.3 do wiecej niz 1 argumentu lepiej uzywac sscanfa czy czego? (przyklad?) i co wtedy byłoby bardziej optymalne

3. czym rózni się params od cmdtext i za co odpowiada ta funkcja?

3.1 jak to można zastosowac?

3.2 .te "params" i "cmdtext" to jakaś tablica czy cos?

3.3 w przypadku np takiej komendy:

cmd:cos(pid,params[])
{
format(params,sizeof(params), " cos %s",params);
SendClientMessage(pid,0xff9900,params)
// dalszy kod
mozna tak uzyc params?

3.4 gdy uzywamy sscanfa do komendy np;

cmd:cos(...,params)
{
new opis[30];
if(sscanf(params, "s[30]", opis)) return SendClientMe....
byłaby róznica gdybyśmy zastosowali cmdtext?

3.5 params do liczb? cmdtext jako tekst?

p.s wiem ze pytania są zadawane jak od dziecka no niestety.. lecz tak najlepiej to zrozumiem ..

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Strcmp to nie system plików. Ale najlepszym systemem plików jest SQLite. Nie wymaga dodatkowego serwera(bazy danych), tworzy jedynie jeden plik z tablicami tak jak w mysql i łatwo jest go zmienić na mysql, dodatkowo jest lepszy znacznie od tych wszystkich plików ini.

2.Wedlug mnie najlepiej w każdej komendzie użyć sscanfa. :)

3. Params i cmdtext to dwie różne rzeczy. Params to parametry po komendzie w zcmd, a cmdtext to text wpisanej komendy w podstawowym systemie komend sampa.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
3. Params i cmdtext to dwie różne rzeczy. Params to parametry po komendzie w zcmd, a cmdtext to text wpisanej komendy w podstawowym systemie komend sampa.

 

 

@UP  często widzę ze w ZCMD używane jest róznież cmdtext i tez to dziala?

 

 

 

sry moja pomyłka ...

1.Jaki jest najlepszy system KOMEND ( nie licząc tego stockowego if(strcmp... )

 

 

 

 

p.s liczę na odpowiedzi od większej ilości osób by móc wywnioskować jak się tego używac :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1. Nie używam żadnego, ale najpewniej ten najwygodniejszy w użyciu - posługuję się strcmp() i strtok(), w razie potrzeby :D

2. argument 'cmdtext' przechowuje wszystko co gracz napisał po '/', czyli komendę bez '/' + parametry

    rozumiem, że pytasz o sprawdzanie czy gracz wpisał samą komendę z parametrami czy bez;

    można to sprawdzać wycinając sobie kolejno parametry za pomocą funkcji strtok i sprawdzając czy kolejny parametr został podany;

    warunek sprawdzajacy czy 'cmdtext' albo jest pusty nie będzie miał większego sensu;

    o optymalność mógłbyś się martwić gdyby ktoś postanowił przeprowadzić atak na twoim serwerze typu cmd-flood;

3. argument 'params' przechowuje same parametry oddzielone spacjami, a 'cmdtext' ma jeszcze na początku komendę, ale bez '/', dlatego potrzebne jest dokonanie operacji wycinania tych parametrów z ciągu tekstowego 'params' - tej operacji dokonuje właśnie sscanf, ale można też posłużyć się funkcją strtok()

 

Takiej struktury można używać mając zaimplementowany odpowiedni system komend:

cmd: polecenie(playerid, params[])
{
  // operacje

  return 1;
}

A to jest wbudowany callback, wywoływany gdy gracz wpisze jakąkolwiek komendę, ale gdy nie mamy zaimplementowanego żadnego systemu komend:

public OnPlayerCommandText(playerid, cmdtext[])
{
  // operacje

  return 1;
}

'cmdtext' czy 'params' - obydwa te argumenty są tablicami, przeznaczonymi do przechowywania ciągów tekstowych (liter).

Każda litera jest reprezentowana przez jakąś wartość liczbową np '0' (jako znak, tekst) będzie miało wartość 48, a litera 'a' (jako znak, tekst) to będzie 97 - poczytaj np o ASCII.

Tablice mogą przechowywać wiele liczb, a skoro litery mają swoje reprezentacje liczbowe to w tablicach można przechowywać ciągi tekstowe (ciągi liter).

Każda tablica ma pewną ilość nawiasów kwadratowych, odpowiadajacą jej ilości wymiarów. Tablice mogą mieć maksymalnie 3 wymiary. Każdy wymair ma określony rozmiar.

new tablica[];

Powyższa deklaracja tablicy jest nieprawidłowa, ponieważ nie opisano jej rozmiaru. Poniżej jest prawidłowy kod:

new tablica[10];

Powyższa zmienna tablicowa może pomieścić maksymalnie 10 liczb (indeksy od 0 do 9). Każda komórka takij tablicy będzie miała wartość 0, dopóki nie zostanie zmodyfikowana.

 

'cmdtext' czy 'params' nie mają podanej wartości, ponieważ są tablicami o nieoznaczonym rozmiarze - są przekazane jako argument, dlatego nie muszą mieć określonego rozmiaru.

Jest pewien wyjątek jeśli chodzi o deklarowanie tablic bez podawania ich rozmiaru, a mianowicie trzeba określić ich zawartość:

new tablica[]= "jakiś tekst";

Powyższa zmienna tablicowa będzie miała rozmiar 11 komórek (liczb typu integer).
Ta sama tablica będzie miała taką sama zawartość, gdy zadeklarujemy ją w poniżej przedstawiony sposób:

new tablica[]= {'j','a','k','i','ś',' ','t','e','k','s','t'};

Jeżeli chcemy zadeklarować tablicę, niekoniecznie tektową, ale np tablicę zmiennych graczy, których domyślna wartość wynosiłaby 1 dla każdego gracza to można zrobić to w następujacy sposób:

new PlayerData[MAX_PLAYERS]= {1, ...};

Każda komórka tablicy będzie miała wartość 1, dopóki nie zostanie zmieniona.

Edytowane przez PrzMas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

dobrze zrozumialem ze np w takiej komendzie

cmd:cos(pid,params[])
{

format(params,params+20, " ja bardzo: %s",params);
SendClientMessage(pid,0xff9900,params)
// dalszy kod

i wpisaniu  /cos lubieplacki
 

params zamienia się na 'lubieplacki'  -  11 znaków

w format zamiast sizeof(params) trzeba zastosowac tak jak ja params+20

poniewaz params ma wartosc jakby 11 znaków i gdy uzyjemy tego w sposób sizeof(params) mogłoby np.

wyświelić nam

"ja bardzo:lubi" ?

czyli uciąć tekst ,zamiast

"ja bardzo:lubieplacki"?

i pytanie czesc 2:

można tak zastowac ten params:

format(params,params+20, " ja bardzo: %s",params);

?

 

czy lepiej zamienic to na np;

new str[30];
format(str,sizeof(str),... dalszy kod ); 

??

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

2.Co lepiej uzywać do komend z jednym argumentem np ( /cos [iD] )
Można użyć sscanf, ale równie dobrze sprawdzi się sposób z 'isnull' (jeśli masz utworzoną taką funkcję) lub też ręcznie to sprawdzisz. Co do wydajności, to sposób z 'isnull' jest prawdopodobnie szybszy, ale zastanów się, czy przewaga mniej niż 1ms na użyciu komendy raz na 'X' minut ma znaczenie. Wg mnie nie, dlatego gdybym miał Ci doradzić, powiedziałbym tak - rób jak Ci wygodniej, bo w przypadku komend to bez najmniejszego znaczenia.

1.Jaki jest najlepszy system KOMEND ( nie licząc tego stockowego if(strcmp... )
Osobiście lubiłem posługiwać się ZCMD. Prosty, łatwy w obsłudze system dający możliwość zachowania porządku w kodzie. Może i są wydajniejsze systemy (nie wiem, dawno nie sprawdzałem), ale podobnie jak w przypadku wcześniejszego pytania różnica mniej niż 1 ms na komendzie nie robi na mnie wrażenia. 
 

2.3 do wiecej niz 1 argumentu lepiej uzywac sscanfa czy czego? (przyklad?) i co wtedy byłoby bardziej optymalne
Tu już użył bym sscanf'a. Z tego co pamiętam, jest wydajniejszy od strtok'a i przyjaźniejszy w użyciu niż tworzenie własnego kodu do podziału całej zbitki tekstu, jaką otrzymujesz w tablicy komendy.

3. czym rózni się params od cmdtext i za co odpowiada ta funkcja?
KOMPLETNIE NICZYM!!! Wiem, że tu koledzy wyżej udowadniali, że to zupełnie co innego i po części mają rację, ale domyślam się, że Twoje pytanie dotyczy czego innego. Wnioskuję to po tym zdaniu

@UP  często widzę ze w ZCMD używane jest róznież cmdtext i tez to dziala?

Zapewne chodzi Ci o takie coś:
CMD:komenda(playerid, cmdtext) { .. }
CMD:komenda2(playerid, params) { .. }
Nie ma tu kompletnie żadnej różnicy w zachowaniu kodu. Zarówno cmdtext jak i params to po prostu nazwa tablicy, w której przechowywane są parametry przekazane przez gracza. Równie dobrze możesz zrobić taką komendę:
CMD:komenda2(playerid, wspanialeParametry) { ... }
i w bloku komendy posługiwać się tablicą o nazwie 'wspanialeParametry' zamiast cmdtext czy params.

3.3 w przypadku np takiej komendy:

cmd:cos(pid,params[])
{
format(params,sizeof(params), " cos %s",params);
SendClientMessage(pid,0xff9900,params)
// dalszy kod

mozna tak uzyc params?

Teoretycznie tak, praktycznie nie. Tak jak wcześniej powiedziano taki zapis tablicy "params[]" powoduje, że jej wielkość dopasowuje się do długości tekstu przekazanego w parametrze komendy. Np. w parametrze masz tekst "AleFajnie" wtedy params można by zapisać w taki sposób "params[9]" (bo mamy 9 znaków w parametrze). Ale jak wiesz, tablice w pawn nie są dynamiczne, więc jeśli na początku tablica params ma rozmiar 9 to będzie go miała aż do końca wykonywania kodu. I np. takie użycie:

format(params, sizeof(params), "Parametr komendy to: %s", params);

nie zostanie oznaczone jako błąd, ale tekst który otrzymasz w konsoli czy na czacie będzie brzmiał:

Parametr

Tylko 9 znaków (razem ze spacją, bo akurat ona jest 9'ta), taki jest rozmiar tablicy 'params' do której jest zapisywany i nic tego nie zmieni.

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak ktoś jest pedantem albo wie po co to robi to niech tego używa, ale jakiegoś skoku wydajności od tego nie będzie ani w szczególności nie pomniejsza to znacznie zużycia pamięci RAM przez gamemod.

CMD: cos(pid, params[])
{

format(params, params+20, " ja bardzo: %s",params);
SendClientMessage(pid,0xff9900,params)
// dalszy kod
}

Argument 'cmdtext' albo 'params' zawierają wartości tylko do odczytu - lepiej nie próbować ich nadpisywać ani modyfikować.

 

Nawet jeśli chcesz coś dopisać do zmiennej typu tablicowego (do ciągu tektowego) to możesz użyć funkcji strcat():

new tekst[12+1];
format(tekst, sizeof(tekst), "lubię ");
strcat(tekst, "placki");
printf("tekst: %s", tekst);

Osobiście wolę unikać użycia funkcji format() w takich przypadkach jak powyżej. Można zrobić w ten sposób:

new tekst[12+1];
strcat(tekst, "lubię ");
strcat(tekst, "placki");
printf("tekst: %s", tekst);

ponieważ zmienna tekst zaraz po utworzeniu (przed zmodyfikowaniem) jest wypełniona zerami, czyli jest pusta, więc można dopisać do niej jakiś ciąg tekstowy.

Funkcja format wykonuje pewne dodatkowe czynności, ponieważ szuka w tekście tych procentów, więc wykonywane jest więcej kodu, a strcat służy jedynie do doklejania tekstu do już istniejącego.

strcat działa w ten sposób, że wyszukuje w źródłowej tablicy komórki o wartości zero i od niej zaczyna dopisywanie ciągu tekstowego, który ma zostać doklejony, a na końcu sklejonych dwóch tekstów stawia zero. Tą wiedzę można wykorzystać jeżeli byśmy chcieli nadpisać pewną zmienną nowym tekstem to wtedy ustawiamy wartość pierwszej komórki na zero i wykonujemy strcat.

new tekst[12+1];
strcat(tekst, "lubię ");
tekst[0]= 0;
strcat(tekst, "placki");
printf("tekst: %s", tekst);

Zmienna 'tekst' będzie zawierała jedynie wyraz "placki".

Edytowane przez PrzMas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

..., ale jakiegoś skoku wydajności od tego nie będzie ...

ale jakis skok rozumiem jest? bynajmniej tak zrozumialem

 

 

edit zrobilem test pomiedzy format a strcat:

	new timeLoad = GetTickCount();
	
	new cmdtext[10] = "/salonfs";
	new ctinfo[40];

	for(new y=0; y<4; y++){
	for(new x=0; x<25555; x++){
		format(ctinfo,sizeof(ctinfo),"Witaj w %s",cmdtext);
		SendClientMessage(x,C_INFO,ctinfo);
	}

	printf("format %d.", (GetTickCount()-timeLoad));

	timeLoad = GetTickCount();
	
	for(new x=0; x<25555; x++){
		strcat(ctinfo,"Witaj w ");
		strcat(ctinfo,cmdtext);
		SendClientMessage(x,C_INFO,ctinfo);
		ctinfo = "";
	}

	printf("strcat %d.\n", (GetTickCount()-timeLoad));

wynik:

[22:29:35] format 28.
[22:29:35] strcat 31.

[22:29:35] format 59.
[22:29:35] strcat 28.

[22:29:35] format 58.
[22:29:35] strcat 32.

[22:29:35] format 60.
[22:29:35] strcat 29.

 jest te załóżmy 30ms szybszy strcat ( tylko zawsze za pierwszym razem wolniejszy nwm czemu, moze wina kodu) w pętli 25555..

a gdyby te 30/25555

to wyjdzie 0,00117

na jedno użycie..

 

i teraz pytanie czy to robi aż taką dużą róznice przy jednokrotnym użyciu (chodzi o brak pętli)

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Spójrz na próg wykrywalności tej różnicy pomiędzy format a strcat, czy jest on zbliżony do normalnych warunków, tzn. częstość wywołań jednej z tych funkcji nie wynosi przecież w normalnych warunkach 25 tys. razy na sekundę, tak więc jeśli ktoś ma fioła na tym punkcie to może się tym przejmować, a tak to należy korzystać jak komu wygodniej, jak kto chce.

Byćmoże przy obciążeniu maszyny innymi zadaniami wykonywanymi jednocześnie te czasy byłyby inne, bardziej rozbieżne, powodowały by większe zdziwienie, ponieważ nie można by wyciągnąć z nich jakiegoś miarodajnego wyniku - raz wyszłoby tak, a następnym razem inaczej - to też należy przyjąć, że najlepiej nie zajmować niepotrzebnie czasu procesora, chyba że można sobie na to pozwolić.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Teoretycznie jak masz folder 'pawno' to w nim jest plik 'settings.ini', a w tym pliku pola, które można ustawić następująco:

[General]
FileAssoc=0
[Display]
WindowMax=1
WindowX=437
WindowY=253
WindowW=790
WindowH=485
Splitter=339
Font_Name=Courier New
Font_Size=10
ShowFuncList=1
[RunOpts]
CopyDir=\
ExeFile=pawncc.exe
Params=-d3 -O0 -v1

Teoretycznie to powinno działać, a praktycznie różnie to bywa, a u mnie edytor Pawno zachowuje się jakby w ogóle nie widział parametrów kompilacji i przyjmował jakieś swoje domyślne, dlatego z edytora Pawno w ogóle nie korzystam, ale może akurat tobie zadziała jak trzeba.

 

W załączniku jest obrazek jak mniej/więcej powinno wyglądać okno informacji kompilatora.

Edytowane przez PrzMas

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

mam tylko

Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase

p.s a w notepad++ gdzies to tez wpisac czy sam on to pobiera z tego pliku?? ( wiecej pawno folderow nie mam )

wkleiłem to do ongamemodeinit
 

new buf[10];
    fread(File:123, buf);

i wyszlo:
 

[01:49:42] [debug] Server crashed while executing bare.amx
[01:49:42] [debug] AMX backtrace:
[01:49:42] [debug] #0 native fread () from samp-server.exe
[01:49:42] [debug] #1 00009f0c in public SSCANF_OnGameModeInit () from bare.amx
[01:49:42] [debug] #2 00000924 in public zcmd_OnGameModeInit () from bare.amx
[01:49:42] [debug] #3 native CallLocalFunction () from samp-server.exe
[01:49:42] [debug] #4 00000124 in public OnGameModeInit () from bare.amx
[01:49:42] [debug] Native backtrace:
[01:49:42] [debug] #0 77cb2322 in ?? () from C:\Windows\SysWOW64\ntdll.dll
[01:49:42] [debug] #1 004972e0 in ?? () from samp-server.exe
[01:49:42] [debug] #2 00497910 in ?? () from samp-server.exe
[01:49:42] [debug] #3 00404f44 in ?? () from samp-server.exe
[01:49:42] [debug] #4 669f233b in ?? () from C:\Windows\system32\MSVCR100.dll
[01:49:42] [debug] #5 004057e0 in ?? () from samp-server.exe
[01:49:42] [debug] #6 004010b6 in ?? () from samp-server.exe
[01:49:42] [debug] #7 670662ca in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #8 67068b28 in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #9 670609c7 in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #10 6706631a in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #11 66cc51b9 in ?? () from plugins\streamer.DLL
[01:49:42] [debug] #12 0047441e in ?? () from samp-server.exe
[01:49:42] [debug] #13 004010b6 in ?? () from samp-server.exe
[01:49:42] [debug] #14 670662ca in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #15 67068b28 in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #16 670609c7 in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #17 6706631a in ?? () from plugins\crashdetect.DLL
[01:49:42] [debug] #18 66cc51b9 in ?? () from plugins\streamer.DLL
[01:49:42] [debug] #19 0046f504 in ?? () from samp-server.exe
[01:49:42] [debug] #20 65646f6d in ?? () from samp-server.exe
[01:49:42] [debug] #21 61622f73 in ?? () from samp-server.exe
[01:49:42] [debug] #22 612e6572 in ?? () from samp-server.exe

lecz czasami nie powinno podac linijki gdzie ten blad jest? czy jak te -d3 dziala?

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Chcialbym stworzyc anty money hack .. Przeglądając poradniki natknąłem się na takie coś:

To bezpieczny anty cheat na pieniądze. Nigdy się nie myli. A taki głupi cziter myśli że ma tą kase a jej nie ma ;).
 

#define GetPlayerMoney(%1) GetPVarInt(%1,"Money")
#define SetPlayerMoney(%1,%2) SetPVarInt(%1,"Money",GetPVarInt(%1,"Money")+%2);ResetPlayerMoney(%1);GivePlayerMoney(%1,%2)
Na góre kodu idzie.

 

 

@Damianu o ile się założysz że się myli ??

np. po śmierci, gdy wejdziemy do taksówki itd. dlatego anty money cheat nie powinien być aż tak prosty

i pytanie... czy mozna takie zabezpieczenie obejsc? 
drugi cytat (by:Mr_Auto) twierdzi że można lecz ja nie rozumiem tego ...  "po śmierci, gdy wejdziemy do taksówki"

 

 

 

i "anty money cheat nie powinien być aż tak prosty" to jak stworzyc bardziej zaawansowany? czym się kierowac?

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

 

a w przypadku zmiennych/tablic tez?

 

 

@edit:

co jest szybsze

foreach

czy

if(new x; x != GetMaxPlayers(); x++) 

 

Samp jest w stanie Tworzyć dane głównie po stronie serwera i przesyłać je jedynie do gracza za pomocą edycji wbudowanych funkcji GTA. Zmienne i tablice są po stronie serwera, gracz może edytować jedynie dane z wbudowanych funkcji GTA.

Podobno szybsze jest foreach, jednak ja z niego nie korzystam bo słyszałem o jakichś błędach gdy się tego za dużo nawstawia do skryptu.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

da się jakoś usunąć te informacje od /rcon logowania?

Niestety nie, ale przydałoby się.

 

OnRconLoginAttempt "this callback does not handle returns", czyli niezależnie czy podamy 'return 0' czy 'return 1' nie wpływa to na działanie tego callback-a.

Piszę o tym, ponieważ gdyby zwrócić zero np w OnplayerCommandText to na czacie pokaże się komunikat serwerowy "Unknown command", natomiast nie ma to zastosowania dla rcon.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mam dla Ciebie propozycję. Jeżeli nie masz pewności co jakaś funkcja robi najpierw wygoogluj, a potem sprawdz to za pomocą printa. Na przykład:

public OnPlayerUpdate(playerid)
{
if (GetTickCount()%2==0) 
{
printf("1, %d", GetTickCount()%2);
return 1;
}else{
printf("0, %d", GetTickCount()%2);
return 0;
}
}

Miłej męczarni :D.

A tak szczerze to sam nie wiem co to ma na celu. Może to jakieś zabezpieczenie jest? Nie mam pojęcia.

Edytowane przez Erkom96

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Podczas przeglądania pewniej mapy natknąłem się na ten kod w OnPlayerUpdate

if (GetTickCount()%2==0) return 1;

i teraz pytanie: co on wykonuje i czy mozna go uzyc w innym callbacku nic OnPlayerUpdate?

% (modulo) jest resztą z dzielenia. GetTickCount odlicza czas od startu serwera w milisekundach. OnPlayerUpdate wykonuje się bardzo często.

W ty kodzie chodzi o to, żeby wykonywał się 2x rzadziej : )

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A gdy wkleje to do timra powtarzajacego zie co sekunde to zadzialaloby? Czy timer za wolno by sie powtarzal? Mogl bym sprawdzic ale komp mi sie popsol ;/ a info na przyszlosc na pewno sie przyda

Return Values:
0 - Update from this player will not be replicated to other clients.
1 - Indicates that this update can be processed normally and sent to other players.

Działa to na tej zasadzie, że gdy czas jest podzielny bez reszty przez 2, to serwer wykonuje tylko wtedy ten callback.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

co lepiej zastosowac do petli for ktora wykonuje sie 200 razy ( i<200 i++ )   chodzi o optymalnosc :D

       switch(i){
            case 5..22,32..66,88..122: continue;
        }
        if ((i >= 5 && i <= 22) || (i >= 32 && i <= 66) ||  (i >= 88 && i <= 122)) continue;

      edit: i czy są jeszcze optymalniejsze mozliwosci

Edytowane przez O Jezu Jakie Fajne

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×