Jump to content

Mister

Moderator
  • Posts

    1,884
  • Joined

  • Last visited

  • Days Won

    113

Everything posted by Mister

  1. nu stiu de ce pluginuri ai tu nevoie si ce versiuni doar te uiti ce pluginuri ai tu in folderul plugins si cand deschizi serverul pe localhost in consola scrie pluginul version si apoi cauti pe google si cand downloadezi arhiva ai si numeplugin.dll si numeplugin.so
  2. fisierele dll nu sunt necesare pe host pe linux mai exact ai nevoie de pluginurile cu extensia .so EDIT: in server.cfg ai nevoie sa pui la linia plugins numele pluginului si .so la final plugins streamer.so mysql.so sscanf.so
  3. arata comanda /gmats sau /gdurugs, pentru celelalte mafii merge comanda?
  4. Vei avea nevoie de ceva rabdare si pricepere dar poate iesi ceva frumos
  5. eu am luat din ultimul log pe care l ai postat, deci nu poti sa zici ca m am uitat gresit arata server cfg sterge rconpass si ce crezi tu ca nu trebuie sa aflam
  6. [18:47:22] CrashDetect must be loaded before 'streamer.so' Spune clar, in linia plugins trebuie sa ai crashdetect.so inainte de streamer.so
  7. Salutare, am si eu o problema la o variabila, ea este de tip string dar se pare ca mysql plugin o detecteaza ca pe integer enum factionvehs {fvOwner[30]}; new FVehInfo[200][factionvehs] cache_get_value_name(i,"Owner", FVehInfo[x][fvOwner]); iar in mysql error imi apare [09/22/17 18:58:12] [plugins/mysql] cache_get_value_name_int: value 'The State' is not a number Problema este ca pe windows tot nu imi citeste pe server variabila dar nu am erorile astea in errors.log doar pe linux sunt si sunt confuz Sunt sigur ca e ceva insignifiant ce imi scapa doar ca nu imi dau seama ce In baza de date EDIT: Rezolvat
  8. Noi suntem sa-mp.ro. Nu face reclama la alta comunitate, asta e foarte putini mai fac ceva original majoritatea copiaza si chiar daca nu o fac nu prea ii crede nimeni, sa nu ne abatem de la subiect este o prezentare a unui sistem de garaj de ce sa sarim cu gura.
  9. Recomand, baiatul este serios am avut o colaborare sa zic asa si mereu a fost punctual si serios.
  10. Trebuie sa folosesti textdrawtextsize pentru fiecare td in parte si sa gasesti marimile potrivite pentru a nu se suprapune ca in cazul de fata. Asta inseamna ca va trebuie sa compilezi testezi si iar sa modifici pentru ca nu cred ca vei nimeri marimea de prima data
  11. cand deschizi serverul scrie in consola mysql plugin loaded r3333x bla bla cat este iar la include il deschizi si citesti in el, dar degeaba pui aceeasi versiune de mysql la plugin si in include daca gmul este scris pe alta, logic si normal ar trebui sa ai r-39
  12. La dialogul de vehicule trebuie sa faci o variabila sa se atribui listitem+1 iar apoi aici unde ai tu aceasta functie getvehslot sa fie apelata acea variabila gen adauga in gm new vehslot[MAX_PLAYERS]; iar la dialogul dialog_vehicles atribui vehslot[playerid] = listitem+1; iar la new id = getvehslot(playerid,vehslot [playerid]);
  13. Eu asta am inteles ca vrei sa faci din ce ai cerut, functia merge adapteaza pentru dialogul in care ai functiile fiecarui vehicul
  14. Bun tu ar trebui sa adaugi codul acesta la DIALOG_VEHICLES if(response) // spawn { new id = getvehslot(playerid,listitem+1); new gString[200]; if(IsVehSpawned(id) == 1) return SendClientMessage(playerid, COLOR_ERROR, "Aceasta masina este spawnata."); SpawnVeh(playerid, id); format(gString, sizeof(gString), "Masina de tip %s s-a spawnat.", VehicleNames[vInfo[id][vModel]-400]); SendClientMessage(playerid, COLOR_ERROR, gString); }
  15. Posteaza comanda /v ca vad ca nu ai inteles ce am spus
  16. Din ce am vazut mai sus ai dialogul unde nu trebuie la comanda de /v sau cum ai tu, acolo tu arati un dialog cu fiecare masina iar dialogul modificat de mine trebuie sa aiba idul aceluia
  17. Verifica versiunea de mysql din plugin sa fie la fel cu cea din mysql.inc Si desigur verifica ca dupa ce ai pus ambele fisiere mysql.dll si mysql.inc din aceeasi versiune sa ai in gamemode #include <a_mysql> si sa compilezi
  18. tu ai si la response si la daca nu da response sa se spawneze toate masinile Adauga functia asta in gm getvehslot(playerid,slot) { new counth=0; for(new i = 0; i <= Total_Veh_Created; i++) { new gString[200]; if(strmatch(vInfo[i][vOwner], GetName(playerid))) { counth++; if(counth==slot) return i; } } return -1; } Iar la dialog modifici in asta if(response) // spawn { new id = getvehslot(playerid,listitem+1); new gString[200]; if(IsVehSpawned(id) == 1) return SendClientMessage(playerid, COLOR_ERROR, "Aceasta masina este spawnata."); SpawnVeh(playerid, id); format(gString, sizeof(gString), "Masina de tip %s s-a spawnat.", VehicleNames[vInfo[id][vModel]-400]); SendClientMessage(playerid, COLOR_ERROR, gString); } EDIT am omis ceva
  19. Am vazut ca este foarte cautat acest sistem deoarece cand cineva adauga ceva nou se iau cam toti dupa el asa ca m-am gandit sa va postez acest tutorial, desigur el va trebui configurat pe gmul vostru si "calibrat" pentru baza voastra de date si variabilele voastre de case. Sa incepem. In baza voastra de date veti crea un tabel nou numit garages, cu 2 variabile de tip integer si 3 de tip float cum este in imaginea de mai jos Acum in gm vom defini variabilele necesare: enum gInfo { gID, Float: gX, Float: gY, Float: gZ, gHouse } new GarageVariable[100][gInfo];//100 trebuie inlocuit cu numarul de case din joc new GarageNum;//numarul total de garaje care vor fi pe server new Text3D:GarageLabel[sizeof(GarageVariable)];//Textul pentru fiecare garaj in parte Acum vom crea publicul pentru incarcarea datelor din baza de date. forward OnLoadGarages(); public OnLoadGarages() { new Cache:resul = mysql_query(SQL,"SELECT * FROM `garages` ORDER BY `garages`.`ID` ASC"); new x,temp[144]; for(new i,j=cache_get_row_count();i!=j;++i) { x++; GarageNum++; cache_get_field_content(i,"ID", temp); GarageVariable[x][gID] = strval(temp); cache_get_field_content(i,"X", temp); GarageVariable[x][gX] = floatstr(temp); cache_get_field_content(i,"Y", temp); GarageVariable[x][gY] = floatstr(temp); cache_get_field_content(i,"Z", temp); GarageVariable[x][gZ] = floatstr(temp); cache_get_field_content(i,"House", temp); GarageVariable[x][gHouse] = strval(temp); } cache_delete(result); printf("%d Garages Loaded", GarageNum); return 1; } Iar la OnGameModeInit vom adauga simplu LoadGarages(); //iar sub el vom crea textul new textg[144]; for(new g=1; g<=GarageNum; g++) { DestroyDynamic3DTextLabel(GarageLabel[g] format(textg, sizeof(textg),"{FFFFFF}Garaj nr. %d\nOwner %s",g,HouseInfo[GarageVariable[g][gHouse]][hOwner]);//hOwner si HouseInfo va reprezante numele variabilelor din gamemodeul vostru GarageLabel[h] = CreateDynamic3DTextLabel(textg ,0x0066FFFF,GarageVariable[g][gX], GarageVariable[g][gY], GarageVariable[g][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0); } Pana aici am creat tabelul am incarcat datele din baza de date in variabilele din gm si am creat textul la fiecare garaj in parte. Mai departe vom crea comenzile Comanda de intrat si iesit din garaj CMD:garage(playerid, params[]) { new g=-1; new house = PlayerInfo[playerid][pHouse];// variabila playerului de casa pentur a putea folosi comanda if(house == 0) return SCM(playerid, COLOR_LIGHTRED, "You don t have a house."); for(new h = 1; h <= GarageNum; h++)// vom face o verificare peste toate garajele de pe server si vom vedea daca playerul se afla la intrarea acestuia { if(PlayerToPoint(5.0, playerid, GarageVariable[h][gX],GarageVariable[h][gY],GarageVariable[h][gZ])) g = h;// vom seta variaibla idul garqjului la care se afla playerul } if(GetPlayerVirtualWorld(playerid)==0) { if(g==-1) return 1;//daca variabila este -1 adica default inseamna ca nu este langa un garaj if(GarageVariable[g][gHouse] != house) return SCM(playerid,COLOR_LIGHTRED,"This garage is not yours");// verificam daca garajul apartine casei playerului if (GetPlayerState(playerid) == 2)//daca playerul este in masina { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 1302.519897,-1.787510,1001.028259);//pozitia de garaj care am gasito eu SetPlayerInterior(playerid,1);// interiorul grajului LinkVehicleToInterior(tmpcar,1);//setam interiorul masinii SetVehicleVirtualWorld(tmpcar, g);//setam virtual worldul garajului pentru a sti unde sa iesim SetPlayerVirtualWorld(playerid,g);//la fel si pentru masina pentru a putea fi vazuta de playeri PutPlayerInVehicle(playerid, tmpcar, 0);//punem playerul inapoi ca sofer in masina SCM(playerid, COLOR_GRAD1, "Bun venit in garaj.");//trimitem un mesaj de bun venit } else//daca playerul este pe jos { SetPlayerPos(playerid, 1302.519897,-1.787510,1001.028259); SetPlayerVirtualWorld(playerid,g); SetPlayerInterior(playerid,1);// interiorul grajului SCM(playerid, COLOR_GRAD1, "Bun venit in garaj."); } } else { if(IsPlayerInRangeOfPoint(playerid,20,1302.519897,-1.787510,1001.028259))//coordonatele interiorului { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, GarageVariable[GetPlayerVirtualWorld(playerid)][gX],GarageVariable[GetPlayerVirtualWorld(playerid)][gY],GarageVariable[GetPlayerVirtualWorld(playerid)][gZ]);// setam pozitia la coordonatele garajului care are idul egal cu virtual worldul playerului SetVehicleVirtualWorld(tmpcar, 0); LinkVehicleToInterior(tmpcar,0); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); PutPlayerInVehicle(playerid, tmpcar, 0); } else { SetPlayerPos(playerid, GarageVariable[GetPlayerVirtualWorld(playerid)][gX],GarageVariable[GetPlayerVirtualWorld(playerid)][gY],GarageVariable[GetPlayerVirtualWorld(playerid)][gZ]); SetPlayerVirtualWorld(playerid,0); SetPlayerInterior(playerid,0); } } } return 1; } Comanda de creat CMD:gcreate(playerid, params[]) { if(PlayerInfo[playerid][pAdmin] < 8) SCM(playerid, -1,"You don t have acces");// restrictia pentru admini daca aveti diferit veti schimba cum aveti voi in gm new house; if(sscanf(params, "d", house)) return SCM(playerid,COLOR_WHITE,"Folosire: /gcreate <houseid>");//se va scrie gcreate si idul casei care va fi asociat garajului new Query[256],Float:X,Float:Y,Float:Z; GetPlayerPos(playerid,X,Y,Z);// vom crea garagul la pozitia curenta de unde sa foloseste comanda mysql_format(SQL, Query, sizeof(Query), "INSERT INTO `garages` (`X`, `Y`, `Z`,`House`) VALUES ('%f', '%f', '%f', '%d')", X,Y,Z,house); new Cache:result = mysql_query(SQL, Query); GarageNum++;// vom creste numarul de garaje pe server new i = cache_insert_id();// acum vom genera idul din baza de date care nu este important in joc si nu afecteaza cu nimic, este doar pentru baza de date pentru a crea o ordine cache_delete(result); GarageVariable[i][gID] = i; GarageVariable[i][gX] = X; GarageVariable[i][gY] = Y; GarageVariable[i][gZ] = Z; GarageVariable[i][gHouse] = house; DestroyDynamic3DTextLabel(GarageLabel[i]); format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",i,HouseInfo[GarageVariable[i][gHouse]][hOwner]); GarageLabel[i] = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[i][gX], GarageVariable[i][gY], GarageVariable[i][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0); format(Query, sizeof(Query), "Garaj creat cu succes. ID %d, coordonate (%f, %f, %f), casa %d.", i, X,Y,Z, house); SCM(playerid, COLOR_WHITE, Query); return 1; } Comanda pentru distrus garajul CMD:destroygarage(playerid, params[]) { if(PlayerInfo[playerid][pAdmin] < 7) SCM(playerid, -1,"Admin to low"); new i; if(sscanf(params, "d", i)) return SCM(playerid,COLOR_WHITE,"folosire /destroygarage <id>"); new Query[200]; GarageVariable[i][gX] = 0; GarageVariable[i][gY] = 0; GarageVariable[i][gZ] = 0; GarageVariable[i][gHouse] = 0; format(Query, sizeof(Query), "DELETE FROM `garages` WHERE `ID`='%d'", i); mysql_query(SQL ,Query); DestroyDynamic3DTextLabel(GarageLabel[i]); SCM(playerid, COLOR_GOLD, "Garage destroyed"); return 1; } Comanda pentru mutat garajul CMD:movegarage(playerid, params[]) { if(PlayerInfo[playerid][pAdmin] < 7) SCM(playerid, -1,"Admin to low"); new i; if(sscanf(params, "d", i)) return SCM(playerid,COLOR_WHITE,"folosire: /garagepos <id>"); new Query[200],Float:X,Float:Y,Float:Z; GetPlayerPos(playerid,X,Y,Z); GarageVariable[i][gX] = X; GarageVariable[i][gY] = Y; GarageVariable[i][gZ] = Z; format(Query, sizeof(Query), "UPDATE `garages` SET `X`='%f',`Y`='%f',`Z`='%f' WHERE `ID`='%d'",GarageVariable[i][gX],GarageVariable[i][gY],GarageVariable[i][gZ], i); mysql_query(SQL ,Query); DestroyDynamic3DTextLabel(GarageLabel[i]); format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",i,HouseInfo[GarageVariable[i][gHouse]][hOwner]); GarageLabel[i] = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[i][gX], GarageVariable[i][gY], GarageVariable[i][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0); SCM(playerid, COLOR_GOLD, "Garage moved"); return 1; } Si mai sunt 2 scripturi de adaugat la comenzile de cumparat si vandut casa for(new g=1; g<= GarageNum; g++) { if(GarageVariable[g][gHouse]==house) { DestroyDynamic3DTextLabel(GarageLabel[g]); format(Query, sizeof(Query),"{FFFFFF}Garaj nr. %d\nOwner %s",g,HouseInfo[GarageVariable[g][gHouse]][hOwner]); GarageLabel[g] = CreateDynamic3DTextLabel(Query ,0x0066FFFF,GarageVariable[g][gX], GarageVariable[g][gY], GarageVariable[g][gZ],25, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0); } } Si cam atat pentru acest sistem de dificultate medie as spune eu. Nu este chiar un tutorial as spune pentru ca este prea de a gata totul, iar la filterscripturi nu se putea incadra de aceea l-am postat aici. Daca sunt greseli in tutorial gramaticale sau de script voi remedia, sper ca va este de ajutor si il veti folosi.
  20. la primul dialog ai asta new i = SelectedCar[playerid] ei bine tu mai departe ai peste tot PlayerInfo[playerid][pCarID] iar aceasta este o matrice, tu ai nevoie de un tablou tridimensional adica trebuie sa mai adaugi [integer] deci vei inlocui peste tot PlayerInfo[playerid][pCarID] cu PlayerInfo[playerid][pCarID] pentru ca tu ai nevoie de i este variabila SelectedCar[playerid]
  21. Vina mea inlocuieste cu KEY_WALK acel key_fire http://wiki.sa-mp.com/wiki/Keys
  22. Cauta OnPlayerKeyStateChange si adauga if(newkeys == KEY_FIRE) cmd_specoff(playerid," ");
  23. Sunt mai multe metode, daca sistemul tau de case este facut bine mai dynamic sa zic asa ai putea doar sa adaugi la comanda de buyhouse sa nu se mai treaca casa pe variabila ci pur si simplu sa ii seteze hOwner nunele playerului iar comenzile de casa sa fie restrictionate nu din pHousekey==0 ci din strmatch playerbame hOwner dar este mai complicat si mai greu de inteles daca nu esti familiarizat cu scripurile. Ai putea crea o variabila nou in tabel si gm pHousekey2 iar la buyhouse adaugi la restrictia de "ai deja o casa" if (playerinfo playerid phouse!=999) un && playerinfo playerid phouse2 !=999 iar apoi cand se seteaza variabila de phousekey in idul casei modifici if ( playerinfo playerid phousekey !=999) phousekey = houseid else phousekey2 = houseid Dad cum spuneam scriptul de adaugare slot pentru casa este mai complex pentru incepatori sa zic asa.
×
×
  • 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.