Jump to content

khain.dev

Membru
  • Posts

    646
  • Joined

  • Last visited

  • Days Won

    50

khain.dev last won the day on February 2

khain.dev had the most liked content!

About khain.dev

  • Birthday 01/19/2000

Profile Information

  • Sex
    Masculin
  • Interests
    Programming
  • In-game Name
    khain.dev
  • Level of knowledge
    Experimentat

Contact Methods

Recent Profile Visitors

5,310 profile views

khain.dev's Achievements

Experienced

Experienced (11/14)

  • Dedicated Rare
  • Very Popular Rare
  • First Post
  • Collaborator
  • Posting Machine Rare

Recent Badges

165

Reputation

1

Community Answers

  1. Este posibil să estimezi capacitatea de rezistență sa îi spun așa ce ține de playeri pe server. La o deschidere de server unde te aștepți că o să se conecteze în același timp +200 playeri, atunci poti face un DDos test asupra serverului tău inainte să il deschizi, practic printr-un test ddos asupra serverului poti vedea daca la deschidere o sa reziste sau nu în momentul unor conectari multiple. O altă metodă la care mulți ajung pentru a testa funcitonalitatea bună a GM-ului este adăugarea de boti fizici pe server, după cum știm un bot față de un player real folosește mai multe resurse ale serverului, respectiv poti adăuga un minim de 300 playeri și daca rezistă atât gm-ul cât și serverul, atunci e bine. Revenind la mentiunea ta, este greu sa estimezi cat de bine o sa tina server-ul tau la solicitari mari, totusi metodele mentionate mai sus simuleaza un test asupra functionalității optime al gm-ului și permite să vezi dacă poate rezista la solicitări mari sau nu.
  2. Nu va mai pierdeți ambii timpul cu acest subiect, în caz contrar, fratele @-=[Vyorel]=- vă rezolvă rapid
  3. Fiecare are dreptul de a folosi acea metodă pe care o consideră cea mai bună.
  4. Recomand să te familiarizezi cu acest wiki - https://www.open.mp/docs/tutorials/stringmanipulation. Rezum acest wiki Format se folosește pentru a gestiona adăugarea incrementală de texte în buffer, nu doar pentru a măsura lungimea șirului, spre deosebire de strlen.
  5. Salut! format nu returnează o valoare în codul scris de mine, ci doar actualizează buffer-ul de șiruri de caractere pe care îl primește ca parametru, adică, arăt lungimea totală a șirului len care este actualizată cu numărul de caractere adăugate de fiecare dată când format este apelată.
  6. Dar iarăși, dacă vrei sa afișezi un Dialog pentru fiecare player care solicita aceasta comanda, nu este rentabil din punct de vedere a utilizării memoriei, la un online +500 o sa ai putine probleme. Din acest motiv, majoritatea folosesc un singur dialog.
  7. Pai, dacă luăm în calcul ce ai zis, putem face puțin diferit codul CMD:players(playerid, params[]) { new string[128 * MAX_PLAYERS], playerName[24], playerScore, len = 0; for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, playerName, sizeof(playerName)); playerScore = GetPlayerScore(i); len += format(string[len], sizeof(string) - len, "%s - %d\n", playerName, playerScore); if (len >= sizeof(string) - 128) { break; } } } if (len == 0) { strcat(string, "Nu există jucători pe server.\n", sizeof(string)); } ShowPlayerDialog(playerid, DialogNoResponse, DIALOG_STYLE_LIST, "Jucatori pe server", string, ">", ""); return 1; }
  8. Salut! Iti pot propune versiunea mea pentru comanda ta. CMD:players(playerid, params[]) { new string[128 * MAX_PLAYERS], playerName[24], playerScore, len = 0; for (new i = 0; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { GetPlayerName(i, playerName, sizeof(playerName)); playerScore = GetPlayerScore(i); len += format(string[len], sizeof(string) - len, "%s - %d\n", playerName, playerScore); } } if (len == 0) strcat(string, "Nu există jucători pe server.\n", sizeof(string)); ShowPlayerDialog(playerid, DialogNoResponse, DIALOG_STYLE_LIST, "Jucatori pe server", string, ">", ""); return 1; }
  9. Salut, descărca cea mai noua versiune de aici https://github.com/karimcambridge/samp-foreach In server.cfg nu uita sa adaugi la plugins si foreach.so (linux) sau .dll (windows) /* dupa a_samp baga acest includ */ #include <a_samp> #include <foreach> public OnGameModeInit() { foreach (new p : Player) { /* Cod pentru fiecare jucător */ } foreach (new v : Vehicle) { /* Cod pentru fiecare vehicul */ } return 1; }
  10. Optimizăm putin codul CMD:fly(playerid, params[]) { if(!IsPlayerConnected(playerid)) return 0; // Verificăm dacă jucătorul este conectat if(gPlayerLogged[playerid] == 0) { SendClientMessage(playerid, COLOR_LIGHTRED, "Trebuie să te conectezi."); return 1; } if(PlayerInfo[playerid][pAdmin] < 1) { SendClientMessage(playerid, COLOR_ERROR, AdminOnly); return 1; } new sendername[MAX_PLAYER_NAME], string[256]; GetPlayerName(playerid, sendername, sizeof(sendername)); if(flymode[playerid] == 0) { togfind[playerid] = 0; flymode[playerid] = 1; format(string, sizeof(string), "{DFF230}%s este acum în modul fly-mode.", sendername); ABroadCast(COLOR_ORANGE, string, 1); InitFly(playerid); StartFly(playerid); SetPlayerHealthEx(playerid, 10000000); } else { togfind[playerid] = 1; flymode[playerid] = 0; format(string, sizeof(string), "{F89AD6}Ai oprit fly-mode-ul", sendername); SCM(playerid, COLOR_GREEN, string); StopFly(playerid); SetPlayerHealthEx(playerid, 100); } return 1; }
  11. UN COD PUȚIN MAI OPTIMIZAT #include <zcmd> #define COLOR_LIGHTRED 0xFF6347AA #define COLOR_GREEN 0x0ea142FF stock GetClosestVehicle2(playerid, Float:dis) { new Float:X, Float:Y, Float:Z; if (GetPlayerPos(playerid, X, Y, Z)) { new vehicleid = INVALID_VEHICLE_ID; dis *= dis; // Evităm operațiunea de radical prin compararea dis^2 cu temp^2 for (new v, Float:VX, Float:VY, Float:VZ; v < MAX_VEHICLES; v++) { if (GetVehiclePos(v, VX, VY, VZ)) { VX -= X; VY -= Y; VZ -= Z; new temp = VX * VX + VY * VY + VZ * VZ; if (temp < dis) { dis = temp; vehicleid = v; } } } dis = floatpower(dis, 0.5); // Redundant în acest context, puteți renunța la această linie return vehicleid; } return INVALID_VEHICLE_ID; } CMD:closestcar(playerid, params[]) { if(!IsPlayerAdmin(playerid)) { SendClientMessage(playerid, COLOR_GREEN, "Nu poti folosi comanda pentru ca nu esti admin!"); return 1; } if(IsPlayerInAnyVehicle(playerid)) { SendClientMessage(playerid, COLOR_LIGHTRED, "Esti deja intr-o masina!"); return 1; } if(GetPlayerState(playerid) != PLAYER_STATE_ONFOOT) { SendClientMessage(playerid, COLOR_LIGHTRED, "Nu esti in picioare langa o masina!"); return 1; } new Float:closestDistance = 50.0; new cCar = GetClosestVehicle2(playerid, closestDistance); if(cCar != INVALID_VEHICLE_ID) { PutPlayerInVehicle(playerid, cCar, 0); } else { SendClientMessage(playerid, COLOR_LIGHTRED, "Nu ai gasit nicio masina in apropiere!"); } return 1; }
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.