[Scriptwunsch] mit /getthere [ID] Leute zu einem holen und mit /goto zu ihnen gehen (admincommands)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • also leute ich hätte gerne einen befehl namens /getthere, mit dem ich als (RCON) admin (IsPlayerAdmin) leute zu mir holen kann. Und einen befehl /goto, mit dem ich gleichermaßen mich zu anderen teleportieren kann.


    z.B. wenn ich /getthere 5 mache, soll der mit der id 5 zu mir geportet werden


    wenn ich /goto 5 mache, soll ich zu id 5 geportet werden.



    ich weiß das ist ziemlich leicht, aber leider scheitere ich immer daran :(

  • if(strcmp(cmd, "/goto", true) == 0)
    {
    new Float:pX,Float:pY,Float:pZ;
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, ORANGE, "Hilfe: /goto [ID]");
    SendClientMessage(playerid, ORANGE, "FUNKTION: Kann dich zu einem Spieler Porten.");
    return 1;
    }
    new giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(playerid),pX,pY,pZ+2);
    }
    else
    {
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetPlayerPos(playerid,pX,pY,pZ+2);
    }
    SetPlayerInterior(playerid,GetPlayerInterior(giveplayerid));
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "Du bist kein Admin.");
    return 1;
    }




    if(strcmp(cmd, "/gethere", true) == 0) //
    {
    new Float:pX,Float:pY,Float:pZ;
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, ORANGE, "Hilfe: /get [ID]");
    SendClientMessage(playerid, ORANGE, "FUNKTION: Kann einen Spieler zu dir Porten.");
    return 1;
    }
    new giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(giveplayerid) == PLAYER_STATE_DRIVER)
    {
    GetPlayerPos(playerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(giveplayerid),pX,pY,pZ+2);
    }
    else
    {
    GetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerPos(giveplayerid,pX,pY,pZ+2);
    }
    SetPlayerInterior(giveplayerid,GetPlayerInterior(playerid));
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "Du bist kein Admin.");
    return 1;
    }

  • if(strcmp(cmd, "/goto", true) == 0)
    {
    new Float:pX,Float:pY,Float:pZ;
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, ORANGE, "Hilfe: /goto [ID]");
    SendClientMessage(playerid, ORANGE, "FUNKTION: Kann dich zu einem Spieler Porten.");
    return 1;
    }
    new giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(playerid),pX,pY,pZ+2);
    }
    else
    {
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetPlayerPos(playerid,pX,pY,pZ+2);
    }
    SetPlayerInterior(playerid,GetPlayerInterior(giveplayerid));
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "Du bist kein Admin.");
    return 1;
    }




    if(strcmp(cmd, "/gethere", true) == 0) //
    {
    new Float:pX,Float:pY,Float:pZ;
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, ORANGE, "Hilfe: /get [ID]");
    SendClientMessage(playerid, ORANGE, "FUNKTION: Kann einen Spieler zu dir Porten.");
    return 1;
    }
    new giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(giveplayerid) == PLAYER_STATE_DRIVER)
    {
    GetPlayerPos(playerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(giveplayerid),pX,pY,pZ+2);
    }
    else
    {
    GetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerPos(giveplayerid,pX,pY,pZ+2);
    }
    SetPlayerInterior(giveplayerid,GetPlayerInterior(playerid));
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, RED, string);
    }
    }
    else SendClientMessage(playerid, RED, "Du bist kein Admin.");
    return 1;
    }


    Hast die Klammer "(" bei IsPlayerAdmin vergessen.

  • edit: oh ein neues script xD ich test es ma


    edit2: schmeißt auch errors aus und zwar folgende:





    entsprechende zeilen:


    310 if(strcmp(cmd, "/goto", true) == 0)


    315 tmp = strtok(cmdtext, idx);
    316 if(!strlen(tmp))


    322 new giveplayerid = ReturnUser(tmp);


    339 format(string, sizeof(string), "%d ist nicht im Server.", giveplayerid);

    2 Mal editiert, zuletzt von xeroxxx ()

  • Ich sag dazu nur; dcmd. xD
    Unter OnPlayercommandtext

    dcmd(goto,4,cmdtext);

    Weiter unten dann, allerdings in keinem Public!
    dcmd_goto(playerid,params[]) {
    new string[64],
    pID;
    if(sscanf(params, "u",pID)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /goto [ID]");
    }
    if (pID == INVALID_PLAYER_ID){
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    if (pID == playerid){
    return SendClientMessage(playerid,COLOR_RED,"Du kannst dich nicht zu dir selbst porten!");
    }
    new ThePlayer[MAX_PLAYER_NAME],Float:x, Float:y, Float:z;
    GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
    GetPlayerPos(pID, x, y, z);
    SetPlayerPos(playerid,x+2,y,z);
    format(string,sizeof(string),"Du hast dich zu %s teleportiert!",ThePlayer);
    SendClientMessage(playerid,INFO, string);
    return 1;}
    Dazu noch das sscanf Makro und dcmd Makro und dann müsste es gehen :thumbup:

  • ääääh jo,


    1.es gibt nur ein warning von wegen


    Zitat

    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(845) : warning 203: symbol is never used: "dcmd_goto"






    ich habs jetzt ganz unten reingepackt also wo kein public ist..


    2. Es gibt zwar nur ein warning, aber wenn ich z.B. /goto 0 (ein npc von mir) mach, steht da nur unknown command.


    3. ich bräuchte das gleiche auch umgekehrt ---> leute zu mir holen ^^


    edit2 4. Ich bräuchte auch einen befehl /getcar [carid] wenn ich das, goto und gethere hab dann nerv ich euch nie wieder ich versprechs :P


    ich würds ja selber machen nur: Ich checks nich 8|




    danke schon mal^^


    edit ups hab das vergessem was du meintest ich soll einbauen, liefert jetzt 9 errors , 7 hab ich behoben, 2 bekomm ich nich weg







    Zitat


    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(824) : error 017: undefined symbol "sscanf"
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(840) : error 017: undefined symbol "INFO"


    Zeile 824 if(sscanf(params, "u",pID))


    Zeile 840 SendClientMessage(playerid,INFO, string);

    2 Mal editiert, zuletzt von xeroxxx ()

  • Goto ohne errors



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new index, cmd[128];
    cmd = strtok(cmdtext, index);


    if (!strcmp(cmd, "/goto", true))
    {
    new Float:pX,Float:pY,Float:pZ,tmp[128];
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, index);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GREEN, "Hilfe: /goto [ID]");
    SendClientMessage(playerid, COLOR_RED, "FUNKTION: Kann dich zu einem Spieler Porten.");
    return 1;
    }
    new giveplayerid = strval(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetPlayerInterior(playerid,GetPlayerInterior(giveplayerid));
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),GetPlayerInterior(giveplayerid));
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(playerid),pX,pY,pZ+2);
    }
    else
    {
    SetPlayerInterior(playerid,GetPlayerInterior(giveplayerid));
    GetPlayerPos(giveplayerid,pX,pY,pZ);
    SetPlayerPos(playerid,pX,pY,pZ+2);
    }
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(tmp, sizeof(tmp), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, COLOR_RED, tmp);
    }
    }
    else SendClientMessage(playerid, COLOR_RED, "Du bist kein Admin.");
    return 1;
    }


    if (!strcmp(cmd, "/gethere", true))
    {
    new Float:pX,Float:pY,Float:pZ,tmp[128];
    if (IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext, index);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_GREEN, "Hilfe: /gethere [ID]");
    SendClientMessage(playerid, COLOR_RED, "FUNKTION: Kann einen Spieler zu dir Porten.");
    return 1;
    }
    new giveplayerid = strval(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
    if (GetPlayerState(giveplayerid) == PLAYER_STATE_DRIVER)
    {
    SetPlayerInterior(giveplayerid,GetPlayerInterior(playerid));
    LinkVehicleToInterior(GetPlayerVehicleID(giveplayerid),GetPlayerInterior(playerid));
    GetPlayerPos(playerid,pX,pY,pZ);
    SetVehiclePos(GetPlayerVehicleID(giveplayerid),pX+2,pY,pZ+2);
    }
    else
    {
    SetPlayerInterior(giveplayerid,GetPlayerInterior(playerid));
    GetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerPos(giveplayerid,pX+2,pY,pZ+2);
    }
    }
    else if(giveplayerid == INVALID_PLAYER_ID)
    {
    format(tmp, sizeof(tmp), "%d ist nicht im Server.", giveplayerid);
    SendClientMessage(playerid, COLOR_RED, tmp);
    }
    }
    else SendClientMessage(playerid, COLOR_RED, "Du bist kein Admin.");
    return 1;
    }

    Einmal editiert, zuletzt von SkaterDenis ()

  • keine errors ne? :P



    Zitat

    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(319) : error 017: undefined symbol "strtok"
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(319) : error 033: array must be indexed (variable "cmd")
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(335) : error 017: undefined symbol "strtok"
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(335) : error 033: array must be indexed (variable "tmp")
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(318) : warning 203: symbol is never used: "index"


    319 cmd = strtok(cmdtext, index);


    335 tmp = strtok(cmdtext, index);


    318 new index, cmd[128];

  • Kopiere das noch irgendwo ganz unten mit rein... Dan musste es gehen

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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • In meiner Signatur steht der Link zum sscanf Makro das einfach unten ins Script reinstellen. Ersetz INFO mal durch

    Code
    0x33FF33FF

    Dann solltes
    gehen. :thumbup:

  • JA! JAA!! DARAUF HAB ICH GEWARTET!! xD es geht!(skript von skater denis hp deins hab ich nich getestet^^) danke!! jetzt brauch ich noch ein /gethere oder so um leute zu mir zu holen und ein /spawncar oder /getcar was auch immer mit dem ich /spawncar [car-id] autos spawnen kann...


    wenn ich das hab bin ich zufrieden^^

    Einmal editiert, zuletzt von xeroxxx ()

  • Noch bei OnPlayerCommandtext hinzufügen
    dcmd(get,3,commandtext);dcmd(car,3,cmdtext);
    Und dann einfach unter dem anderem dcmd Command.
    dcmd_get(playerid,params[]) {
    new string[64],
    pID;
    if(sscanf(params, "u",pID)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /get [ID]");
    }
    if (pID == INVALID_PLAYER_ID){
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    if (pID == playerid){
    return SendClientMessage(playerid,COLOR_RED,"Du kannst dich nicht zu dir selbst porten!");
    }
    new ThePlayer[MAX_PLAYER_NAME],Float:x, Float:y, Float:z;
    GetPlayerName(pID,ThePlayer,sizeof(ThePlayer));
    GetPlayerPos(playerid, x, y, z);
    SetPlayerPos(pID,x+2,y,z);
    format(string,sizeof(string),"Du hast %s zu dir teleportiert!",ThePlayer);
    SendClientMessage(playerid,INFO, string);
    return 1;}

    Und /car
    dcmd_car(playerid,params[]){new carid; if(sscanf(params, "d",carid)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /car[CarID]");
    }
    if(carid < 400 || carid > 611){
    return SendClientMessage(playerid, COLOR_RED, "ERROR:Falsche AutoId!"); }
    new Float:x, Float:y, Float:z, Float:Angle;
    GetPlayerPos(playerid, x, y , z);GetPlayerFacingAngle(playerid, Angle);CreateVehicle(carid, x, y, z, Angle, 0 , 0);return 1;}



    Car ist ungeteste sollte aber funktionieren.

  • hp....mhmmm...


    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(924) : error 017: undefined symbol "sscanf"
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(927) : warning 217: loose indentation
    E:\SanAndreas\SAMPSERVER\gamemodes\XeroxScript.pwn(930) : warning 202: number of arguments does not match definition



    924 dcmd_car(playerid,params[]){new carid; if(sscanf(params, "d",carid)) {


    927 if(carid < 400 || carid > 611){


    930 GetPlayerPos(playerid, x, y, z);GetPlayerFacingAngle(playerid, Angle);CreateVehicle(carid, x, y, z, Angle, 0 , 0);return 1;}


    ...

  • Diesen sscanf Code bei dir unten ins Script reinstellen. Loose Identation heißt dass der Code nicht richtig eingerückt worden ist.
    Und ersetz mal CreateVehicle hier mit CreateVehicle(carid, x, y, z, Angle, 0 , 0,60) Dann müsstes gehen

  • hey hp, danke für das script. kannst du auch noch ein /stuntcar und ein /arenacar machen und /stuntcar auf interior 14 legen und arenacar auf 15 also dass ich mit /arenacar die autos interior 15 kompatibel sind und die die ich mit /stuntcar spawne interior 14 kompatibel, das wäre dann noch das allerbeste^^

  • dcmd_car(playerid,params[]){new carid; if(sscanf(params, "d",carid)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /car[CarID]");
    }
    if(carid < 400 || carid > 611){
    return SendClientMessage(playerid, COLOR_RED, "ERROR:Falsche AutoID!"); }
    new Float:x, Float:y, Float:z, Float:Angle;
    GetPlayerPos(playerid, x, y , z);GetPlayerFacingAngle(playerid, Angle);CreateVehicle(carid, x, y, z, Angle, 0 , 0, 60);LinkVehicleToInterior(carid,GetPlayerInterior(playerid));return 1;}


    Damit müssteste die fahrzeuge in allen ints spawnen können...