Sie sind nicht angemeldet.

HSFighter

Administrator

  • »HSFighter« ist der Autor dieses Themas

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

1

Samstag, 4. Februar 2012, 12:28

Prüfung ob ein Client gültig ist

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Funktion aufrufen:
if (!CheckClient(client)) return;

// Funktion:
public bool:CheckClient(client)
{
    if (client != 0)
    {
        // Get all clients on the server
        for (new 1<= MaxClientsi++)
        {
            // Check if player ok
            if (IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(client))
            {
                // Check if client is a player on the server
                if (== client) return true;            
            }
        }    
    }    
    return false;
}



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

HSFighter

Administrator

  • »HSFighter« ist der Autor dieses Themas

Beiträge: 1 517

Wohnort: Flensburg

Beruf: Industrieelektroniker

Rootserver vorhanden: Nein

  • Nachricht senden

2

Mittwoch, 30. Januar 2013, 01:44

Anbei eine optimierte Methode:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
// Funktion aufrufen:
if (!CheckClient(client)) return;

// Funktion:
public bool:CheckClient(client)
{
    if ( !( <= client <= MaxClients ) || !IsClientInGame(client) || IsFakeClient(client) )
    {
        return false;
    }
    return true;
}


Danke an RedSword



-
Anti Cheat: www.smacbans.com
Kein direkter Support per PM (nur auf Anforderung)

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

3

Mittwoch, 30. Januar 2013, 02:44

Ich nutze das hier für generelle Checks, ein Botcheck gehört für mich nicht zu einen "Valider Client Check".

PHP-Quelltext

1
2
3
4
5
6
7
8
9
stock bool:IsClientValid(id)
{
    if(id && id <= MaxClients && IsClientInGame(id))
    {
        return true;
    }
    
    return false;
}


MfG
Impact

DasNeo

Anfänger

Beiträge: 9

Wohnort: Hessen

Rootserver vorhanden: Ja

  • Nachricht senden

4

Freitag, 22. März 2013, 13:58

Mahlzeit!

In CS:S ist es ja so, dass jeder Spieler eine individuelle playerid bekommt.
Wie genau sieht dass dann mit den MaxClients aus?

Ist dann MaxClients dann die Slotanzahl?
Bekommt jeder Spieler einfach eine ID von 0-Slotanzahl? (Spieler 1: ID0, Spieler 2: ID1)
Oder ist es so, wie man es in den stats sieht?

Quellcode

1
if (!CheckClient(client)) return;

Was bedeutet es, wenn man nichts returnt? Ist das das gleiche wie return 0?

Ist Client die Variable der Playerid?


Danke erstmal.


Gruß,
DasNeo. :)

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

5

Freitag, 22. März 2013, 18:13

In CS:S ist es ja so, dass jeder Spieler eine individuelle playerid bekommt.
Wie genau sieht dass dann mit den MaxClients aus?
Jeder Spieler erhält einer Userid, dieser wird bei jeder Verbindung um eins erhöht.
Eine ClientID bzw der EntityIndex liegt zwischen 1-MaxClients (0 Ist immer der Server).
MaxClients ist hierbei eine dynamische Konstante die von Sourcemod verwaltet wird, du findest hier noch ein paar Infos dazu.

Quellcode

1
if (!CheckClient(client)) return;

Was bedeutet es, wenn man nichts returnt? Ist das das gleiche wie return 0?
Das solltest du nicht machen (außer du weißt was du tust), im Normalfall nutzt man diese Art von return um den Code an jener Stelle zu beenden, das Funktioniert aber nicht in jeder Funktion oder überall je nach voherigem/folgendem Code.
Diese Art von "Codeverkürzungen" würde ich übrigens auch nicht empfehlen, du kannst dir ja mal den Codeguide von Sourcemod angucken.

MfG
Impact

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Impact« (22. März 2013, 22:43)