Jump to content
assignment_ind Existing user? Sign In

Sign In



person_add Sign Up
Go-Code.pl - Support SourceMod i Pluginy CS:GO
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

wyskakuje mi błąd po kompilacji

image.png.311a35a21f53d5547a682ce334cc67da.png

Share this post


Link to post
Share on other sites

możliwe że ja coś źle wstawiłem

Share this post


Link to post
Share on other sites

W 37 linijce zmień is_udes = false; na is_used = false;

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

 

 

  • Lubię 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.


O NAS Jesteśmy społecznością łączącą ludzi, którzy dzielą pasję poznawania CS:GO od strony programistycznej. Posiadamy duże zaplecze merytoryczne i zawsze cieszymy się, gdy dołączają do nas osoby gotowe do nauki. Gwarantujemy, że z odrobiną wytrwałości i otwartym umysłem bardzo szybko napiszesz swój pierwszy plugin. Zapraszamy! 🙂
Szablon wykonany z dużą ilością przez cyberpixelz / Mesharsky / Sitefuture
Forum dumnie napędzane przez: Invision Power Services, Inc.
×
×
  • Create New...