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

Position: Grand Theft Auto: San Andreas » Multiplayer » Taxi Script » Druckansicht
Jermuk, 11.10.2008, 19:55
Hallo an alle,

ich habe mal wieder eine Frage zu meinem Script.
Wenn ich /accept mache, sagt er "Nutze /accept [Preis]" und wenn ich dann /accept 100 mache zeigt
er mir SERVER ERROR: Unkown Command an.
Was habe ich mal wieder falsch gemacht?
Und was könnte ich machen, damit es ein bisschen entchaotisiert wird?
Würde denn das Script so wie ichs wollte laufen?
Hier das Script:

Code:
1
2
3
4
5
6
7
8
new bool:Taxidriver[MAX_PLAYERS];
new bool:wanttaxi[MAX_PLAYERS];
new bool:hadclient[MAX_PLAYERS];
new bool:accept1[MAX_PLAYERS];
new bool:accept2[MAX_PLAYERS];
new Float:accept3[MAX_PLAYERS];
new Float:accept4[MAX_PLAYERS];
new preis;


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
if (strcmp(cmdtext, "/iamtaxi", true)==0)
    {
        new string[256];
        format(string,sizeof(string),"%s ist nun Taxifahrer. Tippe /taxi um ihn zu rufen.", PlayerNa
me(playerid) );
      SendClientMessageToAll(0xFFFF00AA,string);
      Taxidriver[playerid] = true;
      return 1;
   }
   
   
   // ----------------------------------------------------------------------------------------------
----
   
   if (strcmp(cmd, "/taxi", true)==0)
    {
        new string[256];
        new tmp[256];
        new zielort;
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp))
      {
         SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /taxi [Zielort]");
         return 1;
      }
      zielort = strval(tmp);
      for (new i = 0; i < MAX_PLAYERS; i++)
        {
            if(Taxidriver[i]==true)
            {
                if(hadclient[i] != true && wanttaxi[playerid] != true)
                {
                   format(string,sizeof(string),"%s braucht ein Taxi und will hierhin: %s", PlayerNa
me2(playerid),zielort);
               SendClientMessage(i,0xFFFF00AA,string);
               format(string,sizeof(string),"Nutze /accept [Preis] zum Akzeptieren");
               SendClientMessage(i,0xFFFF00AA,string);
               wanttaxi[playerid] = true;
               accept1[i] = true;
               accept3[playerid] = i;
               accept4[i] = playerid;
               //hadclient[i] = true;
            }
            else
            {
                SendClientMessage(playerid,0xFFFF00AA,"Momentan ist kein Taxifahrer frei.");
             }
         }
        }
      return 1;
   }
   // ----------------------------------------------------------------------------------------------
---
   if (strcmp(cmd, "/accept", true)==0)
    {
        new string[256];
        if(accept1[playerid] == true)
        {
            new tmp[256];
           tmp = strtok(cmdtext, idx);
           if(!strlen(tmp))
         {
            SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /accept [Preis]");
            return 1;
         }
         preis = strval(tmp);
         format(string,sizeof(string),"Man hat dein Angebot angenommen. Es würde dich $%d kosten.", 
preis);
         SendClientMessage(accept4[playerid],0xFFFF00AA,string);
         format(string,sizeof(string),"Wenn du dies anehmen möchtest tippe /accept ein.");
         SendClientMessage(accept4[playerid],0xFFFF00AA,string);
         accept2[accept4[playerid]] = true;
         accept1[playerid] = false;
         
      }
      if(accept2[playerid] == true)
      {
          for (new i = 0; i < MAX_PLAYERS; i++)
          {
              if(accept3[playerid] == i && accept2[playerid] == true)
               {
                   format(string,sizeof(string),"Angebot akzeptiert");
               SendClientMessage(playerid,0xFFFF00AA,string);
               format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zu Checkpoint!");
               SendClientMessage(i,0xFFFF00AA,string);
               accept2[playerid] = false;
               hadclient[playerid] = true;
            }
         }
      }
      return 1;
   }


Und unter OnPlayerEnterVehicle:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
if (ispassenger)
    {
       for (new i = 0; i < MAX_PLAYERS; i++)
       {
           if (wanttaxi[playerid] == true && vehicleid == GetPlayerVehicleID(i) && Taxidriver[i] == 
true)
           {
               new string[256];
               format(string, sizeof(string), "Du hast ein Taxi betreten! Das kostet dich $%d!",prei
s);
               SendClientMessage(playerid, farbe_orange, string);
         }
      }
   }


Ich hoffe ihr könnt dieses Chaos lesen *sarkasmus*

vielen Dank im Voraus,

Gruß Jermuk
dödel, 11.10.2008, 20:12
wie genau wurde denn 'cmd' definiert?

if (strcmp(cmd < dieses hier ;)



Erstmal ist deine for-schleife dort unnötig


Code:
1
2
3
4
5
6
7
8
9
        if(accept2[playerid] == true)
        {
                    format(string,sizeof(string),"Angebot akzeptiert");
                    SendClientMessage(playerid,0xFFFF00AA,string);
                    format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zu Checkpoint!");
                    SendClientMessage(accept3[playerid],0xFFFF00AA,string);
                    accept2[playerid] = false;
                    hadclient[playerid] = true;
        }


Und wenn sowas passiert wie du sagst, aber nichts wirklich sichtbar ist,
gibts noch einen ganz einfach Test dazu ;)

Nutz einfach mal diesen Code und dann siehst du ja, bei welcher Funktion es hängenbleibt bzw. wie
weit es überhaupt kommt :)


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
    if (strcmp(cmd, "/accept", true)==0)
     {
    print("accept 1");
         new string[256];
         if(accept1[playerid] == true)
         {
         print("accept 1-0");
             new tmp[256];
             tmp = strtok(cmdtext, idx);
             print("accept 1-2");
             if(!strlen(tmp))
            {
                SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /accept [Preis]");
                return 1;
            }
            preis = strval(tmp);
            print("accept 1-3");
            format(string,sizeof(string),"Man hat dein Angebot angenommen. Es würde dich $%d kosten."
, preis);
            SendClientMessage(accept4[playerid],0xFFFF00AA,string);
            print("accept 1-4");
            format(string,sizeof(string),"Wenn du dies anehmen möchtest tippe /accept ein.");
            SendClientMessage(accept4[playerid],0xFFFF00AA,string);
            print("accept 1-5");
            accept2[accept4[playerid]] = true;
            accept1[playerid] = false;
        print("accept 1-6");
        }
        print("accept 2");
        if(accept2[playerid] == true)
        {
       print("accept 2-0");
        format(string,sizeof(string),"Angebot akzeptiert");
       SendClientMessage(playerid,0xFFFF00AA,string);
        print("accept 2-1");
       format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zu Checkpoint!");
       SendClientMessage(accept3[playerid],0xFFFF00AA,string);
        print("accept 2-2");
       accept2[playerid] = false;
       hadclient[playerid] = true;
       print("accept 2-3");
        return 1;
    }


Durch solche Kontrollpunkte kannst du genau sehen, bis zu welcher Funktion es kommt
(logischerweise hängt es dann immer bei der Funktion nach dem Kontrollpunkt)
Jermuk, 11.10.2008, 21:29
Danke für die Antwort dödel,

es funzt.
Aber leider nur zur Hälfte.
Zum Schluss wird nicht die Nachricht "Angebot wurde akzeptiert. Fahre zu Checkpoint!"
angezeigt.
Was habe ich diesmal Falsch gemacht?
Es liegt wahrscheinlich daran, dass accept3[playerid] nicht den richtigen Wert hat.

Danke im voraus,

Gruß Jermuk

PS: Nochmal danke für die Antwort dödel!!!!!!! *hi*
dödel, 11.10.2008, 21:59
Zeig mir mal wie dein /accept inzwischen aussieht ;)
Jermuk, 12.10.2008, 10:43
Mein Code sieht momentan so aus:

