Garbage System frage

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
  • Hallo und zwar mache ich gerade ein Müllwagen system, und jetzt habe ich eine frage. Und zwar soll man maximal 15 Kubik haben. Und ich möchte es jetzte abfragen wenn er im checkpoint ist ( zufuß) ob der wagen 15 Kubik hat Code:


    new Float:kubik[MAX_VEHICLES];
    new Float:maxkubik[MAX_VEHICLES];


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    new rand = random(sizeof(bmx1));
    if(bmxo[playerid] == 1)
    {


    bmxo[playerid] = SetPlayerCheckpoint(playerid,bmx1[rand][0],bmx1[rand][1],bmx1[rand][2],3);
    }
    ....




    das ist im befehl:
    inviteID[playerid] = pID;
    format(string,sizeof(string),"Du hast %s erfolgreich eine Anfrage gesendet, bitte warte bis er sie annehmt!",inviteID[playerid]);
    SendClientMessage(playerid,COLOR_BLUE,string);
    format(string2,sizeof(string2),"%s hat dich angefragt, benutze /agarbage um die Anfrage anzunehmen",SpielerName(playerid));
    SendClientMessage(inviteID[playerid],COLOR_BLUE,string2);
    wurdeangefragt[pID] = 1;
    maxkubik[veh] = 15.0;
    kubik[veh] = 0.0;
    istdabei[playerid] = 1;
    checkpointgarbage[playerid] = playerid;


  • Also erstmal:
    bmxo[playerid] = SetPlayerCheckpoint(playerid, ...
    das bringt nichts, da man nur einen Checkpoint pro Spieler erstellen kann. Nutze deshalb das Streamer Plugin: http://forum.sa-mp.com/showthread.php?t=102865
    Da kannst du CreateDynamicCP verwenden.


    Dann bei OnPlayerEnterDynamicCP:
    if(checkpointid == bmxo[playerid])
    {
    new veh = GetPlayerVehicleID(playerid);
    if(!veh) return SendClientMessage(playerid, 0xFF0000FF, "Kein Fahrzeug.");
    if(kubik[veh] > maxkubik[veh]) return SendClientMessage(playerid, 0xFF0000FF, "Zu viel.");
    //Code hier...
    }

  • Ok. Das mit den Object habe ich. Nun habe ich ein Checkpoint an ein Haus gesetzt aber jetzte soll ein Checkpoint hinter das Fahrzeug gemacht werden.
    Code bis jetzt:
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    new rand = random(sizeof(bmx1));
    if(checkpointid == bmxo[playerid])
    {
    SetPlayerAttachedObject(playerid,0,1264,6,0.165999,0.003000,-0.184999,0.000000,0.000000,0.000000,0.498999,0.466999,0.489000);


    new Float:vX,Float:vY,Float:vZ,Float:vR;
    GetVehiclePos(veh,vX,vY,vZ);
    GetVehicleZAngle(veh,vR);
    GiveRotation(vR,180.0);
    GetXYInFrontOf(vR, vX, vY, 10.0);

    }
    for(new i=0; i<sizeof(Flame); i++)
    {
    if(Flame[i][Flame_CP] == checkpointid)
    {
    DisablePlayerCheckpoint(playerid);
    }
    }
    return 1;
    }


    wie mache ich das ?

  • Ok, ich habe das jetzte mal getestet wenn ich durch den checkpoint gehe passiert garnix code:
    new fahrzeug[MAX_PLAYERS];
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    new rand = random(sizeof(bmx1));
    if(checkpointid == bmxo[playerid])
    {
    SetPlayerAttachedObject(playerid,0,1264,6,0.165999,0.003000,-0.184999,0.000000,0.000000,0.000000,0.498999,0.466999,0.489000);


    new Float:vX,Float:vY,Float:vZ,Float:vR;
    // GetVehiclePos(veh,vX,vY,vZ);
    // GetVehicleZAngle(veh,vR);
    // GiveRotation(vR,180.0);
    // GetXYInFrontOf(vR, vX, vY, 10.0);
    GetPosVorSpieler(playerid, -10.0, vX, vY, vZ);
    DestroyDynamicCP(bmxo[playerid]);
    fahrzeug[playerid] = CreateDynamicCP(vX,vY,vZ,4.0,-1,-1,playerid,30.0);
    TogglePlayerDynamicCP(playerid,fahrzeug[playerid],1);
    }
    return 1;
    }


    new Float: bmx1[2][3] =
    {
    {1860.9629,-2042.7212,13.5469},
    {1866.7927,-2056.9846,13.3828}
    };
    new bmxo[MAX_PLAYERS];


    new inviteID[MAX_PLAYERS];
    new istdabei[MAX_PLAYERS];
    new wurdeangefragt[MAX_PLAYERS];
    new checkpointgarbage[MAX_PLAYERS];
    ocmd:garbage(playerid,params[])
    {
    if(IsPlayerConnected(playerid))
    {
    if(istdabei[playerid] == 0)
    {
    if(Spieler[playerid][Job] == 9)
    {
    if(IsPlayerInAnyVehicle(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    for(new i = 0;i<sizeof(muellcars);i++)
    {
    if(veh == muellcars[i])
    {
    new rand = random(sizeof(bmx1));
    new string[123],pID,string2[123];
    /// if(sscanf(params,"d",pID))return SendClientMessage(playerid,COLOR_GREY,"[Benutze] /garbage [SpielerID]");
    if(wurdeangefragt[playerid] == 0)
    {
    inviteID[playerid] = pID;
    format(string,sizeof(string),"Du hast %s erfolgreich eine Anfrage gesendet, bitte warte bis er sie annehmt!",inviteID[playerid]);
    SendClientMessage(playerid,COLOR_BLUE,string);
    format(string2,sizeof(string2),"%s hat dich angefragt, benutze /agarbage um die Anfrage anzunehmen",SpielerName(playerid));
    SendClientMessage(inviteID[playerid],COLOR_BLUE,string2);
    wurdeangefragt[pID] = 1;
    maxkubik[veh] = 15.0;
    kubik[veh] = 0.0;
    istdabei[playerid] = 1;
    checkpointgarbage[playerid] = playerid;
    bmxo[playerid] = SetPlayerCheckpoint(checkpointgarbage[playerid],bmx1[rand][0],bmx1[rand][1],bmx1[rand][2],3);
    return 1;
    }
    }
    }
    SendClientMessage(playerid, COLOR_RED, "Du bist in keinem Müllwagen.");
    return 1;
    }
    }
    else return SendClientMessage(playerid, COLOR_RED, "Du bist kein Müllmann.");
    }
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Aha, na dann ist klar.
    Wie erstellst du den Müllwagen denn? Wir brauchen nämlich die ID des Müllwagens (vehicleid), damit wir dessen Position herausfinden können um den Checkpoint dahinter setzen zu können.


    Oder steht der Müllwagen an einer festen, immer gleichen, Position?

  • //Müllwagen cars
    muellcars[0] = AddStaticVehicleEx(408,1807.7451,-2024.0770,14.0797,90.6836,1,1,300); // müllmanwagen1
    muellcars[1] = AddStaticVehicleEx(408,1808.2032,-2031.7185,14.0882,90.2644,1,1,300); // müllmanwagen2
    muellcars[2] = AddStaticVehicleEx(408,1808.2836,-2041.8049,14.0824,90.9360,1,1,300); // müllmanwagen3
    muellcars[3] = AddStaticVehicleEx(408,1768.5781,-2039.0046,14.0786,268.5843,1,1,300); // müllmanwagen4
    muellcars[4] = AddStaticVehicleEx(408,1752.1335,-2060.3911,14.1608,182.7435,1,1,300); // müllmanwagen5
    muellcars[5] = AddStaticVehicleEx(408,1751.9683,-2057.9893,14.3494,177.7798,1,1,300); // müllmanwagen5

  • Ok, dann füg beim beim garbage Befehl vor:
    maxkubik[veh] = 15.0;
    das ein:
    pMuellAuto[playerid] = veh; //pMuellAuto global unter den Includes mit MAX_PLAYERS deklarieren.



    Und dann:
    GetPosVorSpieler(playerid, -10.0, vX, vY, vZ);
    zu:
    GetPosVorVeh(pMuellAuto[playerid], -10.0, vX, vY, vZ);


    Mit:

    Spoiler anzeigen
    stock GetPosVorVeh(vehicleid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
    {
    new Float:a;
    GetVehicleZAngle(vehicleid, a);
    GetVehiclePos(vehicleid, x, y, z);
    x += (dist * floatsin(-a, degrees));
    y += (dist * floatcos(-a, degrees));
    return true;
    }


    EDIT: Gazette: Fehler verbessert.

  • Ok ich habe jetzte ein Problem und zwar wenn ich in den checkpoint gehe hinter dem Fahrzeug dann geht er nicht weg...
    Code:
    new fahrzeug[MAX_PLAYERS];
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(bmx1));
    if(checkpointid == bmxo[playerid])
    {
    SetPlayerAttachedObject(playerid,0,1264,6,0.165999,0.003000,-0.184999,0.000000,0.000000,0.000000,0.498999,0.466999,0.489000);
    ApplyAnimation(playerid,"CARRY","liftup",4.1,0, 0, 0, 1, 1);
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,25);
    new Float:vX,Float:vY,Float:vZ;
    GetPosVorVeh(pMuellAuto[playerid], -5.0, vX, vY, vZ);
    DestroyDynamicCP(bmxo[playerid]);
    fahrzeug[playerid] = CreateDynamicCP(vX,vY,vZ,4.0,-1,-1,playerid,30.0);
    // TogglePlayerDynamicCP(playerid,fahrzeug[playerid],1);
    return 1;
    }
    if(checkpointid == fahrzeug[playerid])
    {
    ClearAnimations(playerid,1);
    RemovePlayerAttachedObject(playerid, 0);
    DestroyDynamicCP(fahrzeug[playerid]);
    }


    Jeffry:

    Einmal editiert, zuletzt von Gazette ()

  • Ich habe eine frage warum geht das system erst wenn ich zuerst 1 Runde mache d.H in den checkpoint bmxo und dann in den checkpoint fahrzeug danach geht das erst warum ?


    Code:
    new fahrzeug[MAX_PLAYERS];
    new muellsacke[MAX_VEHICLES];
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    DisablePlayerCheckpoint(playerid);
    new rand = random(sizeof(bmx1));
    if(checkpointid == bmxo[playerid])
    {
    SetPlayerAttachedObject(playerid,0,1264,6,0.165999,0.003000,-0.184999,0.000000,0.000000,0.000000,0.498999,0.466999,0.489000);
    ApplyAnimation(playerid,"CARRY","liftup",4.1,0, 0, 0, 1, 1);
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,25);
    new Float:vX,Float:vY,Float:vZ;
    GetPosVorVeh(pMuellAuto[playerid], -5.0, vX, vY, vZ);
    DisablePlayerCheckpoint(bmxo[playerid]);
    fahrzeug[playerid] = CreateDynamicCP(vX,vY,vZ,4.0,-1,-1,playerid,30.0);
    TogglePlayerDynamicCP(playerid,fahrzeug[playerid],1);
    return 1;
    }
    else if(checkpointid == fahrzeug[playerid])
    {
    if(kubik[pMuellAuto[playerid]] == 5.0)
    {
    SendClientMessage(playerid,COLOR_RED,"Das Fahrzeug ist voll, benutze /garbagestop");
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    RemovePlayerAttachedObject(playerid, 0);
    kubik[pMuellAuto[playerid]] = 0;
    DisablePlayerCheckpoint(fahrzeug[playerid]);
    }
    else
    {
    if(muellsacke[pMuellAuto[playerid]] == 0)
    {
    new rand1 = 5+random(3);
    muellsacke[pMuellAuto[playerid]] = rand1;//HIER
    return 1;
    }
    else if(muellsacke[pMuellAuto[playerid]] == 1)//Das funktioniert ja
    {
    muellsacke[pMuellAuto[playerid]] = 0;
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    RemovePlayerAttachedObject(playerid, 0);
    DisablePlayerCheckpoint(fahrzeug[playerid]);
    kubik[pMuellAuto[playerid]] += 0.5;
    bmxo[playerid] = CreateDynamicCP(bmx1[rand][0],bmx1[rand][1],bmx1[rand][2],5.0,-1,-1,playerid,1000.0);
    return 1;
    }
    else
    {
    new string[123],string2[123];
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    kubik[pMuellAuto[playerid]] += 0.5;
    muellsacke[pMuellAuto[playerid]] -= 1;//HIER
    RemovePlayerAttachedObject(playerid, 0);
    format(string,sizeof(string),"Kubik: %0.1f/15.0",kubik[pMuellAuto[playerid]]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(string2,sizeof(string2),"Müllsäcke: %d",muellsacke[pMuellAuto[playerid]]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string2);
    DisablePlayerCheckpoint(fahrzeug[playerid]);
    bmxo[playerid] = CreateDynamicCP(globalVar[playerid][0],globalVar[playerid][1],globalVar[playerid][2],4.0,-1,-1,playerid,30.0);
    return 1;
    }
    }
    }


    return 1;
    }

    Einmal editiert, zuletzt von Gazette ()

  • Wie sieht es so aus?

    Spoiler anzeigen
    new fahrzeug[MAX_PLAYERS] = {-1,...};
    new bmxo[MAX_PLAYERS] = {-1,...};
    new muellsacke[MAX_VEHICLES];

    Spoiler anzeigen
    public OnPlayerEnterDynamicCP(playerid, checkpointid)
    {
    if(checkpointid == bmxo[playerid])
    {
    SetPlayerAttachedObject(playerid,0,1264,6,0.165999,0.003000,-0.184999,0.000000,0.000000,0.000000,0.498999,0.466999,0.489000);
    ApplyAnimation(playerid,"CARRY","liftup",4.1,0, 0, 0, 1, 1);
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,25);
    new Float:vX,Float:vY,Float:vZ;
    GetPosVorVeh(pMuellAuto[playerid], -5.0, vX, vY, vZ);
    DestroyDynamicCP(bmxo[playerid]);
    bmxo[playerid] = -1;
    fahrzeug[playerid] = CreateDynamicCP(vX,vY,vZ,4.0,-1,-1,playerid,30.0);
    TogglePlayerDynamicCP(playerid,fahrzeug[playerid],1);
    return 1;
    }
    else if(checkpointid == fahrzeug[playerid])
    {
    if(kubik[pMuellAuto[playerid]] == 5.0)
    {
    SendClientMessage(playerid,COLOR_RED,"Das Fahrzeug ist voll, benutze /garbagestop");
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    RemovePlayerAttachedObject(playerid, 0);
    kubik[pMuellAuto[playerid]] = 0;
    DestroyDynamicCP(fahrzeug[playerid]);
    fahrzeug[playerid] = -1;
    }
    else
    {
    if(muellsacke[pMuellAuto[playerid]] == 0)
    {
    new rand1 = 5+random(3);
    muellsacke[pMuellAuto[playerid]] = rand1;
    return 1;
    }
    else if(muellsacke[pMuellAuto[playerid]] == 1)
    {
    muellsacke[pMuellAuto[playerid]] = 0;
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    RemovePlayerAttachedObject(playerid, 0);
    DestroyDynamicCP(fahrzeug[playerid]);
    fahrzeug[playerid] = -1;
    kubik[pMuellAuto[playerid]] += 0.5;
    new rand = random(sizeof(bmx1));
    bmxo[playerid] = CreateDynamicCP(bmx1[rand][0],bmx1[rand][1],bmx1[rand][2],5.0,-1,-1,playerid,1000.0);
    return 1;
    }
    else
    {
    new string[123],string2[123];
    ClearAnimations(playerid,1);
    SetPlayerSpecialAction(playerid,0);
    kubik[pMuellAuto[playerid]] += 0.5;
    muellsacke[pMuellAuto[playerid]] -= 1;//HIER
    RemovePlayerAttachedObject(playerid, 0);
    format(string,sizeof(string),"Kubik: %0.1f/15.0",kubik[pMuellAuto[playerid]]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(string2,sizeof(string2),"Müllsäcke: %d",muellsacke[pMuellAuto[playerid]]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string2);
    DestroyDynamicCP(fahrzeug[playerid]);
    fahrzeug[playerid] = -1;
    bmxo[playerid] = CreateDynamicCP(globalVar[playerid][0],globalVar[playerid][1],globalVar[playerid][2],4.0,-1,-1,playerid,30.0);
    return 1;
    }
    }
    }
    return 1;
    }


    Ich verstehe allerdings den Sinn von dem 5+random(3) Abschnitt nicht. Wann soll der aufgerufen werden?

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