Beiträge von Kaliber

    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:

    Denn mit extra Funktion eine Schleife bis 498 durchzuführen ist ja auch wirklich besser als eine Schleife die immer bis 499 geht .. .


    Also das ist ja mal ein Scherz -.-



    Gutes Argument...trotzdem funktioniert es, verstehe ich gerade selber nicht ^^


    Punktewertung lasse ich aus,würde nämlich nicht positiv ausfallen.


    Was würdest du denn Bewerten, den Code oder den sinnvollen Nutzen, der ja für dich irrelevant sein kann, da du es ja nicht nutzen wirst :huh:


    mfg. :rolleyes:

    Sagt da aber was anderes. Du setzt die ID beim connecten auf die höchste playerid, beim verlassen ziehst du aber nur eins ab. Sinnvoller wäre es, die höchste ID zu holen (dazu wäre aber eine Schleife nötig). Das löst ganz nebenbei auch das o.g. Problem.


    Nicht wirklich ^^


    Es gibt gar kein Problem, das bildest du dir gerade irgendwie ein...


    Sobald die höchste Spielerid disconnected, wird der Wert um 1 reduziert, sehr richtig, das hat zwar zur folge, dass es nicht sonderlich genau ist, aber tortzdem, ist das die höchste Spielerid und somit werden alle Spieler in einer Schleife mit dieser Variable berücksicht ;)


    Wie du sagst, man bräuchte eine weitere Schleife um jetzt auf die genaue Anzahl der Spieler wieder zu stoßen, ich finde allerdings, dass ist irrelevant da ein sehr naher Wert denke ich mal völlig ausreicht ^^


    mfg. :thumbup: