Cars auf Beweglichen Objecten

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
  • wie mache ich das man helis auf heli platformen macht das sich aber dann die plattformen bewegen
    so weit so gut aber jetzt wenn ich sie bewege /helis dann fallen die helis runetr

  • Meinst du wie im Single Player den Magneten oder ein Objekt an den Helicopter ?
    Versteh dich nicht ganz aber wenn du es wie im SinglePlayer haben willst
    Du könntest es so machen...


    Du überprüfst ob jemand im Heli sitzt und nutzt die AttachObjectToPlayer Funktion
    Hab hier die Heliposition nicht extra definiert, musst du einfügen...



    #define Max_Helicopters 2
    #define DistanceHeliPlayer 3


    forward AttachObjectToDefinedVehicle(player);


    enum HelicopterAttach
    {
    Attachveh,
    Float: Offset_X,
    Float: Offset_Y,
    Float: Offset_Z,
    Float: Rotation_X,
    Float: Rotation_Y,
    Float: Rotation_Z
    }
    new
    Helicoptercfg[Max_Helicopters][HelicopterAttach];


    //Unter Ongamemodeinit
    for(i = 0; i < sizeof(Max_Helicopters); i++) {
    Helicoptercfg[i][Attachveh] = CreateVehicle(/*Dein Helicopter*/, Helipos_X, Helipos_Y,Helipos_Z, Helirotation, Farbe1, Farbe2, false); Helipos[3]++: /*Eine Y-Coordinate daneben spawnen*/ }


    public AttachObjectToDefinedVehicle(player)
    for(i = 0; i < sizeof(Max_Helicopters); i++) {
    if(IsPlayerInVehicle(player, Helicoptercfg[i][Attachveh])) {
    break; /* Loop unterbrechen, Spieler kann nur in einem Helicopter sitzen*/
    GetPlayerPos(player, Helicoptercfg[i][Offset_X],Helicoptercfg[i][Offset_Y],Helicoptercfg[i][Offset_Z]-DistanceHeliPlayer);
    AttachObjectToPlayer( /*dein Objekt*/, player, Helicoptercfg[i][Offset_X],Helicoptercfg[i][Offset_Y],Helicoptercfg[i][Offset_Z], Helicoptercfg[i][Rotation_X],Helicoptercfg[i][Rotation_Y],Helicoptercfg[i][Rotation_Z] );
    else { return StopObject(/*dein Objekt*/); }
    }
    }


    Müsstest du mal ausprobieren ob StopObject ein Attachtes Objekt stoppen kann.
    Ansonsten einfach nen Timer verwenden und die Funktion benutzen.
    Ob das jetzt so funktioniert zeigt sich Ingame

    [align=center]
    Mta Script Editor - Work in Progress

  • hmm nee ich glaub eher er meint, das wenn sicher der boden bewegt, sich der heli auch bewegen soll..


    vielleicht geht es, wenn du in einem sekundentimer die position des objektes abfragst und dann den heli auf diese position setzt (DestroyVehicle und CreateVehicle) (wenn ein spieler drinsitzt, dann mach ihn wieder rein, nach dem zerstören & erstellen des helis ^^)


    ich würde mir das so vorstellen...


    MFG

  • Ja Mein Gott dann soll er mal was sagen.
    Wir sind nicht zum Pc-to-Pc Lippenlesen hier.
    Falls es so ist wie selEcT meint dann sollte das so aussehen...



    new _pos[4];
    GetPlayePos(playerid, _pos[1], _pos[2], _pos[3])
    SetVehiclePos(/*Fahrzeug*/, _pos[1], _pos[2], _pos[3]+3); /*Über Kopf*/


    new Keys,ud,lr, FLoat: Angle;
    GetPlayerFacingAngle(playerid, Angle)
    GetPlayerKeys(playerid,Keys,ud,lr);


    if(Angle > 180) {
    SetVehiclePos = (ud > 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2]-1, _pos[3])) : ((ud < 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2]+1, _pos[3]))); }
    else if(Angle < 180) {
    SetVehiclePos = (lr > 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2], _pos[3-1])) : ((lr < 0) ? ((/*Fahrzeug*/, _pos[1], _pos[2], _pos[3]+1))); }
    else { print("Spielerrotation nicht erkannt!"); } /* Kann eig nicht passieren ich weiß*/


    Wenn ich nen Fehler drin habe einfach melden, ich mach das grade Freihand :sleeping:
    Oder man macht es sich einfacher indem man die Position des Spielers nimmt und Updated auf die Position des Helicopters

    [align=center]
    Mta Script Editor - Work in Progress

  • hmm ich denke eher so (ausm kopf ;))


    forward HeliTimer();


    new object[1];
    new heli[1];


    public OnGameModeInit()
    {
    heli[0] = AddStaticVehicle(heliid, posx, posy, posz,angle);
    object[0] = CreateObject(objectid,posx,posy,posz,rotationx,rotationy,rotationz);
    SetTimer("HeliTimer",1000,1);
    }


    public HeliTimer()
    {
    new Float:posx,Float:posy,Float:posz;
    GetObjectPos(object[0],posx,posy,posz);
    SetVehiclePos(heli[0],posx,posy,posz);
    }


    so vielleicht...


    ungetestet..


    MFG

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • jop also ich habe die im hanger auf den plattformen gesavt
    wenn cih die plattforemn raus hole mit nenm Befehl bleiben die helis drin und fallen von der plattforum


    mfg


    ich hoffe ihr könnt mir helfen

  • wenn du ein bisschen ahnung hast vom scripten, dann sollte das hier net alzu schwer sein:


    forward HeliTimer();


    new object[1];
    new heli[1];


    public OnGameModeInit()
    {
    heli[0] = AddStaticVehicle(heliid, posx, posy, posz,angle);
    object[0] = CreateObject(objectid,posx,posy,posz,rotationx,rotationy,rotationz);
    SetTimer("HeliTimer",1000,1);
    }


    public HeliTimer()
    {
    new Float:posx,Float:posy,Float:posz;
    GetObjectPos(object[0],posx,posy,posz);
    SetVehiclePos(heli[0],posx,posy,posz);
    }


    bei heli[0] = und bei object[0] = gibst du die koords deines helis und deinem boden an...

  • Sowürde es funktionieren ich würde es aber bei ner simplen Verschiebeaktion ohne Timer machen



    #define Max_Plattform 3


    enum Plattformcfg
    {
    Fahrzeug,
    Objekt
    }


    new Plattform[Plattformcfg][Max_Plattform ];


    /*Unter OnGameModeInit*/


    Plattform[Fahrzeug][1] = AddStaticVehicle(ID, X, Y, Z,A);
    Plattform[Fahrzeug][2] = AddStaticVehicle(ID, X, Y, Z,A);
    ....
    Plattform[Objekt][1] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
    Plattform[Objekt][2] = CreateObject(ID, X, Y, Z,RX,RY,RZ);
    ...


    /*Unter OnCommandText*/
    dcmd(plattform,9, cmdtext);


    dcmd_plattform(playerid, params[])
    {
    new
    plattformen;
    if (sscanf(params, "u", plattformen)) SendClientMessage(playerid, 0xFF0000AA, "Handhabung: \"/plattform <plattform>\"");
    else if (plattformen > Max_Plattform ) SendClientMessage(playerid, 0xFF0000AA, "Plattform exisitiert nicht!");
    else if (plattformen == 1)
    {
    SetObjectPos(Plattform[Objekt], Pos_X, Pos_Y, Pos_Z);
    SetVehiclePos(Plattform[Fahrzeug], Pos_X, Pos_Y, Pos_Z+2); /* Soll ja draufstehen und nicht reingehen*/
    SendClientMessage(playerid, 0x00FF00AA, "Plattform wird bewegt");
    }
    return 1;
    }

    [align=center]
    Mta Script Editor - Work in Progress

  • wenn ich tore habe soobject[0] = heli = CreateObject(9241, 375.079590, 1931.441650, 18.699524, 0.0000, 0.0000, 0.0000);


  • hab ich mir auch überlegt direkt im befehl.


    Komet: mach es genau so wie es Jason_Gregory gemacht hat. So sollte es am einfachsten sein.

  • nur beachte, das meins ressourcenlastiger ist wegen dem timer ;)


    aber was gibts an dem net zu checken? das einzige was du machen musst, ist die coords deiner plattformen und deiner helis bei


    Plattform[Fahrzeug][1] = AddStaticVehicle(ID, X, Y, Z,A); //Helicoords


    und


    Plattform[Objekt][1] = CreateObject(ID, X, Y, Z,RX,RY,RZ); //Objectcoords


    einzufügen..


    MFG