Jump to content

DiBlaine

Member
  • Posts

    27
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by DiBlaine

  1. Pune aici codul sursa de la comanda /gps respectiv codul sursa de la dialogul care afiseaza gps-ul.
  2. Username: DiBlaine Creator: DiBlaine Tutorial/Ghid: Salutare, astazi am facut un tutorial cu pickup-uri dinamice + salvare in baza de date care se pot creea si edita direct din joc, sper sa va placa si sper sa va fie de folos. As aprecia foarte mult daca m-ati sustine cu un subscribe si cu un comment cu idei pentru tutoriale scripting.
  3. Username: DiBlaine Creator: DiBlaine Tutorial/Ghid: Am facut de la 0 un sistem de driving license + salvare in baza de date, explicat cat de bine am putut. Va voi lasa un link mai jos, iar daca vreti sa ma sustineti dati un subscribe & share si daca vreti sa fac un tutorial lasati-mi idei in comentarii, va multumesc!
  4. Username: DiBlaine Creator: DiBlaine Tutorial/Ghid: Job Bus Driver 2.0 asemanator ca pe b-hood, aceleasi rute, un job simplu si dragut. Singura chestie pe care nu am facut-o si este pe b-hood este ca atunci cand un player se urca la tine in autobus nu primesti 500$ la fiecare statie din partea lui. Mai trebuie facut sa ii dea banii de pe job pe statie / la finalul cursei si in rest cam atat .... m-am cam grabit nu e nimic complex. Jobul e de forma, ca sa fie job 100% mai trebuie lucrat la el, am facut doar baza cum s-ar zice, sa vedeti cum s-ar incepe in creearea unui astfel de job. La /work am uitat sa fac verificarea aia daca playerul e la locul unde se da /work pentru a incepe sa lucrezi insa am lasat verificarea + cp-urile intr-un pastebin in comentarii. E printre primele tutoriale, daca m-am balbait sau m-am mai incurcat este normal pana ma obisnuiesc deoarece nu este chiar asa de usor sa si vorbesti si sa si faci in acelasi timp si sa si stii ce trebuie sa faci pas cu pas ca sa iasa o treaba in final
  5. Scuze ca dau off topic, dar el zicea ca vrea sa foloseasca id-ul ala altundeva in gamemode. Si da, nu e cea mai buna idee ceea ce am i am zis eu, ca ajungand la 10k linii deja array-ul e prea mare pentru a stoca doar un id si e cam inutil si prost conceput iti dau dreptate, dar nu avem de unde sa stim ce vrea el sa faca cu acel id. Ceea ce i-am zis eu, a fost doar o idee pentru ca pur si simplu baiatu nu s-a gandit cum ar putea face ... si m am gandit direct la variabila de tip array, pt ca variabila statica nu l ajuta deloc aici. E o comunitate de scripting aici, si nu o zic din rautate asta dar toti pana la urma am venit aici pe comunitatea asta sa invatam oamenii care nu stiu cat stim noi si sa invatam de la cei mai buni ca noi. Pentru unii din noi e usor in a rezolva problemele daca sunt cunostinte si ani de experienta in spate. Acum da-i si tu o idee la baiat daca ceea ce am zis eu a fost prost gandit, arata-i cum ar putea face, degeaba ii spui ca trebuie sa stocheze id-ul intr-o variabila care nu e de tip array si apoi trebuie sa gandeasca cum sa faca sa nu piarda acel id ca, 100% nu are de unde stii cum sa faca asta. Ar trebuii sa se mai adauge la modelul de postare o intrebare pentru care cei care au probleme sa explice ce sistem doreste sa faca, ca sa putem sa ii invatam cat mai corect. Si serios, n-am zis-o asta din rautate, nu-ti dau hate, nu te cunosc, nu te judec, nu ma dau mare scripter, am venit aici ca sa incerc sa il ajut pentru ca toti am fost odata si odata in situatia celor care dau de probleme si vor sa invete sa le rezolve.
  6. // VARIABILA GLOBALA new WarSQLID[99+1]; // MODIFICI 99 IN FUNCTIE DE CATE LOGURI CREZI CA VEI AVEA(poti avea 100, poti avea 1000, poti avea si 10000, depinde cat de populat este serverul si in functie de cate war-uri se dau pe server) DACA VEI AVEA MAI MULT DE 99 DE WAR-URI IN BAZA DE DATE, ORICE WARSQLID DE LA 99 IN SUS VA AVEA VALOAREA 0, ADICA WarSQLID[100] = 0 / WarSQLID[101] = 0; ETC // AICI STOCHEZI ID-UL DE LA WAR IN VARIABILA GLOBALA new sqlid = cache_insert_id(); WarSQLID[sqlid] = sqlid; Daca nu te descurci, lasa partea in care inserezi war-ul in baza de date.
  7. new sqlid = cache_insert_id();
  8. eu am testat si mi a mers ce ti-am dat eu ...
  9. Incearca acum: CREATE TABLE `inf_comments` ( `ID` INT( 11 ) NOT NULL , `comment_type` INT( 11 ) NOT NULL , `comment_topic` INT( 11 ) NOT NULL , `comment_UserID` INT( 11 ) NOT NULL , `comment_text` TEXT NOT NULL , `comment_hide` INT( 11 ) NOT NULL , `comment_extra` TEXT NOT NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP( ) , `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP( ) ) ENGINE = INNODB DEFAULT CHARSET = latin1;
  10. Pai, pentru prima data trebuie sa creezi in baza de date 7/8 tabele, ID - Text - PosX - PosY - PosZ - Interior - VirtualWorld - Type(type e optional, in caz ca vrei si alte tipuri de pickupuri, inafara de clasicele pickup-uri in forma de i, acele galbene). Tabelele PosX - PosY - PosZ trebuie sa le creezi de tip FLOAT si Name trebuie sa il creezi de tip VARCHAR, la lungime pui 50(modifici in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri), iar in rest celelalte le creezi de tip INT, iar la ID sa nu uiti sa selectezi A_I(Auto Increment). Apoi trebuie sa le definiesti variabilele de ex: #define MAX_PICKUPS 50 // aici modifici in functie de cate pickup-uri vrei sa ai pe server enum pickups { pickupID, pickupText[50], // string-ul il maresti in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri FLOAT:pickupPosX, FLOAT:pickupPosY, FLOAT:pickupPosZ, pickupInt, pickupVW, pickupPickup, Text3D:pickupLabel // daca lasi optionalul sterge linia asta /* //OPTIONAL Text3D:pickupLabel, pickupType */ //OPTIONAL // STERGE ULTIMELE 3 LINII DACA NU VREI OPTIONALUL }; new PickupsInfo[MAX_PICKUPS][pickups], serverPickups = 0; Apoi trebuie sa le incarci din baza de date de ex: function LoadPickups() { new Cache: db = mysql_query(SQL, "SELECT * FROM `pickups` ORDER BY `pickups`.`ID` ASC"); new x, result[50], string[50]; for(new i, j = cache_get_row_count (); i != j; ++i) { serverPickups ++; cache_get_field_content(i, "ID", result); x = strval(result); PickupsInfo[x][pickupID] = x; cache_get_field_content(i, "Text", result); format(PickupsInfo[x][pickupText], 50, result); cache_get_field_content(i, "PosX", result); PickupsInfo[x][pickupPosX] = strval(result); cache_get_field_content(i, "PosY", result); PickupsInfo[x][pickupPosY] = strval(result); cache_get_field_content(i, "PosZ", result); PickupsInfo[x][pickupPosZ] = floatstr(result); cache_get_field_content(i, "Interior", result); PickupsInfo[x][pickupInt] = strval(result); cache_get_field_content(i, "VirtualWorld", result); PickupsInfo[x][pickupVW] = strval(result); // OPTIONAL // cache_get_field_content(i, "Type", result); PickupsInfo[x][pickupType] = strval(result); // OPTIONAL // PickupsInfo[x][pickupPickup] = CreateDynamicPickup(PickupsInfo[x][pickupType], 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0); PickupsInfo[x][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0); format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[x][pickupID], PickupsInfo[x][pickupText]); PickupsInfo[x][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 10.0); } printf("Pickups: %d", serverPickups); cache_delete(db); return 1; } Ti-am facut toata partea de incarcare si definire a pickup-urilor din baza de date, acum comanda de creeare a pickup-urilor din joc: YCMD:createpickup(playerid, params[], help) { if(serverPickups == 50) return SCM(playerid, -1, "Ai deja 50 de pickp-uri create pe server!"); // OPTIONAL // new int, vw, type, ptext[50], inputtext[50], query[256], string[128]; // OPTIONAL // if(sscanf(params, "s[50]iii", inputtext, int, vw, type)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld> <type>"); new int, vw, ptext[50], inputtext[50], query[256], string[128]; if(sscanf(params, "s[50]ii", inputtext, int, vw)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld>"); if(strlen(inputtext) == 0 || strlen(inputtext) > 49) return SCM(playerid, -1, "Introdu un text intre 0 si 49 caractere!"); new Float: x, Float: y, Float: z; GetPlayerPos(playerid, x, y, z); format(ptext, 50, inputtext); // OPTIONAL // mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`, `Type`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d', '%d')", ptext, x, y, z, int, vw, type); mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d')", ptext, x, y, z, int, vw); new Cache: result = mysql_query(SQL, query); new pid = cache_insert_id(); serverPickups++; cache_delete(result); // OPTIONAL // PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; PickupsInfo[pid][pickupType] = type; format(PickupsInfo[pid][pickupText], 50, inputtext); PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; format(PickupsInfo[pid][pickupText], 50, inputtext); format(string, sizeof(string), "Pickup-ul cu SQL id-ul %d a fost creeat pe server(total pickup-uri create: %d).", pid, serverPickups); SCM(playerid, COLOR_WHITE, string); // OPTIONAL // PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(PickupsInfo[pid][pickupType], 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0); PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0); format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[pid][pickupID], PickupsInfo[pid][pickupText]); PickupsInfo[pid][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 10.0); return 1; } Acum tu o sa trebuiasca sa iti faci o comanda cu care sa poti muta pozitia pickup-ului sau sa modifici textul / type-ul(in caz ca il pui).
  11. Da-ne si noua codul sursa, acela cand playerul isi seteaza adresa de email.
  12. Incearca: https://pastebin.com/ttJCzz7r
  13. Arata-ne si noua codul unde folosesti functia PutVehicleInPNS.
  14. Ai incercat sa faci un debug la 'Stage'? Sa vezi daca valoarea din baza de date corespunde cu cea de pe server(dupa restart)?
  15. Te-ai asigurat ca incarci 'Stage-ul' din baza de date?
  16. Cele mai folosite limbaje de programare in ziua de azi sunt: C++, JavaScript, HTML, PHP. Eu ti-as recomanda sa incepi usor cu C++, este destul de usor si in plus C++ este folosit si in limbajul de programare PAWN care este folosit la randul lui la editarea/crearea unor scripturi pentru developmentul unui server de SA:MP.
  17. if(InWar[factionid] != 0) CheckIfPlayerIsOnTurf(playerid); // asta o adaugi intr-un timer de 1 secunda function CheckIfPlayerIsOnTurf(playerid) { if(IsPlayerInTurf(playerid, InWarTurf[PlayerInfo[playerid][pMember]]) && GetPVarInt(playerid, "PlayerOnTurf") == 0) { SendClientMessage(playerid, -1, "Ai intrat pe turf si ai fost transferat in alt VW."); SetPlayerVirtualWorld(playerid, worldid); SetPVarInt(playerid, "PlayerOnTurf", InWarTurf[PlayerInfo[playerid][pMember]]); }else if(!IsPlayerInTurf(playerid, InWarTurf[PlayerInfo[playerid][pMember]]) && GetPVarInt(playerid, "PlayerOnTurf") != 0) { SendClientMessage(playerid, -1, "Ai iesit de pe turf si ai fost transferat in VW 0."); SetPlayerVirtualWorld(playerid, 0); DeletePVar(playerid, "PlayerOnTurf"); }return 1; } // InWar - variabila in care stocam id-ul factiunii care are un war activ // IsPlayerInTurf - functia cu care verificam daca playerul este pe turful pe care este desfasurat war-ul // InWarTurf - variabila in care stocam id-ul turfului pe care este desfasurat war-ul
  18. Defapt nu, am spus o mare prostie... nu are legatura cu loginu, pentru ca la tine in functie se extrag datele din baza de date. Modifica si playerSQLID: cache_get_field_content(0, "name", playerName, handle, MAX_PLAYER_NAME + 1), playerSQLID = cache_get_field_content_int(0, "ID");
  19. La incarcarea din baza de date cum incarci pSQLID-ul? Ma refer cand playerul se conecteaza pe server(dupa ce baga parola). Daca ai modificat din id in ID coloana la users atunci trebuie sa modifici si la incarcarea din baza de date: Din: PlayerInfo[playerid][pSQLID] = cache_get_field_content_int(0, "id"); Pune: PlayerInfo[playerid][pSQLID] = cache_get_field_content_int(0, "ID");
  20. Problema la selectarea id-ului din db: mysql_format(SQL, queryString, 100, "SELECT name, ID, ConnectedTime FROM users ORDER BY ConnectedTime DESC LIMIT 1"); Pune: mysql_format(SQL, queryString, 100, "SELECT name, id, ConnectedTime FROM users ORDER BY ConnectedTime DESC LIMIT 1");
×
×
  • Create New...