Moveobject 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
  • Guten tag, habe mir mal überlegt meine gates etwas leichter zu machen, nur funktioniert es nicht.. kann einer vielleicht mal über den code schauen
    //Gate System
    forward CloseTor(playerid);
    forward CloseSchranke(playerid);
    //____Gates____________
    enum Gates {
    Float: OpenX,
    Float: OpenY,
    Float: OpenZ,
    Text[200],
    Float: CloseX,
    Float: CloseY,
    Float: CloseZ,
    Gateteam,
    TorID[2],
    Torart
    };


    //___________Gates und Tore usw_________________________________________________
    //X Y Z to Open, Text, X Y Z to Close, Team, TorID, Torart (1 = Tor / 2 = Schranke)
    new Float:Tore[][Gates] = {
    {-1522.80005, 482.5, -0.4,"Das Tor schließt sich Automatisch nach 8 Sekunden", -1522.80005, 482.5, 6.2, 0, 1, 1}
    //{-1522.80005, 482.5, 6.2,"Das Tor schließt sich Automatisch nach 8 Sekunden", -1522.80005, 482.5, -0.4, 0, 2, 2}
    };


    public OnGameModeInit()
    {
    for(new Gateid = 0; Gateid < sizeof(Tore); Gateid++)
    {
    Tore[Gateid][TorID][1] = CreateObject(987, -1522.80005, 482.5, 6.2, 0, 0, 180);//Army Oben
    }
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
    if(oldkeys == 8)
    {
    if(IsPlayerInRangeOfPoint(playerid,Tore[playerid][CloseX],Tore[playerid][CloseY],Tore[playerid][CloseZ], 10.0)) {
    if(GetPVarInt(playerid, "Team") == Tore[playerid][Gateteam]) {
    if(Tore[playerid][Torart] == 1) {
    MoveObject(Tore[playerid][TorID], Tore[playerid][OpenX], Tore[playerid][OpenY], Tore[playerid][OpenZ], 5);
    SendClientMessage(playerid,COLOR_LIGHTBLUE, Tore[playerid][Text]);
    SetTimer("CloseTor", 8000, 0); }
    else if(Tore[playerid][Torart] == 2) {
    //Rotieren...
    SendClientMessage(playerid,COLOR_LIGHTBLUE, Tore[playerid][Text]);
    SetTimer("CloseSchranke", 8000, 0); }
    }
    }
    }
    return 1; }
    public CloseTor(playerid)
    {
    MoveObject(Tore[playerid][TorID], Tore[playerid][CloseX],Tore[playerid][CloseY],Tore[playerid][CloseZ],5.0);
    return 1;
    }
    public CloseSchranke(playerid)
    {
    //Rotieren...
    return 1;
    }

    niemand eine Idee ?!



    Die heutigen Noobs, sind die Profis von morgen! :thumbup:


    Danke an Jeffry für seine ständige Hilfsbereitschaft und freundliche Art. 8)

    Einmal editiert, zuletzt von ENEF ()

  • Warum verwendest du playerid im Tore Array als ersten Index?


    Beispiel:


    Tore[playerid][TorID]

  • if(Tore[playerid][Torart] == 1) {
    MoveObject(Tore[playerid][TorID], Tore[playerid][OpenX], Tore[playerid][OpenY], Tore[playerid][OpenZ], 5);


    Was hat 'playerid' dort verloren? Du vergleichst hier möglicherweise (sogar sehr wahrscheinlich) nicht die Tore die du im Array definiert hast sondern durch 'playerid' zieht die Anweisung sich einen nicht vorhanden Eintrag raus wenn deine ID nicht 0 ist und du nur ein Tor definiert hast.


    enum Gates {
    Float:X,
    Float:Y,
    Float:Z,
    bool:State
    }


    for(new i; i < sizeof(Tore); i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, Tore[i][X], Tore[i][Y], Tore[i][Z])) continue;
    if(Tore[i][State] = true) // auf
    {
    MoveObject(Tore[i][TorID], Tore[i][X], Tore[i][Y], Tore[playerid][Z] - 5, 5);
    Tore[i][State] = false;
    }
    else // zu
    {
    MoveObject(Tore[i][TorID], Tore[i][X], Tore[i][Y], Tore[playerid][Z] + 5, 5);
    Tore[i][State] = true;
    }
    break;
    }


    Diese 'OpenX' und 'CloseX' Variablen sind nicht nötig, du brauchst nur eine Position die du dann entsprechend modifizieren kannst. Falls dir das zu viel Arbeit ist kannst du dir dafür auch ein Makro basteln aber das über Variablen zu lösen ist Speicherverschwendung. Das Array bei 'TorID' kannst du entfernen, das brauchst du nicht, da reicht eine normale Variable.