[Frage] Rampen per Taste

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
  • Hey Leute,
    es ist mehr oder weniger eine Frage aber auch zur hälfte ein Scriptwunsch.


    Ihr kennt es sicherlich von anderen Freeroamservern....


    Man drückt eine Taste (bsp. STRG) und einige Meter vor einem erscheint eine Rampe.


    Meine Frage währe wie man soetwas hinbekommt... Es gibt eine bestimmte Funktion bei Samp, wo man Tasten bestimmen konnte... Könnte mir bitte jemand helfen?

  • hm weiß ned obs dir Hilft aber habe hier nen script wo ein auto per taste gestartet wird (weiß ned genau welche taste , weil bei mir hats nicht einwandfrei funktioniert ... naja vieleicht kannste dadraus was machen :
    #include <a_samp>
    new bool:MotorGestartet[MAX_VEHICLES];
    forward StartMotor(playerid);
    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript");
    print("--------------------------------------\n");
    for(new v=0;v<MAX_VEHICLES;v++)
    {
    MotorGestartet[v] = false;
    }
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    if(newstate == PLAYER_STATE_DRIVER)
    {
    if(MotorGestartet[vehicleid] == false)
    {
    TogglePlayerControllable(playerid,false);
    SendClientMessage(playerid,0xFFFFFFFF,"Benutze TAB um zu starten oder /exitcar um auszusteigen!");
    }
    else
    {
    SendClientMessage(playerid,0xFFFFFFFF,"Der Motor war schon an! Schöne Weiterfahrt!");
    }
    }
    return 1;
    }


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    if(strcmp(cmdtext,"/exitcar",true) == 0)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    RemovePlayerFromVehicle(playerid);
    }
    return 1;
    }
    return 0;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_SUBMISSION)
    {
    SetTimerEx("StartMotor",5000,0,"i",playerid);
    GameTextForPlayer(playerid,"~g~ Motor wird gestartet.",6000,1);
    }
    return 1;
    }


    public StartMotor(playerid)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    MotorGestartet[vehicleid] = true;
    TogglePlayerControllable(playerid,true);
    GameTextForPlayer(playerid,"~r~Rrr..~g~ Motor erfolgreich gestartet.",6000,1);
    }

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


    und


    CreateObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ);


    in


    OnPlayerKeyStateChange


    und du kannst eine Rampe ganz einfach vor dem Spieler spawnen. Wenn die Rampe allerdings danach wieder verschwinden soll, musst du noch
    SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);


    und

    DestroyObject(objectid);


    verwenden. Um das richtige Object verschwinden zu lassen, kannst du eine Variable benutzen:
    new Ramp[MAX_PLAYERS];


    und dann in OnPlayerKeyStateChange


    Ramp[playerid] = CreateObject(...);


    und in dem public, der vom Timer aufgerufen wird:


    DestroyObject(Ramp[playerid]);


    So ich denke das sollte reichen, um so etwas zu erstellen

  • forward Ramp(playerid);


    new Ramp[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    Ramp[playerid] = 0;
    }


    public OnPlayerKeyStateChange(playerid,newkeys,oldkeys)
    {
    if(newkeys ... && IsPlayerInAnyVehicle(playerid)) /* Dein Knopf hier rein */
    {
    if(Ramp[playerid] != 0) return 1; /* Wenn er bereits eine Rampe gespawnt hat */
    new
    Float:x,
    Float:y,
    Float:z,
    Float:angle;
    GetPlayerPos(playerid,x,y,z); /* GetVehiclePos sollte genauso funktionieren */
    angle = GetXYInFrontOfPlayer(playerid,x,y,ABSTAND); /* hier dein Abstand zur Rampe */
    Ramp[playerid] = CreateObject(OBJECT, x, y, z - 0.4, 0.0, 0.0, angle); /* Objekt hier rein, mit z bin ich mir nicht sicher, wie hoch die spawnt */
    SetTimerEx("Ramp",2000,0,"d",playerid); /* Das Löschen hier noch */
    }
    }


    public Ramp(playerid)
    {
    if(Ramp[playerid] != 0)
    {
    DestoryObject(Ramp[playerid]);
    Ramp[playerid] = 0;
    }
    }


    GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
    {
    new Float:a;
    GetPlayerPos(playerid, x, y, a);
    GetPlayerFacingAngle(playerid, a);
    if (GetPlayerVehicleID(playerid))
    {
    GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
    }
    x += (distance * floatsin(-a, degrees));
    y += (distance * floatcos(-a, degrees));
    return a; /* Winkel benötigt man , damit die Rampe richtig spawnt */
    }


    Ich habs nicht getestet, bin mir nicht sicher ob die Rampe richtig spawnt (Winkel, Höhe), falls nicht musst du halt noch ein wenig dran arbeiten

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

    Code
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(1192) : error 001: expected token: ";", but found "switch"
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(1209) : warning 225: unreachable code
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(2341) : error 017: undefined symbol "newskeys"
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(2341) : error 029: invalid expression, assumed zero
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(2341) : error 029: invalid expression, assumed zero
    C:\Users\Sun\Desktop\TSS\gamemodes\Stunt.pwn(2341) : fatal error 107: too many error messages on one line

    ;(;(;(




    GER-Clan - Seit 2007 - WIEDER DA!

  • Also ich denke dan so oder o.o



    #include <a_samp>


    // This is a comment
    // uncomment the line below if you want to write a filterscript
    //#define FILTERSCRIPT
    forward Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance);
    forward Float:GetOptimumRampDistance(playerid);
    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    public OnGameModeInit()
    {
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerPrivmsg(playerid, recieverid, text[])
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
    // Do something here
    return 1;
    }
    return 0;
    }


    public OnPlayerInfoChange(playerid)
    {
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys & KEY_ACTION)
    {
    new Float:angle,Float:x,Float:y,Float:z;
    GetPlayerPos(playerid, x, y, z);
    angle = GetXYInFrontOfPlayer(playerid, x, y, GetOptimumRampDistance(playerid));
    angle -= 90.0;
    if (angle < 0.0) angle += 360.0;
    z += 0.5;
    CreateObject(1632, x, y, z - 0.5, 0.0, 0.0, angle);
    }
    return 1;
    }
    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;
    }
    Float:GetOptimumRampDistance(playerid)
    {
    new ping = GetPlayerPing(playerid), Float:dist;
    dist = floatpower(ping, 0.25);
    dist = dist*4.0;
    dist = dist+5.0;
    return dist;
    }

  • Okay Okay Okay.... :D


    Es hat schon mit Fox's PWN geklappt... Das mit der falschen ID bei Fox ist meine Schuld, ich hatte ihm mein unverständliches Pawn-Zeugs geschickt wo ich einfach mal zum Test ne ID reingeschrieben hab... ^^


    Okay - Ich danke euch und close das eben mal ;)