Jump to content

TheGodfather

Membru
  • Posts

    489
  • Joined

  • Last visited

  • Days Won

    3

Posts posted by TheGodfather

  1. Salut, cum se pot rezolva problemele legate de sql injection? Am vazut ca una din metode ar fi folosirea de %e in loc de %s ca in exemplul de mai jos.

    Sql injection: format(gQuery, sizeof(gQuery), "SELECT * FROM users WHERE `name`='%s' AND `password`='%s' LIMIT 1", GetName(playerid),password);

    Fara sql injection: format(gQuery, sizeof(gQuery), "SELECT * FROM users WHERE `name`='%e' AND `password`='%e' LIMIT 1", GetName(playerid),password);

  2. Salut, vreau sa va prezint un sistem asemanator jocului cs 1.6 avand ca harta o replica a fy_snow-ului. Sistemul necesita 2 sau mai multi jucatori, fiecare jucator poate avea o singura arma, putand sa o arunce apasand f. Membrii echipei castigatoare, indiferent ca mai sunt sau nu in arena, primesc recompensa la sfarsitul meciului. Cand jucatorii mor / iasa de pe server / apasa f, daca au arma, aceasta cade la ultima lor pozitie. Cand un jucator scrie /ctvst, daca nu e nimeni in arena porneste un timer de 20s, la final se verifica daca sunt destui jucatori (2 sau mai multi) pentru a incepe meciul. Cand meciul e inceput, alti jucatori nu pot sa mai foloseasca comanda /ctvst. Cand un jucator moare sau cand se termina meciul, este adus in fata intrarii arenei.

    image.thumb.png.2203e8d3fc160b03dbd17bc5415828fe.png

    image.thumb.png.2e6ef3752acede568d494e56a83261ed.png

    image.thumb.png.bd3348f2e0c4b41207979bb3e6e559b7.png

    image.thumb.png.982bfbc6acb6bb5fab124048699e121a.png

  3. 31 minutes ago, shane said:

    Salut @TheGodfather,

    In cazul in care nu ai rezolvat, desi ma indoiesc. Sistemul ar trebui sa functioneze in felul urmator:

    new 
    	Iterator: serverVehicles<MAX_VEHICLES>;
    
    YCMD:spawncar(playerid, params[], help)
    {
        new 
            carid = CreateVehicle(etc.....);
        
        Iter_Add(serverVehicles, carid);
        
        //etc..
    }
          
    YCMD:despawncars(playerid, params[], help)
    {
        if(!Iter_Count(serverVehicles)) 
        	return SendClientMessage(playerid, -1, "No cars to despawn!");
        
        new 
          	String[100];
        
        format(String, sizeof String, "%s despawned %d vehicles.", GetName(playerid), Iter_Count(serverVehicles));
        SendClientMessageToAll(playerid, -1, String) // exemplu
          
        foreach(new i : serverVehicles) DestroyVehicle(i);
        Iter_Clear(serverVehicles);
          
        //etc..
    }

    Iti recomand ' Iter_Clear ', in loc de ' Iter_Remove '. Ce ai tu mai sus, pare ok, ce ti-am dat eu, e doar un exemplu, de la care poti reface sistemul.

     

    Salut, multumesc de reply. Am rezolvat, in loc de Iter_Remove am folosit Iter_SafeRemove. Am cautat pe internet cum functioneaza functiile de la iteratori dar nu am gasit nimic... altfel banuiesc ca nu eram nevoit sa fac postul acesta :D

  4. 3 minutes ago, iSorin[] said:

    YCMD:despawncars(playerid, params[], help) {
        if(PlayerInfo[playerid][pAdmin] < 1) return SCMM(playerid, -1, AdminOnly);
        foreach(new i : SpawnedCars) {
            DestroyVehicle(i);
            Iter_Remove(SpawnedCars, i);
            SCMf(playerid, -1, "%d", i);
        }
       
        new string[100];
        format(string, sizeof(string), "[/despawncars] {FFFFFF}Admin %s destroyed all spawned cars.", GetName(playerid));
        if(GetPVarInt(playerid, "Cover") == 0) SendAdminMessage(COLOR_LIGHTGOLD, string, 1);
        return true;
    }

    Nu merge, tot primesc aceeasi eroare si daca am 2 sau mai multe masini spawnate cu /spawncar despawneaza doar una

  5. Salut, am o comanda de /spawncar si una de /despawncars, cand spawnez 2 masini de exemplu, o despawneaza pe prima dar pe a doua nu cand dau /despawncars iar in loguri am eroarea asta:

    [19:24:22] [debug]
    [19:24:22] [debug] Parameter count corrections:
    [19:24:22] [debug]
    [19:24:22] [debug] The 1st mangled argments (e.g. `<1073741823 arguments>`) below should read `<2 arguments>`
    [19:24:22] [debug]
    [19:24:22] [debug] Run time error 4: "Array index out of bounds"
    [19:24:22] [debug] AMX backtrace:
    [19:24:22] [debug] #0 0038d318 in ?? (0, 23972552, 0) from B-HOOD.amx
    [19:24:22] [debug] #1 000552f4 in ?? (0, 23972504, 0) from B-HOOD.amx
    [19:24:22] [debug] #2 00057e4c in ?? (0, 23972504, 0, 0, 0, 0, 8, 0, 23972504, 0, ... <1073741813 arguments>) from B-HOOD.amx
    [19:24:22] [debug] #3 00022180 in public OnPlayerCommandText (0, 23972504) from B-HOOD.amx

    YCMD:spawncar(playerid, params[], help) {
        if(PlayerInfo[playerid][pAdmin] < 1) return SCMM(playerid, -1, AdminOnly);
        new model, color1, color2;
        if(sscanf(params, "iii", model, color1, color2)) return SCMM(playerid,COLOR_GREY, "Syntax: {FFFFFF}/spawncar <Model> <color1> <color2>");
        if(model < 400 || model > 611) return SCMM(playerid,-1, "Invalid car ID.");
        new Float:X,Float:Y,Float:Z;
        GetPlayerPos(playerid, X,Y,Z);
        new carid = CreateVehicleEx(model, X,Y,Z, 0.0, color1, color2, -1, 0);
        Gas[carid] = 100;
        SetVehicleNumberPlate(carid, "AdmCar");
        Iter_Add(SpawnedCars, carid);
        LinkVehicleToInterior(carid, GetPlayerInterior(playerid));
        SetVehicleVirtualWorld(carid, GetPlayerVirtualWorld(playerid));
        PutPlayerInVehicleEx(playerid, carid, 0);
        new idcar = GetPlayerVehicleID(playerid), vehicle = GetVehicleModel(idcar) - 400;
        SCMf(playerid, COLOR_LIGHTGOLD, "[/spawncar] {FFFFFF}You have spawned one %s, car model: %d and car ID: %d.", aVehicleNames[vehicle], model, carid);
        return true;
    }

    YCMD:despawncars(playerid, params[], help) {
        if(PlayerInfo[playerid][pAdmin] < 1) return SCMM(playerid, -1, AdminOnly);
        foreach(new i : SpawnedCars)
            Iter_Remove(SpawnedCars, i), DestroyVehicle(i), SCMf(playerid, -1, "%d", i);
        new string[100];
        format(string, sizeof(string), "[/despawncars] {FFFFFF}Admin %s destroyed all spawned cars.", GetName(playerid));
        if(GetPVarInt(playerid, "Cover") == 0) SendAdminMessage(COLOR_LIGHTGOLD, string, 1);
        return true;
    }

  6. 1 hour ago, Banditul said:

    Stiu ca asta se intampla in momentul in care serverul este 'blocat' (processaza altceva) si nu poate procesa si OnPlayerConnect in acelasi timp care e foarte probabil cand serverul porneste ai e nevoie sa xonfigureze lucruri.

    O posibila rezolvare, care face codul sa ruleze mai efficient, este sa nu compilezi gm cu -d3 (debug mode) astfel incat sa fie generat cod mai eficient, si inlocuiesti crashdetect cu JIT (care optimizeaza codul in timpul rulari). Considerand faptul ca ai inceput sa folosesti YSI codul care este rulat la pornire e posibil sa ruleze ceva mai incet pentru ca configureaza multe lucruri si nu prea are importanta pentru ca este procesat o singura data.

    Eventual poti incerca open.mp care ruleaza mult mai eficient si mult mai bine si care are multe buguri rezolvate.

    Ok, am inteles. Mersi frumos :)

  7. 26 minutes ago, Banditul said:

    E posibil sa nu se incarce, iti mesajul ca plugin s-a icnarcat corect? De asemenea "crashdetect <found>" foarte probabil sa nu functioneze din cauza crashdetect

    image.png.563870159ea1edc3852978a5e94abb06.png

    La fel face :(

    EDIT: Am scos -d3 cand compilez gamemodeul + scos de tot crashdetect si inlocuit cu jit si merge doar ca acum dureaza cam mult sa compileze, in jur de 9 secunde fara de vreo 3-4 inainte sa fac schimbarile astea, chiar daca gamemode-ul (.amx) are 8 MB. Aceste este compilerul

    {
    "cmd": ["pawncc.exe", "-i includes", "$file", "-;+", "-v2","-Z+","-\\)+"],
    "path": "C:/Users/crist/Desktop/HPQ123 samp gamemode actual cu tot ce trebuie/pawno"
    }

  8. 4 minutes ago, Vicentzo- said:

    Salutare !

    Dupa parerea mea si in 'scenariul' sa zic asa dat de tine, cel mai ok ar fi sa faci iterator pentru ca de acest 'PlayerLeaders' te vei folosi nu doar la acea comanda si te va ajuta extrem de mult, pentru ca gandindu-te tu cu foreach de player faci un foreach in toti jucatori, dar la PlayerLeaders faci o verificare doar in acei playeri pe care-i adaugi tu.

    Sper ca ti-am fost de folos !

    Multumesc pentru raspuns

  9. Salut, care este mai ok pentru urmatorul scenariu. Pentru a afisa numele liderilor online, unul sub altul pentru un jucator care scrie o comanda oarecare.

    Iteratorul: Iterator:PlayerLeaders<MAX_PLAYERS> urmat la o comanda oarecare foreach(new i : PlayerLeaders) SCMf(playerid, -1, "%s", GetName(i));

    foreach: foreach(new i : Player) if(PlayerInfo[i][pLeader] != 0) SCMf(playerid, -1, "%s", GetName(i));

    EDIT: Sa luam si alt caz, tot cel cu liderii doar sa zicem ca trebuie sa facem un array in care pentru fiecare jucator care are lider avem o variabila definita Leaders[MAX_PLAYERS] iar la logare daca e lider, jucatorul are Leaders[playerid] = 1.

  10. Daca nu sunt logat cu pin daca dau o comanda care nu exista imi arata bine, daca scriu de ex /a imi scrie sintaxa comenzii, dar ar trebui sa imi dea mesajul de aici

    if(strlen(PlayerInfo[playerid][pPin]) != 0 && PlayerInfo[playerid][pPinLogged] == 0) { SCMM(playerid, -1, "{FF6347}[PIN] {FFFFFF}You can not use commands because you did not enter a valid PIN!"); return COMMAND_OK; }

    Cu ok merge bine daca nu exista comanda, daca pun in loc de COMMAND_OK pun COMMAND_ZERO_RET indiferent daca comanda exista sau nu primesc mesajul default, 

    SERVER: Unknown command

  11. 6 minutes ago, Banditul said:

    https://github.com/pawn-lang/YSI-Includes/issues/5#issuecomment-96043340

    Aparent pentru verificarea aia ai nevoie de OnPlayerCommandReceived nu de OnPlayerCommandPerformed pentru ca daca comanda e invalida e imposibil sa fie executata

    if(success == COMMAND_OK) SpamCheck[playerid] = GetTickCount();
    if(success == COMMAND_UNDEFINED) {SCMM(playerid, COLOR_GREY, "Error: Unknown command!"); return COMMAND_ZERO_RET;}

    Am pus asa la OnPlayerCommandReceived, indiferent de ce comanda introduc imi scrie mesajul default, SERVER: Unknown command. (nu cel pe care il am eu)

  12. 5 minutes ago, irinel77 said:

    Pur si simplu faci 2 foldere numite fixes si temp in folderul scriptfiles.

    Multumesc.

    La OnPlayerCommandPerformed nu imi arata mesajul cu unknown command cand scriu o comanda care nu exista, aveti idee de ce? Am mai cautat solutii pe internet dar la toate e la fel

    public e_COMMAND_ERRORS:OnPlayerCommandPerformed(playerid, cmdtext[], e_COMMAND_ERRORS:success) {
        //antispam
        if(aspam[playerid] == 0 && PlayerInfo[playerid][pAdmin] < 😎
        aspam[playerid] = 1;
        //antispam
        if(success == COMMAND_OK) {
            SpamCheck[playerid] = GetTickCount();
            return COMMAND_OK;
        }
        SCMM(playerid, COLOR_GREY, "Error: Unknown command!");
        return COMMAND_OK;
    }

  13. 27 minutes ago, TheGodfather said:

    Pentru if(success == ...)

    (39277) : warning 213: tag mismatch: expected tag "e_COMMAND_ERRORS", but found none ("_")

    Linia 39277 este penultima, cea cu unknown commandimage.thumb.png.1e8f6c0fd1ac20e4fb60795f1e6ac6a1.png

    Am reusit sa rezolv asta, dar cand pornesc serverul pe localhost imi spune asta:

    image.thumb.png.485656ac7745d83b0a465b45a4735453.png

    EDIT:

    Am pus asta la inceput de gamemode #define CGEN_MEMORY 100000 dar primesc alte erori, pe langa astea 2:

    image.png.8aa7c04a479613322687e67dcf37b9dd.pngimage.thumb.png.364170f8ed924a694e4b75e3ea7a9a06.png

    EDIT 2: Asta am rezolvat punand #define MAX_COMMANDS 1000 la inceput de gamemode. Legat de acele scriptfiles, ce pot face?

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