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

Position: Grand Theft Auto: San Andreas » Multiplayer » [SAMP v1 & v2] PutPlayerInVehicle command? » Druckansicht
[GPRS]MrWitz, 09.06.2007, 11:25
Mir wurde gesagt solch ein Command wäre nicht schwer aber ich bekomme den nicht hin... (bin wohl
doof :o)
Könnte mir den vielleicht einer scripten? Ware echt net :roll:

gruß Chris
Recycler, 12.06.2007, 15:43
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
if (strcmp(cmd, "/putplayer", true) == 0)
{
new id, vid, dir;
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /putplayer [playerid] [vehicleid]");
return 1;
}
id = strval(tmp);
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_WHITE, "USAGE: /putplayer [playerid] [vehicleid]");
return 1;
}
vid = strval(tmp);
if (IsPlayerConnected(id))
{
for (new i; i < GetMaxPlayers(); i++)
{
if (IsPlayerConnected(i) && !IsPlayerDriver(i, vid)) dir++;
}
if (dir == GetMaxPlayers()) PutPlayerInVehicle(id, vid, 0);
else SendClientMessage(playerid, COLOR_BUMS, "Da it schon jemmand im Otto!"); // :D
}
else SendClientMessage(playerid, COLOR_DEATH, "Der Spieler ist nicht verbunden!");
return 1;
}

stock IsPlayerDriver(playerid, vehicleid)
{
if (IsPlayerConnected(playerid) && IsPlayerInVehicle(playerid, vehicleid) && GetPlayerState(playerid
) == PLAYER_STATE_DRIVER) return 1;
return 0;
}


MfG
Recycler
[GPRS]MrWitz, 12.06.2007, 15:47
Oh danke, kann man das auch machen mit SitzID, nicht nur mit fahrerID.
Aber ich versuche erst mal ob ich das selbst hinbekomme... wenn nicht schreibe ich nochmal

EDIT: Hm...

Habe errors bei dem einfügen von dem Command:
Code:

1
2
3
4
5
6
7
8
~partyhouse.pwn(310) : error 017: undefined symbol "strtok"
~partyhouse.pwn(310) : error 033: array must be indexed (variable "tmp")
~partyhouse.pwn(316) : error 017: undefined symbol "strtok"
~partyhouse.pwn(316) : error 033: array must be indexed (variable "tmp")
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.



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
   if (strcmp(cmdtext, "/ppiv", true) == 0)
   {
      new id, vid, dir;
      new tmp[256];
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp)) {
         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [playerid] [vehicleid]");
         return 1;
      }
      id = strval(tmp);
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp)) {
         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [playerid] [vehicleid]");
         return 1;
      }
      vid = strval(tmp);
      if (IsPlayerConnected(id))
      {
         for (new i; i < GetMaxPlayers(); i++)
         {
            if (IsPlayerConnected(i) && !IsPlayerDriver(i, vid)) dir++;
         }
         if (dir == GetMaxPlayers()) PutPlayerInVehicle(id, vid, 0);
         else SendClientMessage(playerid, COLOR_ORANGE, "Da ist schon jemand im Fahrzeug!");
      }
      else SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht verbunden!");
      return 1;
   }
Recycler, 12.06.2007, 15:48
Unpraktisch, du weißt ja nicht auswendig wieviele Sitze jedes Car hat :roll:

MfG
Recycler

EDIT:

Du brauchst die Funktion "strtok"

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;
}


Sollte man eigentlich haben...
[GPRS]MrWitz, 12.06.2007, 15:55
Naja das ist doch egal wenigstens man kann zu 2. ~ 5. in ein Fahrzeug in das man nicht rein kommt

Hab meinen vorigen beitrag editiert....

...
danke
[GPRS]MrWitz, 12.06.2007, 16:11
Habe mal versucht die SitzID dazuzufügen nur das playerid habe ich gelöscht.

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
   if (strcmp(cmdtext, "/ppiv", true) == 0)
   {
      new vid, sit, dir;
      new tmp[256];
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp)) {
         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [vehicleID] [sitzID]");
         return 1;
      }
      vid = strval(tmp);
      tmp = strtok(cmdtext, idx);
      if(!strlen(tmp)) {
         SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [vehicleID] [sitzID]");
         return 1;
      }
      sit = strval(tmp);
      if (IsPlayerConnected(playerid))
      {
         for (new i; i < GetMaxPlayers(); i++)
         {
            if (IsPlayerConnected(i) && !IsPlayerDriver(i, vid)) dir++;
         }
         if (dir == GetMaxPlayers()) PutPlayerInVehicle(playerid, vid, sit);
      }
      else SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht verbunden!");
      return 1;
   }


doch ich bekomme 2 Errors die ich bei dem Normalen auch noch hatte.

Code:
1
2
3
4
5
6
~partyhouse.pwn(329) : error 035: argument type mismatch (argument 2)
~partyhouse.pwn(335) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664           Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.


Diese argument type mismatch kommt bei beiden hier:
tmp = strtok(cmdtext, idx);

was musss ich damit machen?


greeting
Recycler, 12.06.2007, 16:22
In OnPlayerCommandText folgendes einfügen:

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


Und in der ersten Zeile vom Command "cmdtext" durch "cmd" ersetzen.

MfG
Recycler
[GPRS]MrWitz, 12.06.2007, 16:24
Danke jetzt hat es geklappt, und das mit der SitzID das ich geändert hatte das ist soweit richtig?
Recycler, 12.06.2007, 16:26
Ja, das ist richtig so. Allerdings musst du dich nicht wundern, wenn der Server crasht, falls du
dich auf einen Sitz setzen willst den es garnicht gibt ;-)

MfG
Recycler
[GPRS]MrWitz, 12.06.2007, 16:57
Das funktioniert irgendwie nicht...
wen ich In-Game den CMD eingeben sagt der bei jedem auto "Da ist schon jemand im
Fahrzeug!"
Recycler, 12.06.2007, 19:41
Ja, ich habe aus Versehen eine Funktion verwechselt ;-)

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
    if (strcmp(cmdtext, "/ppiv", true) == 0)
    {
        new vid, sit, dir;
        new tmp[256];
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) {
            SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [vehicleID] [sitzID]");
            return 1;
        }
        vid = strval(tmp);
        tmp = strtok(cmdtext, idx);
        if(!strlen(tmp)) {
            SendClientMessage(playerid, COLOR_WHITE, "USAGE: /ppiv [vehicleID] [sitzID]");
            return 1;
        }
        sit = strval(tmp);
        if (IsPlayerConnected(playerid))
        {
            for (new i; i < GetOnlinePlayers(); i++)
            {
                if (IsPlayerConnected(i) && !IsPlayerDriver(i, vid)) dir++;
            }
            if (dir == GetOnlinePlayers()) PutPlayerInVehicle(playerid, vid, sit);
        }
        else SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht verbunden!");
        return 1;
    }

stock IsPlayerDriver(playerid, vehicleid)
{
if (IsPlayerConnected(playerid) && IsPlayerInVehicle(playerid, vehicleid) && GetPlayerState(playerid
) == PLAYER_STATE_DRIVER) return 1;
return 0;
}

stock GetOnlinePlayers()
{
new players;
for (new i; i < MAX_PLAYERS; i++) if (IsPlayerConnected(i)) players++;
return players;
}


Jetzt sollte es funktionieren.

MfG
Recycler
Lippi, 04.12.2007, 15:22
hi ich hätte da ne Frage kann man es auch so machen das wenn man Z.B. als COP wenn festnehmen will
dann schreibt /a (arrest) und dann ist der im Polizei Auto drin... geht so was auch??
Also das man net die ID des Autos schreiben muss..
dödel, 04.12.2007, 15:37
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
<?

if(strcmp(cmd, "/arrest", true) == 0)
{
new arrest;
new tmp[256];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid, COLOR_ORANGE, "Benutzung: /arrest [Spieler-ID]");
return 1;
}
if(IsPlayerAdmin(playerid))
{
arrest = strval(tmp);
PutPlayerInVehicle(arrest, GetPlayerVehicleID(playerid), 3);
TogglePlayerContraollable(arrest, false);
new arrestname[MAX_PLAYERS];
GetPlayerName(arrest, arrestname, sizeof(arrestname));
new arreststring[256];
format(arreststring, sizeof(arreststring), "%s wurde verhaftet", arrestname);
SendClientMessageToAll(COLOR_YELLOW, arreststring);
}
else SendClientMessage(playerid, COLOR_RED, "Du bist nicht als Admin eingeloggt !");
return 1;
}

?>


Naja als /unarrest reicht ja schon
TogglePlayerControllable und RemovePlayerFromVehicle falls er noch in einem ist :D
Lippi, 04.12.2007, 16:00
und wie muss ich das ändern wenn das nu die Polizei machen kann...?? Weil die haben ja net das Rcon
PW!!
dödel, 04.12.2007, 16:03
Musst du wissen, woher soll ich deine
Variablen der Polizei kennen :P

Eigentlich:

if(bulle[playerid] == 1)
statt
if(IsPlayerAdmin(playerid))

is doch klar :P
Lippi, 04.12.2007, 16:15
k ok thx
dann werd ich jetzt wohl teams machen müssen...
nur ganz kleine Frage kann man Teams so machen das net jeder die nehmen kann??
dödel, 04.12.2007, 17:44
Und wie immer wird die
Suchfunktion missachtet :P

AdminSkin SUCHEN !
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