Nazwa serwera IP serwera Sloty
•••PolskiPartyServer™[PPS]®24/7••• @LiveServer.pl graj.server-pps.com:7777 500 Wejdź
Mumble 1.2 server-pps.com 100 Więcej

strtok

Moderator: Mod-Team

strtok

Postprzez stinger » 4 sie 2013, o 13:23

Robię sobie komendę "Anty Noobs" dla jaj. Wszystko działa, lecz w grze jest SERVER: Unknown command i wszystkie komendy nie działają :) Look at this father.

** Komenda powoduje 'ssanie pały' przez gracza :D Zabija go, i dopóki nie wyłącze to nie ma szans na ucieczkę. Takie jakby zabezpieczenie przed cziterami.
Kod: Zaznacz cały
new konfident[MAX_PLAYERS];

public OnPlayerCommandText(playerid, cmdtext[])
{

       new cmd[128], idx;
   cmd = strtok(cmdtext, idx);

   if(strcmp(cmd, "/smierckonfidentom", true) == 0 & IsPlayerAdmin(playerid))
   {
      
       new tmp[128];
       tmp = strtok(cmdtext, idx);

        if(strlen(tmp) == 0) return SendClientMessage(playerid, -1, "UŻYJ: /smierckonfidentom [ID]");
      for(new x=0; x<MAX_PLAYERS; x++)
      {
        if(IsPlayerConnected(x)) return SendClientMessage(playerid, -1, "Nie znaleziono takiego gracza online.");
        konfident[x] =1;
        SetPlayerHealth(x, 0.0);
        }
        return 1;
    }

public OnPlayerSpawn(playerid)
{
    konfident[playerid] =1;
    return 1;
}


EDIT// Problem z wiadomością Unknown Command rozwiązałem, lecz gdy użyłem tego kodu wszystko działa tylko, że nie zabija gracza ;f

Kod: Zaznacz cały
   new cmd[128], idx;
   cmd = strtok(cmdtext, idx);

   if(strcmp(cmd, "/smierckonfidentom", true) == 0 & IsPlayerAdmin(playerid))
   {
      
       new tmp[128];
       tmp = strtok(cmdtext, idx);

        if(strlen(tmp) == 0) return SendClientMessage(playerid, -1, "{61c101}UŻYJ: {f25757}/smierckonfidentom [ID]");
        SetPlayerHealth(strlen(tmp),0);
        konfident[playerid] =1;
        return 1;
    }

Kod używa: strtok, a_samp.
stinger
User
 
Posty: 641
Dołączył(a): 15 kwi 2012, o 21:46
Lokalizacja: Wrocław
Polubionych : 124 razy
Otrzymał polubień: 160 razy

Re: strtok

Postprzez ubinoob » 4 sie 2013, o 14:31

Pisanie ze zrozumieniem. Według dokumentacji dla funkcji SetPlayerHealth, przyjmuje ona dwa argumenty: ID gracza, życie.
A u ciebie wygląda to tak:

Kod: Zaznacz cały
SetPlayerHealth(strlen(tmp),0);


Próbujesz ustawić 0 życia dla gracza o id takim jaka jest długość tego id (totalny bezsens?).
Funkcja strlen pobiera długość znaków w tekscie (w tym wypadku tmp). Więc jeśli wpiszesz /smierckonfidentom 0 to zginie gracz id 1, jesli /smierckonfidentom 10 to gracz id 2 itd.
Żeby przekonwertować string z liczbami na faktyczny integer należy użyć funkcji strval. Zamieni ona poprawnie ciąg znaków, a nie obliczy ich długość.

Poprawnie:
Kod: Zaznacz cały
SetPlayerHealth(strval(tmp),0);


To:
Kod: Zaznacz cały
if(strlen(tmp) == 0) return SendClientMe...


Ma tutaj dobre zastosowanie. Bo sprawdza długość wpisanego tekstu.
Za ten post autor ubinoob otrzymał polubienie od
stinger(4 sie 2013, o 17:17)
ubinoob
Weteran
 
Posty: 1374
Dołączył(a): 28 kwi 2010, o 20:02
Polubionych : 18 razy
Otrzymał polubień: 455 razy

Re: strtok

Postprzez stinger » 4 sie 2013, o 17:18

Ok, wszystko pięknie dzia. Dzięki :D //lock
stinger
User
 
Posty: 641
Dołączył(a): 15 kwi 2012, o 21:46
Lokalizacja: Wrocław
Polubionych : 124 razy
Otrzymał polubień: 160 razy


Powrót do Pomoc

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość