IosifR Posted April 15, 2021 Posted April 15, 2021 (edited) Salut sa-mp.ro! Astazi am sa va arat cum sa faceti comanda /hostname ( pentru incepatori.. astept hate de la aia 'avansati'). Cu aceasta comanda puteti schimba numele serverului. Pentru aceasta comanda ma voi folosi de sscanf si zcmd. (https://www103.zippyshare.com/v/Lxj6JFGI/file.html) Citat CMD:hostname(playerid, params[]) { if(PlayerInfo[playerid][pAdmin] >=6) // Daca nu aveti sistem de admin, in loc de asta puneti 'if(IsPlayerAdmin(playerid))' { new string[128], name[64]; // Aici creem un string pentru a trimite textele si 'name', adica numele care il scrie playerul care foloseste comanda. if(sscanf(params, "s[64]", name)) return SCM(playerid,COLOR_GREY, "Folosire: {FFFFFF}/hostname <Nume>"); // Aici ne folosim de sscanf. Daca adminul scrie doar /hostname i va trimite un mesaj cum se foloseste comanda { format(string, sizeof(string), "hostname %s", name); In loc de '%s' va fii numele care a scris adminul. SendRconCommand(string); Aceasta linie trimite comanda catre consola serverului format(string, sizeof(string), "Ai schimbat numele serverului in %s", name); SendClientMessage(playerid,# COLOR_RED1, string); // Trimite mesajul de mai sus ca a schimbat numele serverului } } else return SCM(playerid, COLOR_YELLOW2, AdminOnly); return 1; } La inceput de gamemode puneti Citat #define AdminOnly "{FFFFCC}Eroare: Nu ai acces la aceasta comanda!" #define COLOR_YELLOW2 0xFFFABAFF #define COLOR_RED1 0x80404000 #define COLOR_GREY 0xAFAFAFAA #define SCM SendClientMessage Si Citat #include <zcmd> #include <sscanf> pa <click> Edited April 15, 2021 by IosifR
Trippie Posted April 22, 2021 Posted April 22, 2021 (edited) In primul rand, nu sunt hater, comanda ta este perfect corecta, dar, desi este o comanda asa de simpla, nu stiu de ce te-ai lungit asa de mult cu ea. Este o comanda ce poate fii facuta in 10 randuri, iar string-urile alea de ce sunt asa de mari? Nu cred ca o sa pui tu nume de 64 de caractere la server, si totusi, si daca il pui, de ce string-ul este de 128? I mean, de ce nu ai pus new string[9 + sizeof(name)]? Consumi mult mai putin si in plus, hostname + un spatiu dintre el si numele ocupa 9 caractere, exact de cate ai nevoie. Parerea mea este ca asa este mult mai bine, ocupa si mai putin spatiu si este si mai economic din punct de vedere al procesorului. Corectati-ma daca gresesc. YCMD:hostname(playerid, params[], help) { new serverName[32], string[9+sizeof(serverName)]; if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_YELLOW, AdminOnly); if(sscanf(params, "s[32]", serverName)) return SendClientMessage(playerid, -1, "Syntax: /hostname <Server Name>"); format(string, 9+sizeof(serverName), "hostname %s", serverName); SendRconCommand(string); format(string, 9+sizeof(serverName), "Ai schimbat numele serverului in %s", serverName); SendClientMessage(playerid, -1, string); return 1; } apropo, folosesc YSI Cmd, recomand. (Edit: Nu sunt eu mare scripter, dar lucrurile astea cu marimea string-urilor, cu string-urile locale, globale, etc. tin de optimizare, si daca faci un gamemode de la 0, mai bine te gandesti la lucrurile astea de acum, decat sa ajungi cu gm-ul la 20k linii+ si sa stai cu orele sa cauti prin gm, sa modifici string-uri, etc) Inca un lucru, recomand folosirea mai desa a string-urilor si in general a variabilelor globale. Adica, de ce sa declari inca 2 variabile (string si serverName) cand ai putea sa folosesti alte 2 variabile care sunt deja definite global. Edited April 22, 2021 by Trippie
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now