Skocz do zawartości
[Rozwiązane] Menu info o graczach
Pytania

Rekomendowane odpowiedzi

Witam,

Aktualnie pisze plugin, który ma wyświetlać informacje o graczu. 

Gracz wpisuje !gracze i wyświetla mu się menu z graczami i jak wybierze to na chacie wyświetli mu się cos takiego:

Nick: 

SteamID: 

ID clienta: 

Póki co napisałem tyle, ale nie za bardo wiem co mam zrobić, żeby jak sie wybierze gracza wyświetlało właśnie te informacje.

#include <sourcemod>
#include <multicolors>

public void OnPluginStart() {
    RegConsoleCmd("sm_gracze", InfoGracze, "Wyświetla informacje o graczach.");
    RegConsoleCmd("sm_players", InfoGracze, "Wyświetla informacje o graczach.");
}

public Action InfoGracze(int client, int args) {
    Menu menu = new Menu{InfoGracze_Handler};
    menu.SetTitle("Wybierz gracza:");
    char buffer[MAX_NAME_LENGTH];
    char infoBuffer[8];
    for (int i = 1; i < MAXPLAYERS; i++) {
    if (!IsClientInGame(i) || IsFakeClient(i) || IsClientSourceTV(i)) continue;
    Format(buffer, sizeof(buffer), "%N", i);
    Format(optionBuffer, sizeof(optionBuffer), "%d", GetClientUserId(i));
    menu.AddItem(optionBuffer, buffer);
    }
    menu.Displey(client, 120);
}

Domyślam się, że pewnie są jakieś błędy, ale co do pisania pluginów sie jeszcze uczę dlatego proszę o wyrozumiałość.

Sygnatura użytkownika

creativve.pro

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2
4 godziny temu, Elite napisał:

menu.Displey

 

4 godziny temu, Elite napisał:

Menu{InfoGracze_Handler}

 

Sygnatura użytkownika

» Steam: https://steamcommunity.com/id/pawelsteam/\

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2

Następnie tworzysz handler menu

public int InfoGracze_Handler(Menu menu, MenuAction action, int client, int position) {

i sprawdzasz czy action == MenuAction_Select . Jeżeli tak to pobierasz id , które dałeś w menu.

char sItem[32];
menu.GetItem(position, sItem, sizeof(sItem));
int id = StringToInt(sItem);
int target = GetClientOfUserId(id);

Następnie musisz sprawdzić czy gracz nadal jest w grze, żeby w dalszej części handlera nie było żadnego błędu.

if (!IsClientInGame(target)) {
	PrintToChat(client, "Tego gracza nie ma już w grze.");
	return;
}

Jeżeli target nadal jest w grze to pobierz jego Nick oraz SteamID i to wyprintuj graczowi.

char sAuthId[64], sName[MAX_NAME_LENGTH];
GetClientAuthId(target, AuthId_Steam2, sAuthId, sizeof(sAuthId));
GetClientName(target, sName, sizeof(sName));
PrintToChat(client, "Nick: %s", sName);
PrintToChat(client, "SteamID: %s", sAuthId);
PrintToChat(client, "ID Gracza: %d", id);

 

Cały kod powinien wyglądać tak:

Spoiler
public int InfoGracze_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32];
			menu.GetItem(position, sItem, sizeof(sItem));
			int id = StringToInt(sItem);
			int target = GetClientOfUserId(id);
			if (!IsClientInGame(target)) {
				PrintToChat(client, "Tego gracza nie ma już w grze.");
				return;
			}
			char sAuthId[64], sName[MAX_NAME_LENGTH];
			GetClientOfUserId(target, AuthId_Steam2, sAuthId, sizeof(sAuthId));
			GetClientName(target, sName, sizeof(sName));
			PrintToChat(client, "Nick: %s", sName);
			PrintToChat(client, "SteamID: %s", sAuthId);
			PrintToChat(client, "ID Gracza: %d", id);
		}
	}
	case MenuAction_End:delete menu;
}

 

 

Sygnatura użytkownika

» Steam: https://steamcommunity.com/id/pawelsteam/\

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

  • Dziękuję
Odnośnik do odpowiedzi
Udostępnij na innych stronach
Cytat

// C:\CS GO\SourceMod Kompilator\scripting\menuinfo.sp(59) : error 092: number of arguments does not match definition
// C:\CS GO\SourceMod Kompilator\scripting\menuinfo.sp(59) : error 092: number of arguments does not match definition
// C:\CS GO\SourceMod Kompilator\scripting\menuinfo.sp(66) : error 014: invalid statement; not in switch
// C:\CS GO\SourceMod Kompilator\scripting\menuinfo.sp(66) : error 029: invalid expression, assumed zero
// C:\CS GO\SourceMod Kompilator\scripting\menuinfo.sp(66) : warning 215: expression has no effect

@Paweł

Sygnatura użytkownika

creativve.pro

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2
#include <sourcemod>
#include <multicolors>

public void OnPluginStart() {
    RegConsoleCmd("sm_gracze", InfoGracze, "Wyświetla informacje o graczach.");
    RegConsoleCmd("sm_players", InfoGracze, "Wyświetla informacje o graczach.");
}

public Action InfoGracze(int client, int args) {
    Menu menu = new Menu{InfoGracze_Handler};	// Nieodpowiednie klamry
    menu.SetTitle("Wybierz gracza:");
    char buffer[MAX_NAME_LENGTH];
    char infoBuffer[8];	// Nie używasz takiego buffera
    for (int i = 1; i < MAXPLAYERS; i++) {
    if (!IsClientInGame(i) || IsFakeClient(i) || IsClientSourceTV(i)) continue;
    	Format(buffer, sizeof(buffer), "%N", i);
    	Format(optionBuffer, sizeof(optionBuffer), "%d", GetClientUserId(i)); // Nie sitnieje taki buffer
   		menu.AddItem(optionBuffer, buffer); // Nie istnieje taki buffer
    }
    menu.Displey(client, 120); // Nie istnieje taka funkcja
}

 

W handlerze źle podałem casa, powinien on wyglądać tak:

public int InfoGracze_Handler(Menu menu, MenuAction action, int client, int position) {
	switch (action) {
		case MenuAction_Select: {
			char sItem[32];
			menu.GetItem(position, sItem, sizeof(sItem));
			int id = StringToInt(sItem);
			int target = GetClientOfUserId(id);
			if (!IsClientInGame(target)) {
				PrintToChat(client, "Tego gracza nie ma już w grze.");
				return;
			}
			char sAuthId[64], sName[MAX_NAME_LENGTH];
			GetClientAuthId(target, AuthId_Steam2, sAuthId, sizeof(sAuthId));
			GetClientName(target, sName, sizeof(sName));
			PrintToChat(client, "Nick: %s", sName);
			PrintToChat(client, "SteamID: %s", sAuthId);
			PrintToChat(client, "ID Gracza: %d", id);
		}
		case MenuAction_End:delete menu;
	}
}

 

Sygnatura użytkownika

» Steam: https://steamcommunity.com/id/pawelsteam/\

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

  • Lubię to!
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

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

Sygnatura użytkownika

» Steam: https://steamcommunity.com/id/pawelsteam/\

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ostatnio przeglądający ten temat (5 użytkowników)

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...