Schön gemacht.
Noch bissl mehr erklären und das wäre Top ;D
7/10 Fischen.
Schön gemacht.
Noch bissl mehr erklären und das wäre Top ;D
7/10 Fischen.
Naja so lange ihr es gut findet bin ich zufrieden.
Mir ist es zu einem wichtig das auch andere die so etwas nicht hin bekommen damit lernen können.
Solange die die sich das tut angucken und dabei lernen bin ich froh das sie damit auch lernen, aber wenn sie es einfach kopieren ist das nicht das was ich damit erreichen wollte und diese Personen sollten mal überlegen ob sie wirklich scripten wollen...
Deine Überlegungen kann man gut verstehen, aber wie soll ein Neuling verstehen was du da schreibst und warum das da steht, aber nur sagst "Ich zeige dir jetzt wie sowas aussieht!".
Es ist so als würdest du einem 2. Klässler komplexe Gleichungen zum Beispiel an die Tafel schreiben, ohne das er weiß wie es geht. Ich glaube wohl kaum das er es selbst dann nicht kann.
Erklärst du ihm aber wenigstens wie man es löst, wird er vielleicht ganz bisschen gelernt haben ;D
Alles anzeigenGenau aus dem Grund.
Nun sagen alle 08/15 Server, sie haben als Feature ein Dynamisches Fraktionsfahrzeugesystem...
Wer sein Gehirn anstrengt und sich mit Pawn befasst, könnte sowas aus dem A/O scripten...
@BTT: Für die Mühe 4/10 Punkten
Punktabzug für Unnötigkeit und fehlerhafte Einrückung der Quelltexte.
//EDIT: Rechtschreibung
Exakt!
Und für die Leute die sowas noch nicht richtig können oder immer wieder Probleme haben, sollte man eindeutig ein Tutorial machen, wo weniger geschrieben, sondern mehr erklärt wird.
Ich kenne Leute die schreiben jetzt bei jeder "sscanf(params,"")"-Abfrage irgendwelche Buchstaben hin, die sie irgendwo in einen Tutorial gesehen haben.
Von mir bekommst du 3/10 Fischen nur, weil wenig erklärt wurde und es schon fast ein Copy & Paste Tutorial ist.
End of Stream.
Lolifreak.
Alles anzeigenErklär mir eins.
Warum erstellen wir Timer für Spieler die nicht Online sind?
Das macht wenig Sinn und zieht einfach nur Resourcen.
Sinnvoll wäre es das in OnPlayerConnect zu schreiben.
Denn man braucht den Timer ja erst wenn der Spieler auch online ist.
Am besten Spiecherst du die TimerID noch mit am, damit der Timer auch beim verlassen des Server
nicht weiterläuft, sondern "gekillt"/gestoppt wird.
In diesem Tutorial geht es ja darum, das der Server einen regelmäßigen Payday hat.
Man kann diesen Payday natürlich viel besser ausweiten, so das jeder Spieler seinen eigenen Payday hat.
Auch ressourcenfreundlicher könnte er sein, das ganze sollte man sich dann aber so zusammenbauen wie man möchte.
Es soll ja nur die Basis aufbauen und kein ganzes System ;D
End of Stream.
Lolifreak.
P.S: Danke für die gute Rückmeldung, freut mich
Naja, nicht wirklich schwer.
Habs auch in Dialogen und finde es besser, weil viele Spieler bei der anderen Variante einfach disconnecten und sich nen anderen Server suchen.
Wer dann nicht weiß was er machen soll, ist selbst Schuld.
Trotzdem gutes Tutorial.
Hätte man noch besser ausfüllen können ;D
8/10 Brotfischen - Gute Arbeit
Hey Padarom, du hast kein Problem damit wenn man das editiert oder?
Also ich hab mir jetzt daraus ein Ticketsystem gebaut und ein Reportsystem.
Sprich -> Ticketsystem = Fragen etc.
Sprich -> Reportsystem = Hacking etc. melden
Ist halt alles einzelnd geteilt.
Ja, wie man so etwas im string macht ist mir klar, aber wie mach ich das wenn jemand INGAME ein Taxi ruft, das das automatisch im Script oder in einer Datei gespeichert wird + in einem Dialog steht.
Hallo liebe Community.
Ich versuche gerade mein /annehmen Befehl aufzufrischen, komme an der einen Stelle aber einfach nicht weiter.
Ich habe mir vorgestellt, das wenn jemand ein Taxi ruft, das der Name dieses Spielers in einem LIST Dialog gespeichert wird und sobald der Taxifahrer den Namen aussucht, das er bei der Person ein Checkpoint setzt.
Aber wie genau funktioniert das mit dem Namen im Dialog?
Danke im Vorraus!
[XGRL]Lolifreak.
//hat sich erledigt.
Danke für die Rückmeldung
Gefällt mir auch! 10/10 aber für mein DM Script nicht zu gebrachen leider
Du kannst natürlich auch das ganze umgestalten. Wenn jemand ein Kill macht, wird in seine Spielerdatei dieser gespeichert. Dann machst du halt ein stock wo abgefragt wird wieviel Kills der Spieler hat und diesen fügst du dann beim Payday ein.
Sind dann zwar bissl mehr stocks und Paydays, dafür aber cooler für die Spieler ;D
MfG,
DarkHell aka [XGRL]Lolifreak.
Hallo liebe Community.
Wie mir aufgefallen ist suchen oft Leute nach verschiedenen bestimmten Paydays für Fraktionen, finden aber nur die normalen Paydays bei dem jeder Spieler das gleiche bekommt.
Ich möchte heute nun zeigen wie man ein Grundaufbau von solch einem Payday aufbaut.
Was ihr haben müsst/können müsst:
Lesen können.
Kleines Scriptingwissen haben.
Verstehen können.
Ein Speicherungssystem für Spieler haben (z.B. mit DINI)
Fangen wir an:
Als erstes müssen wir angeben, wann der Zahltag stattfinden soll. Dafür benutzen wir einen bestimmten Timer. Dieser nennt sich "SetTimerEx". Warum SetTimerEx? Wir brauchen in diesem Falle nicht nur eine Zeit sowie die Wiedergabe die angegeben wird, sondern diesesmal brauchen wir nun auch ein Format sowie ein Parameter. Falls ihr nicht genau wisst was das heisst oder warum wir das verwenden, kann ich euch falls nötig ein Link zu guten Definierungen dafür reinstellen.
Gut, wir brauchen also nun ein Timer. Wo gehört der rein? Unter OnGameModeInit! Warum? Würden wir dies für jede Person neu unter z.B. "OnPlayerConnect" starten lassen, würden wir bei einer Spieleranzahl von 7 ganze 7 Paydaytimer haben, die dann aber auch Einfluss auf andere Spieler haben. Das heißt, sollte dein Freund mal online kommen, bringt er nicht nur Spaß mit, sondern auch noch mehr Geld. Leider blickt dann keiner mehr durch, deswegen erstellen wir einen Payday der für alle Spieler im selbem Moment ausgegeben wird.
Erstmal brauchen wir einen Funktionsnamen für unseren Payday, damit wir später angeben können was passiert wenn der Timer abgelaufen ist.
Diesen verbinden wir mit dem Parameter playerid, den wir später im public brauchen werden.
Nun brauchen wir erstmal ein forward für unsere Funktion. Deswegen gehen wir oben in den Header und schreiben unter den "new XYZ usw":
forward Payday(playerid); // Payday ist nun unser Funktionsname
(Solltet ihr noch keine "new"'s haben, schreibt den forward einfach nach den includes.
Dann erstellen wir den eigentlichen Timer unter OnGameModeInit, wie oben schon begründet.
Dieser sollte so aussehen:
SetTimerEx("Payday",1000*60*20,true,"i",i); // "Payday" steht für den Funktionsnamen, dann geben wir die Zeit an, in diesem falle 1000 Millisekunden (1 Sekunde)*60 = 1 Minute*20, sprich 20 Minuten. "true" gibt an das sich das ganze wiederholen sol. "i" ist steht für Integer, was mit dem darauffolgenden "i" verbunden ist.
Aber halt! Warum benutzen wir nicht anstatt dem zweiten "i" einfach playerid? Weil OnGameModeInit keine Parameter enthält. Da wir aber momentan noch nicht wissen was "i" ist, müssen wir eine Schleife um unseren Timer setzen.
Dieser sollte so aussehen:
for(new i; i != GetMaxPlayers(); i++)
{
Timer
}
Ich hoffe ihr wisst was eine Schleife ist, ansonsten müsst ihr euch dort noch einmal genau erkundigen.
Vielleicht kann ich unten ja noch eine kleine Definition hinzufügen.
Wir haben nun also schon einen Timer für alle, aber was soll passieren wenn die 20 Minuten abgelaufen sind?
Dafür müssen wir eine neue public Funktion irgendwo ausserhalb der anderen machen. Wir nehmen jetzt einfach mal unsere letzte Zeile und schreiben dort folgendes rein:
public Payday(playerid)
{
return 1;
}
Nun müssen wir das ganze ja noch mit unseren Details stopfen.
Wir wollen das wenn der Spieler in jener Fraktion ist, dass er den und den Gehalt bekommen soll.
Dafür machen wir erstmal, falls ihr noch keinen habt, einen neuen stock.
Diesen kann man als Abkürzung für eine Handlung sehen.
Wir nennen ihn jetzt einfach mal "istSpielerInFraktion".
Dann brauchen wir noch den Parameter für den Spieler, sowie die Fraktionsid. Im diesem Falle "playerid" und "fraktionsid".
Nun erstellen wir uns unseren stock:
stock istSpielerInFraktion(playerid,fraktionsid)
{
if(GetPVarInt(playerid,"Fraktion")==fraktionsid) return 1; //Achtung! Hier müsst ihr natürlich euer Loginsystem/Speichersystem benutzen. Ich benutze dafür DINI!
return 0;
}
Hier wird angesagt, dass wenn im Befehl o.Ä. "istSpielerInFraktion" steht, dass die Handlung im stock passieren soll bzw abgefragt werden soll.
Nun starten wir mit dem Details.
Wir sagen mal Fraktionsid 1 ist die Polizei.
Also schreiben wir in unserem public:
if(isPlayerInFraktion(playerid,1))
{
}
Hier wird angesagt: Wenn er Spieler in der Fraktion 1 ist, mache {das}.
Ich bin nun dafür das die Polizei einen Gehalt von 1700$ bekommt.
Dann fügen wir einfach in unsere Funktion ein:
GivePlayerMoney(playerid,1700);
Natürlich soll der Spieler auch noch erfahren warum er 1700$ bekommen hat.
Deswegen senden wir dem Spieler noch eine Nachricht.
So könnte es etwa aussehen:
SendClientMessage(playerid,farbe,"=======PAYDAY=======");
SendClientMessage(playerid,farbe,"Gehalt: 1700$");
SendClientMessage(playerid,farbe,"====================");
Das könnt ihr nun natürlich für jede Fraktion anpassen und mit einem Banksystem mit Zinsen verbessern.
Ist natürlich euch überlassen.
Ich hoffe ihr konntet das meiste verstehen und habt euch die Zeit genommen alles genau durchzulesen.
Des weiteren hoffe ich das ich euch mit dem Tutorial helfen konnte und euch was beibringen konnte.
Bis dahin,
DarkHell aka [XGRL]Lolifreak!
Alles anzeigenScripter mit genug Erfahrung können dies sowieso aus der Hosentasche zaubern.
Etwas unerfahreneren fällt so ein System jedoch schwer, da sie - wie der Name schon sagt - unerfahrener sind.
Mein Tipp:
Lest euch Tutorials durch,
macht nicht dauernd Copy & Paste,
schreibt eure Befehle selber und kopiert sie nicht aus dem Godfather.
Dann schafft ihr auch so ein System
Das ist der Grund warum mein versuchtes Selfmade länger dauert, als so ein Script welches aus Copy & Paste-Puzzleteilen besteht wo der Admin kein einzigen Bug fixxen kann und nach 3 Tagen fertig ist.
Die Aussage kann ich nur weiterempfehlen.
Bin selbst Anfänger und Copy & Paste wird schon nicht mehr benötigt.
Hallo
Ich suche jemanden der einen Taxitimer für mich erstellt oder einen hat und ihn mir anbietet.
Er soll wenn einer einsteigt dem Kunden immer jede 15 10$ abziehen und dem Fahrer 10$ dazugeben.
Dazu dann ein Gametext bei dem denn steht das er wieder 10$ bekommen/abgezogen bekommen hat.
Wäre freundlich
Danke im Vorraus!
MfG
DarkHell.
Danke, hab es selbst schon gesehen. Eigentlich sind das nicht meine Fehler
Keine Ahnung was mit mir los war, ist eigentlich nicht standard.
Naja funktioniert nun
Danke trotzdem!
Hallo liebe Community.
Ich habe einen /taxi Befehl eingebaut. Damit wird dem Taxifahrer eine Nachricht gesendet das jemand ein Taxi angefordert hat und der Taxifahrer dies mit /annehmen bestätigen muss.
Sobald ich das aber mache setzt er den Checkpoint bei ID 0 (In diesem Falle der Busbot).
Hier ist der Befehl:
ocmd:annehmen(pID,params[])
{
if(isPlayerInFrakt(pID,4))
{
if(Tduty[pID]== 1)
{
if(TaxiRuf[pID]== 1)
{
new playerid,Float:x,Float:y,Float:z,string[128],string2[128];
GetPlayerPos(playerid,x,y,z);
SetPlayerCheckpoint(pID,x,y,z,3.0);
format(string,sizeof(string),"%s hat deinen Ruf angenommen! Warte an deiner Position!",SpielerName(pID));
format(string2,sizeof(string2),"Du hast den Ruf von %s angenommen! Es wurde ein Marker gesetzt!",SpielerName(playerid));
SendClientMessage(pID,COLOR_LIGHTBLUE,string2);
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
TaxiCheckpoint[pID]=1;
}
}
else SendClientMessage(pID,COLOR_YELLOW,"Du bist nicht im Dienst!");
}
else SendClientMessage(pID,COLOR_LIGHTRED,"Du bist kein Taxifahrer!");
return 1;
}
ocmd:taxi(playerid,params[])
{
new string[128],string2[128];
format(string,sizeof(string),"Du hast ein Taxi angefordert. Warte auf Annahme!");
TaxiRuf[playerid]=1;
format(string2,sizeof(string2),"%s hat ein Taxi angefordert. Gebe /annehmen ein um anzunehmen!",SpielerName(playerid));
SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(isPlayerInFrakt(i,4))
{
SendClientMessage(i,COLOR_LIGHTBLUE,string2);
}
}
return 1;
}
Bitte um Hilfe :/.
Danke im Vorraus.
DarkHell.
Das mit den mehreren Funktionen in einem case funktioniert so:
case 0:{SendClientMessage(playerid,farbe,"text"); SendClientMessage(playerid,farbe,"text");}
Ich würd es so machen
switch(dialogid==Dialogeinfügen) //Dialognamen einfügen
{
case 1:
{
if(!response) //Zeigt das an wenn der spieler abbricht.
{
SendClientMessage(playerid,COLOR_WHITE,"Vorgang abgebrochen."); //ggf. ersetzen
return 1;
}
switch(listitem)
{
case 0:{blablabla} //Aktionen einfügen
case 1:{blablabla}
case 2:{blablalba}
case 3:{abcdefg}
case 4:{dies das}
case 5:{bla bla}
}
}
}
if(strcmp(cmdtext,"/perso",true)==0)
{
if(IsPlayerInRangeOfPoint(playerid,2,x,y,z)) //x y z ersetzen mit deiner Stadthalle o.Ä.
{
GetPVarInt(playerid,"Personalausweis")==0) //Anpassen aufs Login/register system
{
SendClientMessage(playerid,COLOR_WHITE,"Du hast einen Personalausweis erhalten.");
SendClientMessage(playerid,COLOR_WHITE,"Dieser hat dich XYZ$ gekostet."); //XYZ mit deinen Wunschkosten ersetzen, ggf. Timer einbauen.
SetPVarInt(playerid,"Personalausweis",1); //Anpassen zum Login/register System.
GivePlayerMoney(playerid,-XYZ); //XYZ mit Wunschkosten ersetzen.
}
else SendClientMessage(playerid,COLOR_LIGHTRED,"Du besitzt schon einen Personalausweis!");
}
else SendClientMessage(playerid,COLOR_LIGHTRED,"Du bist nicht in der Stadthalle!");
return 1;
}
Ungetestet, im Forum geschrieben.
Ggf. Farbcodes ändern.
for(new i=0; i<sizeof(Armyr1cars); i++)
{
if(GetPlayerVehicleID(playerid)==Armyr1cars[i])
{
if(GetPVarInt(playerid,"Fraktion") !=5)
{
if(GetPVarInt(playerid,"Frakrang") >=1)
{
SendClientMessage(playerid,Rot,"Du braucht Rang 1 bei den Armys.");
RemovePlayerFromVehicle(playerid);
}
}
}
}
würde es so machen.