Jump to content
  • 0

pomoc MySQL - help


Anonimus24

Dotaz

Ahoj chtěl bych se zeptat mám problém přičemž při vytvoření pickupu vidím pouze hráče ID 0 pokud vytvořím pickup já jako ID 1 a více nevidím že jsme ho vytvořil v dialogu 
pickup se vytvoří všechno i pokud kliknu na ovladání toho pickupu co jsem vytvořil můžu ovládat ale nevidím tam že jsem ho vytvořil.

další problém je ten že pokud hráč ID 0 nemá zapnutý čas tak mi ukazují hodiny 00:00 a pokud zapne funguje to dobře problém je od doby co mám MySQL 
Pokud by někdo věděl kde by mohl být problém že vlastně vše se řídí hráčem který má ID 0 a vůbec nevím proč...

Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Globální moderátor

Prosím, napiš to ještě jednou srozumitelnejma větama a přilož kód ideálně. Pochopil jsem, že id 0 vidí pickup a id 1 nevidí a pak nějakej dialog. To vše nefunguje od doby co je vypnutej čas a integrovaný mysql... 

Link to comment
Share on other sites

  • 0

Dobře hráč s ID 0 vytvoří "pickup"  pickup který vytvořil vidím totéž ho vidím i v dialogu.

Pokud já ID 1 vytvořím pickup nejdu vidět na seznamu s vytvořením pickupu viz obrázek pickup je vytvořený ale nevidím na 2 pozici že mám vytvořené před přechodem na MySQL to fungovalo bez problému.
 

CMD:pickup(playerid)
{
    new str[1500],MAX_PickupS[1500];
	if(Player[playerid][AdminLevel] == 0) 				return SendErrorMessage(playerid,"Nemáte Administrátorská pravá.");
 	else if(Player[playerid][AdminLevelAkce] == 0) 		return SendErrorMessage(playerid,"Nemáte dostatečný Administrátorská pravá.");
	{
	    strcat(MAX_PickupS,"Pozice\tPickup\tMajitel\n");
     	ForMaxPlayer(a)
      	{
         	for(new i; i < MAX_PICKUP_EX; i ++)
	    	{
				new ID = posAssigned[a][i];
				new idx = PickupAdmin[i][PickupSelect];
				if(posAssigned[a][i] != -1)	format(str, sizeof(str), "%d)\t%d\t%s(%d)\n",i,idx,PlayerName(ID),(ID));
				else	format(str, sizeof(str), "%d)\n",i);
				strcat(MAX_PickupS, str);
   			}
		}
 		ShowPlayerDialogEx(playerid, Dialog_Vytvor_Pickup, DIALOG_STYLE_TABLIST_HEADERS, "Pickup", MAX_PickupS, "Potvrdit", "Zavřít");
	}
 	return 1;
}

Druhá problém když v nastavení hráč s ID 0 si nastaví čas na vypnut ostatním hráčům pozastaví hodiny i přesto že hráč s ID 1 je má zapnuté čas mu neběží.
Ale pokuď hráč s ID 0 si zapne v nastavení hodiny hodiny fungují . Doufám že jsem to teď napsal srozumitelně.

 

Spoiler

forward TimeUp(playerid);
public TimeUp(playerid)
{
	h_sekundy ++;

	if(h_sekundy==59)
	{
		h_sekundy = 0;
		h_minuty ++;
	}
	if(h_minuty==23)
	{
		h_minuty = 0;
	}


	if(Player[playerid][HerniHodiny] == 1)
	{
		new string[128];
		if (h_sekundy <= 9){format(string,25,"%d:0%d",h_minuty,h_sekundy);}
		else {format(string,25,"%d:%d",h_minuty,h_sekundy);}
		TextDrawSetString(Clock,string);
		TextDrawShowForPlayer(playerid, Clock);
 	}else TextDrawHideForPlayer(playerid, Clock);
	////////////////////////////////////////
	if(Player[playerid][RealHodiny] == 1)
	{
	 	gettime(hour123, minute);
	  	getdate(Years, Months, Days);
	  	format(timestr,32,"%02d:%02d %d.%d.%d",hour123,minute,Days, Months, Years);
	  	TextDrawSetString(RealClock,timestr);
		TextDrawShowForPlayer(playerid, RealClock);
   	}else TextDrawHideForPlayer(playerid, RealClock);


    ServerMinute ++;
    if(ServerMinute >= 60)
    {
        MinuteTimer();
        ServerMinute = 0;
    }
	////////////////////////////////////////
	return 1;
}

 

 

