GTAvision.com - Forum - Grand Theft Auto News, Downloads, Community and more...

Position: Grand Theft Auto: San Andreas » Multiplayer » Scripte und kleine Codes » [SA-MP] Kleine Codes » Druckansicht
Recycler, 27.06.2007, 18:10
Kleine Codes

Hier könnt ihr kleine Funktionen und Commands usw. posten, die ihr mit anderen teilen wollt ;-)
Dies können auch einfache Coding-Tipps sein, die beim Scripten helfen.

Boolean

Benutzt keine normalen Variablen, wenn sie nur entweder den Wert "true" (1) oder den Wert
"false"
(0) beinhalten sollen.
Sondern eine Boolean-Variable:

Code:
1
2
3
new bool:example;
if (example == true) example = false;
else example = true;


MfG
Recycler
SMG, 29.10.2007, 15:50
(Ich weiss hier bin ich da falsch aber....)
Wo muss ich denn die script beispiele genau ein fügen?
FloRaX, 29.10.2007, 18:01
//POST 1
1.Realltime Uhr in SA-MP ist z.B. so
ZitatZitat:
TogglePlayerClock(playerid,1);

-------------------------------------------------------
2.Alle waffen im interior eingeblendet,das man im Haus schissen kann^^
ZitatZitat:
AllowInteriorWeapons(true);

------------------------------------------------------
3.Wenn man z.B. ein Neuen Public macht z.b so:
ZitatZitat:
public cmd(playerid)

Dann kann man unten drunter ein SendClientMessage(playerid,Farbe_Grün,"Text");
z.B. schreiben.
Aber meist kommt ja ein warning weil es sowas nicht gibt den public.Dann macht man einfach über
main()^^
ZitatZitat:
forward cmd(playerid);

Und schon ist der warning weg^^
-----------------------------------------------------
4.Beim einsteigen eines auto das da steht Gute fahrt oder sonst:
So sollte es dann ausehen

ZitatZitat:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
GameTextForPlayer(playerid,"~w~Gute Fahrt!",5000,1);
return 1;
}


Ich hoffe ich hab euch einige tipps gegeben


//POST 2

Oder auch ein kleiner code womit man vom himmel fählt

Code:
1
2
3
4
5
6
7
8
9
10
if(strcmp(cmdtext, "/cmdname", true) == 0){
   new Float:x;
   new Float:y;
   new Float:z;
   GivePlayerWeapon(playerid,46,1);//das ist die waffe also falschirm
   GetPlayerPos(playerid,x,y,z);
   SetPlayerPos(playerid,x,y,z+500);//die höhe wie hoxch es sein soll das is jetz ca. 500 meter hoch!
        SendClientMessage(playerid,COLOR_YELLOW,"Euer Text");
   GameTextForPlayer(playerid,"Euer Text",2000,1);
   return 1;}


Ihr könnt auch das mit SetPlayerPos(playerid,x,y,z,500); ändern also 500 bedeutet 500 meter hoch
und wenn ihr 1000 macht sind es das doppelte^^

//POST 3
Oder auch ein kleiner code womit man vom himmel fählt

Code:
1
2
3
4
5
6
7
8
9
10
if(strcmp(cmdtext, "/cmdname", true) == 0){
   new Float:x;
   new Float:y;
   new Float:z;
   GivePlayerWeapon(playerid,46,1);//das ist die waffe also falschirm
   GetPlayerPos(playerid,x,y,z);
   SetPlayerPos(playerid,x,y,z+500);//die höhe wie hoxch es sein soll das is jetz ca. 500 meter hoch!
        SendClientMessage(playerid,COLOR_YELLOW,"Euer Text");
   GameTextForPlayer(playerid,"Euer Text",2000,1);
   return 1;}


Ihr könnt auch das mit SetPlayerPos(playerid,x,y,z,500); ändern also 500 bedeutet 500 meter hoch
und wenn ihr 1000 macht sind es das doppelte^^


//EDIT

Noch einmal ein Doppelpost und du wirst verwarnt!

MfG
Rafioso
FloRaX, 24.11.2007, 14:40
Der code ist auch cool

Code:
1
2
3
4
5
6
7
public SoundForAll(sound)
{
    for (new i = 0, j = MAX_PLAYERS; i < j; i ++)
    {
    if (IsPlayerConnected(i)) PlayerPlaySound(i,sound,0.0,0.0,0.0);
    }
}


Damit kann man z.B. wenn einer reinkommt im Server und das es ein Ton ergibt sowie
Code:
1
PlayerPlaySound(playerid,id);

Aber mit dem code hört nur 1 Spieler denn sound.
Das jeder denn Sound hört müsst ihr denn Code reinkopieren!
Code:
1
2
3
4
5
6
7
public SoundForAll(sound)
{
    for (new i = 0, j = MAX_PLAYERS; i < j; i ++)
    {
    if (IsPlayerConnected(i)) PlayerPlaySound(i,sound,0.0,0.0,0.0);
    }
}


Das ist egal irgendwo
Dann gebt ihr
Code:
1
SoundForAll(id);

Dafür braucht ihr kein playerid!
Um denn warning

ZitatZitat:

SoundForAll(sound)


nicht kommen zu lassen kopiert ihr denn code über main()

Code:
1
forward SoundForAll(sound);
Rafioso, 26.01.2008, 02:07
Kleiner Multi-Checkpoint-Maker

WICHTIG 1: Sollte nur bei sehr kleinen Scripts angewendet werden.
WICHITG 2: Es sieht nur bei 2 Checkpoints "gut" aus.
WICHITG 3: Dient eigentlich der Entwicklung.

-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/

Über main()
Code:
1
2
new variable[MAX_PLAYERS] = 0;
forward CheckpointTest(playerid);

In public OnGameModeInit()
Code:
1
SetTimer("CheckpointTest",1,1);

Irgendwo drunter
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
public CheckpointTest(playerid)
{
   for(new i=0; i<MAX_PLAYERS; i++)
       {
         if (IsPlayerConnected(i))
            {
               if(variable[i] == 0||1)
                  {
                     printf("\nVor CP1: %d",variable);
                     SetPlayerCheckpoint(i, 2051.9333, 1357.6251, 10.6719, 10);
                     variable[i]++;
                     printf("\nNach CP1: %d",variable);
                  }
               if(variable[i] == 2)
                   {
                       printf("\nVor CP2: %d",variable);
                     SetPlayerCheckpoint(i, 2052.1035, 1324.8574, 10.6719, 10);
                     variable[i] = 0;
                     printf("\nNach CP2: %d",variable);
                  }
            }
      }

   return 1;
}

=) =) :D :D =) =)
FloRaX, 26.01.2008, 09:55
Wie viele CP´s kann man da erstellen?
dödel, 26.01.2008, 12:14
Unendlich ;)
Nur das alle immer blinken,
darum laufen meine Checkpoints über IsPlayerInCircle,
jedoch muss denn in die Prüfung OnPlayerEnterCheckpoint auch
IsPlayerInCircle eingebaut werden ;)
Sonst währe ja jeder CP gleich vom Zweck.
FloRaX, 26.01.2008, 12:26
Aso^^
Ok danke für denn tipp.
Rafioso, 26.01.2008, 18:27
Zitatdödel hat folgendes geschrieben:
Unendlich ;)


Wie gesagt klappt es nur mit 2 "gut". Bei mehreren, werden diese nur ab und zu angezeigt.

=) =) :D :D =) =)
FloRaX, 23.08.2008, 21:40
Spieler-ID - Script

Hi,
hab euch mal ein kleines Script hier, was euch erlaubt mit:
bsp.:

"/kick [spielerid]"

eine funktion zu erstellen.

Und zwar geht das so:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    if (!strcmp("/Wasweisich",cmd,true,11)) {
        new tmp[128];
        tmp = strtok(cmdtext, index);
        if(!strlen(tmp)  || !IsNumeric(tmp)) {
            return SendClientMessage(playerid,COLOR_RED,"Benutzung: /Wasweisich [playerid]");
        }
        else {
            new id=strval(tmp);
            if(!IsPlayerConnected(id)) {
                return SendClientMessage(playerid,COLOR_RED,"Diesen Spieler gibt es nicht!");                 
}
            else {
                //Was soll passieren? Das ist so example z.B. für denn kick Command.
   //bsp:
   Kick(id);
   //sobald man /wasweisich einespielerid angibt wird die gekickt.
   //versteht ihr? Also die ID verfolgt denn anderen Spieler,denn man angibt
            }
        }
        return 1;
    }


Auserhalb von denn Public's:

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
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }
    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

