[HILFE!] Dynamit legen mit der Faust.

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
  • Also:


    Ich habe ein Dynamite System.
    Man wechselt zur Faust, mit AttachObjekt :love: wird ein Dynamite an die Hand gemacht.
    Dann drückt man linksklick und der macht so ne low werf animation der Granate.
    Dann ist da ein Dynamit vor einem.
    Dann steht da: Tippe /det ein um das Dynamit hochzujagen
    Man kann /det eingeben, und hat einen Detonator
    Bis hier hin habe ich das schon.
    ______________________________
    Jetzt kommt folgendes:
    Man drückt KEY_FIRE und dann soll folgendes passieren:
    Eine Explosion wird dort erstellt, wo das Dynamit erstellt wurde.
    Vllt. kann man die Position damit abfragen, dass ich das Dynamit mit: Dyna1 = CreateObject erstellt habe.
    GetObjectPos ??


    MfG
    Atta(Oo);

    2 Mal editiert, zuletzt von AttachObject(Oo); ()

  • Habe das nun so:


    else if(SpielerInfo[playerid][sKlasse] == 9)
    {
    if(GetPlayerWeapon(playerid) == 0 && HatDynamite[playerid] == 1)
    {
    if(SpielerInfo[playerid][sTeam] == 1)
    {
    new Float:px, Float:py, Float:pz, Float:pa;
    GetPlayerFacingAngle(playerid,pa);
    if(pa >= 0.0 && pa <= 22.5) //n1
    {
    GetPlayerPos(playerid, px, py, pz);
    if(Dynas1[playerid] == 2)
    {
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    Dyna1[0] = CreateObject(1654, px, py+3, pz-0.785, 0.0, 0.0, 0.0);
    Dynas1[playerid] -= 1;
    }
    else if(Dynas1[playerid] == 1)
    {
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    SendClientMessage(playerid,COLOR_RED,"Das war dein letztes Dynamite, gehe zu einem Munitionsrefiller oder kämpfe mit der Faust weiter.");
    Dyna1[1] = CreateObject(1654, px, py+3, pz-0.785, 0.0, 0.0, 0.0);
    Dynas1[playerid] -= 1;
    }
    }
    if(pa >= 332.5 && pa < 0.0) //n2
    {
    GetPlayerPos(playerid, px, py, pz);
    //SetPlayerPos(playerid, px, py+30, pz+5);
    if(Dynas1[playerid] == 2)
    {
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    Dyna1[0] = CreateObject(1654, px, py+3, pz-0.785, 0.0, 0.0, 0.0);
    Dynas1[playerid] -= 1;
    }
    else if(Dynas1[playerid] == 1)
    {
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    SendClientMessage(playerid,COLOR_RED,"Das war dein letztes Dynamite, gehe zu einem Munitionsrefiller oder kämpfe mit der Faust weiter.");
    Dyna1[1] = CreateObject(1654, px, py+3, pz-0.785, 0.0, 0.0, 0.0);
    Dynas1[playerid] -= 1;
    }
    }
    }
    }
    }
    }
    }
    }
    }


    Also geht noch weiter mit den Facing Angles aber 2 reichen hier^^


    So wie kann ich jetzt übr den Detonator egal wo ich bin die Zünden, indem An den Koordinaten wo Das Dynamit erstellt wurde eine Explosion gemacht wird ?
    MIt GetObjectPos irgendwie, aber ich habe keine Plan wie^^


    Kann mir das irgendeiner machen ?


    MfG
    Atta(Oo);

  • Normal müsste das so gehen :
    GetObjectPos(Dyna[1],x,y,z);

    Und für x y z neue Variablen verwenden denn dort werden die Koordinaten vom Abgefragten Object hineingeschrieben.
    Was mir an deinem Code nicht einleuchtet sind die vielen Abfragen ...
    Ich hätte es an deiner Stelle anders gelöst. Dein Code ist nämlich ziemlich lang & umständlich. Im Übrigen kannst du auch viele if abfragen zusammenschieben ;)

    ,,Die besten Dinge im Leben sind nicht die, die man für Geld bekommt.''

    Albert Einstein

  • Habe das nun so:
    else if(GetPlayerWeapon(playerid) == 40)
    {
    new Float:x, Float:y, Float:z;
    new Float:x2, Float:y2, Float:z2;
    new Float:x3, Float:y3, Float:z3;
    new Float:x4, Float:y4, Float:z4;
    if(DynamitGelegt110[playerid] == 1)
    {
    GetObjectPos(Dyna1[playerid][0], x, y, z);
    CreateExplosion(x, y, z, 6, 10.0);
    DestroyObject(Dyna1[playerid][0]);
    return 1;
    }
    if(DynamitGelegt111[playerid] == 1)
    {
    GetObjectPos(Dyna1[playerid][1], x2, y2, z2);
    CreateExplosion(x2, y2, z2, 6, 10.0);
    DestroyObject(Dyna1[playerid][1]);
    return 1;
    }
    if(DynamitGelegt220[playerid] == 1)
    {
    GetObjectPos(Dyna2[playerid][0], x3, y3, z3);
    CreateExplosion(x3, y3, z3, 6, 10.0);
    DestroyObject(Dyna2[playerid][0]);
    return 1;
    }
    if(DynamitGelegt221[playerid] == 1)
    {
    GetObjectPos(Dyna2[playerid][1], x4, y4, z4);
    CreateExplosion(x4, y4, z4, 6, 10.0);
    DestroyObject(Dyna2[playerid][1]);
    return 1;
    }
    return 1;
    }


    Aber immer wenn ich ein Dynamit lege und noch ein zweites weiter weg vom 1.
    Und ich dann deto drücke, dann explodiert immer nur das erste was ich gelegt habe. :(


    Kann mir nochmal einer dabei helfen ?


    //EDIT Klammern verrutscht :S


    //EDIT Bitte helft mir, das muss bald für den Server fürs Update fertig sein :|


    //EDIT BITTE!


    MfG
    Atta(Oo);

    5 Mal editiert, zuletzt von AttachObject(Oo); ()

  • Also hier wäre meine Variante :



    #define MAX_BOMB 5
    new dynamit[MAX_PLAYERS][MAX_BOMB]; /* 0 = false ; 1 = true */
    new object_dyna[MAX_PLAYERS][MAX_BOMB];



    //Bombe setzen
    else if(SpielerInfo[playerid][sKlasse] == 9 && GetPlayerWeapon(playerid) == 0 && SpielerInfo[playerid][sTeam] == 1)
    {
    new Float:px, Float:py, Float:pz, Float:pa;
    GetPlayerFacingAngle(playerid,pa);
    GetPlayerPos(playerid, px, py, pz);
    if(pa >= 0.0 && pa <= 22.5) //n1
    {
    new i;
    for(new g = 0; g < MAX_BOMB; g++)
    {
    i++;
    if ( dynamit[playerid][i] == 0){ g = MAX_BOMB; }
    }
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    dynamit[playerid][i] = 1;
    object_dyna[playerid][i] = CreateObject(1654, px, py+3, pz-0.785, 0.0, 0.0, 0.0);
    printf("Bomb Set, ID : %d",i);
    }
    }


    //Bombe zünden


    else if(GetPlayerWeapon(playerid) == 40)
    {
    new Float:bx, Float:by, Float:bz;
    new i;
    new i;
    for(new g = 0; g < MAX_BOMB; g++)
    {
    i++;
    if ( dynamit[playerid][i] == 1){ g = MAX_BOMB; }
    }
    GetObjectPos(object_dyna[playerid][i],bx,by,bz);
    CreateExplosion(bx, by, bz, 6, 10.0);
    DestroyObject(object_dyna[playerid][i]);
    object_dyna[playerid][i] = 0;
    dynamit[playerid][i] = 0;


    }


    // alle Bomben zünden
    else if(GetPlayerWeapon(playerid) == 40)
    {
    new Float:bx, Float:by, Float:bz;
    for(new i = 0; i < MAX_BOMB; i++)
    {
    if ( dynamit[playerid][i] == 0) return 1;
    GetObjectPos(object_dyna[playerid][i],bx,by,bz);
    CreateExplosion(bx, by, bz, 6, 10.0);
    DestroyObject(object_dyna[playerid][i]);
    object_dyna[playerid][i] = 0;
    dynamit[playerid][i] = 0;


    }
    }


    // Nach ID zünden
    else if(GetPlayerWeapon(playerid) == 40)
    {
    /* i = ID */
    new Float:bx, Float:by, Float:bz;
    GetObjectPos(object_dyna[playerid][i],bx,by,bz);
    CreateExplosion(bx, by, bz, 6, 10.0);
    DestroyObject(object_dyna[playerid][i]);
    object_dyna[playerid][i] = 0;
    dynamit[playerid][i] = 0;
    }




    Ungetestet , deinen Code blick ich nicht mehr so wirklich ^^

    ,,Die besten Dinge im Leben sind nicht die, die man für Geld bekommt.''

    Albert Einstein

    3 Mal editiert, zuletzt von BlueSpider () aus folgendem Grund: fix2

  • Code geht net...
    Drücke InGame den Detonator.


    Macht "Piep" aber keine Explosion.


    Brauche immernoch dringend Hilfe, der Server muss bald fertig sein!
    Bitte helfen!
    Auch alle anderen pls :D


    MfG
    Atta(Oo);

    4 Mal editiert, zuletzt von Goldkiller ()

  • Er bleibt hier stehen:
    else if(GetPlayerWeapon(playerid) == 40)
    {
    new Float:bx, Float:by, Float:bz;
    for(new i = 0; i < MAX_DYNA; i++)
    {
    if(Dyna[playerid][i] == 0)
    {
    SendClientMessage(playerid,COLOR_YELLOW,"Debug: if(Dyna == 0)");
    return 1;
    }
    SendClientMessage(playerid,COLOR_YELLOW,"Debug: Explosion + Destroy + Dyna&DynaO = 0 + GetObjectPos");
    GetObjectPos(DynaO[playerid][i],bx,by,bz);
    CreateExplosion(bx, by, bz, 6, 10.0);
    DestroyObject(DynaO[playerid][i]);
    DynaO[playerid][i] = 0;
    Dyna[playerid][i] = 0;
    }
    }
    Bei Debug: if(Dyna == 0)
    da bleibt er stehen wenn ich abdrücke.
    Obwohl vorher doch Dyna auf 1 gesetzt wird:
    if(pa >= 292.5 && pa <= 332.5)//e
    {
    GetPlayerPos(playerid, px, py, pz);
    //SetPlayerPos(playerid, px+15, py+15, pz+5);
    new i;
    for(new g = 0; g < MAX_DYNA; g++)
    {
    i++;
    if(Dyna[playerid][i] == 0)
    {
    g = MAX_DYNA;
    }
    }
    OnePlayAnim(playerid,"GRENADE","WEAPON_throwu",4.1,0,0,0,0,0);
    SendClientMessage(playerid,COLOR_YELLOW,"Gehe soweit wie möglich weg und gebe /det ein, betätige den Detonator um das Dynamite hochzujagen >).");
    SendClientMessage(playerid,COLOR_YELLOW,"Debug: Dynamit gelegt!");
    if(Dyna[playerid][i] == 0)
    Dyna[playerid][i] = 1;
    DynaO[playerid][i] = CreateObject(1654, px+1.5, py+1.5, pz-0.785, 0.0, 0.0, 0.0);
    }


    Brauche immernoch dringend Hilfe, der Server muss bald fertig sein, also Bitte helft mir :(
    Auch alle anderen pls.
    Bitte!



    MfG
    Atta(Oo);

    5 Mal editiert, zuletzt von Goldkiller ()