Skocz do zawartości
Reus

Teleporty w domu

Rekomendowane odpowiedzi

Witam, chciałbym zablokować możliwość używania komend w domu. Wszystko pięknie gdy dodałem w public OnPlayerCommandReceived(playerid, cmdtext[]):

	if(IsInHouse[playerid] == 1)
	{
 		if(strfind(cmdtext,"/report",true) == 0 || strfind(cmdtext,"/pm",true) == 0 || strfind(cmdtext,"/l",true) == 0)
	        return 1;

        return SendClientMessage(playerid, GREEN, "{BFBF40}W domu nie możesz używać żadnej komendy. (Wyjątek /l, /report, /pm)"), 0;
	}

I w tym problem, bo gracz dalej się może tepać np. na /lv (oprócz teleportów wszystkie komendy z wyjątkiem /report, /pm i /l zablokowane)

w callbacku OnPlayerPickUpDynamicPickup znalazłem takie coś:

for(new o = 1; o < ILOSC_DOMOW; o++)
		{
			if(pickupid == HouseInfo[o][HousePickupOut])
	        {
	            LastHouse[playerid] = o;
			    if(GetTickCount() < HouseEnter[playerid])
					return 0;

				if(HouseEnterBlock[playerid] == 1)
				    return 0;
				HouseEnterBlock[playerid] = 1;

			    new i = LastHouse[playerid];
			    if(strcmp(HouseInfo[i][hOwner], "@OWNER", false))
		   		{

					if(!strcmp(HouseInfo[i][hOwner], PlayerName(playerid), false))
			  		{
		      			SetTimerEx("SetPlayerHouseEx", 800, false, "dd", playerid, i);
						SendClientMessage(playerid, GREEN, "Zakaz używania komend teleportów w domu! Aby wyjść idź do drzwi.. Wpisz /Menu aby otworzyć menu domu.");
                        FadeCan[playerid] = 1;
                        TogglePlayerControllable(playerid, false);
                        PlayerTextDrawBoxColor(playerid, FadePlayer, 0x00000000);
						FadePlayerTimer[playerid] = SetTimerEx("UpdateFade", 50, true, "d", playerid);
						HouseEnterBlock[playerid] = 0;
					}

		    		if(strcmp(HouseInfo[i][hOwner], PlayerName(playerid), false))
					{
						if(HouseInfo[i][hForSell] == 1)
						{
						    ShowPlayerDialog(playerid, 128, DIALOG_STYLE_LIST, "Informacje", "Wejdz do domu\n...\nOdkup dom", "Wybierz", "Zamknij");
						}
						else
						{
						    if(strcmp(HouseInfo[i][hPassword], "@PASSWORD", false))
							{
							    new String[128];
							    format(String, sizeof(String), "Nazwa domu: %s\nWłaściciel: %s\n\nTen dom posiada hasło. Wpisz hasło i wejdz.", HouseInfo[i][hName], HouseInfo[i][hOwner]);
							    ShowPlayerDialog(playerid, 58, DIALOG_STYLE_INPUT, "Informacje", String, "Wejdz", "Zamknij");
			        		}
				        	if(!strcmp(HouseInfo[i][hPassword], "@PASSWORD", false))
							{
							    FadeCan[playerid] = 1;
							    TogglePlayerControllable(playerid, false);
							    PlayerTextDrawBoxColor(playerid, FadePlayer, 0x00000000);
								FadePlayerTimer[playerid] = SetTimerEx("UpdateFade", 50, true, "d", playerid);

                                SetTimerEx("SetPlayerHouseEx", 800, false, "dd", playerid, i);
					       		HouseEnterBlock[playerid] = 0;

					       		if(QuestOption == 3 && QuestActivated[playerid] == 0)
								{
								    GivePlayerExp(playerid, 80);
		    						GivePlayerMoneyEx(playerid, 10000);
								    ShowNewTeleport(playerid, "~y~(3) Odwiedziles czyis ~y~Dom!~n~~w~Quest zaliczony.. +80 exp +10000$");
								    QuestActivated[playerid] = 1;
								}
			      		   	}
						}
		 			}
				}
				if(!strcmp(HouseInfo[i][hOwner], "@OWNER", false))
				{
				    new String[128];
			   	    format(String, sizeof(String), "Nazwa domu: na sprzedaż!\nWłaściciel: Brak\nPojazd: Brak\nCena: %d$\nOpłaty: %d exp\n\nTen dom jest na sprzedaż.", HouseInfo[i][hPrice], HouseInfo[i][hExpPrice]);
				   	ShowPlayerDialog(playerid, 59, DIALOG_STYLE_MSGBOX, "Informacje", String, "Kup", "Zamknij");
				}
				return 1;
			}
		}

