[prob] Tor auf/zu

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


    ich habe mir mal zum test ein tor erstellt.
    Dieses will ich auf und zu machen.


    also es sollte so sein, so dass man einen befehl hat (zb. /move) um das tor auf und zu zu machen,
    aber nicht nur das eine tor, sondern alle tore die man hat, also muss da ein radius begränzer oder sowas rein.


    das habe ich bis jetzt:



    new obj;


    public OnGameModeInit()
    {
    obj = CreateObject(985, 235.35803222656, 3202.8833007813, 12.841896057129, 0.000000, 0.000000, 5.9549560546875);
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(move,4,cmdtext);
    return 1;
    }


    dcmd_move(playerid,params[])
    {
    #pragma unused params
    #pragma unused playerid
    MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);
    return 1;
    }


    Also die zeit wie das tor geht ist so perfeckt.


    Aber wie und wo baue ich jetzt hier der radius ein ?
    Und wei fährt das tor wieder hoch ? Das geht irgentwie nicht.


    Ich währe sehr froh, wenn mir da einer helfen könnte.


    Mfg
    Airwolf


  • dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);
    return 1;
    }
    return 1;
    }


    so das war dann das mit dem radius und das hier ist dann mit zu:



    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);
    return 1;
    }
    {
    MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);
    return 1;
    }
    return 1; // hier ist der warning: unreachable code
    }


    so würde ich das jetzt aus der erklärung entnehmen, aber dann habe ich ein warnung: unreachable code


    und das tor geht nur runter nciht wieder hoch.


    kann mir das mal einer korigieren ?

  • Lol?
    Warum machst du die beiden nit in eine klammer? dann gehts auch^^


    EDIT: Why hast du da 2 verschiedene? oO
    Welches dovon is jez tor zu? Ich nehme mal an das mit dem Z parameter wo mit 12 anfängt. Du musst das zweite mit der klammer rausnehmen.


    EDIT 2:
    Wenn du das mit einem CMD machen willst, musst du ne variable definieren. Wenn du das erste mal /move eintippst soll gecheckt werden ob die variable 0 is, wenn je dann wird das tor geöffnet. Dann muss die variable auf 1 gesetzt. Wenn man dann nochma /move eingibt muss wieder gecheckt werden, un wenn die auf 1 is, dann muss geschlossen werden.


    MFG, Rob

  • normal, denn das letzte return 1; wird nie erreicht werden.


    Du hast einen IF Strang mit {Inhalt} dann gleich noch einen {Inhalt].


    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor==0) {MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);tor=1;}
    else {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);tor=0;}
    }
    return 1;
    }


    Die Variable tor mußt du oben noch deklarieren (new tor;). Du kannst dieser Variable auch einen anderen Namen geben.


    Erklärung:
    tor=1 bedeutet, Tor ist auf
    tor=0 bedeutet, Tor ist geschlossen

  • so es geht einwand frei.
    danke woozi ;)



    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor==0) {MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);tor=1;}
    else {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);tor=0;}
    if (tor==0) {MoveObject(obj1, X, Y, Z, 2.00);tor=3;}
    else {MoveObject(obj1, X, Y, Z, 2.00);tor=2;}
    }
    return 1;
    }


    und so währe das dann jetzt mit einem weiteren tor oder ?

  • Du mußt jedem Tor eine eigene Variable zuordnen. Wenn du die Variable tor bei allen Toren benutzt, passiert folgendes:


    - du hast mit /move Tor 1 geöffnet
    - du fährst zu Tor 2 und machst /move - Tor 2 poppt nun auf und schließt sich wieder


    Daher, jedes Tor seine eigene Variable. Sieh es als Schloss für jedes Tor ;)

  • Oder du machst beide tore in eine if-klammer^^ Dann kannst du die variable für beide benutzen ;)


    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor==0)
    {
    MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);
    MoveObject(obj1,x, y, z, 2.00); //zweites toor
    tor=1;
    }
    else
    {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);
    MoveObject(obj1,x, y, z, 2.00); //zweites toor
    tor=0;
    }
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • @Bug
    dann hast du aber das Problem, das du mit einmal alle Tore gleichzeitig öffnest bzw. schließt ;) soll das der Sinn sein? Ich denke nicht.


    PS.:
    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor1==0) {MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);tor1=1;}
    else {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);tor1=0;}
    if (tor2==0) {MoveObject(obj1, X, Y, Z, 2.00);tor2=1;}
    else {MoveObject(obj1, X, Y, Z, 2.00);tor2=0;}
    }
    return 1;
    }


    Oder du machst das dynamischer und benutzt arrays für die Tore. Z.B.


    #define MAX_TOR 2 // <-- maximale Tore, die du im Script hast
    new torMovement[MAX_TOR]=0;


    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (torMovement[0]==0) {MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);torMovement[0]=1;}
    else {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);torMovement[0]=0;}
    if (torMovement[1]==0) {MoveObject(obj1, X, Y, Z, 2.00);torMovement[1]=1;}
    else {MoveObject(obj1, X, Y, Z, 2.00);torMovement[1]=0;}
    }
    return 1;
    }


    Und wenn du das jetzt noch dynamischer möchtest, kannst du die Torkoordinaten ebenfalls in arrays packen. Dann benötigst du nämlich nur einmal eine IF Anweisung ;)

    Einmal editiert, zuletzt von Woozie ()

  • also dann so:



    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor==0) {MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);tor=1;}
    (tor==2) {MoveObject(obj1, X, Y, Z, 2.00);tor=3;}


    else {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);tor=0;}
    {MoveObject(obj1, X, Y, Z, 2.00);tor=2;}
    }
    return 1;
    }


    also so währe das dann wenn ich zwei tore hätte ?
    und bei drei dann nochmal einen weiteren drunter ?

  • also sagen wir es so:
    Ich habe an manchen stellen Tore wo zwei - ? zusammen sind und gleichzeitig gehen müssen
    und dann noch welche wo sie halt einzeld gehen müssen.


    Jetzt habe ich ja schonmal von euch beispiele, mal gucken was ich damit dann hinbekomme.


    Danke euch beiden, ihr seit die besten ;)

  • Wenn du mehrere gleichzeitig bewegen willst, dann nimm das was ich oben schon gepostet hab:


    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 235.3580, 3202.8833, 12.8418))
    {
    if (tor==0)
    {
    MoveObject(obj, 235.35803222656, 3202.8833007813, 6.841896057129, 2.00);
    MoveObject(obj1,x, y, z, 2.00); //zweites toor
    tor=1;
    }
    else
    {MoveObject(obj, 235.35803222656, 3202.8833007813, 12.841896057129, 2.00);
    MoveObject(obj1,x, y, z, 2.00); //zweites toor
    tor=0;
    }
    }
    return 1;
    }


    Andernfalls solltest du nen neuen CMD machen, sonst wird das nix mit einem CMD.


    MFG, rob

  • okey.


    Ich bin über neujahr beim kolegen und dann brauche ich erstmal einen anständigen object streamer weil die 4die ich hier gefunden habe, nicht wirklich alle aufgebaut ahben. also entweder zu langsam oder nicht alles.


    naja wenn ich alles drinhabe, dann baue ich alles ein mit den toren und dann werde ich gucken ob das alles geht.


    Fals ich dann probs habe, werde ich hier wieder posten und euch beide um rat fragen.


    Mfg
    Airwolf


    //edit: also ich ahbe gerade mal 4tore nebeneinander gesätzt und ausprobiert. Also es gehen alle gleichzeitig runter und wieder hoch :D thx
    //neu: das mit den mehreren toren, ohne das die anderen gehen, also nur einzelne, werde ich dann in fehrne mal machen und euch natürlich informieren :D


    //edit: so jetzt habe ich mehrere tore drin und geht alles einwandfrei.
    Nochmals danke für eure hilfe :D Jetzt werde ich mich mit den koardinaten vom teleporter und ints rumstreiten :D

    2 Mal editiert, zuletzt von Airwolf ()

  • sorry fürs doppen posten, soll aber übersichtlich sein:


    Woozie und BugScripter,
    Also mehrere tore bekomme ich nur für mehrere befehle hin.
    Jetzt wollte ich mal weil ich ein bischen zeit habe alles auf einen befehl legen.
    Naja dort habe ich zwar keine warnings oder errors, sondern der server will nciht starten,
    das hatte ich mal bei den rcon befehlen, weil ne klammer falsch war.
    Naja ich hoffe ihr könnt mir heirbei helfen:



    dcmd_move(playerid,params[])
    {
    #pragma unused params
    if(gTeam[playerid] == TEAM_Scripter ||
    gTeam[playerid] == TEAM_Mapper)
    {
    if(IsPlayerInRangeOfPoint(playerid, 20.0, 235.1432, 3588.7312, 3.9618))
    {
    if (tor==0)
    {
    MoveObject(gate1, 263.895416, 3181.425049, 20.765535, 2.00);
    MoveObject(gate2, 255.073090, 3181.405029, 20.765535, 2.00);
    tor=1;
    }
    else
    {
    MoveObject(gate1, 263.895416, 3181.425049, 29.765535, 2.00);
    MoveObject(gate2, 255.073090, 3181.405029, 29.765535, 2.00);
    tor=0;
    }
    }
    return 1;
    }
    if(gTeam[playerid] == TEAM_Scripter ||
    gTeam[playerid] == TEAM_Mapper)
    {
    if(IsPlayerInRangeOfPoint(playerid, 50.0, 367.896606, 1917.434570, 50.237188))
    {
    if (tor==0)
    {
    MoveObject(liftuwe, 367.896606, 1917.434570, 100.237188, 2.00);
    tor=1;
    }
    else
    {
    MoveObject(liftuwe, 367.896606, 1917.434570, 23.237188, 2.00);
    tor=0;
    }
    }
    return 1;
    }
    if(gTeam[playerid] == TEAM_Scripter ||
    gTeam[playerid] == TEAM_Mapper)
    {
    if(IsPlayerInRangeOfPoint(playerid, 20.0, 50.7838,3300.1462,17.3611))
    {
    if (tor==0)
    {
    MoveObject(bune1, 50.050560, 3327.487793, 9.030005, 1.00);
    MoveObject(bune2, 65.173279, 3285.314941, 8.733913, 1.00);
    tor=1;
    }
    else
    {
    MoveObject(bune1, 50.050560, 3327.487793, 16.054897, 1.00);
    MoveObject(bune2, 65.173279, 3285.314941, 15.808805, 1.00);
    tor=0;
    }
    }
    return 1;
    }
    if(gTeam[playerid] == TEAM_Scripter ||
    gTeam[playerid] == TEAM_Mapper)
    {
    if(IsPlayerInRangeOfPoint(playerid, 20.0, 78.0781,3200.3044,22.0000))
    {
    if (tor==0)
    {
    MoveObject(lift1, 69.090263, 3200.692627, 12.230047, 2.00);
    MoveObject(lift2, 64.520607, 3193.221436, 12.921295, 2.00);
    tor=1;
    }
    else
    {
    MoveObject(lift1, 88.390915, 3200.441406, 25.113140, 2.00);
    MoveObject(lift2, 93.168449, 3192.830811, 32.158546, 2.00);
    tor=0;
    }
    }
    return 1;
    }
    return 1;
    }


    einer ne idee ?
    oder direct die lösung ?
    bitte poasten.

    Einmal editiert, zuletzt von Airwolf ()

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