Skocz do zawartości
PepeKOZAK

[Rozwiązane] Menu Wyboru Granatów

Rekomendowane odpowiedzi

Witam ponownie 😄

Chciałem zrobić plugin, w którym będzie możliwość wyboru z którymi granatami ma się respić gracz. Nie wiem jak się za to zabrać i liczę na jakąś drobną pomoc 🙂 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak jak poprzednio, z tym że zamiast np AK-47 wpisujesz menu.AddItem("weapon_hegrenade, "HE");

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
#include <sourcemod>
#include <sdktools>
#pragma tabsize 0
 
char client_granat[MAXPLAYERS + 1][256];
 
char chat_triggers[][] = {
    "granaty""grenades"
};
 
public OnPluginStart()
{   
    for (int i = 0; i < sizeof(chat_triggers); i++)
        RegConsoleCmd(chat_triggers, granaty);
    HookEvent("player_spawn", player_spawn);
}
 
public Action granaty(int client, int args)
{
    Menu menu = new Menu(m_h);
    menu.SetTitle("Wybierz granat:");
    menu.AddItem("weapon_flashbang""FLASH");
    menu.AddItem("weapon_molotov""MOLOTOV");
    menu.AddItem("weapon_hegrenade""HE");
    menu.AddItem("weapon_smokegrenade""SMOKE");
    menu.ExitButton = true;
    menu.Display(client, 15);
    return Plugin_Handled;
}
 
int m_h(Menu menu, MenuAction act, int client, int arg2)
{
    if (act == MenuAction_Select)
    {
        char granat[256];
        GetMenuItem(menu, arg2, granat, sizeof(granat));
        client_granat[client] = granat;
    }
    return 0;
}
 
public Action player_spawn(Event e, const char[] n, bool b)
{
    GivePlayerItem(GetClientOfUserId(GetEventInt(e, "userid")), client_granat[GetClientOfUserId(GetEventInt(e, "userid"))]);
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Z tego co widzę, to ten plugin działa tak, że daje tylko jeden z wybranych granatów. Ja natomiast chciałem zrobić, żeby gracz mógł wybrać sobie z menu np. tylko HE i Flashbang, i żeby dostawał tylko te dwa granaty. 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@PepeKOZAK

Spoiler

/* [ Includes ] */
#include <sourcemod>
#include <sdktools>

/* [ Compiler Options ] */
#pragma newdecls required
#pragma semicolon 1

/* [ Integers ] */
int g_iUsages[MAXPLAYERS + 1];

/* [ Plugin Startup ] */
public void OnPluginStart() {
	RegConsoleCmd("sm_granaty", Grenades_Command);
	HookEvent("player_spawn", Event_PlayerSpawn);
}

/* [ Commands ] */
public Action Grenades_Command(int client, int args) {
	if (!IsPlayerAlive(client)) {
		PrintToChat(client, "Musisz być żywy, aby móc skorzystać z menu.");
		return Plugin_Handled;
	}
	if (g_iUsages[client] <= 0) {
		PrintToChat(client, "W tej rundzie wybrałeś już 2 granaty.");
		return Plugin_Handled;
	}
	Menu menu = new Menu(Grenades_Handler);
	menu.SetTitle("Wybierz granat:");
	menu.AddItem("weapon_hegrenade", "HE");
	menu.AddItem("weapon_flashbang", "Flash");
	menu.AddItem("weapon_molotov", "Molotov");
	menu.AddItem("weapon_smokegrenade", "Smoke");
	menu.Display(client, 15);
	return Plugin_Continue;
}

public int Grenades_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32];
			menu.GetItem(position, sItem, sizeof(sItem));
			GivePlayerItem(client, sItem);
			g_iUsages[client]--;
			if (g_iUsages[client] > 0)
				Grenades_Command(client, 0);
		}
		case MenuAction_End:delete menu;
	}
}

/* [ Events ] */
public Action Event_PlayerSpawn(Event event, const char[] sName, bool bDontBroadcast) {
	g_iUsages[client] = 2;
} 

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...