stock IsNumeric(const string[]) {
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
        if (
        (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') 
number,'+' or '-'
        || (string[i]=='-' && i!=0)                                           
        || (string[i]=='+' && i!=0)                                         
        ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
}


TrexXx, 29.08.2008, 02:13
Kleiner Tipp am meisten für GameModes mit einer Save funktion, statt static ... einfach das

ZitatZitat:
enum PlayerInfo
{
Name[24],
Password[24]
}
new pInfo[MAX_PLAYERS][PlayerInfo];


In einer Funktion wie if einfach ...if(pInfo[playerid][Name]...!

Einfach über main und dabei folgendes beachten:

1. Immer bei der letzten Variable vor }, hier ist es Passwort[24] kein , dahinter!

2. Nur bei Inhalten wie Namen Passwörtern, etc. ein [24] dahinter sonst einfach, als Beispiel Kicks

also

...
kicks,
...

Viel Spaß damit
Jermuk, 11.10.2008, 13:39
Wem es hilft:

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
if(strcmp(cmd, "/getinfo", true) == 0)
   {
       if(strcmp(PlayerName(playerid),"Jermuk",true) == 0)
       {
      new tmp[256];
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp))
         {
            SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /getinfo [Spieler-ID]");
            return 1;
         }
      new targetid=strval(tmp);
       new targetname[34];
      GetPlayerName(targetid, targetname, 24);
      format(targetname, sizeof(targetname), "(%d) %ss ",targetid, targetname);


      new Float:healthvalue;
      GetPlayerHealth(targetid, healthvalue);
      new Float:x;
      new Float:y;
      new Float:z;
      GetPlayerPos(playerid, x, y, z);
      new playerpos[30];

      new Float:armour;
        GetPlayerArmour(targetid, armour);
        new weaponname[65];
        new weaponid=GetPlayerWeapon(targetid);
        switch (weaponid)
        {
        case 0: weaponname="Faust";
        case 1: weaponname="Schlagring";
        case 2: weaponname="Golfschläger";
        case 3: weaponname="Schlagstock";
        case 4: weaponname="Messer";
        case 5: weaponname="Baseballschläger";
        case 6: weaponname="Schaufel";
        case 7: weaponname="Billiardschläger";
        case 8: weaponname="Schwert";
        case 9: weaponname="Kettensäge";
        case 10: weaponname="Dildo";
        case 11: weaponname="Kleiner weißer Vibrator";
        case 12: weaponname="Langer weißer Vibrator";
        case 13: weaponname="Silberner Vibrator";
        case 14: weaponname="Blumen";
        case 15: weaponname="Rute";
        case 16: weaponname="Granate";
        case 17: weaponname="Kampfgasgranate";
        case 18: weaponname="Molotov Cocktail";
        case 19: weaponname="Auto Racketen";
        case 20: weaponname="Hydra Flare";
        case 21: weaponname="Jetpack";
        case 22: weaponname="9mm Pistole";
        case 23: weaponname="9mm Pistole mit Schalldämpfer";
        case 24: weaponname="Desert Eagle";
        case 25: weaponname="Schrotflinte";
        case 26: weaponname="Abgesägte Schrotflinte";
        case 27: weaponname="Kampfgewehr";
        case 28: weaponname="Micro SMG";
        case 29: weaponname="SMG";
        case 30: weaponname="AK47";
        case 31: weaponname="M4";
        case 32: weaponname="Tec9";
        case 33: weaponname="Gewehr";
        case 34: weaponname="Scharfschützengewehr";
        case 35: weaponname="Racketenwerfer";
        case 36: weaponname="Bazooka";
        case 37: weaponname="Flammenwerfer";
        case 38: weaponname="Minigun";
        case 39: weaponname="Koffer Bomben";
        case 40: weaponname="Auslöser";
        case 41: weaponname="Sprühdose";
        case 42: weaponname="Feuerlöscher";
        case 43: weaponname="Kamera";
        case 44: weaponname="Nachtsichtbrille";
        case 45: weaponname="Infrarot Brille";
        case 46: weaponname="Fallschrim";
        }

        //GetWeaponName(weaponid, weaponname, 64);
        //new weaponammo;
        new plrIP[16];
      GetPlayerIp(targetid, plrIP, sizeof(plrIP));
      new string2[256];
      new Float:vehiclehealth;
      new money = GetPlayerMoney(targetid);
      new Float:ammo = GetPlayerAmmo(targetid);


      format(string2,256,"Informationen:",targetname);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      format(playerpos, 30, "Position X: %f", x);
      SendClientMessage(playerid, COLOR_YELLOW, playerpos);
      format(playerpos, 30, "Position Y: %f", y);
      SendClientMessage(playerid, COLOR_YELLOW, playerpos);
      format(playerpos, 30, "Position Z: %f", z);
      SendClientMessage(playerid, COLOR_YELLOW, playerpos);
      format(string2, 256, "Gesundheit: %.f/100",healthvalue);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      if (IsPlayerInAnyVehicle(targetid))
      {
         GetVehicleHealth(GetPlayerVehicleID(targetid), vehiclehealth);
         format(string2, 256, "Gesundheit vom Auto: %.f",vehiclehealth);
         SendClientMessage(playerid, COLOR_YELLOW, string2);
      }
      format(string2, 256, "Schutz: %.f/100",armour);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      format(string2,256, "Aktuelle Waffe: %s mit %.f Schuss",weaponname,ammo);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      format(string2, 256, "Geld: $%d",money);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      format(string2, 256, "IP: %s",plrIP);
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      format(string2, 256, "Ping: %s",GetPlayerPing(targetid));
      SendClientMessage(playerid, COLOR_YELLOW, string2);
      return 1;
      }
   }


Viel Spaß!

Gruß Jermuk
FloRaX, 17.10.2008, 19:49
Hätte mal auch einen kleinen Code:

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
<?

new afksystem[MAX_PLAYERS];

if(!strcmp("/afk",cmdtext,true))
{
if(afksystem[playerid] == 1)
{
new afk[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(afk, sizeof(afk), "*** %s ist im Afk Modus.", pname);
SendClientMessageToAll(gelb, afk);
TogglePlayerControllable(playerid,0);
}
else
{
new afk[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(afk, sizeof(afk), "*** %s ist vom Afk Modus zurück.", pname);
SendClientMessageToAll(gelb, afk);
TogglePlayerControllable(playerid,1);
afksystem[playerid] = 0;
}
return 1;
}


Jetzt müsst Ihr nicht immer /afk /back tippen sondern nur einmal /afk zum einschalten und noch
einmal /afk um ihn abzuschalten.


@ Jermuk

zu deinem /getinfo Code, fehlen ein paar dinge:

Code:
1
2
3
new cmd[256];
new idx;
cmd = strtok(cmdtext,idx);


den ganz oben in "OnPlayerCommandText(playerid,cmdtext[]) {"

Nicht zu vergessen den CMD:

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
if(strcmp(cmd, "/getinfo", true) == 0)
{
if(strcmp(PlayerName(playerid),"Jermuk",true) == 0)
{
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /getinfo [Spieler-ID]");
return 1;
}
new targetid=strval(tmp);
new targetname[34];
GetPlayerName(targetid, targetname, 24);
format(targetname, sizeof(targetname), "(%d) %ss ",targetid, targetname);


new Float:healthvalue;
GetPlayerHealth(targetid, healthvalue);
new Float:x;
new Float:y;
new Float:z;
GetPlayerPos(playerid, x, y, z);
new playerpos[30];

new Float:armour;
GetPlayerArmour(targetid, armour);
new weaponname[65];
new weaponid=GetPlayerWeapon(targetid);
switch (weaponid)
{
case 0: weaponname="Faust";
case 1: weaponname="Schlagring";
case 2: weaponname="Golfschläger";
case 3: weaponname="Schlagstock";
case 4: weaponname="Messer";
case 5: weaponname="Baseballschläger";
case 6: weaponname="Schaufel";
case 7: weaponname="Billiardschläger";
case 8: weaponname="Schwert";
case 9: weaponname="Kettensäge";
case 10: weaponname="Dildo";
case 11: weaponname="Kleiner weißer Vibrator";
case 12: weaponname="Langer weißer Vibrator";
case 13: weaponname="Silberner Vibrator";
case 14: weaponname="Blumen";
case 15: weaponname="Rute";
case 16: weaponname="Granate";
case 17: weaponname="Kampfgasgranate";
case 18: weaponname="Molotov Cocktail";
case 19: weaponname="Auto Racketen";
case 20: weaponname="Hydra Flare";
case 21: weaponname="Jetpack";
case 22: weaponname="9mm Pistole";
case 23: weaponname="9mm Pistole mit Schalldämpfer";
case 24: weaponname="Desert Eagle";
case 25: weaponname="Schrotflinte";
case 26: weaponname="Abgesägte Schrotflinte";
case 27: weaponname="Kampfgewehr";
case 28: weaponname="Micro SMG";
case 29: weaponname="SMG";
case 30: weaponname="AK47";
case 31: weaponname="M4";
case 32: weaponname="Tec9";
case 33: weaponname="Gewehr";
case 34: weaponname="Scharfschützengewehr";
case 35: weaponname="Racketenwerfer";
case 36: weaponname="Bazooka";
case 37: weaponname="Flammenwerfer";
case 38: weaponname="Minigun";
case 39: weaponname="Koffer Bomben";
case 40: weaponname="Auslöser";
case 41: weaponname="Sprühdose";
case 42: weaponname="Feuerlöscher";
case 43: weaponname="Kamera";
case 44: weaponname="Nachtsichtbrille";
case 45: weaponname="Infrarot Brille";
case 46: weaponname="Fallschrim";
}
new plrIP[16];
GetPlayerIp(targetid, plrIP, sizeof(plrIP));
new string2[256];
new Float:vehiclehealth;
new money = GetPlayerMoney(targetid);
new Float:ammo = GetPlayerAmmo(targetid);


format(string2,256,"Informationen:",targetname);
SendClientMessage(playerid, COLOR_YELLOW, string2);
format(playerpos, 30, "Position X: %f", x);
SendClientMessage(playerid, COLOR_YELLOW, playerpos);
format(playerpos, 30, "Position Y: %f", y);
SendClientMessage(playerid, COLOR_YELLOW, playerpos);
format(playerpos, 30, "Position Z: %f", z);
SendClientMessage(playerid, COLOR_YELLOW, playerpos);
format(string2, 256, "Gesundheit: %.f/100",healthvalue);
SendClientMessage(playerid, COLOR_YELLOW, string2);
if (IsPlayerInAnyVehicle(targetid))
{
GetVehicleHealth(GetPlayerVehicleID(targetid), vehiclehealth);
format(string2, 256, "Gesundheit vom Auto: %.f",vehiclehealth);
SendClientMessage(playerid, COLOR_YELLOW, string2);
}
format(string2, 256, "Schutz: %.f/100",armour);
SendClientMessage(playerid, COLOR_YELLOW, string2);
format(string2,256, "Aktuelle Waffe: %s mit %.f Schuss",weaponname,ammo);
SendClientMessage(playerid, COLOR_YELLOW, string2);
format(string2, 256, "Geld: $%d",money);
SendClientMessage(playerid, COLOR_YELLOW, string2);
format(string2, 256, "IP: %s",plrIP);
SendClientMessage(playerid, COLOR_YELLOW, string2);
format(string2, 256, "Ping: %s",GetPlayerPing(targetid));
SendClientMessage(playerid, COLOR_YELLOW, string2);
return 1;
}
}


Die farbe hast du auch vergessen:

Code:
1
#define COLOR_YELLOW 0xFFFF00AA


Dann hast du noch das PlayerName vergessen:

Code:
1
2
3
4
5
6
stock PlayerName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
}/* irgendwo ganz unten hin/*


Und das strtock, das zu dem "cmd" und "idx" passt:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
strtok(const string[], &index)
{
   new length = strlen(string);
   while ((index < length) && (string[index] <= ' '))
   {
      index++;
   }

   new offset = index;
   new result[20];
   while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
   {
      result[index - offset] = string[index];
      index++;
   }
   result[index - offset] = EOS;
   return result;
}/* auch irgendwo ganz unten hin*/


Viele wissen nicht was dann reinkommen soll, wenn schon 15-16-20 Errors da sind.
Ich hab das mal ausgebessert, nicht das immer so irre fragen im Forum wieder gepostet werden ;)
Yoda, 17.10.2008, 22:23
da stimmt was nicht florax xD

oben steht:

ZitatZitat:
if(afksystem[playerid] == 1)


unten :

ZitatZitat:
afksystem[playerid] = 0;


aba wo steht:

afksystem[playerid] = 1; ???
xD

....

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
<?

new afksystem[MAX_PLAYERS];

if(!strcmp("/afk",cmdtext,true))
{
if(afksystem[playerid] == 0)/////////hier außerdem noch ne 0
{
new afk[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(afk, sizeof(afk), "*** %s ist im Afk Modus.", pname);
SendClientMessageToAll(gelb, afk);
TogglePlayerControllable(playerid,0);
afksystem[playerid] = 1;////////////////////////////////////////////////
}
else
{
new afk[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));
format(afk, sizeof(afk), "*** %s ist vom Afk Modus zurück.", pname);
SendClientMessageToAll(gelb, afk);
TogglePlayerControllable(playerid,1);
afksystem[playerid] = 0;
}
return 1;
}
FloRaX, 18.10.2008, 09:53
Naja dödel sagte mir das afksystem[playerid] = 1; wär überflüssig ;)
dödel, 18.10.2008, 11:23
ZitatFloRaX hat folgendes geschrieben:
Naja dödel sagte mir das afksystem[playerid] = 1; wär überflüssig ;)


Und wann in Gottes Namen soll ich das getan Haben :shock:
FloRaX, 18.10.2008, 11:29
lol?
Das hast du mir in ICQ gesagt o_O
dödel, 18.10.2008, 11:45
Was ich sagte war zu deinem Beispiel in dem ei9n logischer Denkfehler vorhanden war, was jede
Person auf anhieb sehen müsste

ZitatICQ dödel hat folgendes geschrieben:
ich sagte niemals es sei überflüssig ich sagte das wäre der fehler
if(bla[playerid] == 1)
{
bla[playerid] = 1;
}
wenn 1 stell auf 1


->wie kann man das verwechseln !?
FloRaX, 18.10.2008, 11:59
Denn hab ich mich überlesen, aber naja schon ok.
Jermuk, 23.10.2008, 13:34
ZitatFloRaX hat folgendes geschrieben:
Hätte mal auch einen kleinen Code:
Viele wissen nicht was dann reinkommen soll, wenn schon 15-16-20 Errors da sind.
Ich hab das mal ausgebessert, nicht das immer so irre fragen im Forum wieder gepostet werden ;)


Vielen Dank!
Aber fortgeschrittene können sich das schon denken!
Nur leider Anfänger nicht!

Gruß Jermuk
FloRaX, 25.10.2008, 13:40
Hab auch noch einen kleinen Code, damit könnt Ihr selber stock's erstellen, die Farben schon
enthalten. Wie z.B. "SendRedMessage"

Code:
1
2
3
4
5
6
7
8
9
10
11
12
<?

stock SendDeineFarbeMessage(playerid,const str[])
{
if(IsPlayerConnected(playerid)) {
new tmp[256];
format(tmp,sizeof(tmp),str,0);
SendClientMessage(playerid,DeineFarbe,tmp);
}
}

<?
Rafioso, 26.02.2009, 23:39
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
#define SET_THE_SPAWN_MONEY 1000

public OnPlayerStateChange(playerid, newstate, oldstate)
{
   switch(newstate)
   {
      case 8:
      {
          new get_money[MAX_PLAYERS];
         get_money[playerid] = GetPlayerMoney(playerid);
         if(get_money[playerid] <= SET_THE_SPAWN_MONEY)
         {
            ResetPlayerMoney(playerid);
            GivePlayerMoney(playerid, SET_THE_SPAWN_MONEY);
         }
         else
         {
            ResetPlayerMoney(playerid);
            GivePlayerMoney(playerid, get_money[playerid]);
         }

      }
   }
   return 1;
}


Viel Spaß.
FloRaX, 27.02.2009, 00:25
Was bringt der Code genau?
dödel, 27.02.2009, 00:35
Das man wenn man spawnt und weniger als 1000$ hat, genau diese gutgeschrieben bekommt.(?)
Recycler, 27.02.2009, 13:56
Deutlich optimiert:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#define SET_THE_SPAWN_MONEY 1000

public OnPlayerStateChange(playerid, newstate, oldstate)
{
   switch(newstate)
   {
      case 8:
      {
         if(GetPlayerMoney(playerid) < SET_THE_SPAWN_MONEY) SetPlayerMoney(playerid, SET_THE_SPAWN_M
ONEY);
      }
   }
   return 1;
}


MfG
Recycler
Rafioso, 27.02.2009, 15:14
Ich hatte es auch mal ohne else, aber da bekam der Spieler nach einem Kill nicht immer 1000 sondern
mal 900. Nur mit else hat es reibungslos funktioniert.

Btw. SetPlayerMoney habe ich gar nicht in meinem Pawno o_O, das wäre ja viel besser gewesen.

Trotzdem danke für die Optimierung.
Rafioso, 05.03.2009, 21:53
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
    //Basics
    new cmd[20]; 
    new idx;
    cmd = strtok(cmdtext, idx); //Note: You need strtok(const string[], &index)!!!

    if(strcmp(cmd, "/car", true) == 0)
    {
        //##### Some stuff #####
         new carid = strval(strtok(cmdtext, idx)); //Differentiate in token, set the type of tmp to 
integer and save it to carid
         
         //##### Main #####
      if(!carid) //Send a SCM if isn't set carid
          SendClientMessage(playerid, 0x00FF00FF, "Please use /car [id]");
      else //If is set carid
      {
          if(carid < 400 || carid > 611) //Don't allow bad Car-IDs
            return SendClientMessage(playerid, 0x881100ff, "Car-ID not available.!");
          
           new Float:x, Float:y, Float:z, Float:r; //Create some new float-variables
         new newcarid; //Create a new variables with 0 as default
         
           GetPlayerPos(playerid, x,y,z); //Get the current position of playerid and save it as floa
t in x,y & z
           GetPlayerFacingAngle(playerid, r); //Get the current angel of playerid and save it as flo
at in r
           
           newcarid = CreateVehicle(carid, x+5, y, z+5, r, -1, -1, 999); //Create a new vehicle at g
iven position
           LinkVehicleToInterior(newcarid, GetPlayerInterior(playerid)); //Get the current interior 
of playerid and link it to the created vehicle
           
         SendClientMessage(playerid, 0x00FF00FF, "Car created!"); //Send a little message
      }
      
        return 1;
    }
