Skocz do zawartości
kox1906

[Rozwiązane] Problem z prostym kodem

Rekomendowane odpowiedzi

Witam,

Opublikowałem już tu kilka postów. Jestem początkujący i nawet tak łatwy plugin jest dla mnie problemem. Ogólnie chodzi o to, żeby po każdym podłączeniu się klienta do serwera na czacie wyświetlała się informacja, że ten klient dołączył do serwera. To mój kod:

#include <sourcemod>
#include <multicolors>
 
public void OnClientConnected(int client)
{
    if(!IsValidClient(client))
        return;
 
    CPrintToChatAll("Gracz {lightgreen}%N {default} wszedł właśnie na serwer", client);
}
 
stock bool IsValidClient(int client)
{
    if (client <= 0)return false;
    if (client > MaxClients)return false;
    if (!IsClientConnected(client))return false;
    if (IsClientReplay(client))return false;
    if (IsFakeClient(client))return false;
    if (IsClientSourceTV(client))return false;
    return IsClientInGame(client);
}

Próbowałem usunąć z tego walidację klienta- nie zadziałało

Próbowałem użyć funkcji GetClientName() - nie zadziałało

Gdy odpaliłem na serwerze valvowskim (-insecure) z botami, wcześniej usuwając z kodu walidację klienta, gdy dodawałem boty wyświetlała się informacja "Gracz *nazwa bota* wszedł właśnie na serwer" ale trzeba tu dodać, że wyświetliły się na czacie nazwy wszystkich botów, a moja nazwa nie została wyświetlona. 

Może użyłem tu źle walidacji klienta? Nie wiem, wcześniej miałem okazję użyć ją tylko raz i to nie samodzielnie, bo osoba z tego forum go użyła, ja po prostu przekopiowałem użycie do tego kodu.

Wydawało mi się, że kod jest banalnie łatwy, tym bardziej, że na botach działał, a na serwerze prywatnym, gdzie dołączali moi znajomi - plugin po prostu się nie odpalał po dołączaniu znajomego.

Proszę o pomoc.

PS. Czy można byłoby zrobić, żeby wraz z załączaniem się tego pluginu na czacie kasować informację serwerową ("*nick* is joining to the Terrorist/CT force")? 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak już tworzysz funkcję walidacji gracza to można zrobić to o wiele prościej:

 

bool IsValidClient(int client)
{
	return (1 <= client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client);
}

 

Kolejną istotną sprawą jest kolejność wykonywania 

Calling order:
1. OnClientConnect
2. OnClientConnected
3. OnClientPutInServer and OnClientAuthorized (undefined order)
4. OnClientPostAdminCheck (called after fully ingame and SteamID verified and after all post checks are done)

 

Działający kod

public void OnClientPostAdminCheck(int client)
{
	CreateTimer(4.0, Timer_Message, GetClientUserId(client));
}

public Action Timer_Message(Handle timer, any clientUserId)
{
	int client = GetClientOfUserId(clientUserId);

	if(client && IsClientConnected(client))
	{
		PrintToChatAll("Gracz %N wszedł na serwer, client);
	}
}

 

Aby zablokować domyślne komunikaty o dołączeniu na serwer może użyć przykładowo tego pluginu: https://forums.alliedmods.net/showthread.php?t=200064?t=200064
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

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