You are not logged in.

Dear visitor, welcome to sourceserver.info. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

N3v4R

Beginner

  • "N3v4R" started this thread

Posts: 21

Location: Rüsselsheim

wcf.user.option.userOption53: Ja

  • Send private message

1

Saturday, October 12th 2013, 11:59am

Erster Scripting Versuch :D

Hallo,

Nach nun doch einiger Zeit wollte ich mich einmal mit dem scripten von Plugins versuchen. Zurerst ein dickes Lob an Impact für die nette Videotutorialreihe. Hut ab!
Nun wollte ich mich einmal an etwas einfachem versuchen, erster kleiner Versuch etwas zu scripten. Eine simple Join/Leave Chat Message für Vips mit dem ADMFLAG_RESERVATION

Hier einmal das nennen wir es "Müll" was ich bisher habe erstellt. Bitte nicht lachen :D *hust*

Mein Code

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#pragma semicolon 1

#include <sourcemod>
#include <colors>

#define VIP ADMFLAG_RESERVATION

new Handle:cvar_VipJoin;
new Handle:cvar_VipLeave;

public Plugin:myinfo = 
{
    name "BlaBla",
    author "BlaBla",
    description "",
    version "1.0",
    url ""
}

public OnPluginStart()
{
    cvar_VipJoin CreateConVar("sm_vip_join""1""BlaBla");
    cvar_VipLeave CreateConVar("sm_vip_leave""1""BlaBla");
}

public OnClientAuthorized(client, const String:auth[])
{
    if(IsClientInGame(client))
    {
        new String:name[MAX_NAME_LENGTH 1];
        
        GetClientName(clientnamesizeof(name));
        
        if(cvar_VipJoin && GetUserFlagBits(client) & VIP)
        {
            PrintToChatAll("{lightgreen}[{green}VIP{lightgreen}] %N, [%s] joined the game, respect him!");
        }
    }
}

public OnClientDisconnect(client)
{
    if(IsClientInGame(client))
    {
        new String:name[MAX_NAME_LENGTH 1];
        
        GetClientName(clientnamesizeof(name));
        
        if(cvar_VipLeave && GetUserFlagBits(client) & VIP)
        {
            PrintToChatAll("{lightgreen}[{green}VIP{lightgreen}] %N [%s] left the game!");
        }
    }
}


Nur wird Ingame (TF2) nichts angezeigt, sowie wollte ich die SteamID vom Client abfragen nur habe ich dazu noch keine Lösung gefunden. Für kleine Tipps wäre ich euch echt dankbar!

MfG,
N3v4R

This post has been edited 1 times, last edit by "Impact" (Oct 12th 2013, 4:56pm)


Jackmaster

Super Moderator

Posts: 660

wcf.user.option.userOption53: Ja

  • Send private message

2

Saturday, October 12th 2013, 12:18pm

Bei deinen Chatausgaben fehlen Parameter.
Du willst den Namen über %N, dann musst du auch die Clientid dazugeben
Außerdem kannst du cvars so nicht abfragen.
http://docs.sourcemod.net/api/index.php?fastload=show&id=482&

N3v4R

Beginner

  • "N3v4R" started this thread

Posts: 21

Location: Rüsselsheim

wcf.user.option.userOption53: Ja

  • Send private message

3

Saturday, October 12th 2013, 2:49pm

Hallo,

Erstmal vielen Dank für deine Antwort. Nur bin ich mit meinem Latein (was ich bis jetzt weiß/kann) hinaus. Könnte man mir dazu ein Beispiel sagen? Bzw. Dein Link geht leider nicht. :whistling:

MfG,
N3v4R

rain

Super Moderator

Posts: 1,410

Location: Lutherstadt Wittenberg

Occupation: Anlagenmechaniker

wcf.user.option.userOption53: Ja

  • Send private message

4

Saturday, October 12th 2013, 4:15pm

Hallo,

Bzw. Dein Link geht leider nicht. :whistling:

MfG,
N3v4R



Das liegt auch daran das die sourcemod.net seite nicht erreichbar ist! Der Link würde schon gehen ;)





Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

5

Saturday, October 12th 2013, 4:50pm

Vielleicht hilft das.

Spoiler Spoiler


PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#pragma semicolon 1

#include <sourcemod>
#include <colors>

#define VIP ADMFLAG_RESERVATION


// Variablen richtig taggen erleichtert einiges
// g -> Global
// h -> Handle
new Handle:g_hVipJoin;
new Handle:g_hipLeave;

public Plugin:myinfo = 
{
    name "BlaBla",
    author "BlaBla",
    description "",
    version "1.0",
    url ""
}

public OnPluginStart()
{
    // Wir geben den Convars bounds, dadurch können wir später GetConvarBool nutzen
    g_hVipJoin CreateConVar("sm_vip_join""1""BlaBla"_true0.0true1.0);
    g_hipLeave CreateConVar("sm_vip_leave""1""BlaBla"_true0.0true1.0);
}


// Etwas zu früh, OnClientPutInServer ist besser
public OnClientPutInServer(client)
{
    if(IsClientInGame(client))
    {
        // Benötigt kein +1
        //new String:name[MAX_NAME_LENGTH];
        
        // Nicht benötigt da %N
        //GetClientName(client, name, sizeof(name));
        
        // Handles checkt man nicht (in diesem Fall), man nutzt dieses Handle um die Convar zu prüfen
        // Am besten ist in diesem Falle mit GetConvarBool zu testen (true/false), das geht allerdings nur wenn die Convar Bounds hat
        // GetUserFlagbits ist nicht gut, man sollte CheckCommandAcces nutzen
        if(GetConVarBool(g_hVipJoin) && CheckCommandAccess(client""VIP))
        {
            // %N benötigt ein parameter
            PrintToChatAll("{lightgreen}[{green}VIP{lightgreen}] [%N] joined the game, respect him!"client);
        }
    }
}

public OnClientDisconnect(client)
{
    if(IsClientInGame(client))
    {
        // Benötigt kein +1
        //new String:sName[MAX_NAME_LENGTH];
        
        // Nicht benötigt da %N
        //GetClientName(client, sName, sizeof(sName));
        
        // Selbiges wie oben trifft auch hier zu
        if(GetConVarBool(g_hipLeave) && CheckCommandAccess(client""VIP))
        {
            PrintToChatAll("{lightgreen}[{green}VIP{lightgreen}] [%N] left the game!"client);
        }
    }
}



Anstatt statischen Rechten solltest du dir mal das Overridesystem anschauen (siehe CheckCommandAccess), das ist wesentlich flexibler.
Wieso du die Convars so seltsam nutzt verstehe ich nicht, ich hatte da ein ausführliches Video zu gemacht.
Bedenke bitte dass obiges nur eine Korrektur ist, und nicht die bestmögliche Methode darstellt.
Ich habe mir übrigens die Freiheit erlaubt deinen geposteten Code in einen Spoiler zu packen, sowie ihn in PHP-Tags zu packen, dadurch wird er lesbarer.

This post has been edited 1 times, last edit by "Impact" (Oct 12th 2013, 4:56pm)


Similar threads