CreateStuntTeleport geht ned..

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
  • Hi Leute.


    Da an manchen Plätzen die Objekte erst sichtbar werden, wenn
    man aus dem Auto steigt, wollte ich folgende Funktion schreiben:


    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    new Float:pX,Float:pY,Float:pZ;
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),Float:X,Float:Y,Float:Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Float:Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }


    SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerState(playerid);
    GetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerPos(playerid,pX,pY,pZ+1.25);
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);
    } return 1;
    }

    public PutInCar(playerid)
    {
    PutPlayerInVehicle(playerid,WhatCar[playerid],MyState[playerid]);
    UnFreezePlayer(playerid);
    KillTimer(PutInCarTimer[playerid]);
    return 1;
    }


    Folgendes passiert:
    1. Ich selbst werde nicht teleportiert, sondern
    nur hoch gesetzt und gefreezed. Dann nach 1 Sek
    spring die Kamera zu meinem Auto. Ich sehe mich
    nicht im Auto sitzen und drücke ich enter kommt:



    Hoffe ihr könnt mir helfen. ;)

  • Hier bitte, habe kommentiert was falsch ist.


    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    new Float:pX,Float:pY,Float:pZ;
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),Float:X,Float:Y,Float:Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Float:Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }


    SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerVehicleSeat(playerid); //Und nicht State, da PutPlayerInVehicle den Sitz verlang, nicht den STATE
    GetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerPos(playerid,pX,pY,pZ+1.25);
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);
    } return 1;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Hier bitte, ich habe nun den Code gründlich durchgenommen und dir alles kommentiert. Viel Spaß.


    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    //Ok, der brutalste Fehler überhaupt und ich selber nicht weiß was bei dem Passiert.
    //Jedoch wird bei Verwendung der Float´s das Float später weggelassen.
    //Auch wenn es richtig sein könnte, bei manchen Verwendungen kann es zu Fehlern entstehen.
    //Also nur bei Definitionen der Float, ansonsten weg damit!
    //Ich will auch dir nicht hier in einem Roman schreiben, wie diese "Tags" verwendet werden. Ist nur mein Rat ^^.
    SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else
    {
    //Dieser folgende Code bedeutet also, wenn Spieler Passagier ist, wird er nur zur Position geportet, aber das Auto nicht?
    //Du kannst also das GANZE else weglöschen und die Abfrage PLAYER_STATE_DRIVER. Das halt nur der obige Code, wo ich das
    //mit dem Float: angemerkt habe unter "else if(withcar)" steht, ansonsten keine Abfrage.
    //Natürlich kannst du es auch so lassen, wird aber Konseqzenzen erzeugen später.
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }


    //SetCameraBehindPlayer(playerid); //Das Gehört weg, sinnlos und blockiert nur.

    //Es kann auch sein, dass dieses Problem durch dieses SetCameraBehindPlayer entstand.
    //Habe es jedoch noch nie selber probiert.

    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerVehicleSeat(playerid);
    ClearAnimations(playerid, 1); //Erzeugt das gleiche wie SetPlayerPos, jedoch erspart es sich die Zeilen ^^.
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);}
    return 1;
    }

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Also das SetCameraBehindPlayer ist unnötig, aber wie du meinst.


    Nehme den Code nun so:
    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,X,Y,Z);
    SetPlayerFacingAngle(playerid,Angle);
    InCar[playerid] = 0;
    }
    //SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    if(IsPlayerInAnyVehicle(playerid)) {
    FreezePlayer(playerid);
    MyState[playerid] = GetPlayerVehicleSeat(playerid);
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);}
    return 1;
    }


    Füge nun im public PutInCar vor dem PutPlayerInVehicle das ClearAnimations(playerid, 1); davor.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Okay ich versuchs, hab übrigends den Code verbessert:


    stock CreateStuntTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),Float:X,Float:Y,Float:Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Float:Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    MySeat[playerid] = GetPlayerVehicleSeat(playerid);
    ClearAnimations(playerid,1);
    FreezePlayer(playerid);
    InCar[playerid] = 0;
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);
    }
    else
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }


    SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    return 1;
    }


    Also ich probier mal schnell und editier dann den Post =D


    Lg

  • Du hast in deinem neuen Code noch immer ClearAnimations drinnen ^^ Was ich bei meinem nichtmehr hatte.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Das muss drin sein sonst wär die ganze Funktion für die Tonne xD
    Es geht ja darum den Spieler zuerst mit Auto zu den Coords zu schicken,
    dann aus dem Auto, aber ned zu anderen Coords zu schicken und dann nach
    1 Sek wieder ins Auto zu setzen, damit sich während der Zeit die Objekte
    bilden können. P=


    Edit: Ach so xD sry ich hatte echtn Brett vorm Kopf ^^
    PS: Neuer Code xD


    stock CreateTeleport(playerid,Float:X,Float:Y,Float:Z,Float:Angle,bool:WithCar,int,vir,price,bool:StuntPlace=false)
    {
    if(IsPlayerInAnyMinigame(playerid) == 1)
    {
    iSendClientMessage(playerid,COLOR_ERROR," You're still in a minigame. First type /exit."," Du bist schon in einem Minigame, mach erst /beenden.");
    return 0;
    }
    if(GetPlayerMoney(playerid) < price)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"You haven't enough money!","Du hast zu wenig Geld!");
    return 0;
    }
    else if(!IsValidTeleVeh(GetPlayerVehicleID(playerid)) && WithCar)
    {
    iSendClientMessage(playerid,COLOR_ERROR,"This isn't a teleport valid vehicle!","Dieses Fahrzeug ist nicht zum Teleport geeignet!");
    return 0;
    }
    else if(WithCar)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    SetVehiclePos(GetPlayerVehicleID(playerid),Float:X,Float:Y,Float:Z);
    SetVehicleZAngle(GetPlayerVehicleID(playerid),Float:Angle);
    LinkVehicleToInterior(GetPlayerVehicleID(playerid),int);
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid),vir);
    if(StuntPlace)
    {
    MySeat[playerid] = GetPlayerVehicleSeat(playerid);
    FreezePlayer(playerid);
    InCar[playerid] = 0;
    KillTimer(PutInCarTimer[playerid]);
    PutInCarTimer[playerid] = SetTimerEx("PutInCar",1*1000,0,"d",playerid);
    }
    }
    else
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }
    }
    else if(!WithCar)
    {
    SetPlayerPos(playerid,Float:X,Float:Y,Float:Z);
    SetPlayerFacingAngle(playerid,Float:Angle);
    InCar[playerid] = 0;
    }


    SetCameraBehindPlayer(playerid);
    GivePlayerMoney(playerid,-price);
    SetPlayerInterior(playerid,int);
    SetPlayerVirtualWorld(playerid,vir);
    PlayerPlaySound(playerid,1058,0,0,0);

    return 1;
    }


    Lg Alex

    Einmal editiert, zuletzt von Awesome™ ()

  • Zitat

    Füge nun im public PutInCar vor dem PutPlayerInVehicle das ClearAnimations(playerid, 1); davor.

    Warum hab ich das wohl geschrieben vorher.

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

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