Jump to content
  • 0

pomoc [HELP]Nefunguje IsPlayerInSphere


Konvicka

Dotaz

Zdravím vás,

chtěl bych se vás zeptat, po 3 letech jsem se vrátil k pawnu..

A chci si udělat FS...

Vytvořil jsem si pickup:

 

OnFilterScriptInit:

CreatePickup(19130,1,3887.1135,597.8398,23.1000);

Public OnPlayerPickUpPickup

public OnPlayerPickUpPickup(playerid, pickupid){
if(IsPlayerInSphere(playerid,3887.1135,597.8398,23.1000,15)==1)
{
if(IsPlayerInAnyVehicle(playerid)==1)
{
ShowPlayerDialog(playerid,NitroDialog,DIALOG_STYLE_MSGBOX,"{FF8000}Nitro specialista... ","{FF0000}Chceš\n {00FF00}NITRO.?","Ano","Ne");
}else{
SendClientMessage(playerid, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
}
}
return 1;
}

Proč když najedu Autem na ten pickup, dialog se mi nezobrazí...

Ale když tam vejdu bez auta..Napíše se mi že nejsem v Autě....

 

Už jsem to zkoušel i s :

if(pickupid == nazevpickupu)

A stejně nic..

 

EDIT:

 

Popřípadě, jak to nejlépe udělat...:(..

Zkoušel jsem to i přes tlačítko, ale taky neúspěšně...

 

Už si nevím rady...

Link to comment
Share on other sites

21 odpovědí na tuto otázku

Recommended Posts

  • 0

Ano, byl jsem v autě...

Ale ten pickup, se ani nezobrazil...

 

Zkusil jsem to i takhle :

forward Kontrola(playerid);

OnFilterScriptInit:

SetTimer("Kontrola",1000,1);


public Kontrola(playerid)
{
if(IsPlayerInSphere(playerid,3887.1135,597.8398,23.1000,15)==1)
{
if(IsPlayerInAnyVehicle(playerid)==1)
{
ShowPlayerDialog(playerid,NitroDialog,DIALOG_STYLE_MSGBOX,"{FF8000}Nitro specialista... ","{FF0000}Chceš\n {00FF00}NITRO.?","Ano","Ne");
}else{
SendClientMessage(playerid, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
}
}
return 1;
}

Fakt už nevím...Ani takhle to nejde..:/

 

 

Zkoušel jsem to i dát do OnPlayerUpdate - I tak bez úspěchu...

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

používáš normální SetTimer, který nevrací žádné parametry, takže v publicu nemůžeš mít playerid, čili musíš to udělat přes cyklus:

public Kontrola()
{
    for(new i;i<MAX_PLAYERS;i++)
    {
        if(!IsPlayerConnected(i)) continue; //není-li dané id online, přeskočíme na další
        if(IsPlayerInSphere(i,3887.1135,597.8398,23.1000,15) == 1)
        {
            if(IsPlayerInAnyVehicle(i) == 1)
            {
                ShowPlayerDialog(i,NitroDialog,DIALOG_STYLE_MSGBOX,"{FF8000}Nitro specialista... ","{FF0000}Chceš\n {00FF00}NITRO.?","Ano","Ne");
            }
            else
            {
                SendClientMessage(i, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
            }
        }
    }
    return 1;
}
Link to comment
Share on other sites

  • 0

Vkládám celý soubor .pwn...

Smazal jsem publicy, ve kterých nic není--

#include <a_samp>
//------------------------------------------------------------------------------Barvy
#define Modra 0x142FE4FF
#define Oranzova 0xFF8040FF
#define Cervena 0xFF0000FF
#define Zelena 0x00FF00FF
#define NitroDialog 57486
//------------------------------------------------------------------------------Dcmd
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
//------------------------------------------------------------------------------Newy
//------------------------------------------------------------------------------Forwardy
forward IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius);
forward GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z);
forward Kontrola();
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print("       Race-Drift by Konvicka          ");
print("--------------------------------------\n");
//------------------------------------------------------------------------------Pickupy
CreatePickup(19130,1,3887.1135,597.8398,23.1000);
SetTimer("Kontrola",1000,1);
return 1;
}
public Kontrola()
{
    for(new i;i<MAX_PLAYERS;i++)
    {
        if(!IsPlayerConnected(i)) continue; //není-li dané id online, přeskočíme na další
        if(IsPlayerInSphere(i,3887.1135,597.8398,23.1000,15) == 1)
        {
            if(IsPlayerInAnyVehicle(i) == 1)
            {
                ShowPlayerDialog(i,NitroDialog,DIALOG_STYLE_MSGBOX,"{FF8000}Nitro specialista... ","{FF0000}Chceš\n {00FF00}NITRO.?","Ano","Ne");
            }
            else
            {
                SendClientMessage(i, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
            }
        }
    }
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/mycommand", cmdtext, true, 10) == 0)
	{
		// Do something here
		return 1;
	}
	dcmd(radrift,7,cmdtext);
	return 0;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(IsPlayerInSphere(playerid,3887.1135,597.8398,23.1000,15)==1)
{
	if(IsPlayerInAnyVehicle(playerid)==1)
	{
	ShowPlayerDialog(playerid,NitroDialog,DIALOG_STYLE_MSGBOX,"{FF8000}Nitro specialista... ","{FF0000}Chceš\n {00FF00}NITRO.?","Ano","Ne");
	}else{
	SendClientMessage(playerid, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
	}
}
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == NitroDialog)
{
	if(response == 1)
	{
		if(IsPlayerInAnyVehicle(playerid))
		{
			new State=GetPlayerState(playerid);
			if(State!=PLAYER_STATE_DRIVER)return SendClientMessage(playerid,Cervena,"[Chyba]_Pro nainstalování nitra, musíš sedět na místě řidiče.!");
			new vehicleid2 = GetPlayerVehicleID(playerid);
			if(IsPlayerInInvalidNosVehicle(playerid,GetPlayerVehicleID(playerid)))
			{
			SendClientMessage(playerid,Cervena,"[Chyba]_Toto vozidla, není přizpůsobeno pro nainstalování nitra.!");
			}else{
			AddVehicleComponent(vehicleid2, 1010);
			SendClientMessage(playerid, Zelena, "[Nitro]_Nitro ti bylo úspěšně nainstalováno do vozidla.!");
			}
		}else{
		SendClientMessage(playerid, Cervena, "[Chyba]_Nesedíš ve vozidle, nemůžeme ti nainstalovat nitro.!");
		}
	}
}
return 1;
}
dcmd_radrift(playerid,params[])
{
#pragma unused params
SetPlayerPos(playerid,3728.9480,594.3935,24.4674);
SetPlayerFacingAngle(playerid,182.3907);
return 1;
}
//------------------------------------------------------------------------------
IsPlayerInInvalidNosVehicle(playerid,vehicleid)
{
	#define MAX_INVALID_NOS_VEHICLES 67
	new InvalidNosVehicles[MAX_INVALID_NOS_VEHICLES] =
	{
	//Motorky
	581,523,462,521,463,522,461,448,468,586,
	//Kola
	509,481,510,
	//Lode
	472,473,493,595,484,430,453,452,446454,
	//Helikoptéry
	548,425,417,487,497,563,501,465,447,469,488,
	//Monster track
	406,573,444,556,557,
	//Letadla
	592,577,511,512,593,520,553,464,476,519,460,513,539,
	//Čtyřkolky
	471,
	//Návěsy
	435,450,591,606,607,610,584,608,611,
	//V,laky
	590,569,537,538,570,449,
	};
	vehicleid = GetPlayerVehicleID(playerid);
	if(IsPlayerInVehicle(playerid,vehicleid))
	{
		for(new i = 0; i < MAX_INVALID_NOS_VEHICLES; i++)
		{
			if(GetVehicleModel(vehicleid) == InvalidNosVehicles[i])
			{
			return true;
			}
		}
	}
	return false;
	}
//------------------------------------------------------------------------------
IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius){
if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius){
return 1;}return 0;}
GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z){
new Float:x1,Float:y1,Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),
2)+floatpower(floatabs(floatsub(y,y1)),
2)+floatpower(floatabs(floatsub(z,z1)),2));
return floatround(tmpdis);}

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor
IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius){
if(GetPlayerDistanceToPointEx(playerid,x,y,z) < radius){
return 1;}return 0;}
GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z){
new Float:x1,Float:y1,Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid,x1,y1,z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(x,x1)),
2)+floatpower(floatabs(floatsub(y,y1)),
2)+floatpower(floatabs(floatsub(z,z1)),2));
return floatround(tmpdis);}

