Jump to content
  • 0

pomoc Warp na čas


Paulee

Dotaz

Zdravím,

měl bych na vás takovou menší prosbičku. Potřebuju aby jste mi nějak poradily jak udělám když hráč napíše třeba /sf, tak mu to hodí odpočet na 3dtextlabel přilepený na něj, a začalo by to odpočítávat? A až by to uběhlo, tak by ho to teleportovalo. A musí třeba stát, když se pohne, teleportace se zruší. Poradíte prosím vás? :d

 

Přeji pěkný den,

S pozdravem Petr.

Link to comment
Share on other sites

14 odpovědí na tuto otázku

Recommended Posts

  • 0

Budeš mít nějaké pole, kam uložíš hráčovu pozici před teleportací (při zadání /sf). Spustíš timer na 1s a na třetí vyvolání dané funkce hráče portneš, ve fci budeš kontrolovat, jestli jeho aktuální pozice odpovídá uložené.

Link to comment
Share on other sites

  • 0

Zdravím,

Mám to tam takhle:

 

Nahoře:

new Float:Player_Pos[4][MAX_PLAYERS_EX];

Příkaz a public:

forward TeleportaceNaWarp(playerid);
public TeleportaceNaWarp(playerid)
{
	if(IsPlayerInSphere(playerid, Player_Pos[0][playerid] ,Player_Pos[1][playerid] ,Player_Pos[2][playerid], 20))
   	{
		SetPlayerPos(playerid, -381.1938,-1438.9968,25.7266);
		SendClientMessage(playerid, -1, "Byl jsi teleportovan!");
	}else{
		SendClientMessage(playerid, -1, "Musíš stát na místě!");
	}
	return (true);
}
//------------------------------------------------------------------------------
CMD:test(playerid)
{
    GetPlayerPos(playerid, Player_Pos[0][playerid] ,Player_Pos[1][playerid] ,Player_Pos[2][playerid]);
    SendClientMessage(playerid, -1, "Budeš teleportovan!");
    SetTimerEx("TeleportaceNaWarp", 5000, false, "i", playerid);
    return (true);
}

 

 

Funguje to v pohodě, jen když tam kontroluju zda je na těch souřadnicích, tak ho to portne i tak, když jdu úplně jinam. Poradíte? :d

SAMP jinak nehází chybu.

Edited by PetrPaulik
Link to comment
Share on other sites

  • 0

V tom publicu, si daj GetPlayerPos a skontroluj tie súradnice či sa rovnajú (==) s tými, čo si uložil. Ak sa hráč nijako nepohol, mali by byť totožné všetky tri.

Edited by Sanios
Link to comment
Share on other sites

  • 0

Pole bych předělal:

new Float:Player_Pos[MAX_PLAYERS_EX][3];

A u toho rozhodně zmenšit raidus:

if(IsPlayerInSphere(playerid, Player_Pos[playerid][0] ,Player_Pos[playerid][1] ,Player_Pos[playerid][2], 1)) //jak psal Sanios tak GetPlayerPos je určo lepší  
Edited by GaRGoyLeS
Link to comment
Share on other sites

  • 0

No, keďže on chce, aby hráč stál na mieste, je blbosť kontrolovať, či je v nejakom dosahu toho bodu, keďže sa stále môže premiestniť, vyskúšaj:

//new Float:Player_Pos[4][MAX_PLAYERS_EX]; pôsobí pri predstave metúco uprav na:

new
    Float:Player_Pos[MAX_PLAYERS_EX][4]
    ;

public TeleportaceNaWarp(playerid)
{
	new
		Float:pPosition[4]
	;

	GetPlayerPos(playerid, pPosition[0], pPosition[1], pPosition[2]);
	
	if((Player_Pos[playerid][0] == pPosition[0]) && (Player_Pos[playerid][1] == pPosition[1]) && (Player_Pos[playerid][2] == pPosition[2]))
	{
		SetPlayerPos(playerid, -381.1938, -1438.9968, 25.7266);
		SendClientMessage(playerid, -1, "Byl jsi teleportovan!");
	}
	else
	{
		SendClientMessage(playerid, -1, "Musíš stát na místě!");
	}		
}
Edited by Sanios
Link to comment
Share on other sites

  • 0

