Zollsystem komplett Variabel machen!!!!!

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
  • Hi


    da ich auf meinem Server insgesamt 25 Zollschranke habe habe ich keine Bock für jede Zollschranke einen eigenen Befeh zu schreiben sondern ich will das komplett varriabel machen....



    Hier mal meine anfänge:


    1. Ich erstelle zwei Zollschranke und ein Zollhaus (wenn man aus ls raus richtung sf fährt)



    Zollschranke_01_2 = CreateObject(978, 52, -1539.19921875, 5.0533084869385, 0, 0, 79.991455078125);
    Zollschranke_01_1 = CreateObject(978, 54.19921875, -1524.5, 4.9744849205017, 0, 0, 261.98547363281);
    Zollhaus_01_1 = CreateObject(8168, 54.2421875, -1532, 6.2364902496338, 0, 0, 7.998046875);



    2. Ich erstelle ein enum und ein new wo eben x, y, z, Radius, modlid und die objectid angegeben ist



    enum Zoll
    {
    x,
    y,
    z,
    Rad,
    modelid,
    objectid[250]



    }
    new IsAtZoll [] [Zoll] =
    {
    {54, -1524, 4, 5, 978, "Zollschranke_01_1" },
    {52, -1539, 5, 5, 978, "Zollschranke_01_2" }


    };



    3. Als nächstes erstelle ich eine funktion, die durch eine while schleife abfrägt an welchen von den im new angegebenen cords er ist und will ihm dann sagen dass er dieses Object dann auch bewegen soll.
    Hier ist auch schon mein Problem: bei MoveObject muss als erstes die objectid angegeben werden die ist im ersten fall ja Zollschranke_01_1 die ich oben ja auch deffiniert habe aber das MoveObject will das einfach nicht akzeptieren bzw. peilt einfach nicht das dass object von oben gemeint ist



    checkzoll(playerid)
    {
    new i;
    i=0;
    while (i < 2)
    {
    imax = 2;
    if(i<imax)
    {
    if(IsPlayerInRangeOfPoint(playerid,IsAtZoll[i][Rad],IsAtZoll[i][x],IsAtZoll[i][y],IsAtZoll[i][z]))
    {
    format(ausgabetext, sizeof(ausgabetext), "Da steht: %s", IsAtZoll[i][objectid]);
    SendClientMessage(playerid, green, ausgabetext);
    MoveObject(IsAtZoll[i][objectid],IsAtZoll[i][x],IsAtZoll[i][y],0,3);




    return 1;


    }


    i=i+1;
    }
    else
    {
    return 1;
    }


    }
    return 0;


    }



    4. zum schluss rufe ich die funktion halt mit /zoll auf:



    if(strcmp(strget(cmdtext,0),"/zoll", true) ==0)
    {
    checkzoll(playerid);
    return 1;
    }




    kann mir jemand sagen wie ich das mit dem MoveObject machen kann???
    wäre es vielleicht auch möglich, dass man den Objecten eine zusätzliche id vergibt so dass das moveobject dann weis welches object gemeint ist und was es bewegen soll.



    mfg The_OTTO

  • Da ich sehe, dass du dich halbwegs auskennst hier der Code den ich für dich geschrieben habe ^^

    enum zollinfo
    {
    zModelID,
    zText[32],
    Float:zPosX,
    Float:zPosY,
    Float:zPosZ,
    Float:zToPosX,
    Float:zToPosY,
    Float:zToPosZ,
    Float:zPosRot,
    zPreis,
    }
    new ZollAmt[254][zollinfo] = {
    {978, "Gute Fahrt!", 52.0, -1539.19921875, 5.0533084869385, 79.991455078125, 54.0, -1524.0, 4.0, 500}, //LS-SF Brücke #1
    {978, "Gute Fahrt!", 54.19921875, -1524.5, 4.9744849205017, 261.98547363281, 52.0, -1539.0, 5.0, 500} //LS-SF Brücke #2
    };
    new ZollObject[254];
    new ZollAmtID[254];


    forward SetZollBack(zollid);


    public OnGameModeInit()
    {
    for(new zoll = 0; zoll < sizeof(ZollAmt); zoll++)
    {
    ZollObject[zoll] = CreateObject(ZollAmt[zoll][zModelID], ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ], 0.0, 0.0, ZollAmt[zoll][zPosRot]);
    ZollAmtID[object] = zoll;
    }
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(strget(cmdtext,0),"/zoll", true) ==0)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in keinem Fahrzeug!");
    for(new zoll = 0; zoll < sizeof(ZollAmt); zoll++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 3.5, ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ])) continue;
    if(GetPlayerMoney(playerid) < ZollAmt[zoll][zPreis]) return SendClientMessage(playerid, 0xFFFFFF00, "Zu wenig Geld mit dir dabei!");
    GivePlayerMoney(playerid, -ZollAmt[zoll][zPreis]);
    GameTextForPlayer(playerid, ZollAmt[zoll][zText], 2500, 3);
    MoveObject(ZollObject[zoll], ZollAmt[zoll][zToPosX], ZollAmt[zoll][zToPosY], ZollAmt[zoll][zToPosZ], 3.5);
    SetTimerEx("SetZollBack", 3500, 0, "d", zoll);
    return 1;
    }
    return SendClientMessage(playerid, 0xFFFFFF00, "Nicht in der Nähe eines Zollamtes!");;
    }
    return 0;
    }


    public SetZollBack(zollid)
    return MoveObject(ZollObject[zoll], ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ], 3.5);

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!

  • Hey danke ich habe schon mehere Tage rumprobiert und rumgeschreiben du bist der erste der antwortet(andere Theards)


    super ich denke so müsste es funktionieren



    dickes loob


    hab aber leider noch ein paar fehler:


    Cod:


    #define FILTERSCRIPT


    #include <a_samp>
    #include <dini>



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


    public OnFilterScriptExit()
    {
    return 1;
    }



    enum zollinfo
    {
    zModelID,
    zText[32],
    Float:zPosX,
    Float:zPosY,
    Float:zPosZ,
    Float:zToPosX,
    Float:zToPosY,
    Float:zToPosZ,
    Float:zPosRot,
    zPreis,
    }


    new ZollAmt[][zollinfo] =
    {


    {978, "Gute Fahrt!", 52.0, -1539.19921875, 5.0533084869385, 79.991455078125, 54.0, -1524.0, 4.0, 500}, //LS-SF Brücke #1
    {978, "Gute Fahrt!", 54.19921875, -1524.5, 4.9744849205017, 261.98547363281, 52.0, -1539.0, 5.0, 500} //LS-SF Brücke #2


    };


    new ZollObject[256];
    new ZollAmtID[256];


    forward SetZollBack(zollid);



    public OnGameModeInit()
    {
    new zoll;
    for(zoll = 0, zoll < sizeof(ZollAmt); zoll++;)
    {
    ZollObject[zoll] = CreateObject(ZollAmt[zoll][zModelID], ZollAmt[zoll][zPosX],ZollAmt[zoll][zPosY],ZollAmt[zoll][zPosZ],0.0, 0.0, ZollAmt[zoll][zPosRot]);
    ZollAmtID[object] = zoll;
    }
    return 1;
    }




    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(strcmp(strget(cmdtext,0),"/zoll", true) ==0)
    {
    for(new zoll = 0; zoll < sizeof(ZollAmt); zoll++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 3.5, ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ])) continue;
    if(GetPlayerMoney(playerid) < ZollAmt[zoll][zPreis]) return SendClientMessage(playerid, 0xFFFFFF00, "Zu wenig Geld mit dir dabei!");
    GivePlayerMoney(playerid, -ZollAmt[zoll][zPreis]);
    GameTextForPlayer(playerid, ZollAmt[zoll][zText], 2500, 3);
    MoveObject(ZollObject[zoll], ZollAmt[zoll][zToPosX], ZollAmt[zoll][zToPosY], ZollAmt[zoll][zToPosZ], 3.5);
    SetTimerEx("SetZollBack", 3500, 0, "d", zoll);
    return 1;
    }
    return SendClientMessage(playerid, 0xFFFFFF00, "Nicht in der Nähe eines Zollamtes!");




    }
    return 0;
    }


    public SetZollBack(zollid)
    {
    return MoveObject(ZollObject[zoll], ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ], 3.5);
    }
    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }


    Fehler:




    mfg The_OTTO

    Einmal editiert, zuletzt von The_OTTO ()

  • Ah sry, also folgende zwei Sachen einfach ersetzen (hab aus Eile dies programmiert xD):


    public OnGameModeInit()
    {
    new zoll;
    for(zoll = 0; zoll < sizeof(ZollAmt); zoll++;)
    {
    ZollObject[zoll] = CreateObject(ZollAmt[zoll][zModelID], ZollAmt[zoll][zPosX],ZollAmt[zoll][zPosY],ZollAmt[zoll][zPosZ],0.0, 0.0, ZollAmt[zoll][zPosRot]);
    ZollAmtID[ZollObject[zoll]] = zoll;
    }
    return 1;
    }


    public SetZollBack(zollid)
    {
    return MoveObject(ZollObject[zollid], ZollAmt[zollid][zPosX], ZollAmt[zollid][zPosY], ZollAmt[zollid][zPosZ], 3.5);
    }


    und die Warnings mit never used kannst du ignorieren ^^

    Mfg Templer


    >>Dein Breadfish-Thema im Unterforum ScriptingBase / Scriptingwünsche wurde nicht richtig beantworter?<<
    >>Es handelt sich um ein Programmier Problem und du nicht einfach weiter kommst wo der Fehler sein könnte?<<
    Dann melde dich bei mir über die PN-Funktion indem du den Link zu deinem Breadfish-Themen Problem schickst.
    Voraussetzung:
    Thema älter als 1 Tag und im Breadfish Forum gespostet!