Jump to content

shane

Membru
  • Posts

    124
  • Joined

  • Last visited

  • Days Won

    19

Posts posted by shane

  1. Salut @R4zvyy,

    Nu stiu cum functioneaza acest 'Reborn'. Am auzit ceva de resetat levelul, rp-urile si nu mai stiu ce. Mai jos o sa-ti explic cum ai putea realiza asta.

    Iti voi explica cum ar trebui sa vina in '/shop', ca am vazut mentionat mai sus.

    1. In comanda '/shop' vei adauga o noua optiune, 'Reborn', care ar trebui sa vina ceva de genul. Nu are rost sa-ti mai explic cum faci asta, comanda poate sa difere de ce iti explic eu, pur si simplu cauti comanda 'shop' in gamemode, te uiti pe acolo si adaugi o optiune noua, dupa cum sunt adaugate celelalte.
    2. Dupa care vei merge la dialogul de confirmare al comenzii /shop (In cele mai mari cazuri, dialogul e 'DIALOG_SHOP'), si vei adauga variabilele pe care vrei sa le resetezi. Exemplu:
    case nr_urmatorul_case:
    {
    	playerData[playerid][pLevel] = 
    	playerData[playerid][pRespect] = 
    	playerData[playerid][pMoney] = 0;
    	//etc, ce vrei tu sa mai resetezi.
    
    	//aici dam un bonus de 100 pp-uri, am vazut ca ai scris pe undeva mai sus, daca vrei sa mai dai ceva, adaugi tu cum doresti
    	playerData[playerid][pPremiumPoints] += 100;
    
    	new 
    		_Query[80];
    
    	//dupa care, va trebui sa actualizezi noile date in baza de date
    	mysql_format(SQL, _Query, sizeof _Query, "UPDATE `users` SET `Level`=0, `Respect`=0, `Money`=0, `PremiumPoints`=%d WHERE `ID`=%d;", playerData[playerid][pPremiumPoints], playerData[playerid][pSQL]);
    	mysql_tquery(SQL, _Query, "", "");
    
    	SendClientMessage(playerid, -1, "Contul tau a primit 'Reborn'. Ti-a fost resetat levelul, punctele de respect si banii.");
    	SendClientMessage(playerid, -1, "Drept bonus pentru aceasta actiune, ai primit: 100 de puncte premium.");
    
    	//etc, alte actiuni care vrei sa se intample
    }

     

    Variabilele si modul in care ai tu creata comanda /shop poate sa difere. Eu ti-am dat un exemplu, nu e nimic complicat, e treaba de cateva minute. Ce iti ramane tie de facut e sa asezi codul in script asa cum vrei si sa iti pui variabilele, eu ti-am dat ideea.

    Bafta, mentionez ca doar am auzit de acest sistem de Reborn.

    • Like 1
    • Upvote 1
  2. @R4zvyy

    Primul warning (linia 1): Schimba din "public load_Maps()", in "function load_Maps()", sau adauga "forward load_Maps();" inainte de "public load_Maps()".

    Eroarea de la linia 3: Probabil ai lasat faza cu RemoveBuilding in functia respectiva. Ca sa intelegi mai bine, tu nu folosesti functia load_Maps() pe un jucator. Sterge toate randurile care contin cuvantul "playerid" si eroarea o sa dispara. Insa, cum ti-am spus si mai sus, daca randurile sunt de genul "RemoveBuildingForPlayer(playerid, etc etc..);", atunci, aduni toate randurile la un loc si le pui la OnPlayerConnect, in gamemode. Mai clar de atat nu stiu cum sa-ti explic.

    Eroarea de la linia 2164: Adauga in include-ul tau, sus de tot (prima linie), "#tryinclude <YSI_Coding\y_hooks>"

  3. Salut @R4zvyy,

    Pentru a folosi mappingul din include, fa urmatoarele:

    • Schimba numele din LoadMaps in altceva (ex: load_Maps)
    • Daca folosesti y_hooks, poti foarte simplu, sa le introduci pe server apeland OnGameModeInit folosind y_hooks (ex: hook OnGameModeInit() return load_Maps();), direct in include-ul tau. Daca nu, va trebui sa adaugi o linie noua in gamemode, la publicul OnGameModeInit, adica sa apelezi noua ta functie, care sa introduca mappingul. (Ex: inainte de return 1;, in OnGameModeInit, adaugi load_Maps();)
    • Sterge linia RemoveBuildingForPlayer si muta-l la OnPlayerConnect.

    Functia ta ar trebui sa arate asa:

    public load_Maps()
    {
    	CreateObject(etc..);
        	CreateObject(etc..);
    
    	return true;
    }
    
    //cu y_hooks, direct in include-ul tau
    hook OnGameModeInit() return load_Maps();
    
    //fara y_hooks, adaugi direct in OnGameModeInit, din gamemodeul tau (.pwn)
    public OnGameModeInit()
    {
    	//restul de cod pe care l ai..
    	//dupa care..
    
    	load_Maps();
    
    	return true;
    }

    Dupa cum vezi, a disparut si acel " ; " pe care il ai tu la "public LoadMaps(); {"

    Conform erorilor tale, LoadMaps exista deja intr-un include sau in gamemode-ul tau, deci de asta este necesar ca numele noii tale functii sa fie schimbat. Cat despre eroarea de la linia 27, rezolvarea va veni odata cu modificarile pe care le vei face, dupa exemplul pe care ti l-am oferit.

    Mai clar de atat nu iti pot explica.

    Multa bafta!

  4. Salut @UbiquiTouS.,

    Problema provine de la linia respectiva, deoarece ai adaugat " ; " la sfarsitul verificarii, fara nici o explicatie in plus.

    O verificare arata in felul urmator:

    if(variabila != 12 && variabila != 15 && variabila != 20) return SendClientMessage(playerid, -1, "You are not in Taxi/Uber/etc.");
    
    // ==> LINIA TA, CU PROBLEMA:
    if(variabila != 12 && variabila != 15 && variabila != 20); <== (;)
    
    // ==> SAU POATE ARATA ASA LA TINE
    if(variabila != 12 && variabila != 15 && variabila != 20);
      return SendClientMessage(playerid, -1, "ceva"); //fapt pentru care va trebui sa elimini acel ; din prima linie, care iti indica problema

    Mai mult de atat nu-ti pot explica in momentu asta, ca nu ma pot gandi la o explicatie mai simpla. Practic, dupa verificarea ta, trebuie sa se intample ceva, ori returnezi un mesaj, ori altceva.

    Iar ca un mic sfat, fara nici o legatura la problema, dar care o sa te ajute in simplitate, e sa creezi o functie care sa detecteze daca e in factiunile respective sau nu, care poate arata ceva de genul:

    isInTransportFaction(playerid) return PlayerInfo[playerid][pMember] != 12 && PlayerInfo[playerid][pMember] != 15 && PlayerInfo[playerid][pMember] != 20 ? false : true;
    
    //==> IAR VERIFICAREA SE FACE IN FELUL URMATOR
    if(!isInTransportFaction(playerid)) return SendClientMessage(playerid, -1, "You are not in Taxi/Uber/Etc.");

    Practic, mai scapi de niste linii de cod, iar cand adaugi o factiune noua, adaugi direct in functia isInTransportFaction noua factiune.

  5. Salut @AnDrEyUpS ,

    In primul rand, nu ar trebui sa setezi variabila StartQuest[playerid] pe 1 (true), inaintea celorlalte verificari. Practic, tu daca nu ai inceput questul si ai dat /startquest, dar nu esti in locatia potrivita (cum ai tu verificarea acolo), variabila StartQuest o sa fie setata pe 1, iar apoi o sa-ti returneze mesajul cum ca nu esti in locatia potrivita. Si probabil de aici si pleaca problema ta.

    Deci, muti variabila StartQuest[playerid] inainte de "return 1;", in asa fel incat sa fie setata doar in cazul in care nu intampini vr-o problema (adica sa nu ai licenta de condus, sau sa nu fii in locatia potrivita), cum ai tu facute verificarile. La asta ma refer prin problema.

    Cam asa ar trebui sa arate comanda, ca sa-ti faci o idee despre ce am zis:

    CMD:startquest(playerid, params[])
    {
        	if(StartQuest[playerid]) return SCM(playerid, COLOR_SPECIALMISSION, "Special Quest: Text.");
        	//StartQuest[playerid] = 1; ==> ASTA STERS
    	if(!IsPlayerInRangeOfPoint(playerid, 3.5, 1123.0138, -1127.3977, 23.8047)) return SCM(playerid, COLOR_INFO, "Eroare: Nu esti la locatia potrivita.");
    	if(pInfo[playerid][pCarLic] > 1) return SCM(playerid, COLOR_INFO, "Eroare: Nu ai licenta de condus!");
    	SetPlayerRaceCheckpoint(playerid, 0, 2091.1172 ,-1278.4653, 26.1797, 2091.1172, -1278.4653, 26.1797, 3.5), CP[playerid] = 348;
    	SCM(playerid, COLOR_SPECIALMISSION, "Special Quest: Text.");
    	StartQuest[playerid] = 1; // ==> ASTA ADAUGAT
    	return 1;
    }

     

    • Like 1
  6. ~ V0.02 (20 Sept) ~

    Am adaugat cateva detectari noi pentru urmatoarele tipuri de cheat: Rapid-Fire, Health-Hack, Money-Hack

    Pentru detectarile de la health si money puteti folosi functiile de la sa-mp (SetPlayerHealth si GivePlayerMoney), chiar daca majoritatea s-au obisnuit cu GivePlayerCash sau SetPlayerHealthEx.

    Se aplica ce am scris in primul post (primul reply), va trebui sa mai modificati cate ceva.

    De asemenea, mai astept si sfaturi in privinta lui, optimizari, propuneri, corectari si asa mai departe, iar cu timpul poate o sa-l fac sa poata fi folosit si fara YSI, doar ca asa mi-a venit mie mai usor.

     

    Download: https://bit.ly/3lEzLiE

    VirusTotal: https://bit.ly/3Ay7qRm

  7. SA-MP Anticheat Include

    'Anticheatu' actioneaza impotriva urmatoarelor tipuri de cheaturi: Troll-Hack, Fly-Hack, Speed-Hack, Teleport-Hack, Jetpack, Fake-Kill, Invisible-Hack

    A fost conceput acum aproape 2 ani, dar a ramas lafel de eficient si in ziua de azi.

    Pentru a putea fi folosit, gamemode-ul vostru necesita libraria YSI, acesta foloseste y_hooks si y_timers.

    E simplu de implementat, doar introduceti fisieru in folderul in care va sunt situate include-urile (pawn/include de obicei), adaugati in functia 'SetPlayerPosEx', urmatoarea linie "serverTeleported(playerid);", si includeti fisierul in gamemode prin linia "#include <locatia_voastra/anticheat_EX>"

    Desigur, s-ar putea sa fie anumite diferente care sa impiedice integrarea in gamemode, asta in cazuri rare.. depinde de voi sa il folositi.

    Va trebui sa faceti o verificare, in cazul in care jucatorul e admin, sa nu primeasca kick. Nu am adaugat, pentru ca depinde de la gamemode, la gamemode. Aceasta verificare se adauga in functiile 'OnCheatDetect' si 'OnWarningExecute'. E chestie la care aveti nevoie de cunostinte basic..

    Posibil sa mai adaug cate o verificare, sa il mai modific, cand am dispozitia si timpul necesar.

    Download: https://bit.ly/3jG8X0q

    VirusTotal: https://bit.ly/3jEUm5q

    • Like 1
    • Upvote 1
  8. Salut @ZeNY,

    Eroarea poate fi din urmatoarea cauza: Ori nu ai randurile respective in tabelul din care incerci sa extragi datele, ori nu ai nici un rand in tabel, cu indexul "0", din care tu incerci sa extragi datele respective.

    Exemplu:

    ID	Name	Level
    0	shane	10

    ID "0" nu exista in tabelul 'players', din care vreau sa extrag datele.

    Mai poti verifica si daca ai adaugat tot ce trebuie cand ai facut acest update al versiunii mysql sau poti incerca o alta versiunea R39 (-3, -4, -5, -6 de preferat)

    De asemenea, o posibila problema ar fi diferenta dintre functia respectiva in versiunea mai veche si cea noua.

  9. Salut @seek nephrite,

    Ce iti mai recomand eu, pe langa ce a spus Banditu, elimina variabilele curente de la pin si fa verificarea in felul urmator: Daca jucatorul are in baza de date valoarea din coloana 'Pin', mai mare de 0 (Ex: 1234 pinul meu), sa ii il detecteze ca si cum ar avea un pin pe cont setat. Nu are rost sa creezi atatea variabile.

    Exemplu din care ai putea intelege mai clar la ce ma refer:

    //o variabila noua
    playerVariables[playerid][pPin]
    
    //o functie noua
    
    havePlayerPin(playerid) return playerVariables[playerid][pPin] > 0 ? true : false; //Asta se traduce in felu urmator: Daca jucatorul are pPin mai mare de 0 (ex: 1234), atunci se va returna ca are pin pe cont (true), iar daca nu, se va returna ca nu are pin (false)
    
    //o simpla verificarea in momentul in care se logheaza pe cont
    
    if(havePlayerPin(playerid)) showPinDialog(playerid);
    
    //salvarea pinului in baza
    playerVariables[playerid][pPin] = pinul intrudus;
    etc..

    In alta ordine de idei,

    Daca vrei sa ramai la ideea ta, unul din motivele pentru care nu iti afiseaza dialogul de pin la logare, in cazul in care il ai setat pe cont, e faptul ca nu incarci valoarea din baza de date pentru variabila care detecteaza ca ai un pin setat pe cont. Practic, variabila ta e 0, ceea ce inseamna ca nu ai un pin pe cont.

  10. Salut @VAurel,

    Tu ai creat variabila vText, care sa corespunda unui vehicul anume (exemplu: vText[vehicleid]). In liniile in care iti afiseaza erorile, nu ai trecut id-ul vehiculului pentru care ai creat acel obiect (vText), pe care vrei sa l atasezi.

    Corect ar fi in felul urmator:

    AttachDynamicObjectToVehicle(vText[vehicleid], vehicleid, 0.0, -0.5, 0.55, 0.0, 0.0, 0.0); // 1601

    Daca nu ai inteles, verifica pe rand ce am adaugat eu in plus mai sus, cu o linie din codul tau, de unde porneste eroarea.

    Ti-am explicat cat mai simplu zic eu. 

    Bafta.

    • Thanks 1
  11. Salut @FloriNNN,

    Asta s-ar putea sa te ajute: 

    Instaleaza versiunile atat pentru x64 cat si pentru x86 (Versiunea ARM64 nu ar trebui sa aiba importanta)

    Apropo, crashdetect trebuie pus inainte de sscanf (adica primul in lista), am impresia ca iti spune cand pornesti serverul de treaba asta.

    Mai poti incerca sa muti linia plugins imediat dupa linia gamemode0, nu am incercat niciodata, e doar o sugestie, desi nu prea cred ca are vr-o legatura ordinea lor.

    • Like 1
  12. Salut @marianpro2020,

    Iti pot oferi doua posibile rezolvari pentru problema ta, insa, sa-ti explic ce semnifica acel "url". O sa-ti explic "ca la prosti" (fara nici o legatura, nu te cunosc), link-ul respectiv trebuie sa se termine cu .mp3 (ex: sa-mp.ro/melodie.mp3 sau domeniu.ro/melodie.mp3).

    Deci, ca sa folosesti o melodie de pe youtube, tu trebuie sa convertesti melodia respectiva in format .mp3 si sa folosesti linkul respectiv sau poti folosi o resursa cum ar fi aceasta (click pe "aceasta") ori poti converti melodia pe site-ul acesta (click pe "acesta").

    Multa bafta!

  13. 21 hours ago, Andrei[H] said:

    Leam pus corect ca sunt la fel ca la mysql_connect din gm

    Salut @Andrei[H],

    O alta posibila problema pe care o poti avea e ca firma de la care ai cumparat webhost-ul sa nu accepta conexiuni externe cu alte baze de date decat cele gazduite de catre ei. Poti deschide un ticket la firma de host sa le explici problema si sa astepti un raspuns din partea lor. Fie te pot ajuta, fie nu. Eu am patit asta odata pe xservers.ro (nu e reclama).

    (Asta in cazul in care te-ai asigurat bine ca nu ai introdus datele gresit).

  14. Salut @r0hanescu,

    Problema e ca tu nu ai setat o valoare pentru variabila "cash", deci aceasta este default, adică 0. Exemplu:

    new cash = 50000; // valoarea e acum 50000
    P_Data[playerid][pCash] += cash; aici adaugi 50000 la suma curenta.

    Sau poti trece direct 50.000 în pCash fara sa mai creezi variabila respectiva. Ex: 

    P_Data[playerid][pCash] += 50000;

    Iar ca niste sfaturi, la salvarile de genul in baza, foloseste mysql_tquery in loc decat mysql_query. (Diferența e "t" inaintea lui query. Pentru detalii cauta pe forum sau pe internet informatii despre mysql). El se salvează, dar e mai ok in varianta mea.

    Iar ca un alt sfat, ai grija cum concepi sistemul, sa nu detectezi niciodata suma de bani a unui jucător prin intermediul "GetPlayerMoney", pentru ca poți oricand sa-ti faci de cap la hacku si sa dispui de bani infiniti. Uite un exemplu cum sa-l concepi:

    stock GivePlayerCash( playerid, cash ) {
    
    	new Query[ 100 ];
    
    	P_Data[ playerid ][ pCash ] += cash;
    
    	mysql_format( handle, Query, sizeof Query, "UPDATE `conturi` SET `Cash`='%d' WHERE `Nume`='%s';", P_Data[ playerid ][ pCash ], GetName( playerid ) );
    	mysql_tquery( handle, Query, "", "" );
    
    	return true; }
    
    stock GetPlayerCash( playerid ) return P_Data[ playerid ][ pCash ];

    [...] prin exemplu de mai sus, tot ce trebuie sa mai faci e un timer in care sa fie resetata suma de bani din HUD, adica aia din GTA, cu suma de bani pe care o are jucatorul. Ca sa te pun sa mai "faci" si tu ceva, ca practic ti-am oferit pe tava, te las pe tine sa cauti metoda prin care poti face acel timer. Iar ca sa te ajut putin si aici, eu cunosc doar 2 metode, metoda generala a samp-ului, "SetTimer" / "SetTimerEx" sau folosirea unui include din libraria YSI, "y_timers", pe care o si recomand (a 2-a metoda). Daca cauti "YSI by Y_Less" pe google, e primul rezultat.

    Multa bafta.

    • Thanks 1
  15. 7 hours ago, Xtrem_Maddox said:

    Salut. Am un class selection in care i-am adaugat pe Sweet, Ryder si Big Smoke pentru clasa Grove Street Families. Am decis ca vreau ca in locul acestor skinuri, sa bag moduri custom (versiunea lor BETA). Am adaugat modurile in cache, am inlocuit id-urile in AddPlayerClass (de exemplu de la 271 care este Sweet, la noul id de skin custom). Problema este urmatoarea: in loc sa imi arate skinul custom, mi-l arata pe CJ in class selection.

    Drept solutie temporara am decis sa las skinurile vanilla in selection (Sweet - 271 de ex) si la OnPlayerSpawn am facut sa detecteze daca are skinul lui Sweet si sa il inlocuiasca cu versiunea BETA, dar nu e ceea ce vreau.

    Mai pe scurt, modurile custom apar ca CJ in class selection. Banuiesc ca nu sunt compatibile cu selection-ul classic de SAMP si imi recomandati mSelection? Daca da, este greu sa inlocuiesti selection-ul clasic cu mSelection? Intreb deoarece am mai multe clase, cea cu Grove este doar ca exemplu.

    Salut @Xtrem_Maddox,

    Parerea mea sincera, fara nici un subiect referitor la problema ta, deoarece "m-am" jucat doar cateva ore cu versiunea DL si nu pot sa-ti ofer un raspuns la problema, insa.. mie personal mi-ar placea un meniu nou pentru selectarea "gangului" din care vrei sa faci parte. Te poti folosi si de texturi custom din cate stiu, cu care ai putea realiza ceva si mai misto. Ma rog, asta daca folosesti versiunea DL si nu te referi la altceva.

    Si din cate stiu, atunci cand adaugi modele noi pe DL, trebuie sa le pui un id specific, care porneste de la un numar anume special adaugat pentru aceasta versiune. Adica daca tu ai inlocuit skinul 270 cu altul, posibil ca asta sa fie problema.

    Multa bafta.

  16. 10 hours ago, AnDrEyUpS said:

    Bro am uitat sa iti spun ca am comanda /finish pentru startmission cum fac sa adaug chestia aia la /finish gen sa fie verificarea acolo? Cand dau /startmission imi zice ca ai inceput deja misiunea.

    Foarte simplu, precum ti-a explicat si Allexseiggen mai sus.

    Exemplu:

    cmd:finish( playerid, params[] ) {
    
    	if( !startedMission[ playerid ] ) 
    		return SendClientMessage( playerid, -1, "Nu esti intr-o cursa." );
    
    	//dupa care, daca jucatorul este in cursa, ii resetam variabila
    	startedMission[ playerid ] = 0;
    
    	// si restul de cod pe care il ai tu
    
    	return true; }

     

  17. Salut @AnDrEyUpS,

    De ce nu creezi o variabila noua prin care sa verifici daca jucatorul a inceput misiunea?

    Exemplu:

    new startedMission[ MAX_PLAYERS ]; //variabila creata
    
    cmd:startmission( playerid, params[] ) {
    	
    	if( startedMission[ playerid ] ) 
    		return SendClientMessage( playerid, -1, "Deja esti intr-o misiune." );
    
    	startedMission[ playerid ] = 1; //setata pe 1 (adica a inceput misiunea)
    	SendClientMessage( playerid, -1, "Ai inceput o noua misiune." );
    
    	//restul de cod pe care il ai
    
    	return true; }

    Iar cand termini misiunea, resetezi verificarea prin urmatoarea linie "startedMission[ playerid ] = 0;".

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