Beiträge von Kaliber

    Ich meinte mit SetJobSpawn eigentlich der Spawn nach dem Tot. Also wenn OnPlayerDeath abgefragt wird. Aber egal...


    Das ist ja so gemacht, schau mal auf den Code ;)


    Dann mach das doch in deiner Include, daß SetPlayerMapIcon (Marker plus Checkpoint) so abläuft, daß es für den Scripter, der deine INC nutzt, wie ein normaler Checkpoint ausschaut ^^. Machbar ist das, hab das selbst so ;)


    Naja ich dachte an MapIcon id 41 http://wiki.sa-mp.com/wiki/MapIcons oder was meinst du :huh:


    mfg. :thumbup:

    SetMapIcon mehrere CP's anzeigen lassen kann?


    Dir ist klar dass SetPlayerCheckpoint != SetPlayerMapIcon ist... :rolleyes:


    Aber es gibt so ein MapIcon das man setzten kann, ja...könnte man so machen, halte ich jedoch für weniger sinnvoll :D


    mfg. :thumbup:

    SetPlayerJobCheckpoint:
    für das streamen der Checkpoints nötig. Kann ja sein, das jemand Checkpoints während des Jobs auch für andere Dinge verwendet, wie z.B. Fastfood Stände...


    ? Dir ist bewusst, dass nur 1 Checkpoint angezeigt werden kann...also gleichzeitig ?!


    Kategoresieren deswegen, damit man schnelleren und leichteren Zugriff auf den Job hat (als Scripter).
    In der Jobbox könnten Infos wie z.B. nächste(r) Zielort(e), Name des Jobs, Wieviele Items (z.B. Pakete) hat man noch usw. usw.


    Ja, schon klar, aber diese Informationen sind ja sinnlos für die Include, kann man ja schön alles selbst in eine Variable schreiben, da man sowas eigentlich nicht mehr vereinfachen kann :D


    PS: Die neue Funktion ist drinnen...


    mfg. :thumbup:

    SetJobTyp(jobid, typid); // <-- jobid ist klar, typid siehe weiter unten


    SetJobTyp...ehm, das muss man doch nicht kategorisieren...ich meine es gäbe dazu noch 1000 weitere Möglichkeiten...


    SetPlayerJobCheckpoint(playerid, jobid, x, y, z);


    Verstehe ich nicht, was hat die jobid da zu suchen....


    ToggleJobBox(playerid, jobid);


    Naja, das könnte man zwar machen, aber man hat ja so gut wie keine Infos über den Job, was soll da alles drinnen stehen, ich meine der User soll ein paar Dinge ja auch noch machen :D


    SetPlayerJobSpawn(playerid, x, y, z, a, interior, world);


    Das ist eine gute Idee, würde aber allgemein es so machen:


    SetJobSpawn(jobid, x, y, z, a, interior, world);


    aus CreateJobCar(...) würde ich dann lieber CreateJobVehicle(...) machen!


    ehm...jo :D Mache ich auch mal ^^


    mfg. :thumbup:

    Müssen tut man halt nichts ;)
    Aber würde ich schon recht cool finden, da (gehe ich mal von aus) nicht alle ne Stadthalle haben werden ^^


    Habe deinen Vorschlag verwirklicht, schau mal bei den neuen Funktionen ;)


    @Rocky
    Danke ;)


    mfg. :thumbup:

    Ich habe bis jetzt nicht gesehen das irgendwie nen Job Icon bzw. nen Pickup erstellt wird
    Könntest ja noch einbauen das man nen pickup erstellen kann womit man denn mit ENTER in den Job kommt


    Mhm...achso, ja ich dachte man hat eine Stadthalle und wählt da einfach die Jobs aus :D


    Auf die Idee bin ich natürlich jetzt nicht gekommen, dass man die Jobs verteilt wie in einigen GF's :D


    Ist aber eine Gute Idee, mache ich mal rein, muss man ja nicht nutzen ^^


    mfg. :thumbup:

    Bei deinem Code tun mir die Augen weh, hier mal kürzer geschrieben, löst glaube ich nicht dein Problem, ist aber besser:


    public PayDay()
    {
    SyncTime();
    DollahScoreUpdate();
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(gPlayerLogged[i]) OnPlayerUpdate(i);
    PlayerInfo[i][pGesamtMinutes]++;
    PlayerInfo[i][pMinutesSinceLogin]++;
    PlayerInfo[i][pMinutesSinceAn]++;
    if(PlayerInfo[i][pPlayMinutes] <= 60)PlayerInfo[i][pPlayMinutes]++;
    else {
    PlayerInfo[i][pPlayMinutes] = 0;
    new string[128],account,interest,rent = 0,playername2[MAX_PLAYER_NAME],tmpintrate;
    if(M_Bot[i][PAFK] != 0) SendClientMessage(i, COLOR_LIGHTRED, "* Du hast kannst keinen PayDay bekommen, solange du AFK bist!");
    else {
    if(MoneyMessage[i]==1) {
    if(PlayerInfo[i][pJailed] == 0 && WantedLevel[i] >= 0) {
    SendClientMessage(i, COLOR_LIGHTRED, "Du konntest deine Schulden nicht Bezahlen und hast ein Wanted bekommen!");
    GivePlayerMoney(i, 1000);
    WantedLevel[i]++;
    }
    else if(PlayerInfo[i][pJailed] == 1) {
    SendClientMessage(i, COLOR_LIGHTRED, "Du bist in den Schulden und musst 3 Minuten länger sitzen!");
    PlayerInfo[i][pJailTime] += 180;
    GivePlayerMoney(i, 1000);
    }
    }
    GetPlayerName(i, playername2, sizeof(playername2));
    account = PlayerInfo[i][pAccount];
    new key = PlayerInfo[i][pPhousekey];
    if(key != 255) {
    rent = HouseInfo[key][hRent];
    if(strcmp(playername2, HouseInfo[key][hOwner], true) == 0) rent = 0;
    else if(rent > GetPlayerMoney(i)) {
    PlayerInfo[i][pPhousekey] = 255;
    SendClientMessage(i, COLOR_WHITE, "Du wurdest aus der Wohnung geschmissen!");
    rent = 0;
    }
    HouseInfo[key][hTakings] = HouseInfo[key][hTakings]+rent;
    }
    if (key != 255 && strcmp(playername2, HouseInfo[key][hOwner], true) == 0){
    if(PlayerInfo[i][pDonateRank] > 0)tmpintrate = intrate+4;
    else mpintrate = intrate+2;
    }
    else {
    if(PlayerInfo[i][pDonateRank] > 0) tmpintrate = 3;
    else tmpintrate = 1;
    }
    if(PlayerInfo[i][pPbiskey] > 0) tmpintrate++;
    new fraktion = 0,checks;
    if(fraktion >= 0) {
    if(FraktionsKasse[fraktion] - PlayerInfo[i][pGehalt] < 0){
    checks = 0;
    GivePlayerMoney(i, checks);
    }
    else if(FraktionsKasse[fraktion] - PlayerInfo[i][pGehalt] >= 0){
    checks = PlayerInfo[i][pGehalt];
    GivePlayerMoney(i, checks);
    FraktionsKasse[fraktion] -= checks;
    }
    }
    else if(PlayerInfo[i][pJob] != 0 || PlayerInfo[i][pMember] == 0 || PlayerInfo[i][pLeader] == 0) checks = 500,GivePlayerMoney(i, checks);
    PlayerInfo[i][pAccount] -= Tax;
    if(PlayerInfo[i][pDonateRank] > 0) {
    new bonus = PlayerInfo[i][pPayCheck] / 2;
    PlayerInfo[i][pPayCheck] += bonus;
    }
    new ebill = (PlayerInfo[i][pAccount]/10000)*(PlayerInfo[i][pLevel]);
    ConsumingMoney[i] = 1;
    if(PlayerInfo[i][pAccount] > 0) PlayerInfo[i][pAccount] -= ebill,SBizzInfo[3][sbTill] += ebill/5;
    else ebill = 0;
    if(PlayerInfo[i][pMember] == 0 && PlayerInfo[i][pLeader] == 0) checks += 500;
    interest = (PlayerInfo[i][pAccount]/1000)*(tmpintrate);
    PlayerInfo[i][pExp]++;
    PlayerPlayMusic(i);
    PlayerInfo[i][pAccount] = account+interest;
    SendClientMessage(i, COLOR_GOLD, "|================| KONTOAUSZUG |================|");
    format(string, sizeof(string), " Gehalt: $%d Miete: -$%d Steuern: -$%d", checks, rent, Tax);
    SendClientMessage(i, COLOR_GRAD1, string);
    if(PlayerInfo[i][pPhousekey] != 255 || PlayerInfo[i][pPbiskey] != 255) {
    format(string, sizeof(string), " Strom Kosten: -$%d", ebill);
    SendClientMessage(i, COLOR_GRAD1, string);
    }
    if(PlayerInfo[i][pHandyVer] == 1) {
    SendClientMessage(i,COLOR_GRAD2," Handyvertragskosten: -$100");
    GivePlayerMoney(i, -100);
    }
    format(string, sizeof(string), " Zinsen: $%d [0.%d Prozent]", interest,tmpintrate);
    SendClientMessage(i, COLOR_GRAD2, string);
    SendClientMessage(i, COLOR_GOLD, "|=================||============||==============|");
    format(string, sizeof(string), " Neuer Kontostand: $%d", PlayerInfo[i][pAccount]);
    SendClientMessage(i, COLOR_GRAD5, string);
    format(string, sizeof(string), "~g~PayDay~y~!!!");
    GameTextForPlayer(i, string, 5000, 1);
    if(checks == 0 && FrakMember(i) && PlayerInfo[i][pJob] == 0) SendClientMessage(i,COLOR_LIGHTRED, "Da die Fraktionskasse leer ist bekommst du kein Gehalt!");
    rent = 0,PlayerInfo[i][pPayCheck] = 0,PlayerInfo[i][pConnectTime] += 1;
    if(WantedLevel[i] >= 1) {
    WantedLevel[i] --;
    new wlevel = GetPlayerWantedLevel(i),tmp[64];
    format(tmp,sizeof(tmp), "Aktuelles Wantedlevel: %i", wlevel-1);
    SendClientMessage(i, COLOR_GREEN,tmp);
    }
    if(PlayerInfo[i][pDonateRank] > 0) {
    PlayerInfo[i][pPayDayHad] += 1;
    if(PlayerInfo[i][pPayDayHad] >= 5) PlayerInfo[i][pExp]++,PlayerInfo[i][pPayDayHad] = 0;
    }
    if(KnastTime[i] > 0)KnastTime[i]--;
    if(KnastTime[i] == 0 && Knast[i] > 0) Knast[i] = 0,KnastTime[i] = 0,SpawnPlayer(i),SendClientMessage(i,COLOR_YELLOW," Benimm dich ab jetzt, oder ein Admin wird dich wieder einsperren!");
    }
    }
    return 1;
    }


    mfg. :thumbup:

    Ja man kann es einfach erstellen


    Also...wie soll es denn noch einfacher gehen :huh:


    aber man kann dein ganzes Include ganz einfach scripten.


    Ehm...naja das ist natürlich relativ, man hat schon einen Nutzen aus dieser Include, auch wenn sie einfach zu erstellen ist...


    Aber ich füge mal die Funktion SendJobMessage(jobid,farbe,string[]); hinzu, dann wird die Nachricht an alle die den selben Job haben wie der Spieler gesendet ;)


    mfg. :thumbup:


    //Edit: Farbe

    Guten Morgen liebe Community,


    in den letzten Tagen, habe ich ein paar Tutorial Threads gelesen und habe gemerkt, dass Leute immernoch Probleme haben mit dem Erstellen von Jobs...
    Aus diesem Grund diese Include, sie bietet eine angenehme und einfache Verwaltung von Jobs:


    [tabmenu]


    [tab='Allgemeine Informationen','http://forum.sa-mp.de/wcf/icon/infoM.png']
    [subtab='Funktionen','http://forum.gamerzhost.de/wcf/icon/codeS.png']
    Es gibt folgende Funktionen:
    (Es sind alle nochmal mit Beispielen im "Beispiel-Sub Tab")


    SetPlayerJob(playerid,jobid); //Setzt den Job für den Spieler
    GetPlayerJob(playerid); //Returnt die Jobid
    SetJobName(jobid,name[]); //Man kann den Namen des Jobs hier einstellen
    GetJobName(jobid,name[],len); //Man kann den Jobnamen abfragen
    CreateJobCar(jobid,model,Float:X,Float:Y,Float:Z,Float:A,c1,c2,respawn=-1); //Man kann ein Job Car erstellen
    GetJobCar(veh); //Returnt die Jobid zu der dieses Auto gehört
    SendJobMessage(jobid,farbe,string[]; //Sendet an alle Spieler mit dieser Jobid eine Nachricht
    CreateJobIcon(jobid,Float:X,Float:Y,Float:Z,text[]); //Erstellt ein Pickup wo man einen Job annehmen kann
    GetJobRange(playerid); //retunrt die jobid von dem Pickup (falls -1) dann ist er nicht in der Nähe von dem Pickup
    SetJobSpawn(jobid,Float:x,Float:y,Float:z,Float:a,interior,world); //Setzt den Spawn für den Job (er wird auch direkt dahin gesetzt)
    [subtab='Beispiele','http://www.damen-eishockey.de/images/lampe.gif']
    //Hier nun einige Beispiele:


    SetPlayerJob(playerid, 1); //Spieler wäre jetzt im Job 1
    GetPlayerJob(playerid); //Würde 1 returnen


    SetJobName(1,"LSPD"); //Wenn der Spieler jetzt in Job 1 wäre, wäre er im LSPD
    new job[64]; // 64 = Maximale Länge des Namens eines Jobs
    GetJobName(1,job,64); //In job würde jetzt als String LSPD stehen
    //Alternative Abfrage:
    GetJobName(GetPlayerJob(playerid),job,64); //In job steht jetzt der Jobname von dem Spieler


    CreateJobCar(1,411,0.0,0.0,0.0,0.0,1,2); //erstellt einen Infernus (411) für den Job 1


    //Unter OnPlayerEnterVehicle z.B. könnte man jetzt folgendes abfragen:
    if(GetPlayerJob(playerid) != GetJobCar(vehicleid) && GetJobCar(vehicleid) > 0) {
    //Hier dürfte playerid das Fahrzeug nicht fahren, da er nicht zu dem Job gehört
    }


    CreateJobIcon(1,1200.0,-2000.0,13.5,"Hier kann du Dedektiv werden, tippe:\n/accept job"); //Hier wird ein Pickup + 3D Text erstellt...


    //Nun zu dem /accept job befehl, das müsste enthalten sein:
    new j = GetJobRange(playerid);
    if(j == -1) return SendClientMessage(playerid,rot,"Du befindest dich nicht in der Nähe eines Jobpickups !");
    //wenn er keinen Job hat
    SetPlayerJob(playerid, j);
    new string[128],job[64];
    GetJobName(j,job,64);
    format(string,128,"Du bist erfolgreich %s geworden !",job);
    SendClientMessage(playerid,blau,string);

    [subtab='Zusätzliche Informationen','http://www.rezepte-guru.de/template/images/icon_stern.gif']
    Man kann momentan maximal 20 Jobs erstellen, aber das kann man so ändern:


    #define MAX_JOBS 25 //Jetzt könnte man 25 Jobs erstellen...
    #include <job>
    [subtab='Download','http://www.projekt-deutsch.de/templates/cback/images/download.gif']
    Source-Code: Pastebin
    Direkter-Download: Mediafire
    [/tabmenu]


    Falls manche von euch sich jetzt fragen, wie man es abspeichert:

    //Hier wäre ein Beispiel mit dini:
    dini_IntSet(Spielerdatei,"Job",GetPlayerJob(playerid));


    Würde mich über ein paar Feedbacks freuen :)


    mfg. :thumbup:


    • Edits:

      SendJobMessage

    • Edits:

      CreateJobIcon + GetJobRange + Neuer Pastebin Link

    • Edits:

      Neue Links

    • Edits:

      Neue Funktion SetJobSpawn

    • Edits:

      Mediafire Direkt Downloadlink

    Gute Idee namespace ;)


    Das System gefällt mir auch sehr gut, habe es so noch nirgends gesehen :)


    Zusätzlich dazu müsste man auch nicht jedem Honk, der am Script mitarbeiten soll "vertrauen"


    Das ist auf jeden Fall einer der wichtigsten Vorteile :D


    mfg. :thumbup:

    Wie siehts hier aus ? Werden die Items denn auch von deiner Include gespeichert oder muss man das selber machen ?


    Die Include gibt dir nur Funktionen, mehr nicht...


    Sprich, du musst es selber speichern, aber das ist ja nicht wirklich schwer:


    //Hier mal ein Beispiel in dini:
    new items[6]; //6 Items willst du hier speichern
    for(new i; i<6; i++) GetItem(playerid,i,items[i],16);
    dini_Set(Spielerdatei,"Item1",items[0]);
    dini_Set(Spielerdatei,"Item2",items[1]);
    dini_Set(Spielerdatei,"Item3",items[2]);
    //usw...


    mfg. :thumbup: