Jump to content

NERS

Membru
  • Posts

    77
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by NERS

  1. Salut, acesta este un gamemode foarte simplu ce are doar sistemul de inregistrare/logare pe dialog, cateva mici functii in plus si o singura comanda (/setskin) facut in totalitate cu ORM (nu exista niciun mysql query/tquery/pquery in gamemode). Consider ca este un inceput ok pentru cei care vor sa foloseasca acest ORM.

    Acest GM foloseste Zeex Compiler 3.10.10, samp stdlib si pawn stdlib!
     

    Include-uri:
    MySQL R41-4,
    easyDialog,
    YSI 5.5.301 (y_va, y_iterate, y_commands).

    Plugin-uri:
    MySQL.

    Datele de conectare pentru baza de date se pot modifica din fisierul mysql.ini gasit in folderul principal al GM-ului.
     

    ----- Cache vs ORM -----

    Capture.PNG.15e729e0783acc5a5306798d8117c665.PNG

    ORM este mai bun decat Cache deoarece nu trebuie sa trimiti atat de multe interogari catre baza de date, un simplu orm_update() la deconectare actualizeaza toate campurile necesare, deci nu trebuie sa faceti un query cu UPDATE de fiecare data.

     

    Poze: https://imgur.com/a/Ao1XOFb

    Virustotal: https://www.virustotal.com/gui/file/767ec5baf04fddf6b0d7b536258a903c76849229ac346242accf7109ea89f296/detection
    Download: https://mega.nz/file/JR1gXBTS#3Rm7j65NWmYERotIUBcEjt8YZy9LrSfJUs-ceMzVN6I

     

    • Upvote 2
  2. Am gasit eu problema, la onplayerdisconnect se distrug toate masinile personale ale jucatorului si de aceea lua crash, am rezolvat facand asta:

    cod vechi:

       foreach(i : PersonalVehicles[playerid]) {
           if(CarInfo[i][cSpawned] != INVALID_VEHICLE_ID) DestroyVehicleEx(CarInfo[i][cSpawned]);
           Iter_SafeRemove(TotalPersonals, i, i);
           Iter_SafeRemove(PersonalVehicles[playerid], i, i);
       }

     

    cod nou:

       foreach(i : PersonalVehicles[playerid]) {
           if(CarInfo[i][cSpawned] != INVALID_VEHICLE_ID) DestroyVehicleEx(CarInfo[i][cSpawned]);
           Iter_Remove(TotalPersonals, i); // am scos saferemove
           Iter_SafeRemove(PersonalVehicles[playerid], i, i);
       }

    • Upvote 1
  3. Presupun ca asta vrei sa faci (/nre id raspuns).

    // Pe undeva prin gamemode (inainte de comanda /n) adaugi:
    new NText[MAX_PLAYERS][64];
    
    // La comanda /n pui urmatoarea linie pe undeva pe la final:
    format(NText[playerid], 64, intrebare);
    
    CMD:nre(playerid, params[])
    {
        if(P_Data[playerid][pHelper] == 0 && P_Data[playerid][pAdmin] == 0) 
            return SCM(playerid, color_gray, "Nu ai acces la aceasta comanda!");
            
        new id, raspuns[64];
        if(sscanf(params, "us[64]", id, raspuns))
            return SCM(playerid, color_gray, "Folosire: /nre <nume/id> <raspuns/answer>");
    
        if(IntrebareON[id] == 0)
            return SCM(playerid, color_gray, "Acel jucator nu a pus o intrebare.");
    
        new string[128];
        format(string, sizeof(string), "%s[%d] a intrebat: %s", GetName(id), id, NText[id]);
        SendClientMessageToAll(color_anunt, string);
              
        format(string, sizeof(string), "%s[%d] a raspuns: %s", GetName(playerid), playerid, raspuns);
        SendClientMessageToAll(color_anunt, string);          
        
        IntrebareON[id] = 0;
        NText[id][0] = EOS;
        return 1;
    }

    Daca gasesti buguri sau ceva ma anunti, spor! :D

  4. Acum 10 ore, st0ryc a spus:

    N-am descarcat gm-ul, dar din poze aratau ca td-urile lui @GroWy

    eu m-am luat dupa jade(level cu progress), b-hood(numele deasupra logoului) si night lurk(rpg. numele serverului colorat .ro)

    ceasul este cel default din nick's textdraw editor ca imi era lene sa fac altul

    daca asa le-a facut si growy atunci scz n-am stiut

     

    Acum 9 ore, hanako a spus:

    îmi place că ai făcut serverul dintr-o culoare, nu din 1000.

    mersi, nici mie nu prea imi plac servere de genul, de aceea l-am facut asa

    :)

     

  5. Salut, acesta este un gamemode foarte basic de la 0 cu cateva comenzi si functii facut in totalitate de mine, eu as zice ca este destul de ok dar va las pe voi sa decideti.
    Daca gasiti buguri, va rog sa ma atentionati si o sa incerc sa le rezolv!

    Acest GM foloseste Zeex Compiler 3.10.10, samp stdlib si pawn stdlib!

     

    Include-uri:
    MySQL R41-4,
    Crashdetect 4.20,
    Streamer 2.9.5,
    Sscanf2 2.10.2,
    days,
    fly,
    easyDialog,
    YSI 5.5.301 (y_bit, y_iterate, y_va, y_timers, y_stringhash, y_inline_mysql),
    PawnCMD 3.3.3,
    BigInt (umpic editat de mine - facut AddSQLBigInt sa mearga cu acest GM si schimbat Substract in Subtract pentru ca ma zgaria pe creierul meu englez),
    Progress2 v2.3.0,
    Pawn-Map,
    Pawn-Memory

     

    Plugin-uri:
    Crashdetect,
    Sscanf,
    Streamer,
    MySQL,
    PawnCMD,
    Pawn-Memory

     

    Gasiti si baza de date cu numele 'database.sql' in folder, pentru a schimba datele acesteia intrati in 'mysql.ini' (default: hostname = localhost, username = root, database = sideproject).
    Pentru a schimba logo-ul server-ului si text-ul deasupra logo-ului cu 'Nume (ID)' intrati in gamemode si schimbati #define LOGO_TEXT respectiv #define LOGO_NAME in ce doriti.
    Pentru a schimba coordonatele de la spawn intrati in gamemode si schimbati #define SPAWN_X, #define SPAWN_Y, #define SPAWN_Z si #define SPAWN_A in ce doriti.

     

    Acesta are:
    - Payday la ora fixa si level pe XP cu buylevel automat ca pe ruby (prima imagine),
    - Admini si helperi pe iteratori (comenzile se vad in a 2-a imagine si am luat una la intamplare in a 5-a imagine),
    - Licenta de condus si un DMV (se pot scoate/adauga din gamemode checkpoint-uri la "Float:examCP" si functioneaza fara sa faci nimic altceva, imaginile 3 & 4),
    - Data inregistrarii si ultima logare cand se logheaza jucatorul (a 6-a imagine),
    - Cand scrii pe chat apare inaintea numelui tau (H) daca ai helper sau (A) daca ai admin (ultima imagine),
    - 6 biciclete la spawn,
    - si mai multe, va las pe voi sa explorati de aici. 

     

    Poze: https://imgur.com/a/gONEeUs
    Virustotal: https://www.virustotal.com/gui/file/0d6e92fa9b76bb4d87de446c17113a247539ba4a6207be088a4e184e971524f3/detection
    Download: https://mega.nz/file/kZ9iwSBQ#WjroB53u9ynnxo-m9hkCHKeK3fxdRlT-Ghm0FWuP41E

     

    --- Update v2.0 - 13.08.2021 ---
    Modificat aspectul unor comenzi.
    Aduse optimizari gamemode-ului.
    Adaugat sistem de combustibil la vehicule.
    Adaugat Pawn-Map de BigETI pentru functii precum getPlayerID.
    Rezolvat un bug unde primeai skin-ul de CJ la respawn.
    Adaugate restul licentelor (navigatie, zbor, port-arma).
    Adaugata /gotoxyz <x> <y> <z> [virtual world (default 0)] [interior (default 0)] (Admin 4+).
    Adaugat sistem de business-uri (momentan sunt 3: 24/7, banca, benzinarie).
    Modificat aspectul kilometrajului.
    Scoase licentele din [/set] si adaugat [/agl], [/suspendlicense] (Admin 3+).
    Adaugata comanda /id care se executa si cand apesi pe un jucator in TAB.

     

    --- Update v1.2 - 01.06.2021 ---
    Adaugat samp stdlib si pawn stdlib pentru a nu avea warning-uri la compilare cu Zeex Compiler.
    Actualizate include-urile YSI si easyDialog la ultimele versiuni.
    Nu mai pica serverul cand folositi /rac. :|
    Adaugat kilometraj la milisecunda: https://imgur.com/a/TELq7EQ
    Eliminata functia sqlAccount (verifica daca exista un cont folosind mysql_query), acum in loc de ea este folosit MySQL_TQueryInline.
    Acum cand incerci sa folosesti comenzi daca nu esti logat, va aparea o eroare pe chat.
    Adaugat [/alock] pentru admin 3+, este folosita pentru a incuia/descuia cea mai apropiata masina care nu este barca.
    Acum la [/spawncar] si [/vre] apare numele vehiculului pe chat.

     

    --- Update v1.1 - 07.05.2021 ---
    Adaugat sistem de ban si banip [Admin 1+] (comenzi: /ban, /unban, /banip, /unbanip).
    Adaugate /spawncar, /vre, /puthelmet.
    Adaugat timer la login de 60 de secunde (poate fi schimbat timpul modificand LOGIN_TIME).
    Rezolvat bugul de la login cu incercarile (aveai o incercare in plus).
    Aduse mici optimizari gamemode-ului.

  6. Salut, cand deschid samp-server primesc eroarea aceasta: "*** YSI Error: YSI code cache write failed!", are cineva idee de ce?

    Am actualizat toate plugin-urile si include-urile posibile.

    Server-ul vad ca merge bine momentan, adica pot sa-mi fac cont si sa ma loghez..

    Log:


    ----------
    Loaded log file: "server_log.txt".
    ----------

    SA-MP Dedicated Server
    ----------------------
    v0.3.7-R2, (C)2005-2015 SA-MP Team

    [14:40:58] 
    [14:40:58] Server Plugins
    [14:40:58] --------------
    [14:40:58]  Loading plugin: crashdetect
    [14:40:58]   CrashDetect v4.15.1 is OK.
    [14:40:58]   Loaded.
    [14:40:58]  Loading plugin: sscanf
    [14:40:58] 

    [14:40:58]  ===============================

    [14:40:58]       sscanf plugin loaded.     

    [14:40:58]         Version:  2.10.2        

    [14:40:58]    (c) 2020 Alex "Y_Less" Cole  

    [14:40:58]  ===============================

    [14:40:58]   Loaded.
    [14:40:58]  Loading plugin: mysql
    [14:40:58]  >> plugin.mysql: R41-4 successfully loaded.
    [14:40:58]   Loaded.
    [14:40:58]  Loading plugin: streamer
    [14:40:58] 

    *** Streamer Plugin v2.9.5 by Incognito loaded ***

    [14:40:58]   Loaded.
    [14:40:58]  Loading plugin: pawncmd
    [14:40:58] [Pawn.CMD] plugin v3.3.3 by urShadow loaded
    [14:40:58]   Loaded.
    [14:40:58]  Loading plugin: nativechecker
    [14:40:58]   Loaded.
    [14:40:58]  Loaded 6 plugins.

    [14:40:58] 
    [14:40:58] Filterscripts
    [14:40:58] ---------------
    [14:40:58]   Loaded 0 filterscripts.

    [14:40:58] [connection] 127.0.0.1:58225 requests connection cookie.
    [14:40:58] *** YSI Error: YSI code cache write failed
    [14:40:58] [MySQL] Baza de date s-a conectat!
    [14:40:58] Number of vehicle models: 0
    [14:40:58] Conturi: 0

     

  7. Salut, astazi va voi arata cum sa faceti sa apara cand se conecteaza jucatorul data inregistrarii sale si ultima logare!

    Pentru asta nu avem nevoie de include-uri/plugin-uri speciale, doar de mysql.

     

    In primul si in primul rand, mergem in baza de date si facem doua campuri noi astfel: (Implicit: CURRENT_TIMESTAMP, nu incape tot)

    image.png.f214e6ff73283e903846751790d4c94f.png

    In MySQL, variabilele de tipul 'TIMESTAMP' pur si simplu sunt, ati ghicit, data si ora (in format "an/luna/zi - ora:minut:secunda"). Daca ii atribuim unei variabile valoarea implicita de 'CURRENT_TIMESTAMP' se va pune automat data si ora curenta cand se insereaza un rand in baza de date, adica cu RegisterDate deja suntem 95% gata. Singura "problema" la asta pana acum este cand le adaugam si avem deja conturi inregistrate, 'RegisterDate' va fi data si ora curenta pentru toate conturile, dar nu cred ca este mare scofala, poate fi resetat usor.

     

    Mai apoi, mergem la enum-ul cu informatiile jucatorului (pInfo / pData / etc.) si adaugam urmatoarele:

    enum pInfo {
    	// restul variabilelor
    	pRegisterDate[22], pLastLogin[22]
    };

     

    Acum, la OnPlayerConnect sau CheckAccount sau la ce functie aveti voi unde ii apare jucatorului dialog-ul de logare, adaugam urmatoarele linii inaintea afisarii acestuia:

    cache_get_value_name(0, "RegisterDate", PlayerInfo[playerid][pRegisterDate]); // Ii luam data inregistrarii din baza de date si o stocam in 'PlayerInfo[playerid][pRegisterDate]'
    cache_get_value_name(0, "LastLogin", PlayerInfo[playerid][pLastLogin]); // Ii luam data ultimei logari din baza de date si o stocam in 'PlayerInfo[playerid][pLastLogin]'
    
    new string[120]; // Creem un string de 120 de caractere si il formatam aratandu-i aceste doua dati. Puteti schimba mesajul in ce doriti voi dar atentie sa mariti string-ul daca este mai lung!
    format(string, sizeof(string), "Introdu parola contului tau:\n\nData inregistrarii: %s\nUltima logare: %s", PlayerInfo[playerid][pRegisterDate], PlayerInfo[playerid][pLastLogin]);
    
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Cancel"); // din nou, modificati corespunzator id-ul dialogului si ce mai vreti voi pe aici.

     

    Ultimul pas, la OnPlayerLogin ii setam LastLogin la data si ora curenta:

    new query[80];
    mysql_format(SQL, query, sizeof(query), "UPDATE `users` SET `LastLogin`=NOW() WHERE `ID`='%d' LIMIT 1", PlayerInfo[playerid][pSQLID]); // Modificati corespunzator acest query, cu baza de date corecta, tabelul potrivit, etc. Atentie, sa mariti query-ul definit mai sus daca este mai lung.
    mysql_tquery(SQL, query, "", ""); // Trimitem query-ul catre baza de date si am terminat!

     

    Rezultat in joc cu un cont nou:

    image.png.98b97ffd27d53a8222c3eeb3bd71d09e.png

     

    Sper ca acest tutorial v-a fost de folos, recent am auzit si eu de aceste variabile TIMESTAMP in mysql si am decis sa va ajut si pe voi! :)

     

     

     

  8. mersi, merge, doar ca acum jucatorul cu id 1 nu poate sa scrie pe chat deloc, nici text nici comenzi etc, dar serverul este online si cel cu id 0 poate

     

    EDIT: am rezolvat, era o problema de la y_bit, verificarile cu if(!IsPlayerLogged[playerid]) return 0; trebuia sa le schimb in if(!Bit_Get(IsPlayerLogged, playerid)) return 0;

    cer t/c pwp :D❤️

  9. mi-am dat seama ca pica tot serverul cand se intampla asta, chiar nu stiu de ce

    am incercat si pe hamachi cu un prieten, acelasi lucru, cu o versiune mai veche al gm-ului nu se intampla nimic

    si nu stiu daca conteaza, dar cand deschid samp-server trebuie sa astept vreo 20 de secunde pana se incarca baza de date, are vreo relevanta?

  10. schimba linia cu mysql format in asta:

    mysql_format(handle, string, sizeof(string), "UPDATE `conturi` SET `RespectPoints` = '%d', `Level` = '%d' WHERE `ID` = '%d'", P_Data[playerid][pRespectPoints], P_Data[playerid][pLevel], P_Data[playerid][pID]);

    si dedesubt adauga:

    mysql_tquery(handle, string, "", "");

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