Nice Kaliber, haut mich jetzt zwar nich direkt um, aber is doch eigtl. ganz genial
8/10
Danke, auch an dich wie an alle anderen habt ihr Verbesserungsvorschläge ? ![]()
mfg. ![]()
Nice Kaliber, haut mich jetzt zwar nich direkt um, aber is doch eigtl. ganz genial
8/10
Danke, auch an dich wie an alle anderen habt ihr Verbesserungsvorschläge ? ![]()
mfg. ![]()
aber es fehlen halt noch ein paar Einzelheiten.
...Ja dann sag mal welche ![]()
mfg. ![]()
Ja man kann es einfach erstellen
Also...wie soll es denn noch einfacher gehen ![]()
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. ![]()
//Edit: Farbe
Job Raenge
//Edit: Achso Ränge...im Job ![]()
Job Chat
Kann man doch so ganz simpel erstellen:
new string[128],job[64],name[24];
GetPlayerName(playerid,name,24);
GetJobName(GetPlayerJob(playerid),job,64);
format(string,128,"%s %s sagt: %s",job,name,text);
SendClientMessage(bla,-1,string);
mfg. ![]()
wo du keine unnötige
Wieso unnötig, also das ist für manche bestimmt sehr Hilfreich ![]()
scheiße veröffentlichst?
Bisschen mehr Konstruktive Kritik wäre evtl mal schön ![]()
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]
//Hier wäre ein Beispiel mit dini:
dini_IntSet(Spielerdatei,"Job",GetPlayerJob(playerid));
Würde mich über ein paar Feedbacks freuen ![]()
mfg.
SendJobMessage
CreateJobIcon + GetJobRange + Neuer Pastebin Link
Neue Links
Neue Funktion SetJobSpawn
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 ![]()
mfg. ![]()
Guten,
bei uns Funktioniert die SoundID nicht, weiß einer an was das liegen könnte?
Ja, nach dem Wiki existiert so eine Soundid nicht ![]()
<Felix_Blume>
Mal die neusten Samp Includes verwenden ![]()
mfg. ![]()
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. ![]()
Spring mal überdeinen Schatten bzw Stolz und sieh deine Fehler ein
Welchen Fehler, ich habe dir doch schon gesagt, dass wenn man es so macht, wie du es gesagt hast, dass es dann Ressourcenschonender wäre, aber ein Fehler ist das nicht sondern eine Verbesserung...
Und das ist definitiv nutzlos!
Das ist definitiv falsch...irgendwie hat die Include ja schon einen Nutzen...omg...
Ach Kaliber nicht verzweifeln
Sicherlich habe ich das Include gesehen : http://pastebin.com/ArajrrZY
Schön...ehm und jetzt ![]()
Wenn das nicht eindeutig ist - dann weiß ich allerdings auch nicht weiter
Was glaubst du wohl, warum "schnelligkeit" an 1. Stelle steht ![]()
Interessant - das ist schon der 2. Thread in dem du das so sagst und in einer PN auch - was willst du mehr?
Nein, was willst du eigentlich ?
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 ! ![]()
Omg, aber hauptsache erstmal mich runter machen ![]()
Er möchte dir klar machen das wenn playerid = 0 und h_id = 0 ist das die Schleife dann NICHT ausgeführt wird!
Er hat nach der Logik hinter der Abfrage gefragt und das ist sie -.-
Das er das damit meint ist mir auch klar, schreibe ich doch im Zitat drunter... ![]()
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 ![]()
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 ![]()
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 ![]()
Schreib oben in dein Script:
#pragma dynamic 21388
Damit vergrößerst du den Heapspace ![]()
mfg. ![]()
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 -.-
Alles anzeigen
Hallo,
anscheinend ist da noch ein Flüchtigkeitsfehler drinnen:
return CallLocalFunction("_OnPlayerConenct", "i", playerid);
Du hast _OnPlayerConenct nicht geforwardet sondern _OnPlayerConnect
forward _OnPlayerConnect(playerid);
MfG
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 ![]()
mfg. ![]()
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. ![]()