Skocz do zawartości
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Zaloguj się, aby obserwować  
jigsaw

[Rozwiązane] Jedno użycie komendy na rundę

Polecane posty

Cześć, mam plugin vipmenu który na początku rundy pokazuje vipmenu. W pluginie nie ma opcji żeby była na komendę więc zrobiłem to.

Ale mam problem z tym żeby można ją było użyć tylko raz jeśli żadna funkcja z vipmenu nie była wcześniej użyta.

W jaki sposób mogę to zrobić?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
//zmienna globalna
bool is_used[65];

//po użyciu
is_used[client] = true;

//przy starcie rundy
for(int i = 0; i < 65; i++)
  is_udes[i] = false;

 

  • Lubię to! 2
Przez MAGNET,

Tutaj bym tylko zmienił 65 na MAXPLAYERS - niby nie robi to większej różnicy, ale zwiększa się przejrzystość kodu (no i ta wartość może się zmienić w przyszłości)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)

 

#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#pragma newdecls required
//ConVar g_cvFlag;
const int VIP_FLAG = ADMFLAG_RESERVATION;

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	HookEvent("player_death", Event_PlayerDeath);
	RegAdminCmd("sm_vipmenu", BonusMenu);
}

public Action _________________________________________________() {  }
public void Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
	for (int i = 1; i < MaxClients; i++)
	{
		if (IsClientInGame(i) && !IsFakeClient(i) && (GetUserFlagBits(i) & VIP_FLAG || GetUserFlagBits(i) & ADMFLAG_ROOT))
		{
			if (GetClientTeam(i) == CS_TEAM_CT)
			{
				BonusMenu(i, 0);
				for(int i = 0; i < 65; i++)
				is_used = false;
			}
		}
	}
}
public Action ________________________________________________() {  }
public void Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	ClientCommand(client, "firstperson");
	ServerCommand("sm_drug #%i 0", GetClientUserId(client));
}
public Action __________________________________________() {  }
public Action BonusMenu(int client, int args)
{
	Handle menu = CreateMenu(Handler);
	SetMenuTitle(menu, "Bonusy VIP");
	AddMenuItem(menu, "1", "+50 HP");
	AddMenuItem(menu, "2", "+40% do prędkości");
	AddMenuItem(menu, "3", "-40% do grawitacji");
	AddMenuItem(menu, "4", "Slow Motion");
	AddMenuItem(menu, "5", "Dopalacze");
	
	DisplayMenu(menu, client, 20);
	return Plugin_Handled;
}
public Action ____________________________________________() {  }
public int Handler(Handle classhandle, MenuAction action, int client, int Position)
{
	if (action == MenuAction_Select)
	{
		char Item[32];
		is_used[client] = true;
		GetMenuItem(classhandle, Position, Item, sizeof(Item));
		
		if (StrEqual(Item, "1"))
		{
			SetEntityHealth(client, GetEntProp(client, Prop_Send, "m_iHealth") + 50);

		}
		else if (StrEqual(Item, "2"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.4);

		}
		else if (StrEqual(Item, "3"))
		{
			SetEntityGravity(client, 0.6);

		}
		else if (StrEqual(Item, "4"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 0.5);
			SetEntityGravity(client, 0.5);

		}
		else if (StrEqual(Item, "5"))
		{
			//ClientCommand(client, "sm_drug");
			ServerCommand("sm_drug #%i 1", GetClientUserId(client));

		}
	}
	else if (action == MenuAction_End)
		CloseHandle(classhandle);
}
public Action ________________________________________() {  }
stock bool IsValidPlayer(int client) {
	if (client >= 1 && client <= MaxClients && IsClientConnected(client) && !IsFakeClient(client) && IsClientInGame(client))
		return true;
	return false;
} 

tu jest kod, może wy zauważycie co źle zrobiłem.

Edytowano przez jigsaw

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@jigsaw Spróbuj tego 

Spoiler

#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#pragma newdecls required
//ConVar g_cvFlag;
const int VIP_FLAG = ADMFLAG_RESERVATION;

bool is_used[MAXPLAYERS + 1];

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	HookEvent("player_death", Event_PlayerDeath);
	RegAdminCmd("sm_vipmenu", BonusMenu, ADMFLAG_RESERVATION);
}

public Action Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
	for (int i = 1; i < MaxClients; i++)
	{
		if (IsClientInGame(i) && !IsFakeClient(i) && (GetUserFlagBits(i) & VIP_FLAG || GetUserFlagBits(i) & ADMFLAG_ROOT))
		{
			if (GetClientTeam(i) == CS_TEAM_CT)
			{
				BonusMenu(i, 0);
				for (int y = 0; y < 65; y++)
				is_used[y] = false;
			}
		}
	}
}

public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	ClientCommand(client, "firstperson");
	ServerCommand("sm_drug #%i 0", GetClientUserId(client));
}

