Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
NuMeRe

pomoc Lokace

Recommended Posts

Zdravím,
Právě pracuji na lokaci ve které se hráč právě nachází. Mám vytvořený TextDraw ale netuším jaké funkce tam patří.
Mohu poprosit o Vaší pomoc ?
Děkuji. :)

 


#include <a_samp>

new Text:LokaceTD;

public OnFilterScriptInit()
{
	LokaceTD = TextDrawCreate(47.000000, 333.000000, "Las Venturas AirPort");
	TextDrawBackgroundColor(LokaceTD, 255);
	TextDrawFont(LokaceTD, 2);
	TextDrawLetterSize(LokaceTD, 0.160000, 0.699999);
	TextDrawColor(LokaceTD, -1);
	TextDrawSetOutline(LokaceTD, 1);
	TextDrawSetProportional(LokaceTD, 1);
	TextDrawSetSelectable(LokaceTD, 0);

	for(new i; i < MAX_PLAYERS; i ++)
	{
		if(IsPlayerConnected(i))
		{
			TextDrawShowForPlayer(i, LokaceTD);
		}
	}
	return 1;
}

public OnFilterScriptExit()
{
	TextDrawHideForAll(LokaceTD);
	TextDrawDestroy(LokaceTD);
	return 1;
}

public OnPlayerConnect(playerid)
{
	TextDrawShowForPlayer(playerid, LokaceTD);
	return 1;
}

 

Sdílet tento příspěvek


Link to post
Share on other sites
Guru

Problém ale je, že OnFilterScriptInit() se ti vyvolá pouze jakmile se spustí FS(jestliže je to během restartu serveru, tak to ani nebude nikdo během toho na serveru :kek: )...
To znamená, že nikomu dalšímu se ten textdraw nezobrazí. Takže, buď použí nějakou fci, která se často opakuje nebo se často stává, například OnPlayerUpdate... a nebo zkus použít můj nápad a vyvolat si jednosekundovou funkci, která se bude opakovat do skončení serveru:
 

new OSecTimer;

public OnFilterScriptInit() {
	OSecTimer = SetTimer("OnOneSecTimer", 1000, false);
	return 1;
}

public OnFilterScriptExit() {
	KillTimer(OSecTimer); // <--- !!!! 
	return 1;
}

forward OnOneSecTimer();
public OnOneSecTimer() {
	OSecTimer = SetTimer("OnOneSecTimer", 1000, false);
	return 1;
}

Pak je to už snadné. Protože probíhá každou vteřinu tak můžeš i všechno zjistit každou vteřinou:
 

forward OnOneSecTimer();
public OnOneSecTimer() {
	for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++) {
		if (IsPlayerInRangeOfPoint(i, 5.0, x_pozice, y_pozice, z_pozice) {
			// Jestliže je někde v okolí:
			// (Rádius 5 je docela dost, i když se to nezdá)
			TextDrawShowForPlayer(i, LokaceTD);
		}
	}
	OSecTimer = SetTimer("OnOneSecTimer", 1000, false);
	return 1;
}

 

Edited by Scydo

Sdílet tento příspěvek


Link to post
Share on other sites

Ďalšia možnosť je použiť Streamer plugin, pomocou CreateDynamicRectangle vytvoriť zóny a používať callbacky OnPlayerEnterDynamicArea a OnPlayerLeaveDynamicArea.

Ak to urobíš takto, môžeš si do zóny uložiť aj nejaké dáta - napríklad index do poľa s názvami zón. Potom by si nemusel vždy prechádzať zoznam všetkých zón na to, aby si zistil, do ktorej zóny hráč vošiel a aký text mu máš zobraziť. Toto by si docielil pomocou Streamer_SetArrayData a Streamer_GetArrayData (array kvôli tomu, že okrem indexu názvu zóny budeš ukladať aj iné informácie - napríklad unikátne ID scriptu, aby sa ti to nebilo s inými scriptami).

Edited by DuFF

Sdílet tento příspěvek


Link to post
Share on other sites

Nejsem si teď momentálně jistý, ale myslím si že stačilo udělat do OnPlayerSpawn " TextDrawShowForPlayer(playerid, LokaceTD); " A myslím si že vyřešené, než aby se tady je*at s tímto. :D

 

Nějak takhle:

Citace
#include <a_samp>

new Text:LokaceTD;

public OnFilterScriptInit()
{
	LokaceTD = TextDrawCreate(47.000000, 333.000000, "Las Venturas AirPort");
	TextDrawBackgroundColor(LokaceTD, 255);
	TextDrawFont(LokaceTD, 2);
	TextDrawLetterSize(LokaceTD, 0.160000, 0.699999);
	TextDrawColor(LokaceTD, -1);
	TextDrawSetOutline(LokaceTD, 1);
	TextDrawSetProportional(LokaceTD, 1);
	TextDrawSetSelectable(LokaceTD, 0);

	for(new i; i < MAX_PLAYERS; i ++)
	{
		if(IsPlayerConnected(i))
		{
			TextDrawShowForPlayer(i, LokaceTD);
		}
	}
	return 1;
}

public OnPlayerSpawn(playerid)
{
      TextDrawShowForPlayer(playerid, LokaceTD);
      return 1;
}

public OnPlayerDisconnect(playerid)
{
      TextDrawHideForPlayer(playerid, LokaceTD);
      return 1;
}

A vyřešeno

Edited by shiftnity

Sdílet tento příspěvek


Link to post
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...