Du musst einfach nur den Anweisungen von diesem Thread folgen, dann sollte alles klappen.
Vergiss aber nicht in den Server.cfg den Eintrag "maxnpc" zu erhöhen.
Du musst einfach nur den Anweisungen von diesem Thread folgen, dann sollte alles klappen.
Vergiss aber nicht in den Server.cfg den Eintrag "maxnpc" zu erhöhen.
Dein Code sagt aus, dass er einsteigen kann, jedoch kann er das Auto nicht benutzen und wird rausgeworfen, nachdem er eingestiegen ist.
Somit schmeißt er dich raus, wird jedoch selbst vom Script rausgeworfen.
Ist das vllt besser, oder möchtest du etwas anderes bezwecken?
stock Rep(playerid,veh)
{
SendClientMessage(playerid,COLOR_GREEN," Du hast dein Fahrzeug auf Kosten des Staats tanken und reparieren lassen!");
Gas[veh] = GetGasMax(GetVehicleModel(veh));
RepairVehicle(veh);
return 1;
}
if(strcmp(cmd,"/rep",true) == 0)
{
if(IsACop(playerid) || IsPlayerInFrac(playerid,4) || IsPlayerInFrac(playerid,7) || IsPlayerInFrac(playerid,3))
{
if(IsAtRep(playerid))
{
new veh = GetPlayerVehicleID(playerid);
if(IsAnAmbulance(veh) || IsACopCar(veh) ||IsAArmyCar(veh) || IsAPraesiCar(veh) || IsAFbiCar(veh))
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
Rep(playerid,veh);
}
else SendClientMessage(playerid,COLOR_RED," Du bist nicht der Fahrer!");
}
else SendClientMessage(playerid,COLOR_RED," Du bist in keinem Staatsfahrzeug!");
}
else SendClientMessage(playerid,COLOR_RED," Du bist an keinem /rep-Punkt!");
}
else SendClientMessage(playerid,COLOR_RED," Du bist nicht berechtigt, dein Fahrzeug auf Kosten des Staats zu reparieren!");
return 1;
}
Dein Script benötigt die Datenbank, die du angegeben hast. Wenn diese jedoch nicht existiert, wird der Server nicht gestartet.
Schau dir dazu den Thread nochmal an. Da gibt es auch eine SQL-Datei, die möglicherweise zu dir passt.
Edit: Rechtschreibfehler behoben ![]()
Hast du die richtige Datenbank erstellt, die dein Script erfordert?
Hast du XAMPP?
Guten Tag,
im folgendem Thema möchte ich euch zeigen,
wie ihr einen einfachen Waffendialog erstellen könnt.
Der fertige Dialog wird ungefähr so aussehen:
-------------------------------------------------------------
Der erste Schritt ist ein Enum (Aufzählung) zu erstellen.
Für unseren Dialog wird es so aufgebaut sein:
enum WaffenladenInfo //Name des Enums
{
Name[32], //Name der Waffe
Preis, //Preis der Waffe
WaffenID, //WaffenID (Weaponid - http://wiki.sa-mp.com/wiki/Weapons)
Munition //Munition, die man bei einem Kauf bekommen soll
};
Im zweiten Schritt erstellen wir die "Liste" der Waffen,
die der Dialog später beinhalten soll. Dafür benötigen
wir noch eine festgelegte Anzahl (MAX_WEAPONS) an "Elementen" (Waffen),
die das Enum beinhaltet. In unserem Beispiel sind das 6 Waffen.
Also haben wir 6 Elemente, die wir so definieren:
#define MAX_WEAPONS 6
Jetzt kommen wir zur eigentlichen Waffenauswahl.
Wir erstellen eine Array (new Waffenladen) mit 6 Einträgen (MAX_WEAPONS)
und der Struktur von "WaffenladenInfo". Somit bekommt jedes Element einen
Namen, Preis, WaffenID und Munition.
new Waffenladen[MAX_WEAPONS][WaffenladenInfo]=
{
{"Vibrator (Silber)",99999,13,1},
{"Desert Eagle",500,24,50},
{"Shotgun",700,24,50},
{"MP5",1500,29,200},
{"M4",4000,31,300},
{"Minigun",8000,38,500} //Das Komma in der letzten Zeile fällt bei einem Enum immer weg
};
Für eine bessere Übersicht im Script definieren wir den Ausdruck "DIALOG_WAFFENLADEN"
als die Zahl, die der Dialog später erhalten wird. In unserem Beispiel bekommt
er die Zahl 1. Das ist generell ratsam, da man bei 20+ Dialogen, die alle nur nummeriert
sind, leicht vergisst für welchen Dialog die einzelnen Nummer stehen.
"DIALOG_WAFFENLADEN" ist da schon hilfreicher.
#define DIALOG_WAFFENLADEN 1
Um den Dialog einem Spieler zu zeigen verwenden wir eine "Stock"-Funktion. !Hinweis 1!
In diesem Beispiel nennen wir ihn "ShowWaffenladen(playerid)".
stock ShowWaffenladen(playerid) //playerid ist die Spielerid, die ihn angezeigt bekommen soll
{
new string[512]; //Der String, in dem alle Informationen gespeichert werden, um dann dargestellt zu werden
for(new i; i < MAX_WEAPONS; i++) //Eine For-Schleife, die in unserem Fall 6x aufgerufen wird (0 bis 5). Das i steht hier für die momentane Zahl. !Hinweis 2!
{
format(string,sizeof(string),"%s%s (%d Schuss/$%d)\n",string,Waffenladen[i][Name],Waffenladen[i][Munition],Waffenladen[i][Preis]);
//!Hinweis 3!
}
ShowPlayerDialog(playerid,DIALOG_WAFFENLADEN,DIALOG_STYLE_LIST,"Waffenladen",string,"Kaufen","Abbrechen");
//Der Dialog DIALOG_WAFFENLADEN (1) wird als Liste angezeigt mit dem Inhalt von "string" und den 2 Buttons "Kaufen" & "Abbrechen"
return 1;
}
Diese Funktion kann z.B. dann aufgerufen werden, wenn der Spieler einen
bestimmten Befehl eingibt oder in einem bestimmten Radius einer Positonen
eine festgelegte Taste drückt.
if(strcmp("/mycommand", cmdtext, true, 10) == 0)
{
ShowWaffenladen(playerid);
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys == KEY_FIRE)
{
if(IsPlayerInRangeOfPoint(playerid, ...))
{
ShowWaffenladen(playerid);
}
}
return 1;
}
Damit auch etwas passiert bzw. der Spieler seine Waffe bekommt, die er
kaufen möchte, müssen wir im Public "OnDialogResponse" unseren Dialog
noch hinzufügen.
if(dialogid == DIALOG_WAFFENLADEN)
{
if(response) //Wenn auf "Kaufen" gelickt wurde (Button 1)
{
new string[128]; //Ein String wird erstellt, um eine formatierte Nachricht an den Spieler zu senden
new Money = GetPlayerMoney(playerid); //Die Variabele Money wird verwendet, um nicht jedes mal GetPlayerMoney(playerid) schreiben zu müssen
if(Money >= Waffenladen[listitem][Preis]) //Wenn er genug Geld dabei hat !Hinweis 4!
{
format(string,sizeof(string),"Du hast erfolgreich einen/eine %s mit %d Schuss fuer $%d gekauft!",Waffenladen[listitem][Name],Waffenladen[listitem][Munition],Waffenladen[listitem][Preis]);
//Der string wird formatiert, um eine passende Nachricht an den Spieler zu senden, was er gerade gekauft hat
SendClientMessage(playerid,FARBE,string);
GivePlayerWeapon(playerid,Waffenladen[listitem][WaffenID],Waffenladen[listitem][Munition]); //Die Waffe mit der entsprechender Munition wird vergeben
GivePlayerMoney(playerid,-Waffenladen[listitem][Preis]); //Das benötigte Geld wird dem Spieler abgezogen
}
else //Wenn er nicht genug Geld dabei hat
{
new RMoney = Waffenladen[listitem][Preis]-Money;
format(string,sizeof(string),"Du hast nicht genug Geld dabei, um einen/eine %s zu kaufen! ($%d zu wenig)",Waffenladen[listitem][Name],RMoney);
//Der Spieler wird eine Nachricht bekommen, wie viel Geld ihm fehlt, um seine ausgewählte Waffe zu kaufen
SendClientMessage(playerid,FARBE,string);
// Die FARBE könnt ihr durch euere ersetzen
}
}
}
-------------------------------------------------------------
Hinweis 1:
Stock-Funktionen werden verwendet, um einen Codeabschnitt nur 1x schreiben zu müssen,
anstatt an jeder Stelle im Script, an dem er gebraucht wird, wieder von neu zu schreiben.
ShowWaffenladen(playerid) benötigt maximal 1 Zeile im Script, wobei eine For-Schleife
mit anschließendem Zeigen eines Dialoges viel mehr benötigt => spart viel Platz & man
hat eine bessere Übersicht.
Hinweis 2:
Ein Enum (und Standart-For-Schleife) beginnt mit 0 an zu zählen. Also 0,1,2,3,...
Die Elemente, um sie in MAX_WEAPONS zu definieren, jedoch mit 1,2,3,4,...
Deswegen zählt unsere Schleife von 0-5. Dabei wird die Information, die in
Waffenladen[i][Name], etc, vorher festgelegt wurde, vom Element i=0 abgerufen.
=> Waffenladen[0][Name] = Vibrator (Silber) bzw. Waffenladen[3][Name] = MP5.
Hinweis 3:
Wir formatieren den String mit format, um Informationen zu speichern. Das erste %s (Text) nimmt den bisherigen Inhalt des Strings
und hängt die weiteren Informationen an. Das zweite %s steht für den Namen der Waffe, das erste %d (Zahl) steht für die Munition,
die man bekommen soll und das zweite %d steht für den Preis, den man für die Waffen bezahlen muss. Am Ende jeder Zeile befindet
sich noch ein \n, welches dafür da ist, dass nach jedem Durchlauf eines i's eine neue Zeile im String angehängt wird.
Hinweis 4:
Dialoge, die den Style "DIALOG_STYLE_LIST" (Liste) haben, beginnen auch mit 0 an zu zählen.
Daher ist die ID der ersten Zeile im Dialog 0 (listitem = 0). Logischerweise hat dann
die zweite Zeile den listitem-"Wert" 1 usw. Deswegen kann man "listitem" als die Zahl einsetzen,
die das Element des Enums eigentlich hätte.
=> zweite Zeile im Dialog ist die Desert Eagle (Enum-Element 1) => zweite Zeile im Dialog hat das
listitem 1 => Waffenladen[listitem] = Waffenladen[1], was die Desert Eagle wäre.
-------------------------------------------------------------
Ich hoffe, ich konnte einigen helfen und da das meine erste Tutorial ist, ist
Kritik natürlich willkommen.
NeRoTeX
Kurze Frage:
Ist das so gewollt: if( iLevel < 0 || iLevel > 5) ?
Das heißt ja, alle Level außer 0,1,2,3,4 und 5 können vergeben werden.
Zitat von 'KinGShanez|ᵀᴴᴱ ᴼᴿᴵᴳᴵᴻᴬᴸ|Das Finde ich Erbärmlich ? 0815 ? Rechtschreibfehler, wo den das ? Du setzt hier Zwar eine Kritik ab . Aber nichts Positives, nein .
Versuch dir bitte mal was eigenes aufzubauen das ist Unser Anfang LG: KinGShanez
Vorstellung: 3/10 - Standart
Forum: 5/10 - Nicht ganz so berauschend
Ich finde es nicht gerade schön, wie du hier ein Script released, dass dir eigentlich garnicht zusteht.
Nachdem ich mir das Script angesehen habe, musste ich feststellen, der Gamemode zu 95% von GTA:WC kopiert ist.
Diese Behauptung kann ich bestätigen, da ich jetzt der Scripter von GTA:WC bin und mir die betreffenden Zeilen angesehen habe.
Sie stimmen 1:1 überein.
Was mich jedoch "nervt" ist, dass du ein älteres Script, was sehr lange und hart erarbeitet wurde, wobei du nur einen geringen, fast schon garnichts dazu beigetragen hast, einfach unter deinem Namen released.
Das zeigt von richtiger Reife. Respekt.
Welche Bimbos stimmten für RL/RP ? :*D
Gibt schon zuuuuuuuu viele.
Macht lieber nen richtig geilen Stunt bzw. DM Server mit MEGA-Imba Maps^^
if(IsPlayerConnected(playerid))
{
new adminbox[500];
for(new i = 0; i < MAX_PLAYERS; i++)
{
Musste eben bei "public SpielerLaden(playerid)" bzw. "OnPlayerSpawn(playerid)" das reinmachen:
if(SInfo[playerid)][zeiteingesperrt] > 0){SetPlayerPos(...);}
Angenommen es gibt bei dir im Script nur 50 Fraktionsautos (#define MAX_FRAKCARS 50),
dann werden nur alle Autos, die die ID 0-50 haben, abgefragt.
COMMAND:frc(playerid,params[])
{
if(IsDMFrak(playerid))
{
if(GetPVarInt(playerid,"Rang") < 5) return SCM(playerid,COLOR_RED,"Du hast keine Berechtigung dazu!");
for(new i=0;i<MAX_VEHICLES;i++)
{
if(FrakCarInfo[i][f_Frak] == GetPVarInt(playerid,"Fraktion"))
{
SetVehicleToRespawn(i);
}
}
}
return 1;
}
Sorry, stimmt natürlich. (Etwas müde
)
Wie auch immer, ist das \n entscheidend, da es wie gesagt einen Zeilenumbruch bewirkt und so wie es jetzt ist, sollte es funktionieren.
Pawn:
Ja und das "new adminboc[500];" über direkt nach IsPlayerConnected, bzw. vor der "for"-Schleife verschieben.
Dann wirkt "OnMinute" nicht, da IsPlayerConnected nicht zutrifft und er nicht auf dem Server ist.
Somit bleibt die Zeit auf die Zahl gesetzt, mit der er zuletzt online war.
(Geht mit 5 Minuten offline, kommt nach 8 Stunden wieder online, muss trotzdem noch 5 Minuten im Knast sitzen)
Angenommen er macht:
new string[512];
for(new i; i < MAX_PLAYERS; i++)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(string,sizeof(string),"%sAdminrang: %s\n",string,sendername);
}
ShowPlayerDialog(...,string,..);
Er nimmt den String "string" um formatiert ihn:
Leer
=> Supporter: Hans\n
=> Supporter: Hans
Admin: Klaus\n
Das \n sorgt ja dafür, dass ein "neues" Listitem "erstellt" wird.
Etwas müde, jedoch versuch mal das:
dcmd_arrest(playerid,params[])
{
new frak = SInfo[playerid][Fraktion];
new pID,price,time;
if(frak == 1 || frak == 2 || frak == 3)
{
if(sscanf(params,"uii",pID, price, time))
{
SendClientMessage(playerid,Rot,"Benutze: /arrest [playerid][preis][zeit]");
}
else
{
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Rot,"Spieler nicht online!");
format(str,sizeof(str),"Verbrecher %s wurde von %s für %d Minute/n eingesperrt",SpielerName(pID),SpielerName(playerid),time);
SendClientMessageToAll(Lila,str);
format(str,sizeof(str),"Du wurdest für %d Minute/n eingesperrt",time);
SendClientMessage(pID,Rot,str);
SInfo[pID][zeiteingesperrt] = time;
SInfo[pID][wantedpunkte] = 0;
SInfo[pID][pGeld] -= price;
SInfo[playerid][pGeld] += price;
SpielerSpeichern(pID);
SpielerLaden(pID);
SetPlayerPos(...);
}
return 1;
}
else
{
SendClientMessage(playerid,Rot,"Du bist doch kein Cop!");
}
return 1;
}
Falls du es nicht hast, benötigst du:
1x Timer, der alle Spieler abfragt, ob sie im Knast sind und jeweils 1 Minute abziehen.
forward OnMinute();
public OnGameModeInit()
{
SetTimer("OnMinute",60000,1);
return 1;
}
public OnMinute()
{
for(new i; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && !IsPlayerNPC(i))
{
if(SInfo[i][zeiteingesperrt] > 0)
{
// 1 Minute weniger
SInfo[i][zeiteingesperrt]--;
}
if(SInfo[i][zeiteingesperrt] == 0)
{
//Befreit
SetPlayerPos(...);
}
}
}
return 1;
}
EDIT: Sorry, Textformation spinnt und Schreibfehler
Wie immer ohne Gewähr.
String wird bei jedem User neu erstellt => Jedes mal wieder leer.
if (strcmp(cmd, "/admins", true) == 0)
{
if(IsPlayerConnected(playerid))
{
new adminbox[500];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pAdmin] == 1338)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"{0532FA}Co Owner: %s\n",sendername);
}
if(PlayerInfo[i][pAdmin] == 1337)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{9005FA}Administrator: %s\n",adminbox, sendername);
}
if(PlayerInfo[i][pAdmin] == 4)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{2EFA05}Supporter: %s\n" ,adminbox, sendername);
}
if(PlayerInfo[i][pAdmin] == 3)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{2EFA05}Supporter auf Probe: %s\n",adminbox, sendername);
}
if(PlayerInfo[i][pAdmin] == 2)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{FA7F05}Moderator: %s\n",adminbox, sendername);
}
if(PlayerInfo[i][pAdmin] == 1)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{FA7F05}Moderator auf Probe: %s\n",adminbox, sendername);
}
if(PlayerInfo[i][pAdmin] == 1339)
{
GetPlayerName(i, sendername, sizeof(sendername));
format(adminbox,sizeof(adminbox),"%s{FA0542}Serverleitung: %s\n",adminbox, sendername);
}
}
}
ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FCFCFC}Admins die online sind:",adminbox,"Fertig","");
}
return 1;
}
Hilft dir das:
public SpielerLaden(playerid)
{
SInfo[playerid][wantedpunkte] = dini_Int(Datei,"wantedpunkte");
SetPlayerWantedLevel(playerid,SInfo[playerid][wantedpunkte]);
return 1;
}
?
Wenn die Anzahl jedoch über 6 hinausgeht, werden trotzdem nur 6 angezeigt (mehr sind standartgemäß nicht möglich)