public Action BonusMenu(int client, int args)
{
	Menu menu = new Menu(Handler);
	menu.SetTitle("Bonusy VIP");
	menu.AddItem("1", "+50 HP");
	menu.AddItem("2", "+40% do prędkości");
	menu.AddItem("3", "-40% do grawitacji");
	menu.AddItem("4", "Slow Motion");
	menu.AddItem("5", "Dopalacze");
	menu.Display(client, 20);
	return Plugin_Handled;
}

public int Handler(Menu menu, MenuAction action, int client, int item)
{
	if (client == 0)return;
	if (action == MenuAction_Select)
	{
		char info[32];
		GetMenuItem(menu, item, info, sizeof(info));
		is_used[client] = true;
		if (StrEqual(info, "1"))
		{
			SetEntityHealth(client, GetEntProp(client, Prop_Send, "m_iHealth") + 50);
			
		}
		else if (StrEqual(info, "2"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.4);
			
		}
		else if (StrEqual(info, "3"))
		{
			SetEntityGravity(client, 0.6);
			
		}
		else if (StrEqual(info, "4"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 0.5);
			SetEntityGravity(client, 0.5);
			
		}
		else if (StrEqual(info, "5"))
		{
			//ClientCommand(client, "sm_drug");
			ServerCommand("sm_drug #%i 1", GetClientUserId(client));
			
		}
	}
	else if (action == MenuAction_End)delete menu;
}

stock bool IsValidPlayer(int client) {
	if (client >= 1 && client <= MaxClients && IsClientConnected(client) && !IsFakeClient(client) && IsClientInGame(client))
		return true;
	return false;
} 

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Spoiler

#include <sourcemod>
#include <sdktools>
#include <cstrike>
#include <sdkhooks>
#pragma newdecls required
//ConVar g_cvFlag;
const int VIP_FLAG = ADMFLAG_RESERVATION;

bool is_used[65];

public void OnPluginStart()
{
	HookEvent("round_start", Event_RoundStart);
	HookEvent("player_death", Event_PlayerDeath);
	RegAdminCmd("sm_vipmenu", BonusMenu, ADMFLAG_RESERVATION);
	resetMenuHistory();
}

public Action Event_RoundStart(Handle event, const char[] name, bool dontBroadcast)
{
	resetMenuHistory();
	for (int i = 1; i < MaxClients; i++)
	{
		if (IsValidPlayer(i) && (GetUserFlagBits(i) & VIP_FLAG || GetUserFlagBits(i) & ADMFLAG_ROOT))
		{
			if (GetClientTeam(i) == CS_TEAM_CT)
			{
				BonusMenu(i, 0);
			}
		}
	}
}

public Action Event_PlayerDeath(Handle event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(GetEventInt(event, "userid"));
	ClientCommand(client, "firstperson");
	ServerCommand("sm_drug #%i 0", GetClientUserId(client));
}

public Action BonusMenu(int client, int args)
{
	if(!IsValidPlayer(client))
		return Plugin_Continue;
	if(is_used[client]) {
		//print sth
		return Plugin_Continue;
	}
	Menu menu = new Menu(Handler);
	menu.SetTitle("Bonusy VIP");
	menu.AddItem("1", "+50 HP");
	menu.AddItem("2", "+40% do prędkości");
	menu.AddItem("3", "-40% do grawitacji");
	menu.AddItem("4", "Slow Motion");
	menu.AddItem("5", "Dopalacze");
	menu.Display(client, 20);
	return Plugin_Handled;
}

public int Handler(Menu menu, MenuAction action, int client, int item)
{
	if (!IsValidPlayer(client)) return;
	if (action == MenuAction_Select)
	{
		is_used[client] = true;
		char info[32];
		GetMenuItem(menu, item, info, sizeof(info));
		is_used[client] = true;
		if (StrEqual(info, "1"))
		{
			SetEntityHealth(client, GetEntProp(client, Prop_Send, "m_iHealth") + 50);
			
		}
		else if (StrEqual(info, "2"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.4);
			
		}
		else if (StrEqual(info, "3"))
		{
			SetEntityGravity(client, 0.6);
			
		}
		else if (StrEqual(info, "4"))
		{
			SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 0.5);
			SetEntityGravity(client, 0.5);
			
		}
		else if (StrEqual(info, "5"))
		{
			//ClientCommand(client, "sm_drug");
			ServerCommand("sm_drug #%i 1", GetClientUserId(client));
			
		}
	}
	else if (action == MenuAction_End)delete menu;
}

stock bool IsValidPlayer(int client) {
	if (client >= 1 && client <= MaxClients && IsClientConnected(client) && !IsFakeClient(client) && IsClientInGame(client))
		return true;
	return false;
}

stock void resetMenuHistory() {
	for(int i = 0; i < 65; i++)
		is_used[i] = false;
}

 

 

  • Kocham to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)

Dobra działa 😄 

 

Dziękuje wszystkim

Edytowano przez jigsaw

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.
Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×