Beiträge von Kaliber

    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:

    Du willst doch ressourcenschonend sein


    Ehm...nein, ich wollte auf die Schnelligkeit hinaus, aber gut das du meine Gedanken lesen kannst...


    nur weil ich bisher keins deiner "Werke" toll fand - und sie nicht mit > 6 bewertet habe?


    Ich rede doch gar nicht von den anderen Posts, aber finde es lustig das du auf diese eingehst...


    Wo mache ich dich denn bitte nieder


    Du behauptest, dass ich kein Grundwissen hätte....


    Wenn man sich mal deine Includes anguckt, sind diese ja auch nur Wertzuweisungen mehr nicht.
    Siehe deine Inventarsystem Include - hier ist es doch genauso.


    Und...da steht sogar drüber, dass es ein simples Inventar System ist, verstehe allerdings dein Problem damit nicht...


    Bitte Kaliber, die wie vielte nutzlose und auch schlecht gescriptete Include ist das jetzt?


    Es nützt einfach nichts, hier diese Include zu benutzen,
    ein bsp. das Foreach von Y_Less ist um einiges besser.


    Ich möchte hier ebenfalls keine Bewertung abgeben.


    1. Du hast den Code nicht gesehen.
    2. Das foreach besser ist, wurde in diesem Thread oft genug erwähnt !
    3. Es zwingt dich keiner hier so einen sinnlosen Beitrag zu schreiben...

    Sicherlich nicht - ein Funktionsaufruf dauert länger als eine Variable auszulesen - das ist Grundwissen mein lieber
    Du hast ja static benutzt - deswegen ist es im Script NICHT nutzbar.


    Deswegen sollst du new verwenden und ihr einen vernünftigen Namen geben - sie MAXID - oder MAX_ID - etwas was man auch wirklich zuordnen kann


    You dont say...ich stimme dir doch mit meinem Satz zu ! :rolleyes:


    Omg, aber hauptsache erstmal mich runter machen ;)

    Dead meinte GENAU das - du hast dich wieder mit "ungefährer Wert" rausgeredet


    Dann lese den Beitrag mal richtig, der hat was anderes noch gemeint !


    Dann ist der Titel und die erste Zeile in der Include also nur zufällig dahin gekommen?
    Interessant


    Ja natürlich -.-


    Ohne kontext macht das ja auch keinen Sinn - statt static new benutzen - ihr einen vernünftigen Namen geben, so das sie im Script auch verwendbar ist.
    Das hab ich gemeint


    Ja ist sowas


    Wo ist hier bitte die Logik?


    Die Logik ist die, dass h_ID den Wert der höchsten playerid hat, was ja auch zutrifft...


    Sinnvoll wäre es hier h_ID = playerid+1; zu nehmen,
    da sonst einfach ein Slot fehlt


    Ja, müsste man dann wohl so machen...

    Sei dein Streamer oder deine Limit Include oder dein Inventar "System".


    Irgendwie stimmt das ja mal so überhaupt nicht :huh:


    Beispiel:
    Spieler 1,2,3,6,9 sind auf dem Server
    h_ID steht jetzt auf 9


    ID 9 verlässt den Server.
    Was passiert?
    h_ID steht jetzt auf 8 und das obwohl die nächste höchste ID 6 wäre


    LoL, das habe ich doch oben schon gesagt, dead meint aber was völlig anderes !


    Kein Spieler connected - h_ID ist 0
    Ein Spieler connected - h_ID ist 0
    Noch ein Spieler connected - h_ID ist 1


    Denk mal über den Code nach, das ist so richtig :rolleyes:


    der Variable einen vernünftigen Namen gegeben


    Na, h_ID, h = highest ID = playerid ? Finde ich sinvoll...


    Die Warscheinlichkeit das ein Spieler in dem momment Connected in der die Schleife gerade läuft, ist gleich 0.


    Welche Schleife :huh: