Jump to content
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Sign in to follow this  
jigsaw

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

Recommended Posts

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ć?

Share this post


Link to post
Share on other sites
//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
By 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)

Share this post


Link to post
Share on other sites

 

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

Edited by jigsaw

Share this post


Link to post
Share on other sites

@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;
} 

 

 

Share this post


Link to post
Share on other sites

skompilowało się ale nic sie nie zmienilo, dalej moge brac tyle ile chce razy.

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites

Dobra działa ? 

 

Dziękuje wszystkim

Edited by jigsaw

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

Nasza historia

Na początku byliśmy małą grupą internetowych znajomych, którzy stwierdzili, że potrzebne jest solidne forum, na którym znajdą się ludzie z dużą wiedzą programistyczną ukierunkowaną na CS:GO. Pomysł powstał na początku 2018 roku, a parę miesięcy później, 19 kwietnia, powstała ta strona internetowa. Jako alternatywna odpowiedź na inne tego typu miejsca, poważnie podeszliśmy do tematu, najpierw tłumacząc angielską dokumentację SourceMod'a na język polski, a potem pisząc rozległe poradniki i wypełniając forum najpotrzebniejszymi rzeczami dla właścicieli serwerów i programistów. Cała nasza Ekipa jest dumna z pracy jaką w to włożyliśmy i cieszymy się że zbierają się wokół nas zarówno ludzie znający tematy sourcepawn'a i konfiguracji, jak i również nowe twarze w tym "biznesie", którym z chęcią niesiemy wiedzę oraz pomoc w rozwiązywaniu problemów.

Największe modyfikacje serwerowe

×
×
  • Create New...