sa-mp-055.png

Link to comment
Share on other sites

  • 0
  • Globální moderátor

No lepší, už trochu začínám chápat:

 

před 6hodinami, Anonimus24 said:

new ID = posAssigned[a][i];

ty ukládáš pickup pro hráče, nikoli globálně. Podle tohoto řádku. Pokud tedy vytvoříš pickup jako hráč 1, tak ho uvidíš ve svém dialogu. Ale pokud hráč 2 vyvolá příkaz /pickup tak on uvidí zase jen ty svoje.

 

Pokud ten dialog má být společný se stejnými daty, tak odstraníš níže uvedený cyklus a budeš k tomu přístupovat jen jako posAssigned;

 

před 6hodinami, Anonimus24 said:

ForMaxPlayer(a)

 

 

--------

 

 

Hodiny... Tam mě napadá leda problém, že voláš callback TimeUp se špatnou vstupní hodnotou (playerid)

Link to comment
Share on other sites

  • 0

Úprimne, myslím že máš problém s pochopením čo je pole :)

Spoiler

public TimeUp(playerid)
{
	h_sekundy ++;

	if(h_sekundy==59)
	{
		h_sekundy = 0;
		h_minuty ++;
	}
	if(h_minuty==23)
	{
		h_minuty = 0;
	}

Keď máš na servery 1 hráča, tak je všetko v poriadku (teda až na to, že namiesto 59 sekund sa zobrazí 0 a teda každá minúta je o sekundu kratšia), ale keď sa pripojí 2. hráč, tak sa spustí ešte 1 timer a zrazu ti beží čas 2x rýchlejšie (pri 50 hráčoch 50x rýchlejšie). To isté robíš aj na konci timera :)

Pridaj sem pre istotu kód kde spúšťaš tento timer (SetTimerEx funkciu).

Riešenie:
1) buď spravíš h_sekundy a h_minuty ako new h_sekundy[MAX_PLAYERS], h_minuty[MAX_PLAYERS]; a incrementovať budeš h_sekundy[playerid]++;
2) alebo z timera odstrániš "playerid", incrementáciu necháš tak ako je, a podmienky obalíš do cyklu pre všetkých aktívnych hráčov

Výber je na tebe... V prvom riešení môže mať každý hráč rôzny čas (napr. ja budem mať 15:24 a ty 08:14). V druhom riešení majú všetci hráči rovnaký herný čas.

No a teraz k problému ktorý si spomínal. Predpokladám že timer spúšťaš ako SetTimer a nie SetTimerEx - to ti namiesto playerid doplní 0 a teda všetko funguje až do bodu kedy ID 0 zmení svoje nastavenia :) Preto pridaj časť kódu kde používaš SetTimer / SetTimerEx

 

Teraz tá druhá časť problému s pickupmi:

Opäť problém s poliami

Spoiler

ForMaxPlayer(a)
{
	for(new i; i < MAX_PICKUP_EX; i ++)
    {
   		// bla bla bla
    }
    ShowPlayerDialog(bla bla bla); // tu je problém
}
                                
Pomocou ForMaxPlayer(a) prejdes vsetkych hracov a potom pre kazdeho hraca prejdes vsetky pickupy, ale pred tym, ako skocis na dalsieho hraca tak sebe zobrazis dialog - a ak sa nemylim tak samp zobrazuje iba posledny dialog - takze tebe sa zobrazia len pickupy hráča ktorý má najvyššie ID

 

Takže ako som povedal, v oboch prípadoch máš problém s poliami, odporúčam prejsť nejaký tutorial :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...