Interceptare comenzi

#1
Pentru a intercepta o comanda vom folosi functia OnPluginStart, inauntrul careia vom folosi functia AddCommandListener. (the new inception movie looks amazing)
Se poate folosi si functia OnClientCommand, insa pentru simplitatea tutorialul, ne vom rezuma la AddCommandListener.

AddCommandListener necesita doi parametrii, callback-ul, si numele comenzii pe care dorim sa o interceptam.
In cazul in care nu specificam numele comenzii, interceptarea va fi globala (global listener)

Code: Select all

#include <sourcemod> // includem libraria sourcemod - necesara pentru a putea folosi functiile OnPluginStart si AddCommandListener
#pragma newdecls required // folosim transitional syntax - https://wiki.alliedmods.net/SourcePawn_Transitional_Syntax

public void OnPluginStart()
{
	AddCommandListener(Command_Kill, "kill"); // Command_Kill este callback-ul, iar "kill" este comanda
}

In continuare, vom defini Command_Kill si vom bloca comanda.

Code: Select all

public Action Command_Kill(int client, const char[] command, int argc) // Aici definim Command_Kill
{
	return Plugin_Handled; // Blocam comanda
}

Daca vrem sa blocam functionalitatea originala a comenzii, returnam Plugin_Handled.
Daca vrem sa continuam functionalitatea originala a comenzii, returnam Plugin_Continue.
Folosindu-ne de Plugin_Handled si Plugin_Continue, putem spre exemplu sa blocam comanda in situatia X, insa sa o lasam sa continue in rest.

Sa presupunem ca vrem sa blocam comanda doar pentru cei din echipa Terorista. Vom face in felul urmator:

Code: Select all

public Action Command_Kill(int client, const char[] command, int argc)
{
	if (GetClientTeam(client) == 2) // Daca persoana care executa comanda face parte din echipa cu numarul 2 (Terrorist)
	{
		return Plugin_Handled; // Blocam comanda
	}
	else return Plugin_Continue; // Altfel, continuam functionalitatea originala a comenzii
}

Codul final va arata astfel:

Code: Select all

#include <sourcemod>
#pragma newdecls required

public void OnPluginStart()
{
	AddCommandListener(Command_Kill, "kill");
}

public Action Command_Kill(int client, const char[] command, int argc)
{
	if (GetClientTeam(client) == 2)
	{
		return Plugin_Handled;
	}
	else return Plugin_Continue;
}
Last edited by FAQU on Mon Dec 28, 2020 3:27 pm, edited 1 time in total.
cron