Dík za radu, ale nějak mi to nejde, a nevím proč. Mám to tam takhle:

 

 

forward TeleportaceNaWarp(playerid);
public TeleportaceNaWarp(playerid)
{
    GetPlayerPos(playerid, pos2[playerid][0], pos2[playerid][1], pos2[playerid][2]);//Zde
    
	if(pos1[playerid][0], pos1[playerid][1], pos1[playerid][2] == pos2[playerid][0], pos2[playerid][1], pos2[playerid][2])
   	{
		SetPlayerPos(playerid, -381.1938,-1438.9968,25.7266);
		SendClientMessage(playerid, -1, "Byl jsi teleportovan!");
	}else{
		SendClientMessage(playerid, -1, "Musíš stát na místě!");
	}
	return (true);
}
//------------------------------------------------------------------------------
CMD:test(playerid)
{
    GetPlayerPos(playerid, pos1[playerid][0], pos1[playerid][1], pos1[playerid][2]);// a zde
    SendClientMessage(playerid, -1, "Budeš teleportovan!");
    SetTimerEx("TeleportaceNaWarp", 5000, false, "i", playerid);
	return (true);
}

 

 

Warningy

 

 

warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch
warning 213: tag mismatch

 

 

 

//EDIT: Aha, nevšiml jsem si Saniosův příspěvek. Zkusím :d

Edited by PetrPaulik
Link to comment
Share on other sites

  • 0

V tom príkaze /text nezabudni upraviť ešte tento riadok:

GetPlayerPos(playerid, Player_Pos[playerid][0], Player_Pos[playerid][1], Player_Pos[playerid][2]);
Edited by Sanios
Link to comment
Share on other sites

  • 0

Mám to tam takto, ale nevím, kde je problém. Furt mi to píše ty warningy u getplayerpos:

GetPlayerPos(playerid, pos1[playerid][0], pos1[playerid][1], pos1[playerid][2]);
Link to comment
Share on other sites

  • 0

Ne :d Dík už to funguje. A šlo by nějak udělat "univerzální" public? Třeba když chci přidat další teleport abych nemusel vytvářet nový public s novým timerom ? Abych třeba neměl 10 warpů a ke každému warpu zvlášť public .

Edited by PetrPaulik
Link to comment
Share on other sites

  • 0


SetTimerEx("TeleportaceNaWarp", 5000, false, "ii", playerid, 0); //V príkaze /sf

SetTimerEx("TeleportaceNaWarp", 5000, false, "ii", playerid, 1); //V príkaze /lv

//Pre lepší prehľad si ich aj môžeš zadefinovať, napr #define PORT_SF (0)

forward TeleportaceNaWarp(playerid, warpid);
public TeleportaceNaWarp(playerid, warpid)
{
new
Float:pPosition[4]
;

GetPlayerPos(playerid, pPosition[0], pPosition[1], pPosition[2]);

if((Player_Pos[playerid][0] == pPosition[0]) && (Player_Pos[playerid][1] == pPosition[1]) && (Player_Pos[playerid][2] == pPosition[2]))
{
switch(warpid)
{
case 0: //Port do SF
{
SetPlayerPos(playerid, -381.1938, -1438.9968, 25.7266);
SendClientMessage(playerid, -1, "Byl jsi teleportovan do SF!");
}
case 1: //Port do LV
{
SetPlayerPos(playerid, XXX, XXX, XXX);
SendClientMessage(playerid, -1, "Byl jsi teleportovan do LV!");
}
}
}
else
{
SendClientMessage(playerid, -1, "Musíš stát na místě!");
}
}

 

Edited by Sanios
Link to comment
Share on other sites

  • 0

Všimni si ako je upravený ten SetTimerEx a tiež deklarovanie tej funkcie (forward), ktorú timer vyvolá.

 

SetTimerEx vyvolá public "TeleportaceNaWarp" a parsne do neho (odošle) dva argumenty typu INT (i), playerid a warpid.

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