zbytečně si to komplikuješ, dnes už je dostupná nativní funkce IsPlayerInRangeOfPoint, která porovnává, zda je hráč v dosahu, zkus tohle smazat (nebo jen hodit do poznámek) a namísto toho dej nahoru tohle:

#define IsPlayerInSphere(%0,%1,%2,%3,%4) IsPlayerInRangeOfPoint(%0,%4,%1,%2,%3)

nezaručuji, že to bude fungovat, ale chyba může být v definici funkce GetPlayerDistanceToPointEx, zkus to tedy touto cestou

Link to comment
Share on other sites

  • 0

Vymaž funkci IsPlayerInSphere celou a používej klasickou funkci IsPlayerInRangeOfPoint a ten dialog ti nejde protože maximální ID dialogu lze použít 32767 a ty tam máš 57486 takže to změň na menší třeba 14287 a ten dialog už ti půjde.

Link to comment
Share on other sites

  • 0

Aby jsi opravil chybu, musis ji spravne detekovat. Chyba neni v IsPlayerInSphere

Pickup typu 1 je pro sebrani hracem nikoliv autem. Kdyz nastavis 14 tak jde sebrat autem, ale pro tveho clienta po sebrani zmizi a po chvilce se znovu zobrazi. Da se to vyresim "resfesnutim" (DestroyPickup a opetovny CreatePickup), sice se nevyhnes probliknuti, ale pickup tam bude stale.

Link to comment
Share on other sites

  • 0

Taky se mi jednou stalo, ze pickupid 14 tak uplne ne vzdy drzi na svem miste, ale pada na defautlni textury, tedy pokud mas nekde postavenou mapu, pickup bych hledal na urovni hladiny more nebo nekde poceste po Ztove souradnici :d

Dialogy na zobrazovani pickupu nemaji vliv :d

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