Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Posts posted by Banditul

  1. Edit: Si ce a spus SebyP e o posibila cauza

    Mesajul erori este destul descriptiv si iti spune ce trebuie sa faci, din pacate locatia erori nu este. Recomandarea mea este verifici atat gm tqu cat si fisierele pe care le incluzi cu #include  si sa verifici daca y_hooks este trecut cum trebuie.

    De asemenea daca folosesti o versiunea mai veche de ysi posibil sa fie vorba si de eventuala eroare in ysi si sa fie nevoie sa actualizezi.

  2. 1 hour ago, TheGodfather said:

    Am primit raspuns. Au spus ca acel plugin e facut cu compuler in ubuntu. Dar serverul ruleaza centos 7. Exista plugin streamer pentru centos 7?

    Doar daca eventual il compilezi tu pe sistem centos7 (poate e nevoie si de ceva modificari nu stiu). Altfel o versiunea mai veche 2.9.4 2.9.3 care iti functioneaza

  3. Ori folosesti o versiunea mai veche a pluginului ori ii rogi pe cei de la host sa instaleze/actualizeze acea librarie (daca hostul tau foloseste centos 7 din pacate o versiunea mai veche e recomandarea mea pe baza unei discuti cu cineva care se afla in aceasi situatie cu streamer 2.9.5 si cei de la support i-au spus ca au deja ultima versiune disponibila a librariei)

  4. Doar o idee nu spun ca asta e problema dar daca ai masinile cu CreateVehicle unul dintre parametri este respawn_delay

    CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0)

    Atat timp cat nu este -1 masinile tale for fi respawnate automat in functie de acel delay (secunde) daca nu sunt folosite

  5. As putea traduce codul pe care il ai in ceva asemanator cu

    enum pData
    {
        // date aici
        STREAMER_TAG_AREA: MusicZone[3],
        // alte date aici eventual
    }
    new Player[MAX_PLAYERS][pData];
    
    if (strcmp("/enablemusic", cmdtext, true) == 0)
        {
            Player[playerid][MusicZone][0] = CreateDynamicCircle(-2130.5364,-2061.0081,63.3233, 30.0, playerid: playerid);
            Player[playerid][MusicZone][1] = CreateDynamicCircle(-2218.7273,-2154.1978,43.6795, 20.0, playerid: playerid);
            Player[playerid][MusicZone][2] = CreateDynamicCircle(-2197.3599,-2254.3499,30.8057, 20.0, playerid: playerid);
            return 1;
        }
        if (strcmp("/disablemusic", cmdtext, true) == 0)
        {
            DestroyDynamicArea(Player[playerid][MusicZone][0]);
            DestroyDynamicArea(Player[playerid][MusicZone][1]);
            DestroyDynamicArea(Player[playerid][MusicZone][2]);
    
            Player[playerid][MusicZone][0] = 0;
            Player[playerid][MusicZone][1] = 0;
            Player[playerid][MusicZone][2] = 0;
            return 1;
        }
    
    public OnPlayerEnterDynamicArea(playerid, areaid) 
    {
        if (areaid == Player[playerid][MusicZone][0])
        {
            PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/0ggegbx6");
        }
        else if (areaid == Player[playerid][MusicZone][1])
        {
            PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/57dvvuy7");
        }
        else if (areaid == Player[playerid][MusicZone][2])
        {
            PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/qvov4zt0");
        }
        
    }
    public OnPlayerLeaveDynamicArea(playerid, areaid)
    {
        StopAudioStreamForPlayer(playerid);
    }

    Stiu ti-am complicat logica si codul dar cel putin asa as vizualiza ce incerci sa faci si anume sa creezi 3 zone pentru player in care sa asculte muzica in momentul in care activeaza acest lucru.

    Acum, poate un cerc nu este potrivit pentru acea zona poate ai nevoie de un dreptunghi sau altceva pentru asta.

    In cazul in care doresti ca acest lucru sa fie mai general si daca consideri ca acele poziti cu muzica sunt pentru toate lumea si nu vor diferi poti folosi codul de mai jos. Desigur poate fi facut mai usor de organizat in cazul in care ai mai multe zone cu muzica dar e ceva de baza, sper ca se intelege.

    enum pData
    {
        // date aici
        HasMusicEnabled,
        // alte date aici eventual
    }
    new Player[MAX_PLAYERS][pData];
    
    if (strcmp("/enablemusic", cmdtext, true) == 0)
        {
            if (Player[playerid][HasMusicEnabled] == false) // Desigur acel Player[][] este cea ce foloseti tu pentru a stoca informatii despre player
            {
                Player[playerid][HasMusicEnabled] = true;
            }
            else
            {
                Player[playerid][HasMusicEnabled] = false;
            }
            
            return 1;
        }
    
    new MusicAreas[3];
    public OnGameModeInit()
    {
        MusicAreas[0] = CreateDynamicCircle(-2130.5364,-2061.0081,63.3233, 30.0);
        MusicAreas[1] = CreateDynamicCircle(-2218.7273,-2154.1978,43.6795, 20.0);
        MusicAreas[2] = CreateDynamicCircle(-2197.3599,-2254.3499,30.8057, 20.0);
    }
    
    public OnPlayerEnterDynamicArea(playerid, areaid) 
    {
        if (Player[playerid][HasMusicEnabled] == true)
        {
            if (areaid == MusicAreas[0])
            {
                PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/0ggegbx6");
            }
            else if (areaid == MusicAreas[1])
            {
                PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/57dvvuy7");
            }
            else if (areaid == MusicAreas[2])
            {
                PlayAudioStreamForPlayer(playerid, "https://uploadir.com/u/qvov4zt0");
            }
        }
    }
    public OnPlayerLeaveDynamicArea(playerid, areaid)
    {
        StopAudioStreamForPlayer(playerid);
    }

    Daca ai intrebari ma poti intreba oricand. Ti-as sugera citesti eventual linkul pe care ti l-am oferit despre cum cum functioneaza streamer si poate ca tema sa citesti despre arrays ( nu neaparat in limbajul pawn )

  6. Din pacate poti avea doar un sigur stream care sa functioenze per player la un moment. Daca pornesti mai multe in acelasi timp doar ultimul va functiona

    Ti-as recomanda eventual sa folosesti streamer mai exact https://github.com/samp-incognito/samp-streamer-plugin/wiki/Natives-(Areas)

    Te poti folosi de areas de la streamer pentru a crea anumite zone pe serverul tau si in momentul in care playerul intra/iese din acea forma pe care o creezi sa pornesti/opresti muzica si desigur bazat eventual pe o variabila gen Player[playerid][HasPlayerMusicEnabled] astfel poti avea muzica in acele zone

  7. Daca ai descarcat si folosesti YSI 5+ acel format de include este invalid. Va trebuie sa faci #include <YSI_Storage\y_ini>

    Daca ai ysi 4 tot este relativ incorect cu noile versiuni de ysi 4, #include <YSI\y_ini> . Vezi \ in loc de /

    Cat despre eroarea cu sscanf va fi nevoie sa creezi un fisier pawn.cfg (neaparat sa fie asa, poti da save as din notepad)  in care sa notezi (daca nu ma insel) 

    -Z+
  8. Nu stiu daca mai functioneaza sau functiona dar poti incerca sa banezi ip playerului si sa il debanezi (aici ma refer la comanda de rcon)

    new string[50], playerIp[17];
    GetPlayerIp(playerid, playerIp);
    format(string, sizeof(string), "banip %s", playerIp);
    SendRconCommand(string);
    format(string, sizeof(string), "unbanip %s", playerIp);
    SendRconCommand(string);
    SendRconCommand("reloadbans"); // eventual pentru siguranta ca fim siguri ca nu mai este banat

    Stiu ca asta genera un timeout si ii dadea kick dupa care il reconecta. Dar nu pot garanta 100%

  9. Te-as ruga daca e posibil sa folosesti ultima versiune de crashdetect  in cazul in care nu folosesti si sa compilezi gm cu argumentul -d3 ( mai specific sa ai un fisier pawn.cfg in folderul pawno cu -d3 scris in fisier sau daca folosesti alt editor decat pawno sa ai -d3 in acel script de build care foloseste pawncc ) si sa recompilezi scriptul. In momentul de fata nu par sa fie prea multe informati de debug ( ma refer mai exact la linia sau locatia mai exacta unde se intampla problema si facand asta poate aflam mai multe

    Dupa mesajul erori pot doar presupune faptul ca in acele timere incerci sa accesezi o functie/variabila/referinta care nu (mai) exista in memorie

  10. Presupun ca este vorba despre verificarea daca jucatorul foloseste o masina de taxi. Ambele variante sunt corecte si ar trebui sa functioneze.

    Intrebarea este, cTaxi[0] cTaxi[1] cTaxi[2] contin masina de taxi? Aici ma refer la

    cTaxi[0] = CreateVehicle(...)/AddStaticVehicle(...);

    Pentru ca daca nu ai asa ceva in codul tau nu o sa functioneze.

    Bonus:

    Quote

    GetPlayerName(id, name1, sizeof(name1));

    Trebuie pus dupa sscanf, pentru ca daca il ai inainte de sscanf variabila id este 0 si nu contine inca id playerului dorit.

  11. In primul rand acele array cu MAX_PLAYERS sunt inutile deoarece toate acele variabile pe care le creezi sunt sterse din memorie in momentul in care comanda atinge ultima acolada.

    In al doilea rand, functia GetPlayerHealth nu returneaza o valoare ci o paseaza prin referinta ceea ce inseamna ca hp tau corect se afla in variabilele: viata viata2 (udne era necesar doar o singura variabila)

    Voiam sa iti repar comanda da codul ala e atat de greu de citit si inteles.

    CMD:heal(playerid, params[])
    {
        if(fMedic[playerid] == 0) return SendClientMessage(playerid, 0xff0000FF, "Nu faci parte din factiunea 'Medic' !");
    
        new id, hp;
        if(sscanf(params, "ud", id, hp)) return SendClientMessage(playerid, 0x00aeffFF, "/healp <playerid/name> <amount>");
        if(!IsPlayerConnected(id) || id == INVALID_PLAYER_ID) return SCM(playerid, 0xff0000FF, "Acel jucator nu este conectat!");
    
        new Float:x, Float:y, Float:z;
        GetPlayerPos(id, x, y, z);
        if(!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z)) return SendClientMessage(playerid, 0xff0000FF, "Nu esti langa acel player!");
        if(GetPlayerMoney(id) < hp*2) return SendClientMessage(playerid, 0xff0000FF, "Acel jucator nu are suficienti lei, pentru acel hp!");
    
        new viata;
        GetPlayerHealth(id, viata);
        if(viata >= 100) return SendClientMessage(playerid, 0xff0000FF, "Acel jucator are deja viata maxima!");
    
        new name[MAX_PLAYER_NAME], name1[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        GetPlayerName(id, name1, sizeof(name1));
    
        format(string, sizeof(string), "Iai oferit lui %s %d heal!", name1, hp);
        SendClientMessage(playerid, 0x00aeffFF, string);
    
        format(string2, sizeof(string2), "Medicul %s ti-a oferit %d heal, iar tu l-ai platit!", name, hp);
        SendClientMessage(id, 0x00aeffFF, string2);
    
        new pay;
        pay = hp*2;
    
        GivePlayerMoney(id, -pay);
        GivePlayerMoney(playerid, hp * 2);
        SetPlayerHealth(id, viata+hp);
    
        return 1;
    }

    Poate asa iti este mai usor sa urmaresti logica comenzi. Am incercat sa separ comanda in pasi mai logici.

  12. enum
    {
        DIALOG_NULL,
    	DIALOG_LOGIN
    }
    
    CMD:updates(playerid, params[])
    {
        new string[144];
        format(string, sizeof string, "Adaugat comanda /updates\nAdaugat x\nAdaugat y\nRezolvat z");
        ShowPlayerDialog(playerid, DIALOG_NULL, DIALOG_STYLE_MSGBOX, "Updates", string, "Close");
        return 1;
    }

    Cel mai de baza exemplu pe care ti-l pot oferi. Si o poti modifica cum doresti.

    Edit: Aparent id -1 pentru dialog face cu totul altceva. Nu am testat

    • Like 1
  13. In cazul conditiei tale daca amenda este 2000$ si playerul detine 2001$ sau 1999$ rezultatul va fi pozitiv si anume acel mesaj fi afisat. Doar in cazul amenda si bani jucatorului sunt 2000$ exact atunci rezultatul e negativ si comanda continua.

    Poate ai prefera sa ai

    if(GetPlayerMoney(id) < amenda) return SendClientMessage(playerid, 0xff0000FF, "Acel jucator nu are suficienti lei pentru a platii amenda!");

    Caz in care daca jucatorul are mai putini bani decat amenda va afisa mesajul

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