Beiträge von luckyguy

    Ganz oben bei den andern "new"s:
    new Zelt[MAX_PLAYERS];


    Unter OnPlayerCommandText:
    if(!strcmp("/zelt aufstellen",cmdtext,true))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 433)
    {
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    Zelt[playerid] = CreateObject(3626,Pos[0]+8,Pos[1]+8,Pos[2],0,0,0);
    }
    else
    {
    return SendClientMessage(playerid,FARBE,"Du bist nicht in einem 'Fahrzeugname'");
    }
    }
    else
    {
    return SendClientMessage(playerid,FARBE,"Du bist in keinem Fahrzeug!");
    }
    return 1;
    }


    if(!strcmp("/zelt abbauen",cmdtext,true))
    {
    DestroyObject(Zelt[playerid]);
    SendClientMessage(playerid,FARBE,"Dein Zelt wurde erfolgreich abgebaut.");
    return 1;
    }


    MFG
    luckyguy

    Das sollte glaub lieber in Scriptwünsche rein... naja back to topic:



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp("/createcp", cmdtext, true) == 0)
    {
    new Float:x,Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    SetPlayerCheckpoint(i,x,y,z,5);
    }
    return 1;
    }
    }


    Wenn du möchtest dass der Radius vom Spieler bestimmt wird, dann diese Version:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new tmp[256],cmd[256],idx,radius;
    cmd = strtok(cmdtext,idx);

    if(!strcmp("/createcp",cmd,true))
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    return SendClientMessage(playerid,DEINEFARBE,"Benutze /createcp [Radius]");
    }
    radius = strval(tmp);
    if(radius < 1 || radius > 20)
    {
    return SendClientMessage(playerid,DEINEFARBE,"Du kannst nur Radius zwischen 1 und 20 machen!");
    }
    else
    {
    new Float:x,Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    SetPlayerCheckpoint(i,x,y,z,radius);
    }
    }
    return 1;
    }
    return 0;
    }


    Das ganze wurde von mir noch nicht vorher getestet!! Es könnten Fehler auftreten!!

    oben im Script bei den andern #define:
    #define SendClientMessage SCM



    /tow
    if(!strcmp("/tow",cmdtext,true))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
    {
    new Float:pX,Float:pY,Float:pZ;
    GetPlayerPos(playerid,pX,pY,pZ);
    new Float:vX,Float:vY,Float:vZ;
    new Found=0;
    new vid=0;
    while((vid<MAX_VEHICLES)&&(!Found))
    {
    vid++;
    GetVehiclePos(vid,vX,vY,vZ);
    if((floatabs(pX-vX)<7.0)&&(floatabs(pY-vY)<7.0)&&(floatabs(pZ-vZ)<7.0)&&(vid!=GetPlayerVehicleID(playerid)))
    {
    Found=1;
    if(IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
    {
    return DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
    }
    AttachTrailerToVehicle(vid,GetPlayerVehicleID(playerid));
    SendClientMessage(playerid,0xFFFF00AA,"Fahrzeug am Hänger!");
    return 1;
    }
    }
    if(!Found)
    {
    return SendClientMessage(playerid,GREY,"Es ist kein Fahrzeug in der Nähe");
    }
    }
    else
    {
    return SCM(playerid,GREY,"Du bist in keinem Abschleppfahrzeug!");
    }
    return 1;
    }
    /towed
    else if(!strcmp("/abhängen",cmdtext,true))
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 525)
    {
    DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
    SCM(playerid,GREEN,"Fahrzeug abgehängt!");
    return 1;
    }
    else
    {
    return SCM(playerid,GREY,"Du bist in keinem Fahrzeug, wo man was abhängen kann!");
    }
    }
    else
    {
    return SCM(playerid,GREY,"Du bist in keinem Fahrzeug!");
    }
    }


    MFG luckyguy

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_KICK)
    {
    if(response) // wenn er auf OK oder sowas klickt, also den Linken Knopf
    {
    kickid = strval(inputtext);
    ShowPlayerDialog(playerid,DIALOG_GRUND,DIALOG_STYLE_INPUT,"Grund","Nenne den Grund :","Ok","Abbrechen");
    }
    else // wenn er nicht auf den Linken Knopf drückt, sprich das Rechte. (In diesem Fall "Abbrechen")
    {
    SendClientMessage(playerid,/*FARBE*/,"Du hast abgebrochen....");
    }
    }
    if(dialogid == DIALOG_BAN)
    {
    if(response)
    {
    banid = strval(inputtext);
    ShowPlayerDialog(playerid,DIALOG_GRUND2,DIALOG_STYLE_INPUT,"Grund","Nenne den Grund :","Ok","Abbrechen");
    }
    else
    {
    SendClientMessage(playerid,/*FARBE*/,"Du hast abgebrochen....");
    }
    }
    if(dialogid == DIALOG_GRUND)
    {
    if(response)
    {
    new grund[64],kicktext[50];
    strmid(grund, inputtext, 0, strlen(inputtext), 255);
    format(kicktext,128,"Du wurdest von einem Admin gekickt!\nGrund : %s",grund);
    ShowPlayerDialog(kickid,DIALOG_KICKAUSGABE,DIALOG_STYLE_MSGBOX,"Kick",kicktext,"Ok","Abbrechen");
    Kick(kickid);
    }
    else
    {
    SendClientMessage(playerid,/*FARBE*/,"Du hast abgebrochen....");
    }
    }
    if(dialogid == DIALOG_GRUND2)
    {
    if(response)
    {
    new grund[64],bantext[50];
    strmid(grund, inputtext, 0, strlen(inputtext), 255);
    format(bantext,128,"Du wurdest von einem Admin gebannt!\nGrund : %s",grund);
    ShowPlayerDialog(banid,DIALOG_BANAUSGABE,DIALOG_STYLE_MSGBOX,"Ban",bantext,"Ok","Abbrechen");
    Ban(banid);
    }
    else
    {
    SendClientMessage(playerid,/*FARBE*/,"Du hast abgebrochen....");
    }
    }
    return 1;
    }


    So sollte es gehen.... hoffe konnte helfen.


    MFG luckyguy

    Soweit ich weiss, einfach anstatt AddStaticVehicle AddStaticVehicleEx machen.


    Also so ist das gemeint:
    AddStaticVehicle(Modelid,X-Achse,Y-Achse,Z-Achse,Ausrichtung(Facing Angle),Farbe 1, Farbe 2);
    AddStaticVehicleEx(Modelid,X-Achse,Y-Achse,Z-Achse,Ausrichtung(Facing Angle),Farbe 1, Farbe 2, Respawn Zeit);


    Bei Respawnzeit einfach -1 einstellen.


    Beispiel:
    AddStaticVehicle(487,-1371.2964,-515.7624,14.3480,261.6539,0,0);
    AddStaticVehicleEx(487,-1371.2964,-515.7624,14.3480,261.6539,0,0,-1);


    hoffe konnte helfen!


    MFG luckyguy

    // Es fängt bei 0 an und dann ist es in diesem Fall 5+1 = 6, also MAX_TRUCKS 6
    Truck[0] = AddStaticVehicleEx(515, 2116.2180175781, -2130.5354003906, 14.786533355713, 270.27026367188,1,1,-1);
    Truck[1] = AddStaticVehicleEx(515, 2116.2514648438, -2137.1696777344, 14.786533355713, 270.26916503906,1,1,-1);
    Truck[2] = AddStaticVehicleEx(515, 2115.7746582031, -2144.8937988281, 14.786533355713, 270.26916503906,1,1,-1);
    Truck[3] = AddStaticVehicleEx(515, 2154.3937988281, -2141.2763671875, 14.700595855713, 49.848876953125,1,1,-1);
    Truck[4] = AddStaticVehicleEx(515, 2150.6372070313, -2145.8793945313, 14.700595855713, 49.844970703125,1,1,-1);
    Truck[5] = AddStaticVehicleEx(515, 2145.048828125, -2151.0864257813, 14.700595855713, 9.9649658203125,1,1,-1);

    und ich würde es nacheinandermachen, also das #define MAX_TRUCKS und new Truck nicht voneinander trennen:


    #define MAX_TRUCKS 6
    new Truck[MAX_TRUCKS];


    hoffe es geht jetzt


    MFG luckyguy

    leider kann man bei OnPlayerEnterCheckpoint nicht etwas wie
    Checkpointid == XX
    machen wie bei OnPlayerDialogResponse beispielsweise
    dialogid == XX


    Da musst du es folgendermassen machen:
    ganz oben bei den andern "new"s machst du folgendes:
    Bla[MAX_PLAYERS];


    Bei OnPlayerConnect:
    public OnPlayerConnect(playerid)
    {
    Bla[playerid] = 0;
    }


    Danach wenn du beim 1. Checkpoint bist:
    SetPlayerCheckpoint(playerid, 1813.4314, -2072.8247, 13.2459, 5.0); //1. CHECKPOINT
    Bla[playerid] = 1;


    Und nun bei OnPlayerEnterCheckpoint:
    public OnPlayerEnterCheckpoint(playerid)
    {
    if(Bla[playerid] == 1)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 2056.1392, -1910.2928, 13.2740, 5.0); // 2. CHECKPOINT
    SendClientMessage(playerid,WEIS,"So jetzt geht die Tour los.");
    Bla[playerid] = 2;
    return 1;
    }
    if(Bla[playerid] == 2)
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, x,y,z, 5.0); // 3. CHECKPOINT
    Bla[playerid] = 3;
    return 1;
    }
    if(Bla[playerid] == 3)
    {
    // und so weiter
    }
    return 1;
    }

    Dass kommt auch nicht unter OnPlayerEnterVehicle, sondern OnPlayerStateChange..
    if(IstTruck(GetPlayerVehicleID(playerid)))
    {
    new string[50];
    format(string, sizeof(string), "~g~ 1500$ mieten ~n~ ~r~ /automieten");
    GameTextForPlayer(playerid, string, 15000, 3);
    ToggePlayerControllable(playerid,0);
    }


    Zitat

    Jetz zu den bezeihneten Cars :


    Ichj hjätte halt gerne das nicht bei jedem Truck das kommt sondern nur in
    dem den ich danjn z..B. Truck1 benenne...

    Das wird hier gemacht:

    Aber wenn du z. B. i-wo es so verwendest:
    if(IsPlayerInAnyVehicle(playerid) && IstTruck(GetPlayerVehicleID(playerid)))
    dann fragst du ab, ob er in einer der bei OnFilterScriptInit definierten Trucks ist.


    Und der Befehl /exit:
    if(!strcmp("/exit",cmdtext,true))
    {
    if(IsPlayerInAnyVehicle(playerid) && IstTruck(GetPlayerVehicleID(playerid)))
    {
    ToggelPlayerControllable(playerid,1);
    RemovePlayerFromVehicle(playerid);
    return 1;
    }
    else
    {
    return SendClientMessage(playerid,0x00FF00AA,"Du bist nicht in einem Fahrzeug, wo man diesen Befehl brauchen kann!");
    }
    }


    hoffe konnte helfen


    MFG luckyguy

    Also gar nicht so schwer, würde ich mal jetzt behaupten.


    Oben im Script wo die andern "new"s sind, machst du folgendes:
    #define MAX_TRUCKS 20 // Die Zahl 20 ändern in die Anzahl Trucks die du hast.
    new Truck[MAX_TRUCKS];


    Und bei den forwards folgendes:
    forward IstTruck(carid);


    Dann unter OnFilterScriptInit:
    public OnFilterScriptInit()
    {
    Truck[0] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    Truck[1] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    Truck[2] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    Truck[3] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    Truck[4] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    Truck[5] = AddStaticVehicleEx(Model,x,y,z,Facing Angle,Farbe 1,Farbe 2,-1);
    // und so weiter ...
    }


    Danach unter OnPlayerStateChange:
    if(IstTruck(GetPlayerVehicleID(playerid)))
    {
    new string[50];
    format(string, sizeof(string), "~g~ 1500$ mieten ~n~ ~r~ /automieten");
    GameTextForPlayer(playerid, string, 15000, 3);
    }


    Und nun zum neuen Public/Callback.


    Ganz unten im Script kommt dann dieser Callback für die Trucks:
    public IstTruck(carid)
    {
    for(new i = 0; i<sizeof(Truck); i++)
    {
    if(carid == Truck[i]) { return 1; }
    }
    return 0;
    }


    hoffe konnte helfen.


    MFG luckyguy

    Füg das folgende ganz unten in deinem Script ein, dann sollte 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;
    }


    hoffe konnte helfen.


    MFG luckyguy

    ^^ jeder macht Fehler, hab da wohl ein ";" übersehen

    Genau, einfach die GameTexte unter

    Zitat

    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)

    einfügen, aber Achtung, wenn du z. B. mehrere Sachen unter dieser Abfrage machen willst, dann aufgepasst:
    dann nicht so:
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)
    {
    return SendClientMessage(playerid,FARBE,"blalba");
    GameTextForPlayer(playerid,"blablabla",Zeit,Style);
    }
    sondern:
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)
    {
    SendClientMessage(playerid,FARBE,"blalba");
    GameTextForPlayer(playerid,"blablabla",Zeit,Style);
    return 1;
    }


    Also in jedem Fahrzeug in dem du einsteigst und die ModelID 515 ist, wird diese Meldung geschickt.

    Zitat

    muss das es sich nicht mit dem freezen vom andern cmd verträgt??

    Das kapier ich nicht, was du damit meinst bzw. sagen willst ^^


    MFG luckyguy


    P. S. hoffe konnte helfen ^^

    Zitat

    if (strcmp("/goto", cmdtext, true, 6) == 0) {

    durch folgendes ersetzten:
    if(!strcmp("/goto",cmd,true))
    und unter dem Callback OnPlayerCommandText folgendes noch:
    new cmd[256],idx;
    cmd = strtok(cmdtext,idx);


    Und das sollte vorerst dein Problem beheben, doch ich würde den Befehl etwas umschreiben, etwa so:
    if(!strcmp("/goto",cmd,true))
    {
    new tmp[256], OtherID;
    if(IsPlayerAdmin(playerid))
    {
    tmp = strtok(cmdtext,idx);
    if(!strlen(tmp))
    {
    return SendClientMessage(playerid, 0x55FF00FF, "Verwendung: /goto [id]");
    }
    OtherID = ReturnUser(tmp); // Falls "OtherID = ReturnUser(tmp);" ein Error gibt, einfach in "OtherID = strval(tmp);" ändern
    if(IsPlayerConnected(OtherID) || IsPlayerNPC(OtherID))
    {
    new Float: x, Float: y, Float: z;
    GetPlayerPos(OtherID,x,y,z);
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    SetVehiclePos(veh, x+3, y+3, z+0.5);
    PutPlayerInVehicle(playerid, veh, 0); // eigentlich nicht nötig, doch nur damit nicht das auto sich alleine portet, kann man auch weglassen ;)
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    else
    {
    SetPlayerPos(playerid, x+3, y+3, z+0.5);
    SendClientMessage(playerid, 0x55FF00FF, "Du hast dich teleportiert.");
    return 1;
    }
    }
    else
    {
    return SendClientMessage(playerid,0x55FF00FF,"Der angegebene Spieler ist nicht online!");
    }
    }
    else
    {
    return SendClientMessage(playerid, 0xFF6300FF, "Du bist kein Administrator!");
    }
    }


    hoffe konnte helfen.


    MFG luckyguy

    Ich würde es generell nicht unter dem Callback OnPlayerEnterVehicle sondern unter OnPlayerStateChange machen.


    Dann müsstest du einfach alles unter OnPlayerEnterVehicle entfernen und das folgende unter dem Callback/public OnPlayerStateChange machen:


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate==PLAYER_STATE_DRIVER) // überprüft, ob er gerade als Fahrer im Fahzeug ist bzw. eingestiegen ist.
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 515) // überprüfe, ob er in einem Fahrzeug mit Modell ID 515 sitzt
    {
    return SendClientMessage(playerid,0x00FF00AA," Du bist in einem Truck...")
    }
    }
    return 1;
    }


    hoffe konnte helfen.


    MFG luckyguy