Jump to content

script [INC][SbA] Porty


Scydo

Recommended Posts

SHORT BUT ADVANCED

PORTY

Jde o takovou sérii includů, které mají nějaký jednoduchý základ nebo jsou velice často publikované, ale budou jednoduše zpracované(nemenší možný počet řádků, dobrá optimalizace, výborná přehlednost aj.) s nějakým zajímavým doplňkem, bez použití jiného includu než a_samp.

Stardartní porty jsou velice často zpracované ve formě scriptu, tak, že se nachází v callbacku OnPlayerCommandText a s příkazy /setport /port a /delport.
Já se to rozhodl zpracovat ve formě includu, takže s tím může uživatel jednoduše pracovat a aby to nebylo málo, lze povolit(založit/spustit) více portů najednou. Zde je seznam fcí, které obsahuje tento includ:

SetGlobalLocation() - Hlavní fce. Uloží pozice daného port(id) a zpřístupní ho všem.
RemoveGlobalLocation() - Zruší možnost warpnut se na daný port(id).
SetPlayerPortID() - Warpne hráče/hráče včetně vozidla na daný port(id).
IsPortEnabled() - Zjistí, zda je daný port(id) zpřístupněn.
ArePortsEnabled() - Zjistí, zda jsou všechny port(id) zpřístupněny.
GetFreePortID() - Zjistí nejbližší port(id), které je zpřístupněné.


SetGlobalLocation
Parametry:
(iPortID, bool:bVehicles, Float:fXpos, Float:fYpos, Float:fZpos)

iPortID - ID daného portu.
bVehicles - Povolit(true) či zakázat(false) hráčům se portou i s vozidlem.
fXpos - X-ová pozice portu.
fYpos - Y-nová pozice portu.
fZpos - Z-tová pozice portu.

Return:

Tato funkce nevrací nic zvláštního.


RemoveGlobalLocation
Parametry:
(iPortID)

iPortID - ID daného portu.

Return:

Tato funkce nevrací nic zvláštního.


SetPlayerPortID
Parametry:
(playerid, iPortID)

playerid - ID hráče, kterého má warpnout.
iPortID - ID daného portu.

Return:

Dle fcí(SetPlayerPos či SetVehiclePos).


IsPortEnabled
Parametry:
(iPortID)

iPortID - ID daného portu..

Return:

Proměnná s hodnotou true či false.


ArePortsEnabled
Parametry:

Neobsahuje žádné parametry.

Return:

true - v případě, že je jen jediný z portů(id) zpřístupněn.
false - v případě, že žádný z portů(id) není zpřístupněn.


GetFreePortID
Parametry:

Neobsahuje žádné parametry.

Return:

PortID - v případě, že nalezne neblížší zpřístupněné port(id).
-1 - vrátí, jestli-že nenajde.

Jelikož jsou zpracovaný jen jako ve formě hodnot a ne jako již "před připraveného scriptu", lze s nimi vytvořit několik způsobů port systémů. Například si můžete zvolit jen jediný port(id) a s nim pracovat jako u normálních častých scriptů:


#include <sba_porty>
#include <zcmd> /* http://forum.sa-mp.com/showthread.php?t=576114 */

#define DEFAULT_PORT_ID (0)

CMD:setport(playerid, params[]) {

	if (!IsPlayerAdmin(playerid)) return (true);

	/* V případě, že již port nastaven: */
	if (IsPortEnabled(DEFAULT_PORT_ID)) return (true);

	new
		Float: fXpos,
		Float: fYpos,
		Float: fZpos;
	GetPlayerPos(playerid, fXpos, fYpos, fZpos);

	/* Povolí(založí) globální Port(ID) pro všechny */
	SetGlobalLocation(DEFAULT_PORT_ID, true, fXpos, fYpos, fZpos);

	SendClientMessageToAll(0xFF000000, "Administrátor ... založil veřejný /port");
	return (true);
}

CMD:stopport(playerid, params[]) {

	if (!IsPlayerAdmin(playerid)) return (true);

	/* V případě, že již není nastaven: */
	if (!IsPortEnabled(DEFAULT_PORT_ID)) return (true);

	/* Zamezí možnost warpu na Port(ID): */
	RemoveGlobalLocation(DEFAULT_PORT_ID);

	SendClientMessageToAll(0xFF000000, "Administrátor ... zrušil veřejný /port");
	return (true);
}

CMD:port(playerid, params[]) {

	/* V případě, že již není nastaven: */
	if (!IsPortEnabled(DEFAULT_PORT_ID)) return (true);

	/* Portne hráče na pozice daného Portu(ID): */
	SetPlayerPortID(playerid, DEFAULT_PORT_ID);

	SendClientMessageToAll(0xFF000000, "Hráč ... se warpnul na veřejný /port");
	return (true);
}



A nebo tedy si udělat systém, kde bude možno se portout na více portů:


#include <sba_porty>

CMD:port(playerid, params[]) { /*  /port 0 | /port 1 / port 2 */


	if (!strlen(params)) return (true);
	new
		PortID = strval(params);

	/* Jestli-že zadá jiné ID portu do příkazu než od 0 do 10(dMaxPortsID): */
	if (PortID < 0 || PortID > dMaxPortsID) return SendClientMessage(playerid, -1, "/port ID_PORTU");

	/* Jestli-že daný Port(ID) není povolen(založen): */
	if (!IsPortEnabled(PortID)) return (true);

	SetPlayerPortID(playerid, PortID);
	return (true);
}



DOWNLOAD
Pawno.cz Pastebin

Link to comment
Share on other sites

Podla popisu to znie dobre :)

 

Len sa mi nepáči tá myšlienka že si "pawner" sám musí zvoliť ID portu. Samozrejme si to napravil funkciou GetFreePortID. Nuž ale to je každého osobný názor :p

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