Mine

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 will ein Minenscript machen.


    Hier mal der auszug aus dem script


    new mine;


    #define rot 0xFF0000FF
    #define blau 0x0000FFFF



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mine", cmdtext, true) == 0)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid,blau," Du kannst eine Mine nur ausßerhalb eines Fahrzeuges legen");
    }
    else
    {

    SendClientMessage(playerid,blau,"In 5 Sekunden wird die Mine scharf gemacht.");

    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    mine = CreatePickup(1654,3,x,y,z-0.5);
    return 1;
    }
    }
    return 0;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == mine)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    }
    else
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateExplosion(x,y,z+5,2,10);

    }
    }
    return 1;
    }


    So nun hab ich zwei bzw. drei Probleme


    1. Die Mine soll erst nach 5 Sekunden pickupable sein, damit der Minenleger nicht gleich eine gewischt bekommt.


    2. Die Entsethende Explosion funktioniert irgentwie nur ein mal.
    Und sobald man eine neue Mine erstelle, gibt es keine Eyplosion, also beim Aufnehmen der Mine. Das soll aber anders sein, so dass es immer bei jeder mine eine Explosion gibt.


    3. Welche Eyplisionsart und welchen Radius würdet ihr empfehlen, dass auch alle Autos und Personen in der Nähe was abbekommen bzw. Sterben


    Freue mich schon auf schnelle Hilfe, so wie immer hier ^^ :D

    Einmal editiert, zuletzt von Hagi ()

  • also zur 1 sache machst einfach ein public und ein schalter.


    //Header
    new minescharf = 0;
    forward mineaktiv;



    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mine", cmdtext, true) == 0)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid,blau," Du kannst eine Mine nur ausßerhalb eines Fahrzeuges legen");
    }
    else
    {

    SendClientMessage(playerid,blau,"In 5 Sekunden wird die Mine scharf gemacht.");

    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    mine = CreatePickup(1654,3,x,y,z-0.5);
    SetTimer("mineaktiv", 5000, 0);
    return 1;
    }
    }
    return 0;
    }







    public mineaktiv()
    {
    minescharf = 1;
    return 1;
    }




    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == mine)
    {
    if(minescharf == 1)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    }
    else
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateExplosion(x,y,z+5,2,10);

    }
    }
    }
    return 1;
    }

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • Ja Also ich hatte auch schon per Timer versucht, dass wenn der Timer abgelaufen ist, erst das Pickup erstellt wird. Aber dann muss man im Timer also im public x,y,z definieren und das beziehts sich ja auf die Playerpos die bei /mine existierte. Und leider gehts net, dass man bei /mine definiert und beim public einsetzt und erstellt.


    @1: Da haben wir wohl gleichzeitig geschrieben XD. Ich probiers mal.


    @2: Und wennich jetzt wollte, dass jeder Spieler nur 1 Mine legen kann. Muss ich dann
    new minegelegt = 0;
    machen und dann beim Mine gelegt
    minegelegt = 1;
    und dann bei /mine noch eine abfrage machen ?
    if(minegelegt == 0);
    {
    xyz tatata befehl etc.
    }
    else
    {
    SendClientMessage(playerid,rot,"Du kannst nur eine Mine legen");
    }

    2 Mal editiert, zuletzt von Hagi ()

  • Kleiner Verbesserungsvorschlag:
    //ganz nach oben:
    #define MaxMienen 10
    new minescharf[MaxMienen], miene[MaxMienen];
    forward scharfmachen(id);
    //als cmd:
    if (strcmp("/mine", cmdtext, true) == 0)
    {
    if (IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,blau," Du kannst eine Mine nur ausßerhalb eines Fahrzeuges legen");
    for(new i=0; i<MaxMienen; i++) {
    if(mienescharf[i]==0) {
    mienescharf[i]=2;
    SendClientMessage(playerid,blau,"In 5 Sekunden wird die Mine scharf gemacht.");

    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    miene[i] = CreatePickup(1654,3,x,y,z-0.5);
    SetTimerEx("scharfmachen", 5000, 0,"d",i);
    i=MaxMienen; }}
    return 1;
    }
    //ganz nach unten:
    public scharfmachen(id) {
    mienescharf[id]=1;
    return 1;
    }
    //erklärt sich von selbst^^:
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    for(new i=0; i<MaxMienen; i++) {
    if(pickupid == miene[i])
    {
    if(mienescharf[i] == 1)
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateExplosion(x,y,z+5,2,10);
    DestroyPickup(miene[i]);
    mienescharf[i]=0;
    i=MaxMienen; }
    }
    }
    }
    return 1;
    }
    So kannste bis zu 400 Mienen legen, wenn du das "#define MaxMienen" mit veränderst

  • Danke aber Keks of Death, dass raff ich im Moment noch nicht.
    Hier mal das komplette script wie ich es bisher habe. Es funktioniert nicht.
    Und zwar hebt man als Spieler das Ding sofort auf.
    Und im Auto kann man es auch sofort aufheben.
    Aber es passiert nicht keine Explosion
    Ist meiner Meinung nach wohl ein return Fehler. Weiß aber nicht genau wo.


    #include <a_samp>


    new mine;
    new minescharf;



    new automine;
    new autominescharf = 0;


    #define rot 0xFF0000FF
    #define blau 0x0000FFFF


    #define Max_Mienen 10


    forward mine1();
    forward automine1();


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }


    #else


    main()
    {
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
    }


    #endif


    public OnGameModeInit()
    {
    UsePlayerPedAnims();
    SetGameModeText("Mine");
    AddPlayerClass(0, 2050.3783, 1343.1572, 17.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    AddStaticVehicleEx(567,2050.3783, 1343.1572, 156.3746,0,-1,-1,-1);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/mine", cmdtext, true) == 0)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid,blau," Du kannst eine Mine nur ausßerhalb eines Fahrzeuges legen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,blau,"In 5 Sekunden wird die Mine scharf gemacht.");
    SetTimer("mine1",5000,0);
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    mine = CreatePickup(1654,3,x,y,z-0.5);
    return 1;
    }
    }




    if (strcmp("/automine", cmdtext, true) == 0)
    {
    if (IsPlayerInAnyVehicle(playerid))
    {
    SendClientMessage(playerid,blau," Du kannst eine Mine nur ausßerhalb eines Fahrzeuges legen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,blau,"In 5 Sekunden wird die Mine scharf gemacht.");
    SetTimer("automine1",5000,0);
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    mine = CreatePickup(1654,14,x,y,z-0.5);
    return 1;
    }
    }


    return 0;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    if(pickupid == mine)
    {
    if(minescharf == 1)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    }
    else
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    CreateExplosion(x,y,z,7,10);
    minescharf = 0;
    return 1;
    }
    }
    else
    {
    SendClientMessage(playerid,rot," !!! Achtung mine ist 'NOCH' nicht scharf. Renn so schnell du kannst !!!");
    return 1;
    }
    }


    if(pickupid == automine)
    {
    if(autominescharf == 1)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new Float:x,Float:y,Float:z;
    new auto;
    auto = GetPlayerVehicleID(playerid);
    GetVehiclePos(auto,x,y,z);
    CreateExplosion(x,y,z,7,10);
    }
    else
    {
    }
    }
    else
    {
    SendClientMessage(playerid,rot," !!! Achtung mine ist 'NOCH' nicht scharf. Fahr so schnell du kannst weg !!!");

    }
    }


    return 1;
    }


    public mine1()
    {
    minescharf = 1;
    return 1;
    }


    public automine1()
    {
    autominescharf = 1;
    return 1;
    }