Jump to content
  • 0
Anonimus24

pomoc Pickup

Dotaz

Ahoj nevíte někdo jak se mi může uložit přímo na vybranou pozici (listitem) v dialogu kterou si hráč zvolí v /pickup tak aby se na té pozici ukázalo že tu pozici má hráč kterí si to vybral + vytvoření pickup a i když třeba vytvoří více pickupu tak aby se to vždy ukázalo co je to za pickup.

 

CMD:pickup(playerid)
{
    new str[1500],MAX_PickupS[1500],koi;
	if(Player[playerid][AdminLevel] == 0) return SCM(playerid,COLOR_WARNING,"[ ! ] {FFFFFF}Nemáte Administrátorská pravá!");
 	else if(Player[playerid][AdminLevelAkce] == 0) return SCM(playerid,COLOR_WARNING,"[ ! ] {FFFFFF}Nemáte dostatečný Administrátorská pravá!");
	{
	    strcat(MAX_SetAdmin,"Pickup\tMajitel\n");
	    for(new i; i < MAX_PICKUP_EX; i ++)
	    {
	        koi ++;
			format(str, sizeof(str), "%d)\n",koi);
			strcat(MAX_PickupS, str);
 		}
 		ShowPlayerDialogEx(playerid, Dialog_Vytvor_Pickup, DIALOG_STYLE_TABLIST_HEADERS, "Pickup", MAX_PickupS, "Potvrdit", "Zavřít");
	}
 	return 1;
}

else if(dialogid == Dialog_Vytvor_Pickup)
		{
		    if(response)
		    {
		        new MAX_STR_Pickup[100];
		        switch(listitem)
		        {
		        	case 0..300:
					{
					    Sav[PickupSelect][playerid] = listitem;
						strcat(MAX_STR_Pickup, "Vytvořit auto\n");
					    ShowPlayerDialogEx(playerid, Dialog_Vytvor_Pickup2, DIALOG_STYLE_LIST, "Vytvořit Pickup", MAX_STR_Pickup, "Ok", "Zpět");
					}
		        }
        	}
    	}

 

Sdílet tento příspěvek


Link to post
Share on other sites

11 odpovědí na tuto otázku

Recommended Posts

  • 1

Chapu spravne, ze chces zjistit jestli nejaky hrac nedrzi nejakou tu pozici z tech 300? 

 

V tom pripade na to jdes spravne s tim Sav (v nasledujicim kodu budu uvazovat, ze to je nejaka struktura dat hrace). Udelal bych si jeste nejake boolovske pole, ktere bude oznacovat jestli je pozice jiz vybrana nebo ne. Pokud chces navic pak zobrazit, ktery hrac si tu danou pozici vzal, tak to bude pole cisel. Na zacatku je zinicializovat na -1 a snadno takto overis, ktery hrac si tu pozici vzal.

Neco jako:

new posAssigned[300] = {-1,...};

// v Init
for(new i = 0; i < MAX_PLAYERS; i ++) Sav[PickupSelect][i] = -1;

                               
// prirazovani posAssigned hraci co si to vybral
posAssigned[listitem] = playerid;
Sav[PickupSelect][playerid] = listitem;

// podminka na overeni jestli pozice ma hrace
if(posAssigned[listitem] != -1) // v tom posAssigned[listitem] bude nyni id hrace, tak neni problem vytahnout informace hrace s tim id

// Disconnect
int idx = Sav[PickupSelect][playerid];
Sav[PickupSelect][playerid] = -1;
posAssigned[idx] = -1;

 

Co se tyce toho druheho problemu, tak ho musis rozepsat vic, protoze absolutne nechapu co chces rict.

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

No že pokud vytvořím npř. pickup na:

listitem 5

listitem 5 se zobrazí můj nick + ID pickupu

Poté si třeba zvolím

listitem 150

a na

listitem 150 se zobrazí nick + ID dalšího pickupu kterej jsem si vybral.
 Ale stále bude aktivní listitem 5 zároven s listitem 150

Dá se to pochopit už? 

Edited by Anonimus24

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Teď jsem si to udělal ale pokuď si vyberu jednu pozici tak automaticky se to hodí na všechny listitem.... a ukáže se id které jsem si vybral což znamená že vyberu si

listitem 150

Vytvořím pickup a npř.

Místo toho aby se mi ukázalo na listitem 150 tak se mi to udělá všude.

Chyba je v kódu ale pokaždé se mi tohle děje nedokážu to pořádně nakonfigurovat aby to fungovalo.... 

viz foto: 

 

 

KOD:
 

CMD:pickup(playerid)
{
    new str[1500],MAX_PickupS[1500],koi;
	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,"Pickup\tMajitel\n");
	    for(new i; i < MAX_PICKUP_EX; i ++)
	    {
	        if(posAssigned[playerid] != -1)
	        {
				new ID = posAssigned[playerid];
				new idx = Sav[PickupSelect][playerid];
				format(str, sizeof(str), "%d)%s(%d)\n",idx,PlayerName(ID),(ID));
				strcat(MAX_PickupS, str);
			}
			else
			{
       			koi ++;
				format(str, sizeof(str), "%d)\n",koi);
				strcat(MAX_PickupS, str);
   			}
 		}
 		ShowPlayerDialogEx(playerid, Dialog_Vytvor_Pickup, DIALOG_STYLE_TABLIST_HEADERS, "Pickup", MAX_PickupS, "Potvrdit", "Zavřít");
	}
 	return 1;
}

 

