Jump to content

shane

Membru
  • Posts

    124
  • Joined

  • Last visited

  • Days Won

    19

shane last won the day on January 18 2023

shane had the most liked content!

3 Followers

Profile Information

  • Sex
    Masculin
  • Location
    127.0.0.1:8000
  • In-game Name
    shane
  • Level of knowledge
    Avansat

Contact Methods

  • Discord
    shane /aka Bugsy#4354

Recent Profile Visitors

1,206 profile views

shane's Achievements

  1. Salut @Micu_Gamer, Problema ta poate fi cauzata de lipsa unor pluginuri / unul sau mai multe pluginuri nu sunt la versiunea compilata cu gamemodeul / nu sunt compatibile cu hostul tau (spre ex, pentru unele firme de hosting, ai nevoie de o anumita versiune MySQL). Verifica toate erorile din fisierul server_log.txt, si vei gasi cauza problemei. Succes!
  2. Salut @CiprianRIN, Ai in vedere cateva detalii: Incarci datele din baza de 2 ori, odata prin functia LoadFactionVehicle, si odata in comanda /fveh. Odata ce le-ai incarcat prin LoadFactionVehicle, si ai alocat datele in variabile, nu mai e nevoie sa le incarci iar, in comanda /fveh, ci pur si simplu folosesti datele deja incarcate cu LoadFactionVehicle, si le aloci variabilele in comanda, detectand factiunea. Incarci un maxim de 5 modele, pentru fiecare factiune? Nu prea cred ca are rost, poti exclude limita asta. Iar problema pentru care tie iti incarca doar un model, e pentru ca tu cand incarci datele din baza, iti incarca ID-ul din baza, in ordine crescatoare incepand cu 0/1, pana la 20, iar in dialog, iti detecteaza id-ul din baza, in functie de factiune. Deci practic, daca tu din baza, extragi a 2-a sau a 3-a linie din tabel, pentru factiunea 1, tie in dialog iti detecteaza doar prima linie. Nu stiu cum sa iti explic mai bine, dar iti dau un exemplu unde ai gresit: Sa spunem ca iti incarca din baza, al 3-lea rand, acesta fiind: id factionID VehID 1 1 560 ... 3 1 411 fVehicle[v][y][vfID] = cache_get_field_content_int(v, "factionID"); v = 3 Iar in dialog, iti detecteaza in loc de 3, factiunea (1) fVehicle[f][listitem][vfVehID] f = PlayerInfo[playerid][pMember] = 1 Ca rezultat, iti spawneaza masina pe care o ai pe primul rand in baza. Deci in loc de f = 1, ar trebui sa fie f = 3 Nu imi trece prin cap cum ti-as putea exprima mai bine. Ghideaza-te din tutorialul acesta mai bine:
  3. shane

    Zeex compiler

    Salut @Zaken, Daca folosesti o versiune mai veche a compilerului, actualizarea lui ar putea rezolva problema ta.
  4. Salut @viji, Cel mai probabil, problema provine de la linia: if(newkeys == KEY_YES) Forma corecta pentru a verifica daca o tasta este apasata, este aceasta (ex tasta Y): if(newkeys & KEY_YES) (diferenta fiind ca am inlocuit == cu &) How to NOT to check for a key Let's presume that you want to detect when a player presses their FIRE button, the obvious code would be: if (newkeys == KEY_FIRE) This code may even work in your testing, but it is wrong and your testing is insufficient. Try crouching and pressing fire - your code will instantly stop working. Why? Because "newkeys" is no longer the same as "KEY_FIRE", it is the same as "KEY_FIRE" COMBINED WITH "KEY_CROUCH". How to check for a key So, if the variable can contain multiple keys at once, how do you check for just a single one? The answer is bit masking. Each key has its own bit in the variable (some keys have the same bit, but they are onfoot/incar keys, so can never be pressed at the same time anyway) and you need to check for just that single bit: if (newkeys & KEY_FIRE) Note that the single & is correct - this is a bitwise AND, not a logical AND, which is what the two ampersands are called. Pentru mai multe detalii, verifica wiki. Daca totusi, inca intampini probleme, atunci, alte cauze ar fi, cum s-a mentionat si mai sus, variabila 'SpecialQuest' sa fie 0 (false), sau sa nu iti fie detectata pozitia obiectului de la quest. Poti adauga cateva verificari, cum ar fi cateva mesaje de test, atunci cand jucatorul nu se afla langa pozitia obiectului spre exemplu, sa-i returneze un mesaj (return SendClientMessage(playerid, -1, "Nu te afli langa obiect");). Totusi, daca nu ai omis nimic din sistem, mai mult ca sigur, cred ca problema provine de la ce ti-am spus prima data, mai sus. O dimineata/zi/seara buna!
  5. Foloseste aceasta functie, care ar trebui sa-ti functioneaze (teoretic): stock SendCloseMessage(playerid, color, const message[], Float:range = 5.0) { new virtualid = GetPlayerVirtualWorld(playerid), String[124], Float: X, Float: Y, Float: Z; GetPlayerPos(playerid, X, Y, Z); foreach(new i : Player) { if(IsPlayerConnected(i)) { if(IsPlayerInRangeOfPoint(i, range, X, Y, Z) && GetPlayerVirtualWorld(i) == virtualid) { format(String, sizeof String, "%s {ffff00}says: %s", GetName(playerid), message); SendClientMessage(i, color, String); } else if(IsPlayerInRangeOfPoint(i, range - 5.0, X, Y, Z) && GetPlayerVirtualWorld(i) == virtualid) { format(String, sizeof String, "%s {ff0000}says: %s", GetName(playerid), message); SendClientMessage(i, color, String); } } } return true; } Practic, daca tu pui range 10.0 (10m), jucatorii vor primi o culoarea anume, pe care o setezi din format (ex, eu am pus: {ffff00}), iar daca e la -5.0 fata de rangeul setat, va fi alta culoare. Lucrurile astea le modifici tu, dupa bunul plac. Exemplu folosire: SendCloseMessage(playerid, COLOR_ORANGE, "Salut!", 10.0); RESULT: "shane (culoare portocaliu)" "says: Salut! (culoare rosie) Cam atat, daca sunt probleme, ma anunti, daca nu, succes!
  6. Salut @Xtrem_Maddox, Pune functia ProxDetector pe pastebin, ca nu stiu cum functioneaza, si poate te pot ajuta. Deci daca jucatorul e la 5m spre ex fata de alt jucator, sa apara in chat: John says: Hello!, iar daca e la 15m, sa-i apara in chat: John says: Hello! (Ca un exemplu)
  7. Salut @qAlex, Poți începe prin a descărca fișierele unui server de sa-mp, pe care le găsești la linkul acesta => https://www.sa-mp.ro/downloads/ Dezarhivezi conținutul într-un folder nou. Gamemodeul îl vei începe prin accesarea programului pawno.exe, pe care îl vei regăsi în folderul pawno, din arhiva descărcată. Există și alte programe de editat și respectiv compilat un gamemode (ex Sublime text sau Visual Studio Code), însă pentru inceput, poți începe cu programul pawno, din arhiva. După ce deschizi programul, creezi o filă noua, pe care o vei salva în folderul 'gamemodes', din arhiva descărcată, cu o denumire pe care o dorești, urmand sa compilezi fișierul după salvare, folosind butonul cu iconița albastra, din meniu. După compilare, dublu click pe fișierul samp-server.exe, care îți va porni o consola. După ce consola a pornit, poți adăuga serverul tau in lista, folosind adresa de IP 127.0.0.1 (doar tu poți intra pe server, pe acest IP). Mai departe, te informezi singur de pe YouTube sau din informațiile oferite pe acest forum. Daca vrei să înveți, trebuie sa o faci singur, eu doar ți am spus cum poți începe. Mult succes! Daca ai întrebări, îmi poți trimite un mesaj privat, iar când accesez din nou forumul, îți voi răspunde, sau mai deschide un topic/întrebare pe forum, iar cineva îți va răspunde. O dimineață/zi/seara buna!
  8. La mulți ani tuturor!
  9. Update 1.00.03: - realizat un sistem de vehicule, in proportie de 70% (comenzile disponibile sunt /park, /vehicles [respectiv /v], si /vcreate), iar in meniul /vehicles veti regasi optiunile, functionale: Vehicle info, Tow Vehicle (/park), Find Vehicle. De asemenea, este contorizat nr. de km parcursi, si numarul de zile de la obtinerea vehiculului pe cont. - adaugat, odata cu sistemul de vehicule personale, si un sistem de alimentare (carburant, respectiv curent pentru vehiculele de tip Electric). Desi nu poti face mare lucru cu ideea de vehicul Electric in sa-mp, pe partea de estetic, insa pe partea de functionalitate, se poate realiza cate ceva, unele avantaje fata de tip-ul de vehicul pe carburant, cum ar fi alimentarea gratuita la statiile pe care le amplasati in benzinarii sau alte locatii (pe care am adaugat-o eu), iar ca idei pentru voi, nr de km/h in plus, taxe de 0$ la asigurare, si altele ce va mai trec prin minte. - am mai rezolvat cateva probleme minore, ce le-am intalnit pe parcurs, si am adaugat cateva functii noi, de care sa ma folosesc acum, si pe viitor. - mai am cate ceva de care m-am apucat, de nu am terminat. Nici pe asta nu l-am terminat complet, dupa cum am precizat mai sus la sistemul de vehicule, dar am inceput sa ma plictisesc grav, ca au intervenit altele, si am facut pauze. * textdraw cu procesul de alimentare si panoul creat de mine (Electric Car Charger) * === Download 1.00.03 === Download: https://bit.ly/3WwG2hw VirusTotal: https://bit.ly/3jzzjoi =================== * baza de date se afla in arhiva / accept si sfaturi sa stiti ca nus perfect (am lasat si fisierele .exe de la sa-mp, de asta apare warninguri, plus pawncmd.dll care e detectat, insa e cel oficial, il puteti inlocui daca aveti dubii)
  10. shane

    Dublu click

    Salut @Browse, In legatura cu ce ai spus mai sus, nu trebuie sa faci neaparat un timer pentru asta. Mai avantajos ar fi sa te folosesti de functia 'GetTickCount'. Iti voi prezenta un exemplu: // va trebui sa creezi o variabila noua, per jucator (adica playerid) new clicked_TickCount[MAX_PLAYERS]; if((GetTickCount() - clicked_TickCount[playerid]) < 500) { //aici vei adauga ce se va intampla, daca va apasa de 2 ori pe textdraw si vei reseta variabila clicked_TickCount[playerid] = 0; } else clicked_TickCount[playerid] = GetTickCount(); // iar aici, vei detecta momentul in care a fost apasat textdraw-ul, daca nu a fost apasat in mai putinde 500 de milisecunde (cred, nu mai stiu cum e la functia asta, dar imi e prea lene sa mai caut) Iar daca vrei sa specifici si textdraw-ul, va trebui sa stochezi id-ul textdrawului intr-o alta variabila, tot per player (playerid), iar codul va arata ceva de genul: // va trebui sa creezi o variabila noua, per jucator (adica playerid) // am refacut putin codul, sa arate mai bine si mai aranjat enum TEXTDRAW_DUBLE_ENUM { TEXTDRAW_CLICKED_TICK, TEXTDRAW_CLICKED_ID }; new TEXTDRAW_VARIABLE[MAX_PLAYERS][TEXTDRAW_DUBLE_ENUM]; //in functia OnPlayerClickTextdraw (sau PlayerTextdraw), adaugi urmatoarele in codul tau: if((GetTickCount() - TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_TICK]) < 500 && TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_ID] == clickedid) { //aici vei adauga ce se va intampla, daca va apasa de 2 ori pe textdraw si vei reseta variabila TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_TICK] = 0; TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_ID] = -1; //de asemenea, vei reseta si textdraw-ul pe care a apasat } else { TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_TICK] = GetTickCount(); // iar aici, vei detecta momentul in care a fost apasat textdraw-ul, daca nu a fost apasat in mai putinde 500 de milisecunde (cred, nu mai stiu cum e la functia asta, dar imi e prea lene sa mai caut) TEXTDRAW_VARIABLE[playerid][TEXTDRAW_CLICKED_ID] = clickedid; // iar aici, vei seta id-ul textdraw-ului pe care a dat click prima data. } Eu nu stiu exact ce vrei tu sa faci, dar te poti ajuta de exemplele pe care ti le-am oferit. Practic, nici nu mai lua in calcul primul raspuns, asta e mult mai bun. Posibil ca 500 de milisecunde sa fie cam mult, cred ca cel mai bine incerci cu 300 sau 400, pe acolo. O zi/seara buna!
  11. shane

    Dublu click

    Salut @Browse, Poti face pur si simplu o variabila, la care sa adaugi '+1', de fiecare daca cand jucatorul da click pe textdraw. Spre exemplu: new click_Times[MAX_PLAYERS]; click_Times[playerid] ++; if(click_Times[playerid] == 2) { //ce se intampla cand a apasat de 2 ori. //dupa care, va trebui sa resetezi variabila click_Times[playerid] = 0; } else { //ce se intampla cand apasa o singura data } Cam asta e ideea. O seara/zi buna!
  12. Salut @mrrares19, Acest include te poate ajuta (scroll prin comentarii pentru versiunea 2). O dimineata/zi/seara placuta!
  13. Salut @TheGodfather, Nu prea cred ca exista asa ceva, dar poti face un timer care sa-l atribui id-ul actorului, atunci cand s-a finalizat animatia. Asta ca idee. Daca vrei sa te ajut cu asta, poti lasa un reply, iar daca am timp, o sa-ti raspund eu sau altcineva. O zi buna!
  14. shane

    -

    @HusiCj, Mai mult ca sigur trebuie sa faci niste schimbari si in functia "buy_accs", dar nu vreau sa-ti dau totul mura'n gura, si doar o idee despre cum poti sa rezolvi asta. Schimba Dialogul din prima poza cu urmatorul: case DIALOG_BUY_ACCS: { if(!reponse) return true; new id = ObjectSlot[playerid][objectID[playerid]]; if(PlayerInfo[playerid][pPremiumPoints] < objectInfo[id][objPremium]) return SendClientMessage(playerid, COLOR_LGREEN, "You don't have enough premium points!"); PlayerInfo[playerid][pPremiumPoints] -= objectInfo[id][objPremium]; Update(playerid, pPremiumPointsx); buy_accs(playerid); }
  15. shane

    -

    Salut @HusiCj, Poti incepe prin a elimina randul legat de optiunea de a le cumpara folosind bani. In acest fel, dialogul tau va arata in felul urmator: new String[24], id = ObjectSlot[playerid][ObjectID[playerid]]; format(String, sizeof String, "Premium points\t%s", FormatNumber(objectInfo[id][objPremium])); ShowPlayerDialog(playerid, DIALOG_BUY_ACCS, DIALOG_STYLE_TABLIST_HEADERS, "SERVER: Buy accessories", String, "Select", "Exit"); Desigur, mai trebuie sa modifici si in DIALOG_BUY_ACCS, astfel incat sa nu iti ia bani, ci puncte premium pe accesoriu. Dar asta nu e cel mai bun mod de a-ti rezolva problema. Codul tau ar trebui sa fie rescris mai mult de atat. Posteaza si dialogul "DIALOG_BUY_ACCS", si vei primi un raspuns mai explicit ori de la mine, ori de la alta persoana de pe aceasta comunitate. O zi buna!
×
×
  • 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.