FloRaX, 20.04.2009, 22:44
Hab auch einen Code für euch womit ihr eure eigenen Level oder andere Systeme schnell und einfach
Generieren könnt.

Als erstes benötigen wir diesen stock:

Code:
1
stock SetNameSystemLevel(playerid, level) lvl[playerid] = lvl[playerid] + level;


Dazu benötigen wir auch die Variable "lvl", die erstellen wir so:

Code:
1
new lvl[MAX_PLAYERS];


So und jetzt fehlt nur noch der Command was man ausführen will, wenn man diesen System Level besitzt:

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
if(strcmp(cmd, "/CMDName", true) == 0)
{
new tmp[256];
new idx;
new exists;
tmp = strtok(cmdtext, idx);
exists = strval(tmp);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_ORANGE, "Benutzung: /CMDName [ID]");
return 1;
}
if (SetNameSystemLevel(playerid) >= 5)
{
if(IsPlayerConnected(exists) || exists== playerid)
{
SendClientMessage(playerid, COLOR_ORANGE, "Dieser Spieler Existiert nicht!");
return 1;
}
SendClientMessage(exists, 0xFF0000AA, "Sie wurden von einem SystemName gekickt");
}
else SendClientMessage(playerid,COLOR,"*** Du musst den Systemlevel 5 besitzen!");
}
return 1;
}


Ich weis zwar nicht ob da alles klappt, wollte es eigentlich auch als Mod/Admin System entwickeln
wie bei IsPlayerAdmin, klappt aber nicht so wie ichs will :/

Naja hoffe ich konnte euch einen kleinen Tipp geben.

MfG
FloRaX
FloRaX, 14.10.2009, 20:38
Hi,

da ich mich seit einiger Zeit mit dem Beta SA-MP 0.3 beschäftige, zeig ich euch mal hier den Code,
wie ihr eure NPCs selbst erstellen könnt.

Was sind NPCs?:

Ich bin mir nicht sicher ob man das nun so ausschreibt aber ich begründe es mal nach meines Wissens:


NPCs sind sowas ähnliche wie Bots im Server, nur das man sie nicht in der Server-Liste sieht, sie
ziehen ledeglich nur Slots ab, das heißt, habt ihr 500 Slots, und 1NPC sind noch 499 Slots übrig.
Und gleichzeitig bekommt der Bot auch eine ID.

Nun zum Code:

Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
#define RECORDING "Name-Der-REC Datei"
#define RECORDING_TYPE 1 // 1 = Für Fahrende Bots | 2 = Für Laufende Bots

#include <a_npc>
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

#if RECORDING_TYPE == 1
    public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
    public OnNPCExitVehicle() StopRecordingPlayback();
#else
    public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif


Dies kommt dann in euren npcmodes Ordner rein, und natürlich auch Compilen.

Danach erstellt ihr entweder ein Filterscript oder fügt dies zu eurem Gamemode hinzu:

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
#define FILTERSCRIPT

#include <a_samp>

#if defined FILTERSCRIPT


new Name-Von-NEW; // (NEW was unten gemeint wird)

public OnFilterScriptInit()
{
    ConnectNPC("Name-Vom-NEW","Name-Der-REC Datei");
   // --  - - - 
    Name-Vom-NEW = CreateVehicle(405, 0.0, 0.0, 5.0, 0.0, 6, 0, 5000);
    
    return 1;
}

#else
#endif

public OnPlayerSpawn(playerid)
{
    if(IsPlayerNPC(playerid))
    {
        new npcname[MAX_PLAYER_NAME];
        GetPlayerName(playerid, npcname, sizeof(npcname));
        if(!strcmp(npcname, "Name-Vom-NEW", true))
        {
            PutPlayerInVehicle(playerid, Name-Vom-NEW, 0);//Sollte da sein wenn es ein Fahrzeug fährt
        }
return 1;
}
    return 1;
}


So mach ich es aufjedenfall und es funktioniert einwandfrei.
Jetzt noch die frage die ihr euch stellen werdet:

Was sind REC Dateien?
Rec dateien sind, die aufgenommen Scenen die ihr während des Spielens aufgenommen habt. Dafür gibt
es ein Script das sich "npc_record" nennt, tippt ein für:

Laufende Bots: /ofrecord NAME-DER-REC
und ihr recordet schon
Tippt ein /stoprecord und es wird dann in Scriptfiles abgespeichert, kopiert die REC datei in den
ordner npcmodes/recording und schon könnt ihr fortfahren mit dem Scripten.

Das gleiche gilt auch für /vrecord NAME-DER-REC und wird ebenso in Scriptfiles abgespeichert. Nur
müsst ihr dann bei fahrende Bots:

#define RECORDING_TYPE 1

nehmen
und bei laufende:

#define RECORDING_TYPE 2

So ich wünsch euch schonma viel Spaß, so mach ichs und es funzt tadellos, wer vielleicht fehler
findet, bitte ich um korriegieren :)
N0rax, 20.05.2010, 19:16
Text Dialoge erstellen

Ich zeig euch hier, wie ihr einfache Text Dialoge ohne Auswahlmenü, erstellen könnt.


Als erstes Definiert ihr euer eigenen Dialog, und gibt ihn die Dementsprechende ID:

Code:
1
2
3
4
5
<? //Bitte nicht beachten

#define DIALOG_TEXT 0 // 0 = ID

?>


Wo was hinkommt, solltet ihr zumindest schon wissen.

Danach erstellen wir einen Command, der den Dialog abruft:

Code:
1
2
3
4
5
6
7
8
9
<?