Być może w tym kodzie jest błąd, nie wiem.

A i coś jeszcze,

Gdy ktoś coś długiego napisze na chacie to wyrazy przenosi do drugiej linijki. Jest na to jakiś sposób?

Edytowane przez Reus

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Kod dodaj tu:

public OnPlayerCommandReceived(playerid, cmdtext[])

ten:

if(IsInHouse[playerid] == 1)
	{
 		if(strfind(cmdtext,"/report",true) == 0 || strfind(cmdtext,"/pm",true) == 0 || strfind(cmdtext,"/l",true) == 0)
	        return 1;

        return SendClientMessage(playerid, GREEN, "{BFBF40}W domu nie możesz używać żadnej komendy. (Wyjątek /l, /report, /pm)"), 0;
	}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ehh, zle napisalem ten kod co wyzej dales juz znajduje sie w

public OnPlayerCommandReceived(playerid, cmdtext[])

Tylko, że ja głupi callbacki pomyliłem ;_;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
if(IsInHouse[playerid] == 1)
{
  if(strfind(cmdtext,"report",true) == -1 && strfind(cmdtext,"pm",true) == -1 && strfind(cmdtext,"l",true) == -1 )
  {
	SendClientMessage(playerid, GREEN, "{BFBF40}W domu nie możesz używać żadnej komendy. (Wyjątek /l, /report, /pm)");
	return 0;
  }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Godzinę temu, NikeKST napisał:

if(IsInHouse[playerid] == 1)
{
  if(strfind(cmdtext,"report",true) == -1 && strfind(cmdtext,"pm",true) == -1 && strfind(cmdtext,"l",true) == -1 )
  {
	SendClientMessage(playerid, GREEN, "{BFBF40}W domu nie możesz używać żadnej komendy. (Wyjątek /l, /report, /pm)");
	return 0;
  }
}

Niestety nie działa.

Edytowane przez Reus

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Być może ze zmienną IsInHouse[] jest coś nie tak - nie jest konsekwentnie nadpisywana w części kodu odpowiadającej za wchodzenie/wychodzenie z/do domku. Mogę doradzić pewną funkcję (0 - na zewnątrz)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Raczej działa, bo blokuje wszystkie komendy oprócz wyjątków (ok) i teleportów (nie ok).

Przywróciłem kod z oryginalnego gamemode. Ktoś ma pomysł? :)

 for(new o = 0; o < 11; o++)
		{
			if(pickupid == HousePickups[o] && IsInHouse[playerid] == 1)
			{
			    new houseid = LastHouse[playerid];

			    LastHouse[playerid] = 0;
			    IsInHouse[playerid] = 0;

			    SetTimerEx("TeleOut", 1000, false, "dd", playerid, houseid);

		   		TogglePlayerControllable(playerid, false);
		   		PlayerTextDrawBoxColor(playerid, FadePlayer, 0x00000000);
		   		FadeCan[playerid] = 1;
				FadePlayerTimer[playerid] = SetTimerEx("UpdateFade", 50, true, "d", playerid);
		   		return 1;
			}
		}

	    for(new o = 1; o < ILOSC_DOMOW; o++)
		{
			if(pickupid == HouseInfo[o][HousePickupOut])
	        {
	            LastHouse[playerid] = o;
			    if(GetTickCount() < HouseEnter[playerid])
					return 0;

				if(HouseEnterBlock[playerid] == 1)
				    return 0;
				HouseEnterBlock[playerid] = 1;

			    new i = LastHouse[playerid];
			    if(strcmp(HouseInfo[i][hOwner], "@OWNER", false))
		   		{
					if(!strcmp(HouseInfo[i][hOwner], PlayerName(playerid), false))
			  		{
		      			SetTimerEx("SetPlayerHouseEx", 800, false, "dd", playerid, i);
						SendClientMessage(playerid, GREEN, "Wpisz /menu aby otworzyć menu domu");

                        FadeCan[playerid] = 1;
                        TogglePlayerControllable(playerid, false);
                        PlayerTextDrawBoxColor(playerid, FadePlayer, 0x00000000);
						FadePlayerTimer[playerid] = SetTimerEx("UpdateFade", 50, true, "d", playerid);

						HouseEnterBlock[playerid] = 0;
		  			}
		    		if(strcmp(HouseInfo[i][hOwner], PlayerName(playerid), false))
					{
						if(HouseInfo[i][hForSell] == 1)
						{
						    ShowPlayerDialog(playerid, 128, DIALOG_STYLE_LIST, "Informacje", "Wejdz do domu\n...\nOdkup dom", "Wybierz", "Zamknij");
						}
						else
						{
						    if(strcmp(HouseInfo[i][hPassword], "@PASSWORD", false))
							{
							    new String[128];
							    format(String, sizeof(String), "Nazwa domu: %s\nWłaściciel: %s\n\nTen dom posiada hasło. Wpisz hasło i wejdz.", HouseInfo[i][hName], HouseInfo[i][hOwner]);
							    ShowPlayerDialog(playerid, 58, DIALOG_STYLE_INPUT, "Informacje", String, "Wejdz", "Zamknij");
			        		}
				        	if(!strcmp(HouseInfo[i][hPassword], "@PASSWORD", false))
							{
							    FadeCan[playerid] = 1;
							    TogglePlayerControllable(playerid, false);
							    PlayerTextDrawBoxColor(playerid, FadePlayer, 0x00000000);
								FadePlayerTimer[playerid] = SetTimerEx("UpdateFade", 50, true, "d", playerid);

                                SetTimerEx("SetPlayerHouseEx", 800, false, "dd", playerid, i);
					       		HouseEnterBlock[playerid] = 0;

					       		if(QuestOption == 3 && QuestActivated[playerid] == 0)
								{
								    GivePlayerExp(playerid, 80);
		    						GivePlayerMoneyEx(playerid, 10000);
								    ShowNewTeleport(playerid, "~y~(3) Odwiedziles czyis ~y~Dom!~n~~w~Quest zaliczony.. +80 exp +10000$");
								    QuestActivated[playerid] = 1;
								}
			      		   	}
						}
		 			}
				}
				if(!strcmp(HouseInfo[i][hOwner], "@OWNER", false))
				{
				    new String[128];
			   	    format(String, sizeof(String), "Nazwa domu: na sprzedaż!\nWłaściciel: Brak\nPojazd: Brak\nCena: %d$\nOpłaty: %d exp\n\nTen dom jest na sprzedaż.", HouseInfo[i][hPrice], HouseInfo[i][hExpPrice]);
				   	ShowPlayerDialog(playerid, 59, DIALOG_STYLE_MSGBOX, "Informacje", String, "Kup", "Zamknij");
				}
				return 1;
			}
		}

