Jump to content

[TuT] Admin /port


Baseball

Recommended Posts

Port systém

:1: 

Obsah

Uložíme pozici 

Dostaneme na ní hráče

Port ON / OFF

Napíšeme hlášku

 

Úvod

Tento návod je pro nováčky kteří chtějí do svého GM nebo FS /setport a /port pro hráče. Použijeme pouze základní funkce pawna.

 

Vysvětlení

Velice jednoduché a rychlé, budeme pracovat v OnPlayerCommandText. Ale nejprve dáme někam nahoru new Float:px,Float:py,Float:pz; do kterého se budou ukládat souřadnice na port.

Teď jdeme k samotnému příkazu.

if (strcmp("/setport", cmdtext, true, 7) == 0) jako u každého příkazu v OnPlayerCommandText. nyní udělám klasickou závorku kterou začíná příkaz {.

Aby jsme měli přehledné tak na další řádek dáme if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFFF,"Nedostatečné oprávnění!"); díky tomu bude tato možnost jen pro administrátory. Vysvětlíme si podmínku if(!IsPlayerAdmin(playerid))

 

if = > Pokud (z angličtiny)

(! = > je(kdyby jsme nedaly ! tak pokud není)

IsPlayerAdmin(playerid)) = > je / není hráč admin (Pouze RCON)

return = > Pokud nesplňuje podmínku 

SendClientMessage = > Odešle hráči zprávu

(playerid => hráči který zadal příkaz

0xFFFFFFFF = > barva (hex)

,"Nedostatečné oprávnění"); = > text který se mu odešle

 

Nyní dáme samotné uložení pozice použijeme GetPlayerPos(playerid, px,py,pz); a teď si to vysvětlíme

 

GetPlayerPos = > zjistíme pozici hráče

(playerid = > hráče který zadal příkaz

px,py,pz); = > a uložíme jí na tento text

 

Celé to vypadat takto

	if (strcmp("/setport", cmdtext, true, 7) == 0)
	{
 		if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
		GetPlayerPos(playerid, px,py,pz);
		return 1;
	}

Teď je uložená pozice pro port.

Ale Teď port zapneme.

 

if (strcmp("/setporton", cmdtext, true, 9) == 0) příkazem /Setporton zapneme port

dáme tam zase { na začátek příkazu. vzhledem k tomu že chceme aby to mohl udělat pouze admin dáme znovu podmínku if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!"); a teď pod to nastavím pro všechny že je port zapnut aby to udělalo pro všechny musíme to udělat takto:

for(new i = 0; i < MAX_PLAYERS; i++) všichni hráči (z počtu na serveru) pod to dáme a pod ní dáme SetPVarInt(i, "adminport", 1); nastavím adminport na 1 (jako že zapnut)

 

Celý příkaz bude vypadat takto

if (strcmp("/setportOn", cmdtext, true, 10) == 0)
	{
	    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
	    	SetPVarInt(i, "adminport", 1);
	        }
		return 1;
	}

SetPVarInt(i, "adminport", 1); 

Vysvětlíme:

 

SetPVarInt = > něco nastavím (nějakou podmínku)

i = > všem (pokud by jste chtěli jen pro sebe tak dáte třeba playerid)

"adminport" = > pojmenujeme si funkci dle sebe. je to jedno

1 = >nastavíme funkci na 1 (1 = zapnuto 0 = vypnuto)

 