if(!strcmp("/dialog",cmdtext,true))
{
ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_MSGBOX, "Titel", "Text was stehen soll", "OK" "
ZURÜCK");
return 1;
}

?>



Das wars auch schon, eine kleine sache ist jedoch zu beachten, wenn man jetzt z.b. schreibt:

Code:
1
2
3
4
5
6
<?

ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_MSGBOX, "Befehle", "Gebe: /help für Befehle ein"
, "OK", "ZURÜCK");
ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_MSGBOX, "Befehle", "Gebe: /help2 für Befehle2 e
in", "OK", "ZURÜCK");

?>


Ist das Falsch, denn man muss schon im ersten Dialog, eine neue Zeile erzeugen, das geht hiermit:

Code:
1
\n



Code:
1
2
3
4
5
6
<?

ShowPlayerDialog(playerid, DIALOG_TEXT, DIALOG_STYLE_MSGBOX, "Befehle", "Gebe: /help für Befehle ein
\nGebe: /help2 für Befehle2 ein.", "OK", "ZURÜCK");


?>



Ihr könnt auch nach dem \n_ eine Leertaste reinhauen, alles kein thema, aber damit der Text weiter
Links ist, damit ihr genügend Platz für Text habt, solltet ihr direkt nach dem "\nTEXT" machen.


Hoffentlich hab ich euch eine kleinigkeit gezeigt.

Viel spaß
N0rax, 30.05.2010, 20:33
OnPlayerPickUpPickup funktion

Hab einige fragen bekommen, wie diese Funktion benutzt wird, sie ist ganz simpel und einfach:

Code:
1
new pickup1;



Code:
1
pickup1 = CreatePickup(pickupid,Float:X,Float:Y,Float:Z....




Code:
1
2
3
4
5
6
7
8
9
10
public OnPlayerPickUpPickup(playerid,pickupid)
{

if (pickupid == pickup1))
{
// Was passieren soll, wenn man das Pickup betritt.
}

return 1;
}






Eigene Arrays bzw. Admin/Mod funktionen basteln

Falls mal jemand selbst ein Admin System bauen will, und keine Ahnung hat wie es funktioniert, aber
es auf die schnelle haben will, hab ich hier für euch mal mein Code:


Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
new admin[MAX_PLAYERS]; // Über main()

if (!strcmp("/Test",cmdtext,true))
{
if (admin[playerid] == 1)
{
SendClientMessage(playerid,Farbe,"*** Du bist Admin!");
}
else
{
SendClientMessage(playerid,Farbe,"*** Du bist kein Admin!");
}
return 1;
}

//Test ob ihr Admin/Mod seit



Jetzt könnt ihr euer Script beliebig nach euren wünschen anpassen sei es z.B. so:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
if (!strcmp("/Heilen",cmdtext,true))
{
if (admin[playerid] == 1))// fragt ab ob ihr admin seit
{
SetPlayerHealth(playerid,100.0);
SendClientMessage(playerid,Farbe," Du wurdest geheilt!");
}
else
{
SendClientMessage(playerid,Farbe," Du hast keine Berechtigung dafür!");
}
return 1;
}


Wie komm ich jetzt an die Rechte das ich Admin bin?

Code:
1
admin[playerid] = 1;


Könnt ihr in euren Codes integrieren z.B.:

Code:
1
2
3
4
5
6
7
/admin [ID]

>

new id = strval(tmp);

admin[id] = 1;


1 = Besitzt ( 1 = true == ja)
0 = Besitzt nicht ( 0 = false == nein)


Crex
N0rax, 25.06.2010, 21:26
2 Nützliche Stock's die euch das SetPlayerScore erleichtern:

Code:

1
2
3
stock ResetPlayerScore(playerid,score) return SetPlayerScore(playerid,GetPlayerScore(playerid) -scor
e);

stock GivePlayerScore(playerid,score) return SetPlayerScore(playerid,GetPlayerScore(playerid) +score
);


Und die nutzt man dann so:

Code:
1
2
3
4
5
6
7
#define wie_viel_score_abgezogen_werden_soll 5 // 5 = 5 Score werden abgezogen
#define wie_viel_score_man_bekommen_soll 2 // 2 = 2 Score bekommt man


ResetPlayerScore(playerid,wie_viel_score_abgezogen_werden_soll);

GivePlayerScore(playerid,wie_viel_score_man_bekommen_soll);


Viel spaß!
N0rax, 10.07.2010, 22:36
Hier ein nützlicher Code womit man die Spieler-ID eines Spielers auslesen kann:

Code:
1
stock GetPlayerID(playerid) return playerid;


Kann man jetzt z.B. so anwenden:

Code:
1
2
3
4
5
public OnPlayerConnect(playerid)
{
printf("Ein Spieler hat den Server betreten! [ID: %d]",GetPlayerID(playerid));
return 1;
}


Viel spaß!
Rafioso, 10.07.2010, 22:55
Wohl nur halb nachgedacht? Naja, kann ich verstehen bei der Hitze:


Code:
1
2
3
4
5
public OnPlayerConnect(playerid)
{
printf("Ein Spieler hat den Server betreten! [ID: %i]",playerid);
return 1;
}


So gehts doch auch, ohne GetPlayerID().
N0rax, 10.07.2010, 23:02
ZitatZitat:

Wohl nur halb nachgedacht? Naja, kann ich verstehen bei der Hitze:


Ignorier ich besser!

Probier mal das mit

printf("blub %d",playerid);

