OnPlayerEnterVehicle funktioniert nicht!

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


    kommen wir direkt zur Sache, ich habe einen Script geschrieben der bewirken soll, dass sobald ich in einen Zug einsteige ich ich meinen Interior geportet werde und wenn ich wieder aussteige ich wieder zum Zug geportet werde. Allerdings habe ich schon Probleme damit überhaupt in meinen Zug Interior zu kommen. Den Script kann ich compilen und das ohen große Probleme aber sobald ich in den Zug einsteige setzt sich mein Charakter einfach in den Zug und ich kann ihm zusehen wie er fährt. Der Script ist sehr einfach deswegen wundert es mich das gar nichts passiert. Der Script sieht im moment so aus
    #include <a_samp>
    #include <dini>
    #include <dudb>
    #pragma unused ret_memcpy


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" EnterTrain");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(GetVehicleModel(vehicleid) == 538)
    if(GetPlayerState(playerid) == PLAYER_STATE_PASSENGER)
    {
    SetPlayerVirtualWorld(playerid,18);
    SetPlayerPos(playerid,-83.599998474121,18.39999961853,973.09997558594);
    return 1;
    }
    return 0;
    }


    Ich hoffe mir kann jemand weiterhelfen.


    MFG frozenguy

  • Es passiert aus einem einfachen Grund nix:


    Du überprüfst, ob der Spielerstate == PLAYER_STATE_PASSENGER ist. Da OnPlayerEnterVehicle aber aufgerufen wird, lange bevor der Spieler den State wechselt wird die IF Abfrage verneint und nix passiert.

  • Ja stimmt:
    mach das am besten bei "OnPlayerStateChange()" rein
    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if(GetVehicleModel(vehicleid) == 538)
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    SetPlayerInterior(playerid,18);
    SetPlayerPos(playerid,-83.599998474121,18.39999961853,973.09997558594);
    return 1;
    }
    return 0;
    }

  • Wenn ich das ganze wie red13 mache, dann bekomme ich eine Fehlermeldung welche besagt

    Zitat

    C:\Users\user\Desktop\Server\filterscripts\EnterTrain.pwn(21) : error 017: undefined symbol "vehicleid"

    Und wenn ich dann die vehicleid definiere also so
    #include <a_samp>
    #include <dini>
    #include <dudb>
    #pragma unused ret_memcpy


    new vehicleid;


    public OnFilterScriptInit()
    {
    vehicleid = GetPlayerVehicleID(playerid);
    print("\n--------------------------------------");
    print(" EnterTrain");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if(GetVehicleModel(vehicleid) == 538)
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    SetPlayerInterior(playerid,18);
    SetPlayerPos(playerid,-83.599998474121,18.39999961853,973.09997558594);
    return 1;
    }
    return 0;
    }


    komt direkt der nächste error welcher besagt

    Zitat

    C:\Users\user\Desktop\Server\filterscripts\EnterTrain.pwn(22) : error 017: undefined symbol "playerid"


    Was habe ich falsch gemacht ?( .

  • Du erstellst eine neue Variable, ohne drüber nachzudenken, wofür sie gut ist und wie du sie initialisierst. GetPlayerVehicleID im OnPlayerStateChange-Callback wäre das gewesen, was du benutzen musst. ;)


    Darüber nachgedacht habe ich, da ich mich aber erst seit einer Stunde mit SAMP scripting beschäftige und ich das ganze Scripting System so gut wie gar nicht verstehe bringt auch darüber nachdenken nicht viel. Achja compilen kann ich, passieren tut leider nichts.

  • Unter OnPlayerStateChange



    new vehicleid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehicleid) == 538)
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    SetPlayerInterior(playerid,18);
    SetPlayerPos(playerid,-83.599998474121,18.39999961853,973.09997558594);
    return 1;
    }
    return 0;
    }


    /edit
    kleiner fehler^^

  • new vehicleid = GetPlayerVehicleID(playerid);
    if(GetVehicleModel(vehicleid) == 538)
    {
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    SetPlayerInterior(playerid,18);
    SetPlayerPos(playerid,-83.599998474121,18.39999961853,973.09997558594);
    return 1;
    }
    return 0;
    }


    So sollte es gehen, Deadwalker hatte eine { vergessen, hoffe damit geht es nun ^^ oder ist glaube falsch ka xD

  • Ne eigentlich nicht, er wird dann nur teleportiert, wenn er an der Fahrzeugid 538 steht, das ist eigentlich völlig egal!

  • Naja der Script funktioniert nicht, ich habe den Script auch mal über den Turismo laufen lassen, aber da passiert genauso wenig. Ich habe auch mal den Shamal Script versucht meinen bedürfnissen anzupassen, allerdings mit mäßigem Erfolg. Vielleicht bekommt das jemand anders hin ich poste den Script einfach mal, kann ja nicht schaden.
     #include <a_samp>


    #define gruen 0x05FF00FF
    #define rot 0xE1000086



    // Script by [GFSVB]RedDragon
    // Es steht dir frei das Script zu verändern, aber lass bitte die Credits da ;)


    new ShamalID[MAX_PLAYERS];
    new ImShamalInterior[MAX_PLAYERS];
    new Kabinentuer;


    new AntiShamalSpam[MAX_PLAYERS];


    public OnFilterScriptInit()
    {


    for(new i = 0; i < MAX_PLAYERS; i ++)
    {
    ImShamalInterior[i] = 0;
    ShamalID[i] = -1;
    }
    print("\n+-----------------------------------+");
    print("| Shamalscript von [GFSVB]RedDragon |");
    print("+-------------GELADEN---------------+\n");
    Kabinentuer = CreateObject(2944, 2.4775,34.4167,1200.0038,0,0,271.69067382813);
    return 1;
    }


    public OnFilterScriptExit()
    {
    DestroyObject(Kabinentuer);
    return 1;
    }




    public OnPlayerConnect(playerid)
    {


    ImShamalInterior[playerid] = 0;
    ShamalID[playerid] = -1;
    return 1;
    }




    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if (ispassenger)
    {
    if (GetVehicleModel(vehicleid) == 519)
    {
    ShamalID[playerid] = vehicleid;
    SetPlayerVirtualWorld(playerid,1000+ShamalID[playerid]);
    SetPlayerPos(playerid,2.7273,23.1817,1199.5938);
    SetPlayerFacingAngle(playerid,90);
    SetCameraBehindPlayer(playerid);
    SetPlayerInterior(playerid,1);
    ImShamalInterior[playerid] = 1;


    AntiShamalSpam[playerid] = 0;
    SendClientMessage(playerid,gruen,">> Drücke am Ausgang Enter oder F, um wieder auszusteigen!");
    }


    }
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if (newkeys == 16)
    {
    if(ImShamalInterior[playerid] == 1)
    {
    new Float:X,Float:Y,Float:Z,Float:A;
    GetPlayerPos(playerid,X,Y,Z);
    if(X >= 3.1957 && Y <= 24.0543)
    {
    GetVehiclePos(ShamalID[playerid], X, Y, Z);
    GetVehicleZAngle(ShamalID[playerid], A);
    X += (2 * floatsin(-A, degrees));
    Y += (2 * floatcos(-A, degrees));
    SetPlayerPos(playerid, X, Y, Z);
    X += (2 * floatsin(-(A-45.0), degrees));
    Y += (2 * floatcos(-(A-45.0), degrees));
    SetPlayerFacingAngle(playerid, A+90);
    SetPlayerInterior(playerid,0);
    ImShamalInterior[playerid] = 0;
    SetPlayerVirtualWorld(playerid,0);
    ImShamalInterior[playerid] = 0;
    ShamalID[playerid] = -1;
    SetCameraBehindPlayer(playerid);
    }


    else
    {
    if(AntiShamalSpam[playerid] == 0)
    {
    SendClientMessage(playerid,rot,">> Begib' dich erst zum Ausgang des Shamals.");
    AntiShamalSpam[playerid] = 1;
    }


    }
    }


    }
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(ShamalID[i] == vehicleid && ImShamalInterior[i] == 1)
    {
    CreateExplosion(2.7273,23.1817,1199.5938,0,10);
    SetPlayerHealth(i,0);
    SendClientMessage(i,rot,">> Der Pilot hat das Flugzeug hochgejagt.");
    ImShamalInterior[i] = 0;
    ShamalID[i] = -1;
    SetPlayerVirtualWorld(i,0);
    }
    }
    return 1;
    }


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


    public OnPlayerDeath(playerid, killerid, reason)
    {
    ImShamalInterior[playerid] = 0;
    ShamalID[playerid] = -1;
    return 1;
    }