Zase uděláme příkaz if (strcmp("/port", cmdtext, true, 10) == 0) a zase zahájíme příkaz { teď dáme podmínku pokud je adminport zapnutý if(GetPVarInt(playerid, "adminport") == 1) return SendClientMessage(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");

Vysvětlíme:

 

if = > pokud

(GetOvarInt = > pokud je podmínka

(playerid = > u hráče

"adminport" podmínka s názvem adminport 

) == 1) = > pokud se rovná podmínka 1 

retrun = > když né

SendClientMessage = > odešle hráči zprávu

 

Teď dáme pod podmínku a nastavíme pozici hráče na px,py,pz pomoci SetPlayerPos(playerid, px,py,pz); 

Vysvětlíme:

 

SetPlayerPos = > nastavíme hráči pozici

(playerid = > hráči který zadal příkaz

px,py,pz = > na pozici px, py, pz

 

Teď co když bude hráč ve vozidle?  Portneme ho i s vozidlem takže nejprve uložíme ID vozidla do nějakého textu. new vozidlo_Port = GetPlayerVehicleID(playerid); 

Vysvětlíme:

 

GetPlayerVehicleID = > zjistíme ID vozidla ve kterém je hráč

(playerid) = > hráče který zadal příkaz

 

Teď dáme vozidlo na polohu portu SetVehiclePos(vozidlo_Port,px,py,pz);

Vysvětlíme:

 

SetVehiclePos = > dáme auto na pozici

vozidlo_Port = > do vozidla s Id ve kterém seděl předtím

px,py,pz = > na uložené souřadnice

 

Teď aby to hráče po portu dalo do vozidla pomocí PutPlayerInVehicle(playerid, vozidlo_Port, 0);

Vysvětlíme:

 

PutPlayerInVehicle = > dá hráče do vozidle

(playerid = > po tolikáte už není třeba vysvětlit

vozidlo_Port = > do vozidla s Id ve kterém seděl předtím

0 = > na sedadlo 0 (0 = řidič, 1 = spolujezdec, 2 = zadní sedadlo za řidičem, 3 = zadní sedadlo za spolujezdcem)

if (strcmp("/port", cmdtext, true, 4) == 0)
	{
		if(GetPVarInt(playerid, "adminport") == 1) return SendClientMessage(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");
		{
		    SetPlayerPos(playerid, px,py,pz);
		    new vozidlo_Port=GetPlayerVehicleID(playerid);
	        SetVehiclePos(vozidlo_Port,px,py,pz);
	        PutPlayerInVehicle(playerid, vozidlo_Port, 0);
                }
		return 1;
	}

Teď uděláme jaště port off 

Je to to samé jako /SetPortOn až na to že v  SetPVarInt(i, "adminport", 0); musíme dát 0 protože ho chceme vypnout.

if (strcmp("/setportOff", cmdtext, true, 11) == 0)
	{
	    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
		for(new i = 0; i < MAX_PLAYERS; i++)
		{
	    	SetPVarInt(i, "adminport", 0);
	        }
		return 1;
	} 

Myslím že zde není třeba nic vysvětlovat

 

Příklady

Tak teď celý kód

newy

new Float:px,Float:py,Float:pz;

v příkazech

if (strcmp("/setport", cmdtext, true, 10) == 4)
    {
        if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
        GetPlayerPos(playerid, px,py,pz);
        return 1;
    }
    if (strcmp("/setportOn", cmdtext, true, 10) == 0)
    {
     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
         SetPVarInt(i, "adminport", 1);
        }
        return 1;
    }
    if (strcmp("/port", cmdtext, true, 4) == 0)
    {
        if(GetPVarInt(playerid, "adminport") == 1) return SCM(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");
        {
         SetPlayerPos(playerid, px,py,pz);
         new vozidlo_Port=GetPlayerVehicleID(playerid);
     SetVehiclePos(vozidlo_Port,px,py,pz);
     PutPlayerInVehicle(playerid, vozidlo_Port, 0);
     }
        return 1;

    {
     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFFFFff,"Nemáš dostatečný administrační level!");
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
         SetPVarInt(i, "adminport", 0);
        }
        return 1;
    }  

Závěr

Doufám že jsem vám pomohl. Pokud najdete chybu napište :)

Také doufám že jste jen nezkopírovali kód  :v:   :wave:

Edited by Baseball
Link to comment
Share on other sites

Ten SetPVar by šel samozřejmě využít, kdybys to mohl povolovat/zakazovat individuálně - na každého hráče + samozřejmě pro všechny.

Jinak totálně zbytečné.. (viz Steam Wallet's comment)

 

Ale jinak GJ ... :)

if(GetPVarInt(playerid, "adminport") == 1) return SendClientMessage(playerid,cervena,"[ ! ] {FFFFFF}Port je vypnutý!");

Podle tohoto... "Pokud je Admin port zapnutý, neportneš se."

A k "portOff" nemáš přidaný příkaz.. (v celkovém kódu)

Edited by TheRohlikar
Link to comment
Share on other sites

  • 3 weeks later...
  • Globální moderátor

až na to strašné vysvětlování jak vše vysvětliješ to není zas taková hrůza,  

 

 

 

nyní udělám klasickou závorku kterou začíná příkaz {.

 

 really???

GetOvarInt 

nakonec ještě jeden překlep co tam máš.

 

je to takovej napůl návod napůl script

Link to comment
Share on other sites

Blbost už jenom ten samotný port... Tady máš lepší.

stock Port(playerid, Float:x, Float:y, Float:z){
    if(!IsPlayerInAnyVehicle(playerid)){
	SetPlayerPos(playerid, x, y, z);
    }else{
        SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
        PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
    }
}

Využití: Port(playerid, x, y, z);

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