ssssss.png

Edited by Anonimus24

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
for(new i; i < MAX_PICKUP_EX; i ++) {
    if(posAssigned[playerid] != -1) {
        new ID = posAssigned[playerid];
	new idx = Sav[PickupSelect][playerid];
	format(str, sizeof(str), "%d)%s(%d)\n",idx,PlayerName(ID),(ID));
	strcat(MAX_PickupS, str);
    }
}

 

Chyba je na těchto řádcích, mrkni se přes co iteruješ a kam rveš jaký index. posAssigned je pole těch pickupů, takže do indexu nedává smysl rvát playerid. to ti teď reprezentuje jaký je to pickup. 

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
On 14. 10. 2019 at 18:59, HighPrint said:

for(new i; i < MAX_PICKUP_EX; i ++) {
    if(posAssigned[playerid] != -1) {
        new ID = posAssigned[playerid];
	new idx = Sav[PickupSelect][playerid];
	format(str, sizeof(str), "%d)%s(%d)\n",idx,PlayerName(ID),(ID));
	strcat(MAX_PickupS, str);
    }
}

 

Chyba je na těchto řádcích, mrkni se přes co iteruješ a kam rveš jaký index. posAssigned je pole těch pickupů, takže do indexu nedává smysl rvát playerid. to ti teď reprezentuje jaký je to pickup. 

Stále jsme tu chybu nedokázal opravit dokázal by jste mi prosím někdo poradit?

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Dialog již mám hotoví ale jak můžu udělat to aby se mi stále nepřepisoval jeden pickup do kola? potřeboval bych aby každý pickup který vytvořím se vytvořil zvlášt + aby v dialogu se to neprepisovalo npř. vyberu si 0 a zobrazí se mi Anonimus24 poté zvolím npř. 45 a aby se mi pickup kterej vytvořím na 45 nepřesunul na 0... a přepsal vytvořený pickup

 

Edited by Anonimus24

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
public OnPlayerPickUpPickup(playerid, pickupid)
{
    if(!IsPlayerNPC(playerid))
	{
		if(IsPlayerConnected(playerid))
		{			
			new PAD = GetAdminPickup(playerid);
			if(PAD != -1)
			{
			    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
			    {
					if(pickupid == PickupAdmin[PAD][playerid][Pickup])
					{
	    				new Float:vx ,Float:vy ,Float:vz, Voza = GetPlayerVehicleID(playerid);
						GetVehicleVelocity(Voza,vx,vy,vz) ;
				 		SetVehicleVelocity(Voza, vx * 250.3, vy * 250.3, vz);
				        SetTimerEx("IsPlayerInPickupFalse", 100, 0, "i", playerid);
					}
   				}
			}
		}
	}
	return 1;
}

Někdo poradit proč mi to nefunguje? zrychlení auta? když najedu do pickupu?

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0

Začal bych asi užitečnou radou pro všechny help topicy, které byly a které teprve v budoucnu založíš.

Debuguj si kód výpisama (print, sendclientmsg, cokoliv...), jestli se ti vůbec dostane do tvého požadovaného bloku kódu, vypisuj si vrácení z funkcí. Dávej si pozor, jaké proměnné posíláš do indexů a funkcí. Stavěj kód postupně a přehledně.

Od těch pravidel pro zakládání pomoci se tu taky už nějak opustilo...

Edited by mxco

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
před 6 hodinami, mxco said:

Začal bych asi užitečnou radou pro všechny help topicy, které byly a které teprve v budoucnu založíš.

Debuguj si kód výpisama (print, sendclientmsg, cokoliv...), jestli se ti vůbec dostane do tvého požadovaného bloku kódu, vypisuj si vrácení z funkcí. Dávej si pozor, jaké proměnné posíláš do indexů a funkcí. Stavěj kód postupně a přehledně.

Od těch pravidel pro zakládání pomoci se tu taky už nějak opustilo...

sendclientmsg jsem tam měl a právě že mi to nefunguje...

Sdílet tento příspěvek


Link to post
Share on other sites
  • 0
			new PAD = GetAdminPickup(playerid);
			if(PAD != -1)
			{
				if(pickupid == PickupAdmin[PAD][playerid][Pickup])
				{
					if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
			    	{
	    				new Float:vx ,Float:vy ,Float:vz;
						GetVehicleVelocity(GetPlayerVehicleID(playerid),vx,vy,vz) ;
				 		SetVehicleVelocity(GetPlayerVehicleID(playerid), vx * 500.3, vy * 500.3, vz);
				 		new string[256];
				    	format(string, 256, "X: %.4f     Y: %.4f     Z: %.4f", vx, vy, vz);
				    	SendClientMessage(playerid, COLOR_ADMIN, string);

				        
					}
   				}
			}

Pokud tam mám if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) tak mi to stále nefunguje nevím co s tím je když to to dám bez if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) tak mi to funguje jinak mi to vůbec nefunguje nevíte proč?

Sdílet tento příspěvek


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Odpovědět na dotaz...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Obnovili jsme váš původní obsah (obsah napsaný před zavřením).   Smazat obnovený obsah

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...