Kolega zauważył, że gdy wpisujemy /wojsko to wyświetla się info iż nie można w domu używać komend, a gdy wpiszemy /lv, /ls, /sf to się wykonuje i teleportuje.

CMD:wojsko(playerid, params[])
{
	switch(random(5))
	{
	    case 0:
	    {
	        SetPlayerPos(playerid, 306.3411,1804.1818,17.6406);
	        SetPlayerFacingAngle(playerid, 0.5353);
	    }
	    case 1:
	    {
	        SetPlayerPos(playerid, 272.9373,1933.8341,17.6406);
	        SetPlayerFacingAngle(playerid, 237.6841);
	    }
	    case 2:
	    {
	        SetPlayerPos(playerid, 224.9502,2014.9518,17.6406);
	        SetPlayerFacingAngle(playerid, 303.4613);
	    }
	    case 3:
	    {
	        SetPlayerPos(playerid, 315.9906,2048.7969,17.6406);
	        SetPlayerFacingAngle(playerid, 154.6265);
	    }
	    case 4:
	    {
	        SetPlayerPos(playerid, 345.7964,1948.8154,17.6406);
	        SetPlayerFacingAngle(playerid, 154.6265);
	    }
	}

	SetCameraBehindPlayer(playerid);
	SetPlayerInterior(playerid, 0);
	ShowNewTeleport(playerid, "~y~Witamy na ~b~/Wojsko");
	return 1;
}
******************************************
CMD:lv(playerid, params[])
{
	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
	{
	    new VehicleID = GetPlayerVehicleID(playerid);
	    SetVehiclePos(VehicleID, 2118.3264,959.8165,10.8130);
	                              
		LinkVehicleToInterior(VehicleID, 0);
	}
	else
	{
  		SetPlayerPos(playerid, 2118.3264,959.8165,10.8130);
  		SetPlayerFacingAngle(playerid, 179);
	}
	SetPlayerInterior(playerid, 0);
	ShowNewTeleport(playerid, "~y~Witamy na ~b~Las Venturas");
	return 1;
}

 

Edytowane przez Reus

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×