Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Posts posted by Banditul

  1. Ok si care e linia cu acel warning? Pentru ca vad cateva functii care au 3 argumente care pot produce asta.

    Ca idee poate ai ceva gen

    Functie (argument1, argument2, Float:argument3)
    {
    }

    Si sa o chemi (acest cod produce warning)

    new variabila1, variabila2, variabla3;
    Functie(variabila1, variabila2, variabla3);

    Iar codul corect sa fie (acest cod nu produce warning)

    new variabila1, variabila2, Float:variabla3;
    Functie(variabila1, variabila2, variabla3);

     

  2. 5 hours ago, GamerulFOX said:

    Mersi, dar cum pot creea fișierul GamerulFOX.ini  ?

    Primul post imi sugereaza ca ai deja un sistem de conturi facut pe dini. Daca nu este cazul poti verifica aceste tutoriale

    Astfel incat sa ai sistemul si sa iti creeze acele conturi pentru fiecare jucator ca sa poti stoca date. Acum, daca nu doresti sa ai login/register dar totusi vrei sa ai doar un fisier pentru acel bonus pentru fiecare jucator poti eventual crea ceva local doar pentru asta

    CMD:bonus(playerid, params[])
    {
        new file[MAX_PLAYER_NAME + 20], name[MAX_PLAYER_NAME + 1];
        GetPlayerName(playerid, name, sizeof name);
        format(file, sizeof file, "/Bonus/%s.ini", name);
    
        // Creaza fisierul daca nu exista
        if (!dini_Exists(file))
        {
            dini_Create(file);
            dini_IntSet(file, "Bonus", 1);
    		GivePlayerMoney(playerid, 20000);
    		// Jucatorul a primit bonus
            return 1;
        }
    
        // Daca exista fisierul
        // Citeste valoarea
        new bonus = dini_Get(file, "Bonus");
    
        if (bonus == 1)
        {
            // Nu ii da bonus are deja
            return 1;
        }
    
    	// Jucatorul a primit bonus
        GivePlayerMoney(playerid, 20000);
        // seteaza la Bonus valoarea 1 in fisier
        dini_IntSet(file, "Bonus", 1);
    
        return 1;
    }

     

  3. Dini este mai mult decat antic dar ca sa salvezi date in fisierul jucatorului trebuie sa te folosesti de functia dini_IntSet(filename[],key[],value); eventual ce vei dori sa faci in comanda este ceva de genul

    if (dini_Exists(file))
    {
    	dini_IntSet(file, "Bonus", 1);
    }

    Unde file este calea ta catre fisierul jucatorului, ex: Account/GamerulFOX.ini (adica in folderul scriptfiles care contine folderul Account) dar asta depinde de implementatia pe care o ai deja facuta iar in loc de "Bonus" e posibil sa fi definit tu deja altceva. Acuma eventual poti avea poate

    PlayerInfo[playerid][Bonus] = 1;
    if (dini_Exists(file))
    {
    	dini_IntSet(file, "Bonus", PlayerInfo[playerid][Bonus]);
    }

    Daca voiai un exemplu concret cu comanda pe care deja o ai poti oferi data viitoare codul pe care ai incercat sa il faci astfel incat sa ai un exemplu mai bun decat cateva lini de cod

    • Like 1
  4. 25 minutes ago, GamerulFOX said:

    bro deci in primul rand, ai uitat de return 1; la un sendclientmessage ai uitat de culoare si nu merge cum am spus eu ! Deci un player a intrat pe server si da /collect da eroare "Poti folosi aceasta comanda in %i  minute!" si dupa ce face acel timp poate sa de-a ! Adica daca da reconnect sa ia din nou "Timer-ul" de la inceput!

    Presupun ca daca mergi pe idea de "faceti voi pentru mine, eu doar o sa dau copy-paste si nu invat nimic" nu o sa ajungi prea departe si judecand dupa topicurile tale din trecut care erau pe teme similare legate de "comanda delay" etc ma asteptam ca ai invatat ceva pana acum. Felicitari totusi pentru ca ai observat acele greseli.

    Cum am specificat, este o idee de baza pe care esti liber sa o adaptezi si sa o extinzi cum doresti.

    Poti pune CollectTime[playerid] = 0 la OnPlayerConnect/OnPlayerDisconnect ca sa fie resetata variabila pentru playerul care se va conecta cu acelasi playerid doar ca cum am explicat o sa crezei un 'bug' pe care il poti rezolva doar cu stocare persistenta a datelor.

    Daca consideri ca logica comenzi este gresita, poti face debug cu printf sa iti arate valoarea gettime si CollectTime si sa modifici acel if cu conditia dorita conform acelor valori. Eventual poti incerca sa cauti pe google informati despre timestamp si cum functioneaza.

  5. new CollectTime[MAX_PLAYERS];
    
    CMD:collect(playerid, params[])
    {
    	if (CollectTime[playerid] > gettime())
    	{
    		new message[30];
    		format(message, sizeof message, "Timp ramas %i minute.", (CollectTime[playerid] - gettime()) / 60 );
    		SendClientMessage(playerid, message);
    	}
    	GivePlayerMoney(playerid, 25000);
    	CollectTime[playerid] = gettime() + 15 * 60; 
    }

    O idee de baza. Singura problema fara a avea o stocare persistenta pentru acea valoare (fara baza de date/ etc) playerul poate pur si simplu sa se reconecteze si sa foloseasca comanda la infinit

  6. Din ce ma pot gandi eu ar putea fi 2 posibilitati de a face acest lucru doar ca in ambele situatii jucatori sunt nevoiti sa descarce si sa instaleze in jocul lor.

    1. Un plugin asemanator sampvoice (care este necesar sa fie atat instalat pe server cat si pe pc jucatorului) care va trimite informatii legate de acele fisiere pe care le doresti blocate si sa interzici conectarea playerului la server

    2. Un launcher pe care playeri il pot folosi sa conecteze la serverul tau si in cazul acesta se poate bloca acesul jucatorului inainte sa apuce sa porneasca sa-mp

    Un exemplu de launcher pe care il poti folosi si configura

    Din pacate in ambele cazuri este ceva de munca si nu mai tine de sa-mp/pawn ci de alte technologi ,ca launcherul oferit exemplu, WinForms + C# sau C++ (daca e vorba de plugin) sau cu totul alte technologi

    • Thanks 1
  7. Ok ne poti arata ce ai incercat sa faci si ce erori ai intampinat? Pentru ca din ce ai spus ai incercat si nu a mers ceea ce inseamna ca ca respectivul cod nu este complet functional. Daca comanda in sine doar iti trimite un query de update catre baza de date e posibil ca partea care iti incarca datele respective la login sa nu functioneze.

    • Like 1
  8. Nu sunt erori, sunt doar avertismente si iti semnaleaza faptul ca acele lini nu sunt "aranjate" cu restul linilor din jurul lor si cu contextul in care se afla. Din pacate e destul de greu de spus cum sa le aranjezi pentru ca formatarea textului fara a folosi functionalitatea de 'code' oferita de platofrma forumului e putin dificila.

    CMD:aduty(playerid, params[])
    {
        if(IsPlayerAdmin(playerid)) 
        {
            new type[25];
            if(sscanf(params, "s[25]", type)) return SendClientMessage(playerid, -1,"Syntax: /aduty <on/off>");
            if(strcmp(type, "off", true) == 0)
            {
                ResetPlayerWeapons(playerid); 
    
                SetPlayerArmour(playerid, 0); 
    
                SetPlayerHealth(playerid, 100); 
    
                SetPlayerSkin(playerid, 25); 
    
                SendClientMessageToAll(COLOR_RED, "((AdmBot: Unul dintre administratori este acum off duty.))"); 
            }
            else if(strcmp(type, "on", true) == 0)
            {
                GivePlayerWeapon(playerid, 38, 9999); 
    
                SetPlayerArmour(playerid, 9999999); 
    
                SetPlayerHealth(playerid, 9999999); 
    
                SetPlayerSkin(playerid, 217); 
    
                SendClientMessageToAll(COLOR_GREEN, "((AdmBot: Unul dintre administratori este acum on duty.))"); 
            }
        }
        else 
        {
            SendClientMessage(playerid, COLOR_RED, "Eroare: Nu esti un Administrator.");
        }
        return 1;
    } 

     

  9. Cum am spus, acel #if defined este un un bloc (care nu are paranteze pentru limitare ceea ce poate crea putina confuzie ) si atat timp cat nu exista #define FILTERSCRIPT inaintea lui va ignora ce se afla pana la #else/#endif

    #if defined FILTERSCRIPT
    new ijswfsfwerf; // Sunt ignorate la compilare
    new iaofjwuiefsfs;
    // Orice cod care se afla aici
    // Va fi ignorat daca inainte de
    // #if defined FILTERSCRIPT nu exista #define FILTERSCRIPT
    #endif
    new Masina[2]; // Orice e pus dupa #endif va fi compilat si rulat

    Am oferit un simplu exemplu care nu cred ca este prea avansat cat sa nu poata fi reprodus (era mai usor daca codul oferit era in text si intr-o imagine dar nu asta e important)

    #include <a_samp>
    
    new TaxiCars[3];
    new TaxiCP[MAX_PLAYERS];
    
    main()
    {
        print("Infinity Gamemode");
    }
    
    public OnGameModeInit()
    {
        TaxiCars[0] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0);
        TaxiCars[1] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0);
        TaxiCars[2] = CreateVehicle(vehicletype, Float:x, Float:y, Float:z, Float:rotation, color1, color2, respawn_delay, addsiren=0);
        SetGameModeText("Gamemode Infinity");
        AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
    }

    Nu este nevoie de altceva, acel #if defined FILTERSCRIPT  OnFilterScriptInit()/OnFilterScriptExit() nu sunt necesare si pot sterse

  10. symbol already defined: "LoadMaps"

    Mai ai altundeva LoadMaps declarat in scriptul tau?

    error 010: invalid function or declaration

    Nu stiu care e linia 27, presupun ca e undeva la return 1 care nu vad sa aibe o problema

    Ma mir totusi ca nu ai zis nimic de eroarea referitoare la playerid ca nu exista

  11. Sa inteleg ca functia getbank contine acel bigint? Pentru ca eroarea ta nu prea corespunde cu codul.

    Ce as putea presupune e faptul ca GetBigInt este de fapt un array iar in scriptul tau se invoca fara index. Ex:

    new GetBigInt[10];

    new test = GetBigInt; // Incerci sa folosesti array fara a specifica un index

    Edit: Am incercat sa explorez putin scriptul pe telefon si comanda originala e putin diferita. Din ce pot vedea exista o functie de comparatie pe care o poti folosi, presupun ca nu poti compara cum ai facut tu.

    if(!CompareBigInt(pData[playerid][Bank2], pData[playerid][Bank], 0, params[0])) return sendError(playerid, "Nu detineti aceasta suma in banca");

    • Thanks 1
  12. Exista posibilitatea ca baza ta de date sa fie corupta din ce am reusit sa gasesc pe stackoverflow. Eventual poti rula VERIFY TABLE factions (s.a.m.d) sa verifici daca intradevar e corupt si poti incerca REPAIR TABLE factions (s.a.m.d). In cel mai rau caz daca acest tool nu iti repara baza de date poti eventual sa iti scanezi hdd de erori din click dreapta pe partitie in My Computer > Properties > Tools > Error Checking .

    In ultima instanta eventual poti sterge baza si sa o refaci presupunand faptul ca ai fisierul sql.

  13. 9 minutes ago, Tican Daniel Andrei said:

    Mersi pentru că ai reușit să îmi mai explici câte ceva despre această situație neplăcută,mulțumesc.  Dacă ar cumpăra alt Host care să nu folosească 5.5 versiunea de exemplu cum a zis el de la găzduire jocuri, situația ar fi diferită? Sau eroarea depinde doar de baza de date a serverului?

    Eroarea depinde de versiunea folosita, daca este 5.5 sau mai veche vei intampina problema aceasta. Pentru informatia mai concreta https://stackoverflow.com/a/17498167 aceasta modificare a fost facuta mai precis in 5.6.5 deci daca hostul foloseste 5.6.4 sau mai veche probabil inca vei intampina problema. Nu stiu sigur daca in phpmyadmin apare versiunea (nu prea am folosit) dar poti rula SELECT VERSION();  in sectiunea query din phpmyadmin sau eventual acelasi query in ce client folosesti sa te conectezi la baza de date.

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