Jump to content

návod Warpy přes dcmd


Recommended Posts

INFO:

Zdravím lidi toto je můj první návod tak vás prosím o schovívavost a nejsem nějaký profík v pawnu ale přesto se s vámi chci podělit o svoje znalosti. :)

 

NÁVOD:

Nejdřív si někam nahoru do módu napíšeme:

#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

Potom si najdeme public OnPlayerCommandText a napíšeme tam:

dcmd(sf,2,cmdtext);

"sf" to bude protože v našem případě to bude warp /sf

Takže zatím to bude vypadat takhle:

public OnPlayerCommandText(playerid, cmdtext[])
{
   dcmd(sf,2,cmdtext);
   return 1;
} 

To číslo 2 = počet písmen toho příkazu

Pod to si napíšeme:

dcmd_sf(playerid,params[])
{
	#pragma unused params
        new string[128];
	if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) //Zjistí jestli hráč nesedí v nějakym autě
	{
	SetVehiclePos(GetPlayerVehicleID(playerid), -1947.1663,576.3934,35.1719); //Pokud ano přemístí auto na danou pozici
	}else{
	SetPlayerPos(playerid, -1947.1663,576.3934,35.1719); //Pokud ne tak přemístí na danou pozici pouze hráče
	}
    format(string, sizeof(string), "{00CC00}Hráč {FF0000}%s {00CC00}se teleportoval do {FF0000}San Fierra", PlayerName(playerid)); //Zpráva která se zobrazí všem hráčům když hráč napíše /sf
    SendClientMessageToAll(0x00FF51, string); //Barva té zprávy
	return 1;
}

A máme hotovo! :)

Nyní vše je funkční a když hráč na server napíše /sf tak ho to teleportuje do SF a navíc napíše informační zprávu všem.

Doufám že se vám můj menší návod líbil pokud ano dejte +rep a ohodnoťte do 10 bodů :)

Link to comment
Share on other sites

Můžeš vysvětlit toto?

#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

btw chválím za 

GetPlayerState(playerid) == PLAYER_STATE_DRIVER

protože to tu moc lidí neřeší 

Edited by Lukasz
Link to comment
Share on other sites

~> Dcmd je 8 let staré a pomalé... to už raději i-zcmd. To je staré dokonce ani ne pár měsíců

~> Když ten příkaz nemá parametry, proč je k tomu chceš využít a stejně ještě na to použiješ pragmu?

~> Btw ten #define dcmd ... není nic více než jen preprocesor podmínky.

 

 

 

 

 

public 
	OnPlayerCommandText(playerid, cmdtext[]) {

	 if (!strcmp(cmdtext, "/sf")) {

		if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == 2) SetVehiclePos(GetPlayerVehicleID(playerid), -1947.1663, 576.3934, 35.1719); 
		else SetPlayerPos(playerid, -1947.1663, 576.3934, 35.1719);
		new 
			sString[144 + 1];
		format(sString, sizeof(sString), "{00CC00}Hráč {FF0000}%s {00CC00}se teleportoval do {FF0000}San Fierra", PlayerName(playerid)); 
		SendClientMessageToAll(0x00FF5100, sString); 
		return true;
	}
	return false;
}

 

Link to comment
Share on other sites

Pred tydnem jsem se naucil, abych nepouzival dcmd, je to stare a pomale, jak psal skibig... rychlejsi je treba cmd, ysi, zcmd... 


a hlavne tam nemusis mit toto...

public OnPlayerCommandText(playerid, cmdtext[])
{
   dcmd(blablabla,9,cmdtext);
   return 1;
} 
Edited by Curly
Link to comment
Share on other sites

A důvod proč je to pomalé by někdo věděl? :(

~> Protože to hledá text... a hledat text je delší než hledat třeba číslo milý Printe... :(

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...