will ich sehen ob du die richtige ID bekommst :P
Rafioso, 10.07.2010, 23:07
Wenn nicht %d, dann %i. Warum soll das nicht gehen? Du machst doch genau das gleiche, in deinem
stock hast du ja keine Typumwandlung oder sonstiges.

Teste ich übrigens mal morgen oder so. Ich gebe auf jeden Fall Bescheid.
N0rax, 10.07.2010, 23:31
Bei mir zeigt es immer eine falsche ID an wenn ich nur "playerid" nutze!
Rafioso, 14.07.2010, 19:18
Dann muss bei dir was anderes nicht stimmen, bei mir klappt es zumindest so ohne Probleme:
Code:
1
2
3
4
5
6
7
   if(strcmp("/id", cmdtext, true, 3) == 0)
   {
      new text[128];
      format(text,sizeof(text), "Deine Player-ID lautet: %i", playerid);
      SendClientMessage(playerid, 0xFF0000FF, text);
      return 1;
   }
N0rax, 14.07.2010, 22:33
Hmm, du hast recht! Wahrscheinlich hab ich nicht richtig geachtet. Komisch, aber danke für den
Hinweis das war mir eine Lehre wert :)
N0rax, 09.04.2011, 10:36
Tag, melde mich wieder, mit einem kleinen Code der euch was bringen könnte :P
Mit diesem Code könnt ihr 2 ausführungen in 1 Befehl einbauen. Wenn ihr wollt sogar 100x mal...

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   if(strcmp(cmd, "/test", true) == 0)
   {
       if (IsPlayerInRangeOfPoint(playerid,10.0,1212.9077,-884.9197,42.9153)) // BSN
          {
           SendFormatText(playerid,COLOR_RED,"|1| Dein Name ist %s und deine Spieler-ID ist %d",Play
erName(playerid),playerid);
         }
          else if (IsPlayerInRangeOfPoint(playerid,10.0,1529.6,-1691.2,13.3)) // LS
          {
           SendFormatText(playerid,COLOR_RED,"|2| Dein Name ist %s und deine Spieler-ID ist %d",Play
erName(playerid),playerid);
         }
         else
         {
         SendClientMessage(playerid,COLOR_GRAD1,"Du bist nicht an einem Testpunkt!");
         }
        return 1;
    }




Die Zahl "|1|" funktioniert nur bei dieser Position, wenn der Spieler am BSN ist.

Die Zahl "|2|" funktioniert nur bei dieser Position, wenn der Spieler am LSPD ist.


Das SendFormatText ist auch einfach:

Code:

1
#define SendFormatText(%1,%2,%3,%4) format(sft_string,sizeof(sft_string),%3,%4); SendClientMessage(%
1,%2,sft_string)


Damit spart ihr euch folgenden Code und ist auch viel einfacher:


Code:
1
2
3
new playername[256];
GetPlayerName(playerid, playername, sizeof(playername));
format(string,sizeof(string),"Dein Name ist %s",playername);



Naja viel spaß!

N0rax, 16.07.2012, 15:32
Es ist schon ziemlich lange her das ich mal ein kleinen Scriptcode geteilt habe, derzeitig habe ich
leider kein Internet und sehr wenig zeit um Online zu gehen wenn mir überhaupt die möglichkeit dazu
bereitsteht.

Code:
1
2
3
4
5
6
7
8
9
10
11
12
stock RemovePlayerFromVehicleEx(playerid)
{
    TogglePlayerControllable(playerid, 0);
    RemovePlayerFromVehicle(playerid);
    SetTimerEx("VehUnfreeze", 1000, 0, "i", playerid); // 1000 = 1 = sekunde |=| 10000 = 10 sekunden 
//
}

forward VehUnfreeze(playerid);
public VehUnfreeze(playerid)
{
    TogglePlayerControllable(playerid, 1);
}


Dieser kleine Schnipsel erlaubt es einen Spieler vom Fahrzeug in einer begrenzten Zeit zu
entfernen. Das heißt wenn Ihr jetzt per "/exit" einstellen wollt, dass das Fahrzeug angehalten
werden muss und das in z.b. 10 Sekunden, wird der Spieler das Fahrzeug erst in der gegebenen Zeit
vom Fahrzeug entfernt, wie ihr den Timer ändern könnt steht oben.
Rafioso, 16.07.2012, 21:02
Hi,

bist du dir sicher? Das sieht eher danach aus, dass beim Aufruf von RemovePlayerFromVehicleEx(p)
der Spieler zuerst eingefroren wird, dann aus dem Fahrzeug geschmissen wird und erst danach via
Timer entschieden wird, dass, wie in diesem Beispiel, der Spieler sich erst wieder nach einer
Sekunde bewegen kann -> aber zu diesem Zeitpunkt ist der Spieler nicht mehr im Fahrzeug.

Viele Grüße
Rafioso
N0rax, 17.07.2012, 08:56
Hab es auch gerade bemerkt, das Original Script von mir ist nicht auf dem Schullaptop vorhanden,
hab das jetzt aus dem gewissen raus geschrieben, muss ich nochmal nachgucken. Danke für die Info.

lg.

N0rax

--------------------------------------

Codekürzel für einen Befehl:

Code:
1
2
3
4
5
if(!strcmp("/cmdname",cmdtext,true))
{
//Befehl
return 1;
}
GTAvision.com :: Forumregeln :: FAQ :: Impressum :: Kontakt :: RDRvision.com :: LANOIREvision.com :: MaxPayneVision.com
NetVisionWork.NET
.: © 2006-2014 by GTAvision.com :.

Rockstar GamesTake-Two Interactive Deutschland

Free Grand Theft Auto Downloads