Farmer System by DZ

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 liebe User,
    Ich möchte euch hier ein Einfaches Farmer System (Tutorial) zeigen, so könnt ihr in Einfachen schritten mit ein wenig eigender leistung ein Farmer job adden.
    Ihr benötigt für dieses Tutorial etwas Grundwissen da ihr hier auch selber hand anlegen müsst und es nicht nur nach Copy&Paste es benuzt.




    Schritt 1:

    //Header


    //Einstellungen
    #define FarmerCheckpoints 10 //Wie viel farmer CP´s ihr addet
    #define farmergehalt 500// Der Lohn den der Farmer bei erfolgreicher ernte bekommt.
    #define EndFarmerCP 10 // Der letzte CP den ihr addet.
    #define FFahrzeuge 10 // Wie viele Farmer Fahrzeuge ihr addet
    //================================FARMER-FAHRZEUGE==============================
    new FarmFahrzeug[FFahrzeuge];
    forward FarmerFahrzeug(carid);
    //================================FARMER-CP-STUFF================================
    #define INVALID_FARMER_CP -1
    new AktuellerCP[MAX_PLAYERS]; // Diese Function liest später euren Aktuellen CP aus bzw. prüft.
    new Float:FarmerCPS[FarmerCheckpoints][3]={
    {X,Y,Z}, // X,Y,Z Mit euren 1 Checkpoint Coords ersetzen.
    {X,Y,Z}, // Hier das selber nur den 2 CP.
    // .... usw. bis ihr alle eure drinne habt, beachtet bitte solltet ihr jetz mehr als 10 haben müsst ihr oben die FarmerCheckpoints erhöhen.
    // bei den letzten dann kein , hinten machen.
    };

    Schritt 2:

    //OnGameModeInit
    FarmFahrzeug[0] = CreateVehicle(modelid,x,y,z,a,farbe1,farbe2,-1); // Hier fügt ihr dann eure Farmer fahrzeuge ein jeweils mit FarmFahrzeug[1,2,3,4 ...usw] fortlaufend ein.

    Schritt 3:

    //OnPlayerConnect
    AktuellerCP[playerid] = INVALID_FARMER_CP;

    Schritt 4:

    // Irgendwo in euren GM
    public FarmerFahrzeug(carid)
    {
    for(new i = 0; i < sizeof(FarmFahrzeug); i++)
    {
    if(carid == FarmFahrzeug[i])
    {
    return 1;
    }
    }
    return 0;
    }

    Schritt 5:

    //OnplayerCommand
    cmd = strtok(cmdtext, idx);
    if(strcmp(cmd, "/ernten", true) == 0)
    {
    new fahrzeug= GetPlayerVehicleID(playerid);
    if(AktuellerCP[playerid] != INVALID_FARMER_CP)return SendClientMessage(playerid,0xFF0000FF, "Error: Sie sind bereits in Ihren Job aktiv."); // Hiermit Prüfen sie ob die Person nicht bereits am Ernten ist.
    if(!FarmerFahrzeug(fahrzeug))return SendClientMessage(playerid,0xFF0000FF, "Error: Sie befinden sich nicht auf den richtigen Fahrzeug."); //Hier Prüfen sie ob der Spieler auch auf ein Farmer Fahrzeug sitzt
    AktuellerCP[playerid] = ++;
    SetPlayerCheckpoint(playerid,FarmerCPS[AktuellerCP[playerid]][0],FarmerCPS[AktuellerCP[playerid]][1],FarmerCPS[AktuellerCP[playerid]][2], 8.0); // Hier wird automatisch der CP den sie oben als 1 definiert haben gesetzt.
    SendClientMessage(playerid,0x00CC00FF, "Fahren sie nun die Checkpoints ab um das Feld abzuernten.");
    return 1;
    }


    Schritt 6:

    // Unter OnPlayerCheckpoint
    new fahrzeug= GetPlayerVehicleID(playerid);
    if(AktuellerCP[playerid] != INVALID_FARMER_CP && FarmerFahrzeug(fahrzeug))
    {
    if(AktuellerCP[playerid] == EndFarmerCP)
    {
    DisablePlayerCheckpoint(playerid);
    AktuellerCP[playerid] = INVALID_FARMER_CP;
    GivePlayerMoney(playerid,farmergehalt);
    SendClientMessage(playerid,0x00CC00FF, "Ernte Vorgang erfolgreich");
    SetVehicleToRespawn(fahrzeug);
    }
    else{AktuellerCP[playerid]++;SetPlayerCheckpoint(playerid,FarmerCPS[AktuellerCP[playerid]][0],FarmerCPS[AktuellerCP[playerid]][1],FarmerCPS[AktuellerCP[playerid]][2], 8.0);}
    }


    Sonstiges :


    Für Personen die kein Strtok verwenden :

    //Iwo in GM einfügen, am besten ganz unten.
    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }


    Fertig.. solltet ihr es verstanden haben, seit ihr in der Lage ein Farmer Job oder sogar andere wie Müllabfuhr oder eine Fahrschule zb.s zu adden.



    Edit : Schritt 6 Fehler ausgebessert


    Edit² : Tutorial etwas ausgebessert. Danke Goldkiller

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

    2 Mal editiert, zuletzt von Dog ()

  • Naja von dir hätte ich mehr erwartet.
    Sehr einfaches Tutorial, wobei es diesen Job
    nun jeden 2tem GF Release gibt...

  • :) du hast in deinen Post gerade selber die Antwort geschrieben.

    Zitat

    wobei es diesen Job
    nun jeden 2tem GF Release gibt...

    es beruht zwar nicht auf GF sondern ist ansich für leute die Selber ein GM erstellen möchten aber es gibt diesen Job eben oft. Ich bezweifel das jemand ein Tutorial veröffentlich von sachen die Vllt. nur wenige server haben. Einfach aus der Gefahr heraus das ihn dann auch jeder 2 hat :) .


    Zumal ich diesen nur Gemacht habe weil ich ein anderen tutorial hier gesehen habe welches nunja schlecht ist. Aber wie gesagt wer es Versteht und gut umgehen kann kann daraus noch viele andere jobs machen.


    Danke für ka die Kritik würd ich mal sagen und Dark :auch danke

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

  • new FarmFahrzeug[FFahrzeuge];
    new AktuellerCP[MAX_PLAYERS]; // Diese Function liest später euren Aktuellen CP aus bzw. prüft.
    new Float:FarmerCPS[FarmerCheckpoints][3]={
    {0.0,0.0,0.0}, //Dummy 0 nicht Ändern oder Entfernen.
    {-1383.8253,-575.0499,14.0097}, // X,Y,Z Mit euren 1 Checkpoint Coords ersetzen.
    {-1376.0725,-578.4518,14.0801}, // Hier das selber nur den 2 CP.
    {-1360.0706,-583.3293,14.0810},
    {-1320.2700,-576.2956,14.0752}


    C:\DOKUME~1\ADMINI~1\Desktop\KOPIEV~1.3C\GAMEMO~1\gtaesnew.pwn(177) : error 018: initialization data exceeds declared size
    C:\DOKUME~1\ADMINI~1\Desktop\KOPIEV~1.3C\GAMEMO~1\gtaesnew.pwn(3339) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    und jezze ?

  • #define FarmerCheckpoints 4 //Wie viel farmer CP´s ihr addet
    #define farmergehalt 300// Der Lohn den der Farmer bei erfolgreicher ernte bekommt.
    #define EndFarmerCP 4 // Der letzte CP den ihr addet.
    #define FFahrzeuge 1 // Wie viele Farmer Fahrzeuge ihr addet


    geht trozdem nich

  • du hast aber hoffentlich danach }; gemacht oder ?


    also so müsste es im ganzen aussehen.

    new Float:FarmerCPS[FarmerCheckpoints][3]={
    {0.0,0.0,0.0}, //Dummy 0 nicht Ändern oder Entfernen.
    {-1383.8253,-575.0499,14.0097}, // X,Y,Z Mit euren 1 Checkpoint Coords ersetzen.
    {-1376.0725,-578.4518,14.0801}, // Hier das selber nur den 2 CP.
    {-1360.0706,-583.3293,14.0810},
    {-1320.2700,-576.2956,14.0752}
    };

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

  • Habe es jezz wie du gesagt hast gemacht


    C:\DOKUME~1\ADMINI~1\Desktop\KOPIEV~1.3C\GAMEMO~1\gtaesnew.pwn(178) : error 018: initialization data exceeds declared size
    C:\DOKUME~1\ADMINI~1\Desktop\KOPIEV~1.3C\GAMEMO~1\gtaesnew.pwn(180) : error 010: invalid function or declaration
    C:\DOKUME~1\ADMINI~1\Desktop\KOPIEV~1.3C\GAMEMO~1\gtaesnew.pwn(3341) : warning 217: loose indentation
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • er kann ja auch an ein ganz anderen checkpoint stehen .. würde die Abfrage nicht sein würde der jeden XX aus der Public OnPlayerCheckpoint nehmen.

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

  • Für Anfänger (bzw ein Tutorial) wird zuwenig erklärt,
    ein

    Zitat

    //unter onplayerconnect


    ist kein Tutorial.


    Auch die Benutzung von PlayerToPoint sollte man sich seit 0.3a abgewöhnt haben,
    und eine Ortsprüfung beim Checkpoint ist ebenfalls suboptimal,
    sowas wird eig per variablen geregelt

  • Er könnte an einem anderem Checkpoint sein,ja, aber das weiss man doch danach durch
    if(AktuellerCP[playerid] != 0 && FarmerFahrzeug(fahrzeug))
    dass er in der Farmer Routine ist. Ist AktuellerCP 0 , dann fährt er durch irgendeinen Checkpoint der nicht zur Farmerroute gehört, ist AktuellerCP != 0 , dann ist er in der Farmerroute.
    Ich bleib dabei, die Position zu überprüfen ist unnötig o0.

  • fehler weg aber wenn ich /ernte mache kommt der checkpoint geht aber nicht mehr weg
    habs genau so gemacht wie du keine warns, errors, aber der 1. checkpoint geht net weg ..

    Einmal editiert, zuletzt von [Markus] ()

  • ExTrEmE : was hast du oben bei "FarmerCheckpoints " stehen ?.
    Gold : so müsste ich doch dann für jeden CP eine extra abfrage machen oder stehe ich jetz auf den schlauch ? weil so muss man sie lediglich oben eintragen.

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

  • ... :-O


    http://pastebin.com/JhNUHqbW


    So müsstes es auch funktionieren, habe es auch nicht probiert zu kompilieren.Geht ja eigentlich nur um das Prinzip dahinter.


    Zum Thema FarmerCheckpoints . Finde Ich jetzt auch nicht so gut gelöst.Hättest es auch mit sizeof(FarmerCPS) lösen können . Den DummyCP hätte man sich auch sparen können, indem man einfach das nicht-teilnehmen an dem FarmerJob durch
    AktuellerCP[playerid] = -1;
    Besser noch, so mach Ich es immer
    #define INVALID_FARMER_CP -1
    AktuellerCP[playerid] = INVALID_FARMER_CP;
    if( AktuellerCP[playerid] != INVALID_FARMER_CP ) { }

    Naja :huh: