Skocz do zawartości
Elite

[Rozwiązane] Menu info o graczach

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ść.

Udostępnij tę odpowiedź


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

menu.Displey

 

4 godziny temu, Elite napisał:

Menu{InfoGracze_Handler}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No dobra poprawiłem ja jak zawsze zaspany. No, ale co tu dalej zrobić, żeby jak się wybierze gracza wyświetlało coś na chacie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wielkie dzięki zaraz sprawdzę 😁

Udostępnij tę odpowiedź


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ł

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
#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;
	}
}

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wszystko działa wielkie dzięki.

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