Întrebarea de a introduce o porecla în loc de id în comenzile sscanf

Introduceți pseudonimul în loc de ID în comenzile [sscanf].

Buna ziua, dragi utilizatori pro-pion. Folosesc sscanf cu procesorul de comandă standard (ZCMD nu se rotește). Trebuie să fac niște comenzi, astfel încât administratorul să nu poată introduce doar ID-ul jucătorului, ci să-și scrie și porecla. Esența problemei este aceasta: să presupunem că există un jucător cu Alex_Brut pe server. Dacă administratorul intră în km / gethere [ID-ul jucătorului], atunci totul funcționează bine. În cazul în care administratorul intră / gethere [porecla] este încă prea mare, jucătorul se mută la administratorul (în acest caz, pur și simplu rulați comanda). Dar dacă introduceți / gethere [Alex] sau / gethere [Alex_Brutsss] sau / gethere [Al] administratorul încă călătorește la Alex_Brut jucător. Asta este, se pare că testul nu funcționează pe conectarea player-ului (IsPlayerConnected), iar dacă nu introduceți de exemplu / gethere Alex, și / gethere Mike (sau alte porecle), verificarea este declanșat. Am consultat cu Vladislav (Deimos) și mi-a spus să citească documentația pentru sscanf, dar nu am găsit această problemă. Iată comanda reală:






altfel dacă (! strcmp (cmd. "/ gethere"))
<
dacă (PlayerInfo # 91; playerid # 93; # 91; pAdmin # 93; <2 ) return SendClientMessage ( playerid. COLOR_ERROR. "Недостаточно прав для использования команды." );
dacă (sscanf (params. "u" params # 91; 0 # 93;)) returnează SendClientMessage (numele jucătorului COLOR_ERROR. "Command / gethere # 91; playerid / PartOfName # 93; ");
dacă (! IsPlayerConnected (params # 91; 0 # 93;)) returnează SendClientMessage (playerul COLOR_ERROR. "Acest jucător este offline offline");
nou Float. X. Float. Y. Float. Z;
GetPlayerPos (playerid, X.Y. Z);
SetPlayerInterior (param # 91; 0 # 93; GetPlayerInterior (playerid));
SetPlayerVirtualWorld (param # 91; 0 # 93;, GetPlayerVirtualWorld (playerid));
dacă (GetPlayerState (param # 91; 0 # 93;) == 2) SetVehiclePos (GetPlayerVehicleID (param # 91; 0 # 93;), X.Y + 4. Z);
altceva SetPlayerPos (params # 91; 0 # 93; X. Y + 2; Z);
retur 1;
>

Ajutor vă rugăm să înțelegeți această problemă.

Încearcă să citești aici, poate ajutor.

Nu am înțeles punctul. Dar tipurile sunt atât de loi de informații, voi scrie.

Tipuri de variabile pentru a obține
i. d - Valori întregi 1 3 6
c - Scrisori și scrisori *
l - Boolean adevărat fals






b - binar 01001. 0b1100
h. x - Hex 1A. 0x23
o - Octal 045 12
n este numărul 42. 0b010. 0xac. 045
f - Fracțional 0,7. - 99,5
g - IEEE Float 0.7. - 99,5. INFINIT. - INFINITĂȚI. NAN. NAN_E
u - Numele jucătorului sau id-ul lui Y_Less. 0
q - Bot nume / id ShopBot. 27
r - Numele jucatorului / id Y_Less. 42

Mesaj de la FanHamMer

Nu am înțeles punctul. Dar tipurile sunt atât de loi de informații, voi scrie.

Tipuri de variabile pentru a obține
i. d - Valori întregi 1 3 6
c - Scrisori și scrisori *
l - Boolean adevărat fals
b - binar 01001. 0b1100
h. x - Hex 1A. 0x23
o - Octal 045 12
n este numărul 42. 0b010. 0xac. 045
f - Fracțional 0,7. - 99,5
g - IEEE Float 0.7. - 99,5. INFINIT. - INFINITĂȚI. NAN. NAN_E
u - Numele jucătorului sau id-ul lui Y_Less. 0
q - Bot nume / id ShopBot. 27
r - Numele jucatorului / id Y_Less. 42

Am explicat totul clar. Dar voi încerca să explic pe scurt: Imaginați-vă că am o porecla - Nick_Name. Dacă intru în / gethere Nick_Name atunci totul funcționează bine. Dacă introduc doar numele (Nick), care va muta și playerul Nick_Name. Rezultatul este că o verificare aici pe conexiunea jucătorului nu funcționează. Și dacă, de exemplu, în loc de numele Nick, scrieți un alt nume începând cu o altă literă, apoi verificarea începe să funcționeze.

Sscanf. return_user (text # 91; # 93;)
noul p_nick # 91; MAX_PLAYER_NAME # 93 ;;
pentru (nou t = strlen (text) - 1; t! = - 1; t -)
comutator (text # 91; T # 93;)
caz "0". '9'. continua;
default:
pentru (noul i; i dacă (! IsPlayerConnected (i)) continuați;
GetPlayerName (i. P_nick; MAX_PLAYER_NAME);
dacă (! strcmp (p_nick .text. true)) returnați i;
>
returnați INVALID_PLAYER_ID;
>
>
>
retur strval (text);
>

Și acum folosiți acest lucru:

altfel dacă (! strcmp (cmd. "/ gethere"))
dacă (PlayerInfo # 91; playerid # 93; # 91; pAdmin # 93; <2 ) return SendClientMessage ( playerid. COLOR_ERROR. "Недостаточно прав для использования команды." );
dacă (sscanf (params. "k"params" # 91; 0 # 93;)) returnează SendClientMessage (numele jucătorului COLOR_ERROR. "Command / gethere # 91; playerid / PartOfName # 93; ");
dacă (! IsPlayerConnected (params # 91; 0 # 93;)) returnează SendClientMessage (playerul COLOR_ERROR. "Acest jucător este offline offline");
nou Float. X. Float. Y. Float. Z;
GetPlayerPos (playerid, X.Y. Z);
SetPlayerInterior (param # 91; 0 # 93; GetPlayerInterior (playerid));
SetPlayerVirtualWorld (param # 91; 0 # 93;, GetPlayerVirtualWorld (playerid));
dacă (GetPlayerState (param # 91; 0 # 93;) == 2) SetVehiclePos (GetPlayerVehicleID (param # 91; 0 # 93;), X.Y + 4. Z);
altceva SetPlayerPos (params # 91; 0 # 93; X. Y + 2; Z);
retur 1;
>

Mesaj de la Wise

Am incercat in loc de U sa folosesc R oricum acelasi bug.

"u" caută toți jucătorii și roboții.
"r" caută numai jucători, sărind roboții
"q" caută numai printre roboți.
În general, aceasta activează verificări diferite într-o buclă care verifică jucătorii

Puteți să mă contactați în mesaje private ale acestui grup

Este cunoscut faptul că ideile costă câte 0.8333 de cenți fiecare (pe baza unui preț de piață de 10 cenți per duzină).
Ideile mari sunt pline, nu sunt cerute.
Impletirea unei idei intr-un joc terminat necesita o multime de munca,
talent, răbdare și creativitate, să nu mai vorbim de costurile banilor, timpului și resurselor.
Pentru a sugera o idee este simplă, pentru a realiza - aceasta este problema

S te P avlina







Trimiteți-le prietenilor: