Rampe spawnen

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
  • Hoi,


    ich hab folgende Frage: Wie kann ich, wenn ich z.B. [STRG] drücke, eine Rampe Spawnen. Also besser gesagt, wenn JEMAND [STRG] in einem FZ Drückt, erscheint vor ihm eine Rampe. Diese soll nach etwa 5 Sekunden wieder verschwinden.


    Hat jemand eine Ahnung?




    GER-Clan - Seit 2007 - WIEDER DA!

  • Ich weiß, dass es geht, weil ich es schonmla auf einem Server selbst getestet habe.


    Ich weiß aber nicht wie's geht.


    Schließe mich der Frage an, wär mal interessant zu wissen. ^^


    Bitte keine Scriptanfragen via ICQ!


    _________________________________________________________________

  • Vielleicht gehts:
    #include <a_samp>


    new keydown[MAX_PLAYERS] = {false, ...};
    new rampid[MAX_PLAYERS] = {-1, ...};
    forward Keys();
    forward RemoveRamp(playerid);
    forward Float:GetOptimumRampDistance(playerid);
    forward Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance);


    new ramptypes[] = {
    1503, // curvy normal one
    1660, // concrete one with pipes
    1245, // plank of wood against a box
    1631, // water ramp with rocks
    1632, // normal water ramp
    1655, // wide water ramp
    };


    new playerramptypes[MAX_PLAYERS] = {0, ...};


    public OnFilterScriptInit()
    {
    SetTimer("Keys", 100, 1);
    return 1;
    }


    public Keys()
    {
    new keys, updown, leftright, playerid;
    new Float:x, Float:y, Float:z, Float:angle;
    for (playerid = 0; playerid < MAX_PLAYERS; playerid++) {
    if (IsPlayerConnected(playerid)) {
    GetPlayerKeys(playerid, keys, updown, leftright);
    if (keys & KEY_ACTION && IsPlayerInAnyVehicle(playerid)) {
    if (!keydown[playerid]) {
    keydown[playerid] = true;
    if (rampid[playerid] == -1) {
    GetPlayerPos(playerid, x, y, z);
    angle = GetXYInFrontOfPlayer(playerid, x, y, GetOptimumRampDistance(playerid));
    switch (playerramptypes[playerid]) {
    case 2:
    {
    angle -= 90.0;
    if (angle < 0.0) angle += 360.0;
    z += 0.5;
    }
    case 1:
    {
    z -= 0.5;
    }
    }
    rampid[playerid] = CreateObject(ramptypes[playerramptypes[playerid]], x, y, z - 0.5, 0.0, 0.0, angle);
    SetTimerEx("RemoveRamp", 2000, 0, "d", playerid);
    }
    }
    } else keydown[playerid] = false;
    }
    }
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/setramp ", cmdtext, true, 9) == 0)
    {
    new ramp = strval(cmdtext[9]);
    if (ramp < 0 || ramp >= sizeof(ramptypes)) {
    SendClientMessage(playerid, 0xFFFFFFAA, "Invalid ramp ID.");
    } else {
    playerramptypes[playerid] = ramp;
    }
    return 1;
    }
    return 0;
    }


    public RemoveRamp(playerid)
    {
    if (rampid[playerid] != -1) {
    DestroyObject(rampid[playerid]);
    rampid[playerid] = -1;
    }
    }


    public OnFilterScriptExit()
    {
    for (new i=0; i<MAX_PLAYERS; i++)
    {
    if (rampid[i] != -1) DestroyObject(rampid[i]);
    }
    }


    Float:GetOptimumRampDistance(playerid)
    {
    new ping = GetPlayerPing(playerid), Float:dist;
    dist = floatpower(ping, 0.25);
    dist = dist*4.0;
    dist = dist+5.0;
    return dist;
    }


    Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
    {
    new Float:a;
    GetPlayerPos(playerid, x, y, a);
    if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
    else GetPlayerFacingAngle(playerid, a);
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    return a;
    }


    Stammt hier her


    EDIT: habs aber selber noch nicht getestet