Jump to content

khain.dev

Membru
  • Posts

    646
  • Joined

  • Last visited

  • Days Won

    50

Posts posted by khain.dev

  1. 2 hours ago, HPQ123 said:

    Eu mă întreb cum faci sa testezi 1000 de jucătorii sau in ce scenarii 😅 (dacă nu ai avut deja un server cu mai mulți de 200 jucători) 

    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.

    • Like 1
  2. 1 minute ago, Sancky said:

    ma omule.. tu vrei sa iei si lungimea string-ului cu functia format dar ea nu returneaza nimic... si format nu este facut pentru a unii string-uri (dar intr-adevar se poate), strcat e facut pentru asta

    Fiecare are dreptul de a folosi acea metodă pe care o consideră cea mai bună. 

  3. 13 hours ago, Sancky said:

    format nu returneaza nimic

    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ă.

  4. 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.

  5. 7 minutes ago, Maichh said:

    Esti singurul care s-a gandit la mai multe pagini in dialog pentru jucatori, pentru ca daca sunt mai multi jucatori pe server nu se pot afisa intr-un singur string in dialog, trebuie facute mai multe pagini. Nu i-ai facut tu treaba asta, dar i-ai dat indiciul ala din primul buton ">", poate isi da seama. :D

    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;
    }

     

  6. 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;
    }

     

  7. 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;
    }
    
    
      

     

  8. 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;
    }

     

  9. 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;
    }

     

  10. 4 hours ago, segmentationfault said:

    văd că te ocupi pe marketing și SEO, de ce nu te specializezi pe asta și îți vinzi serviciile? pari bărbat în toată firea, nu trebuie să pui mâncare pe masă? sa-mp-ul este și va rămâne un joc pentru copiii, nu un business de viitor.

    Ce ține de marketing și SEO, dețin o agenție de marketing în România. Din punct de vedere financiar nu mă plâng, totuși, samp-ul este o relaxare personală și revenirea mea e un subiect strict de hobby.

×
×
  • 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.