Code:
1
2
3
4
5
6
7
8
9
// Taxi-Driver
new bool:Taxidriver[MAX_PLAYERS];
new bool:wanttaxi[MAX_PLAYERS];
new bool:hadclient[MAX_PLAYERS];
new bool:accept1[MAX_PLAYERS];
new bool:accept2[MAX_PLAYERS];
new Float:accept3[MAX_PLAYERS];
new Float:accept4[MAX_PLAYERS];
new preis;


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
if (strcmp(cmd, "/taxi", true)==0)
    {
        new string[256];
        new tmp[256];
        new zielort;
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp))
      {
         SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /taxi [Zielort]");
         return 1;
      }
      zielort = strval(tmp);
      for (new i = 0; i < MAX_PLAYERS; i++)
        {
            if(Taxidriver[i]==true)
            {
                if(hadclient[i] != true && wanttaxi[playerid] != true)
                {
                   format(string,sizeof(string),"%s braucht ein Taxi und will hierhin: %s", PlayerNa
me2(playerid),zielort);
               SendClientMessage(i,0xFFFF00AA,string);
               format(string,sizeof(string),"Nutze /accept [Preis] zum Akzeptieren");
               SendClientMessage(i,0xFFFF00AA,string);
               wanttaxi[playerid] = true;
               accept1[i] = true;
               accept3[playerid] = i;
               accept4[i] = playerid;
               //hadclient[i] = true;
            }
            else
            {
                SendClientMessage(playerid,0xFFFF00AA,"Momentan ist kein Taxifahrer frei.");
             }
         }
        }
      return 1;
   }


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
if (strcmp(cmd, "/accept", true)==0)
    {   
        new string[256];
        if(accept1[playerid] == true)
        {
            new tmp[256];
           tmp = strtok(cmdtext, idx);
           if(!strlen(tmp))
         {
            SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /accept [Preis]");
            return 1;
         }
         preis = strval(tmp);
         format(string,sizeof(string),"Man hat dein Angebot angenommen. Es würde dich $%d kosten.", 
preis);
         SendClientMessage(accept4[playerid],0xFFFF00AA,string);
         format(string,sizeof(string),"Wenn du dies anehmen möchtest tippe /accept ein.");
         SendClientMessage(accept4[playerid],0xFFFF00AA,string);
         accept2[accept4[playerid]] = true;
         accept1[playerid] = false;
         accept3[accept4[playerid]] = playerid;
         return 1;
         
      }
      /*
      if(accept2[playerid] == true)
      {
          for (new i = 0; i < MAX_PLAYERS; i++)
          {
              if(accept3[playerid] == i && accept2[playerid] == true)
               {
                   format(string,sizeof(string),"Angebot akzeptiert");
               SendClientMessage(playerid,0xFFFF00AA,string);
               format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zu Checkpoint!");
               SendClientMessage(i,0xFFFF00AA,string);
               accept2[playerid] = false;
               hadclient[playerid] = true;
            }
         }
      }
      */
      if(accept2[playerid] == true)
        {
                    format(string,sizeof(string),"Angebot akzeptiert");
                    SendClientMessage(playerid,0xFFFF00AA,string);
                    format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zum Marker!");
                    SendClientMessage(accept3[playerid],0xFFFF00AA,string);
                    accept2[playerid] = false;
                    hadclient[playerid] = true;
               new Float:X;
               new Float:Y;
               new Float:Z;
               GetPlayerPos(playerid,X,Y,Z);
               SetPlayerMapIcon(accept3[playerid], 12, X, Y, Z, 58, 0 );
      }
      return 1;
   }


Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if (ispassenger)
    {
       for (new i = 0; i < MAX_PLAYERS; i++)
       {
           if (wanttaxi[playerid] == true && vehicleid == GetPlayerVehicleID(i) && Taxidriver[i] == 
true)
           {
               new string[256];
               GivePlayerMoney(playerid,-preis);
            GivePlayerMoney(i,preis);
               format(string, sizeof(string), "Du hast das Taxi betreten!");
               SendClientMessage(playerid, farbe_orange, string);
         }
      }
   }
   return 1;
}

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public OnPlayerExitVehicle(playerid, vehicleid)
{
   for (new i = 0; i < MAX_PLAYERS; i++)
       {
           if (wanttaxi[playerid] == true && vehicleid == GetPlayerVehicleID(i) && Taxidriver[i] == 
true)
           {
               new string[256];
               format(string, sizeof(string), "Du hast das Taxi verlassen!");
               SendClientMessage(playerid, farbe_orange, string);
               wanttaxi[playerid] = false;
               hadclient[i] = false;
               RemovePlayerMapIcon(i, 12 );
         }
      }
   return 1;
}

Im /taxi Script ist auch noch irgendwo ein Fehler drinnen, denn der Zielort wird nicht angezeigt

Ich hatte inzwischen das Script ein bisschen echter gemacht.

Gruß Jermuk
dödel, 12.10.2008, 14:16
Dann bauen wir doch einfach die for-schleife neu und ändern sie etwas ab

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        if(accept2[playerid] == true)
        {
        for(new i; i<MAX_PLAYERS; i++)
        {
        if(accept3[i] == playerid)
        {
                    format(string,sizeof(string),"Angebot akzeptiert");
                    SendClientMessage(playerid,0xFFFF00AA,string);
                    format(string,sizeof(string),"Angebot wurde akzeptiert. Fahre zum Marker!");
                    SendClientMessage(i,0xFFFF00AA,string);
                    accept2[playerid] = false;
                    hadclient[playerid] = true;
                    new Float:X;
                    new Float:Y;
                    new Float:Z;
                    GetPlayerPos(playerid,X,Y,Z);
                    SetPlayerMapIcon(accept3[playerid], 12, X, Y, Z, 58, 0 );
        }
        }
        }



Zu deinem Problem mit dem Zielort:
Du speicherst ihn als Zahl und nicht als Text,
ich weiß nicht ob das gewollt ist, aber du scheinst
ihn später ja als string ausgeben zu wollen, also
sollte /taxi wie folgt aussehen.

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
if (strcmp(cmd, "/taxi", true)==0)
     {
         new string[256];
         new tmp[256];
         new zielort[256];
         tmp = strtok(cmdtext, idx);
         if(!strlen(tmp))
        {
            SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /taxi [Zielort]");
            return 1;
        }
        zielort = strtok(cmdtext, idx);
         if(!strlen(zielort))
        {
            SendClientMessage(playerid, COLOR_YELLOW, "Nutze: /taxi [Zielort]");
            return 1;
        }
        for (new i = 0; i < MAX_PLAYERS; i++)
        {
            if(Taxidriver[i]==true)
            {
                if(hadclient[i] != true && wanttaxi[playerid] != true)
                {
                    format(string,sizeof(string),"%s braucht ein Taxi und will hierhin: %s", PlayerN
ame2(playerid),zielort[6]);
                    SendClientMessage(i,0xFFFF00AA,string);
                    format(string,sizeof(string),"Nutze /accept [Preis] zum Akzeptieren");
                    SendClientMessage(i,0xFFFF00AA,string);
                    wanttaxi[playerid] = true;
                    accept1[i] = true;
                    accept3[playerid] = i;
                    accept4[i] = playerid;
                    //hadclient[i] = true;
                }
                else
                {
                    SendClientMessage(playerid,0xFFFF00AA,"Momentan ist kein Taxifahrer frei.");
                }
            }
        }
        return 1;
    }
Jermuk, 12.10.2008, 14:37
Danke für die Antwort!!!

Es klappt!!!

Gruß Jermuk
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