Jump to content

Banditul

Moderator
  • Posts

    1,134
  • Joined

  • Last visited

  • Days Won

    96

Posts posted by Banditul

  1. Asa cum a spus si SkyHD nu poti trece de acea limita.

    Dar o poti incerca sa o iei putin pe ocolite. Sa faci un textdraw care sa afiseze variabila de bani , si sa-l pui peste bara originala. Doar ca si aici ai o limita , pentru ca integer 32bit care e 2,147,483,647 din pacate. Dar poti sparge variabila de bani in mai multe variabila cand limita este atinsa si sa continui tot asa. Si deasemena poti face cu textdraw si sa faci mai multe care sa se continue si sa afiseze toti bani la un loc(desigur doar pe ecran, pentru ca in script vor fi separati)

    E singura optiune pe care o vad sa poti trece peste limita asta a jocului. E doar o idee , inca nu am incercat-o dar amu ca o scriu cred ca o sa o aplic candva.

  2. Da, sa faci mai multe tabele pentru a salva astfel de date. Si sa faci relatii intre ele printr-un forgein key. Va trebui sa te uiti peste niste tutoriale MySQL pentru a invata aceste relatii, eu inca le invat, mai ales ca de multe ori sunt mult mai eficiente decat sa ai un tabel urias. 

    Mai ales daca ai ajuns la 1000 fields intr-un tabel de destul de grav sincer, pentru ca e urias. Singura solutie e sa spargi acel tabel "users" in mai multe(ma refer sa muti de exemplu cele cu crime intr-un alt tabel , sau mai stiu eu ce astfel de date mai ai care pot fi separate de tabelul users)

    Si ca si sfat , sa folosesti mysql_pquery cand vei face aceste query de a incarca din diverse tabele pentru a putea incarca mai rapid si eficient datele. Pentru ca daca vei folosi mysq_tquery va dura oa vreme ca fiecare sa se execute in ordine, iar daca vei folosi mysql_query , ei bine , vei cam ingheta putin scriptul. Si daca vei avea mai multi playeri care se conecteaza i nacelasi timp, nu vreau sa ma gandesc.

     

    Deci sfatul meu, separa cateva lucuri de users in alte tabele si fa relatii de forgein key intre ele (adica intre tabele alea si tabelul users care va contine referinta la playeri) si foloseste mysql_pquery pentru a fae query-urile de SELECT pentru a putea incarca datele in paralel si sa fie putin mai eficient. Dar nu folosi mysql_pquery pentru restu, foloseste mysql_tquery.

     

    Edit: Sper ca ai inteles ceva , pentru ca nu sunt chiar atat de bun la scris explciatii.

    • Upvote 1
  3. CMD:setkills(playerid, params[]){
    	if(PlayerInfo[playerid][pLogged] == true) return 0; // Schimbi cu ce variabila ai tu sa verifici daca playerul este logat
    	//VErificam daca playerul este admin:
    	if(PlayerInfo[playerid][Level] >= 4){ // schimbi tu cu ce lvl vrei la admin
    		new id, kills;
    		if(sscanf(params, "ui", id, kills)) return SendClientMessage(playerid, -1, "Use: /setkills");
    		if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "Jucatorul nu este online");
    		PlayerInfo[playerid][pKills] = kills; // Inlocuiesti cu variabila ta in care stochezi kills
    	}
    	else
    		return 0;
    	return 1;
    }

    Asta ar fi idea de baza , merge la fel si pentru setrespect si setdeaths doar ca inlouiesti acel PlayerInfo[playerid][pKills] cu ce variabila ai tu pentru respect si deaths.

    Din pacate nu pot descarca lux admin , iar topicul este foarte neclar (apar prea multe lucruri contradictori)

    Sper sa te ajute

    • Upvote 1
  4. La integer nu trebuie apostrof , apostroful se foloseste pentru stringuri.

    Faptul ca nu-ti merge fara apostrof e destul de nasol, pentru ca query-urile cu toate ca nu ar trebui   accepta apostrof la integer din nu stiuce motiv.

    Mie imi merge foarte bine fara apostrof:
     

    mysql_format(g_SQL, query, sizeof(query), "UPDATE `banks` SET `BankMoney` = %i WHERE `pid` = %i", APlayerData[playerid][BankMoney], APlayerData[playerid][SQLID]);

    Dar in fine, ma bucur ca l-ai rezolvat

  5. Acum 4 ore, mrtea a spus:

    Si unde afisez acel textdraw?

    Pai daca vrei sa fie mereu acolo il afisezi la OnPlayerConnect/OnPlayerSpawn iar in  pDayTimerDecrease foloseste

    format(pInfo[playerid][pGText], 31, "payday in: [%02i]", (pInfo[playerid][pPay]-gtm)/60);
    TextDrawSetString(textdrawid , pInfo[playerid][pGText]);

    Si astfel se actualizeaza in fiecre minut.

     

    Acum 8 ore, StR_Marian a spus:

    nu mai da copy/paste de ce ai pune 1000 * 60 oricum timerul citeste o secunda.

    Daca ai stii putina matematica , ai stii ca aia inseamna 1min. Si citeste pe dracu 1 secunda. Macar ai testat? Sau zici asa din vasta ta experienta?

    PS: Data viitoare daca cineva vrea ajutorul tau si nu vrea panel la server , spune-i in fata ca nu vrei sa-l ajuti  nu ii da block . Ok copilu?

  6. Undeva sub includes:

    new pDayTimer[MAX_PLAYERS];

    La OnPlayerConnect:

    pDayTimer[playerid] = SetTimerEx("pDayTimeDecrese", 1000 * 60, true, "i", playerid);

    Undeva in gm , inafara oricarei acolade:

    forward pDayTimerDecrese(playerid);
    public pDayTimeDecrese(playerid)
    {
    	PlayerData[playerid][pDayTime]--;
    	return 1;
    }

    La OnPlayerDisconnect:

    KillTimer(pDayTimer[playerid]);

    Asta e idea generala.

    Str tu vezi-ti de problemele tale daca nu stii sa ajuti si n-ai nici aceasta intentie ( http://forum.sa-mp.com/showthread.php?t=636303 )

  7. Pai nu ti se incarca plugin-ul streamer, cel mai probabil iti lipseste unu din visual c++ . Probabil 2015, 2013 sau 2010 .

    http://www.standaloneofflineinstallers.com/2015/12/Microsoft-Visual-C-Redistributable-2015-2013-2012-2010-2008-2005-32-bit-x86-64-bit-x64-Standalone-Offline-Installer-for-Windows.html?m=1

    Le ai pe toate aici . De preferabil sa instalezi si versiunea x86(x32) chiar daca tu ai sistemu pe x64. Pentru ca sa-mp ruleaza numa pe x32

  8. else if (RestartTime/60 == 0) format(string, sizeof(string), "Restart-ul se va da peste ~y~%d secunde ~w~~n~ Motiv: %s", RestartTime/60, RestartReason);

    In tutorial aceasta linie el a modificat-o asa:

    else if (RestartTime/60 == 0) format(string, sizeof(string), "Restart-ul se va da peste ~y~%d secunde ~w~~n~ Motiv: %s", RestartTime, RestartReason);

     

    • Upvote 1
  9. public OnPropUpdate()
    {
        new Cache: r = mysql_query( mysql_db, "SELECT `ID` FROM `bizz`" );
        new rows = cache_get_row_count( mysql_db ), SQLID;
        if( rows >=  1 )
        {
            idx = 0;
            for( new i = 0; i < rows; i++ )
            {
                idx = cache_get_field_content_int( i, "ID", mysql_db ) - 1;
                SQLID = cache_get_field_content_int( i, "ID", mysql_db );
                mysql_format( mysql_db, string, sizeof(string), "UPDATE `bizz` SET `Owned` = %d, `Owner` = '%e', `Message` = '%e', `Extortion` = '%e', EntX = %f, EntY = %f, EntZ = %f, ExtX = %f, ExtY = %f, ExtZ = %f, Level = %d, Price = %d, EPrice = %d, Till = %d, Locked = %d, Interior = %d, Products = %d, MaxProducts = %d, ProductPrice = %d  WHERE ID = %d",
                BizzInfo[idx][bOwned],
                BizzInfo[idx][bOwner],
                BizzInfo[idx][bMessage],
                BizzInfo[idx][bExtortion],
                BizzInfo[idx][bEntranceX],
                BizzInfo[idx][bEntranceY],
                BizzInfo[idx][bEntranceZ],
                BizzInfo[idx][bExitX],
                BizzInfo[idx][bExitY],
                BizzInfo[idx][bExitZ],
                BizzInfo[idx][bLevelNeeded],
                BizzInfo[idx][bBuyPrice],
                BizzInfo[idx][bEntranceCost],
                BizzInfo[idx][bTill],
                BizzInfo[idx][bLocked],
                BizzInfo[idx][bInterior],
                BizzInfo[idx][bProducts],
                BizzInfo[idx][bMaxProducts],
                BizzInfo[idx][bPriceProd])
                SQLID;
            
                mysql_tquery( mysql_db, string );
            
                if(BizzInfo[idx][bOwned] == 0)
                {
                    format(string, sizeof(string), "{2EAD15}%s\n {2EAD15} For Sale\n {2EAD15}Level: {FFFFFF}%d\n {2EAD15}Valoare: {FFFFFF}%d\n{2EAD15} /buybiz",BizzInfo[idx][bMessage],BizzInfo[idx][bLevelNeeded],BizzInfo[idx][bBuyPrice]);
                }
                else
                {
                    format(string, sizeof(string), "{F5E618}%s\n {F5E618}Owner: {FFFFFF}%s\n {F5E618}Exto: {FFFFFF}%s\n {F5E618}Level: {FFFFFF}%d\n {F5E618}Fee: {FFFFFF}%d\n {F5E618}Valoare: {FFFFFF}%d\n{F5E618} Press Enter or F",BizzInfo[idx][bMessage],BizzInfo[idx][bOwner],BizzInfo[idx][bExtortion],BizzInfo[idx][bLevelNeeded],BizzInfo[idx][bEntranceCost],BizzInfo[idx][bBuyPrice]);
                }
                Update3DTextLabelText(BizLabel[idx] ,0x008080FF, string);
            }
        }
        cache_delete( r );
    }

    Iti lipsea id-ul bizului din clauza WHERE , adica nu stia la ce id sa updateze asa ca o facea la toate.

     

    public LoadBizz()
    {
        new idx;
        new Cache: r = mysql_query( mysql_db, "SELECT * FROM `bizz`" ) , rows = cache_get_row_count( mysql_db );
        if( !cache_get_row_count( mysql_db ) ) return cache_delete( r ), print( "Nu ai niciun biz in baza de date." );
        for( new i = 0; i < rows; i++ )
        {
        
            BizzInfo[i][bOwned] = cache_get_field_content_int( i, "Owned", mysql_db );
            cache_get_field_content( i, "Owner", BizzInfo[i][bOwner], mysql_db, MAX_PLAYER_NAME );
            cache_get_field_content( i, "Message", BizzInfo[i][bMessage], mysql_db, MAX_PLAYER_NAME );
            cache_get_field_content( i, "Extortion", BizzInfo[i][bExtortion], mysql_db, MAX_PLAYER_NAME );
            BizzInfo[i][bEntranceX] = cache_get_field_content_float( i, "EntX", mysql_db );
            BizzInfo[i][bEntranceY] = cache_get_field_content_float( i, "EntY", mysql_db );
            BizzInfo[i][bEntranceZ] = cache_get_field_content_float( i, "EntZ", mysql_db );
            BizzInfo[i][bExitX] = cache_get_field_content_float( i, "ExtX", mysql_db );
            BizzInfo[i][bExitY] = cache_get_field_content_float( i, "ExtY", mysql_db );
            BizzInfo[i][bExitZ] = cache_get_field_content_float( i, "ExtZ", mysql_db );
            BizzInfo[i][bLevelNeeded] = cache_get_field_content_int( i, "Level", mysql_db );
            BizzInfo[i][bBuyPrice] = cache_get_field_content_int( i, "Price", mysql_db );
            BizzInfo[i][bEntranceCost] = cache_get_field_content_int( i, "EPrice", mysql_db );
            BizzInfo[i][bTill] = cache_get_field_content_int( i, "Till", mysql_db );
            BizzInfo[i][bLocked] = cache_get_field_content_int( i, "Locked", mysql_db );
            BizzInfo[i][bInterior] = cache_get_field_content_int( i, "Interior", mysql_db );
            BizzInfo[i][bProducts] = cache_get_field_content_int( i, "Products", mysql_db );
            BizzInfo[i][bMaxProducts] = cache_get_field_content_int( i, "MaxProducts", mysql_db );
            BizzInfo[i][bPriceProd] = cache_get_field_content_int( i, "ProductPrice", mysql_db );
            printf("BizzInfo:%d Owner:%s Message:%s Entfee:%d Till:%d Products:%d/%d Interior:%d.\n",
            idx,
            BizzInfo[idx][bOwner],
            BizzInfo[idx][bMessage],
            BizzInfo[idx][bEntranceCost],
            BizzInfo[idx][bTill],
            BizzInfo[idx][bProducts],
            BizzInfo[idx][bMaxProducts],
            BizzInfo[idx][bInterior]);
            idx++;
        }
        cache_delete( r );
        return 1;
    }

     

  10. Porneste serverul pe localhost(pc) si vezi daca s-au facut schimbarile.

    Daca nu, atunci incearca sa recompilezi. Si uita-te la ce ai schimbat si vezi daca tot asa cum ai pus tu este...

    La altceva nu ma pot gandi acum, e ciudat pentru ca nu ar trebui sa se intample asta....

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