new JoinPed[116] = {
[...] // in diesem Bereich noch alle { und } entfernen.
};
Und dann ausprobieren.
Machs einfach genau so wie hier beschrieben, dann wirds funktionieren.
new JoinPed[116] = {
[...] // in diesem Bereich noch alle { und } entfernen.
};
Und dann ausprobieren.
Machs einfach genau so wie hier beschrieben, dann wirds funktionieren.
Okay gute Nacht.
Hast du aber auch diese Zeile
new JoinPed[116][1] = {
In diese geändert
new JoinPed[116] = {
??
Dann lass sie halt drin^^ Ich fände es schöner, ohne die ganzen { und }.
Ist das Problem dann jetzt so gelöst?
new JoinPed[116] = {
[...] // in diesem Bereich noch alle { und } entfernen.
};
Und dann ausprobieren.
Du hast einen Array deklariert und den nicht komplett gefüllt. Sende mal die komplette Deklaration dieses Arrays
Ja toll und in wie viel Prozent der Fälle steht das Fahrzeug genau Richtung Norden? Und selbst dann würde es nicht funktionieren, da man dann nur der y-Achse addieren müsste.
Genauer gesagt würde es NUR funktionieren, wenn das Auto im Winkel von 45 ° richtung Nordosten steht
Trotzdem wäre das unsauber programmiert.
türlich geht das martin
Dann beweise es ;). Ich kann eigentlich jede Wette eingehen, dass das Addieren nicht funktionieren wird. N bisschen mathematisches sollte man als Programmierer schon mit sich bringen und da ist es doch offensichtlich, dass das so wie oben nicht funktionieren wird.
Falsch! Du kannst nicht einfach nur der x und y-Koordinate einen kleinen Wert dazuaddieren und dann denken, der neue Punkt ergäbe die Motorhaube(oder n Stück davor).
Um die richtigen Koordinaten zu berechnen, brauchst du Wissen über Polarkoordinaten. Schau dir bei dem Link mal die Überschrift unter "Umrechnung von Polarkoordinaten in kartesische Koordinaten" an.
Besser gesagt zerlegt sscanf einen String in seine Einzelteile.
if(!sscanf(params,"uis",ID,Anzahl,Verbrechen))
Du gibst ja zum Beispiel "/su 8 3 Autodiebstahl" ein. sscanf splittet jetzt die "8", die "3" und das "Autodiebstahl" auf und speichert sie in die variablen "ID","Anzahl" und "Verbrechen".
Aber was hast du gegen meine Lösung? Funktioniert sie nicht oder was?
Versuchs mal so:
#include <Dini>
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_FIRE && oldkeys & KEY_CROUCH && IsteseineCBUGWaffe(playerid))
{
CBUGWARNUNGEN[playerid]++;
new str[96];
format(str, sizeof(str),"** Du hast den C-Bug %d / 3 mal ausgenutzt. Beim 3. mal erfolgt ein Kick!",CBUGWARNUNGEN[playerid]);
SendClientMessage(playerid,COLOR_RED,str);
if(CBUGWARNUNGEN[playerid] > 2)
{
new name[24];
GetPlayerName(playerid,name,sizeof(name));
format(str, sizeof(str),"%s.txt",name);
if(dini_Exists(str))
{
dini_IntSet(string,"TimesKicked",strval(dini_Get(string,"Level")) + 1);
}
else
{
dini_Create(str);
dini_IntSet(string,"TimesKicked",1);
}
CBUGWARNUNGEN[playerid] = 0;
SendClientMessage(playerid,COLOR_RED,"** Du hast den C-Bug ausgenutzt, und wurdest deswegen gekickt!");
Kick(playerid);
}
}
return 1;
}
Wolltest du es so haben?
Dazu müsstest du die Methode "IstSpielerAdmin(playerid,rank)" entweder ändern oder eine neue angepasste schreiben (oder von einem von uns schreiben lassen^^)
Sende am Besten mal die IstSpielerAdmin Funktion
Ich bin mir nicht sicher, aber es kann sein, dass der Zünder vor der Abfrage "if(GetPlayerWeapon(playerid) == 40)" verschwindet.
Praktisch klickst du die Maus, in dem Moment wird der Zünder entfernt und er springt in OnPlayerKeyStateChange.
Dort geht er dann bis zur Abfrage "newkeys == 4" und bleibt dann bei der nächsten Bedingung stehen, weil die Waffe ja schon von GTA aus gelöscht ist.
Deswegen wäre eine Variabel, die du eben auf true und false setzt gar nicht so falsch.
Naja wenn sich sowas Profi nennt... Aber darüber möchte ich nicht diskutieren. Wenn er damit zufrieden ist, was du ihm gemacht hat, okay. Wenn nicht, kann er gerne nochmal posten und ich helfe ihm (richtig) weiter
Das wäre aber nicht die Lösung des Problems Das würde nur den Fehler beim Compilieren verstecken, aber es würde bestimmt nicht so funktionieren, wie Exon es haben möchte.
Das Problem ist, dass dein Script zwei "Wantedlevels" vergibt.
Einmal ein selbsterstelltes, dass bis 25 geht. Und das von GTA, dass bis 6 Sterne geht.
Ich bearbeite es dir mal so, dass das Selbsterstellte auch nur noch bis 6 geht und immer dem "GTA-WantedLevel" entspricht.
dcmd_su(playerid,params[]){
if(SpielerInfo[playerid][sFraktion] == TEAM_POLIZEI || SpielerInfo[playerid][sFraktion] == TEAM_FBI || SpielerInfo[playerid][sFraktion] == TEAM_SFPD || SpielerInfo[playerid][sFraktion] == TEAM_Bundeswehr)
{
new ID,Verbrechen[64],wLevel;
if(!sscanf(params,"uis[64]",ID, wLevel, Verbrechen))
{
if(IsPlayerConnected(ID) && SpielerInfo[playerid][sEingeloggt])
{
if(IsAStateFaction(SpielerInfo[ID][sFraktion]))
return SendClientMessage(playerid,Farbe_Grau,"Du kannst keine Staatsdiener Gesuchtenlevel geben.");
if(SpielerInfo[ID][sGefangen] == 1)
return SendClientMessage(playerid,Farbe_Grau,"Dieser Spieler ist bereits im Knast.");
//if(SpielerInfo[ID][sWantedlevel] >= 25)
// return SendClientMessage(playerid,Farbe_Grau,"Der Spieler hat die maximal anzahl an Wantedlevel bereits erreicht.");
if(wLevel > 6 || wLevel < 0)
return SendClientMessage(playerid,Farbe_Grau,"Das Wantedlevel muss zwischen 0 und 6 sein.");
SpielerInfo[ID][sWantedlevel] = wLevel;
SpielerInfo[ID][sVerbrechen]++;
SetPlayerWantedLevel(ID,SpielerInfo[ID][sWantedlevel]);
new Text[255];
format(Text,sizeof(Text),"Du hast ein Verbrechen begangen ( %s ). Reporter: [%s].",Verbrechen,SpielerInfo[playerid][sName]);
SendClientMessage(ID,Farbe_Leuchtrot,Text);
SetPlayerWantedLevel(ID,SpielerInfo[ID][sWantedlevel]);
format(Text,sizeof(Text),"Derzeitiges Wantedlevel: %d",SpielerInfo[ID][sWantedlevel]);
SendClientMessage(ID,Farbe_Gelb,Text);
format(Text,sizeof(Text),"%s hat das Wantedlevel von %s auf %d Wanteds gesetzt, Grund: %s.",SpielerInfo[playerid][sName],SpielerInfo[ID][sName],SpielerInfo[ID][sWantedlevel],Verbrechen);
EnterToLog("Wanted",Text);
ForAllPlayers(i)
{
if(SpielerInfo[i][sEingeloggt])
{
if(SpielerInfo[i][sFraktion] == TEAM_POLIZEI || SpielerInfo[i][sFraktion] == TEAM_FBI || SpielerInfo[i][sFraktion] == TEAM_SFPD || SpielerInfo[i][sFraktion] == TEAM_Bundeswehr)
{
format(Text,sizeof(Text),"** [Zentrale] | An alle Einheiten: Reporter: %s, over. **",SpielerInfo[playerid][sName]);
SendClientMessage(i,0x8D8DFF00,Text);
format(Text,sizeof(Text),"** [Zentrale] | Verbrechen: %s, Gesuchter: %s, Neues Wantedlevel: %d, over **", Verbrechen, SpielerInfo[ID][sName], SpielerInfo[ID][sWantedlevel]);
SendClientMessage(i,0x8D8DFF00,Text);
}
}
}
}
else SendClientMessage(playerid,Farbe_Grau,"Der gewählte Spieler ist nicht online.");
}
else SendClientMessage(playerid,Farbe_Grau,"Benutze: '/su(spect) [Playerid/Name] [Wantedlevel] [Verbrechen]'");
}
else SendClientMessage(playerid,Farbe_Grau,"Das darfst du nicht!");
return true;
}
Falls, es durch die Änderung des höchsten Wantedlevels (25) zu Problemen kommen sollte, meld dich einfach nochmal, dann könnte man es auch anders lösen.
Okay, ich weiß jetzt wo der Fehler liegt. Aber um ihn zu fixen muss ich wissen, wer alles den Checkpoint sehen soll.
Jeder Spieler der Online ist?
Alle Feuerwehrmänner? (Wenn es schon eine variable gibt, die das speichert.)
...
Wo steht das "SetPlayerCheckpoint(playerid,-1635.9685,1212.4646,7.0391,3.0);" drin. Also unter welchem Callback (public) oder in welche Methode?
Schick am Besten mal den Code darüber.
Welches jetzt? Das erste oder das zweite?
1. '/su(spect) [Playerid/Name] [Verbrechen] [Anzahl]'
2. '/su(spect) [Playerid/Name] [Anzahl]'
Stimmt, wenn du es so haben möchtest, dass ausschließlich Leute mit Rang 4 zum Beispiel einen Befehl benutzen dürfen, dann stimmt es so.
Wolltest du es aber so, dass alle die den 4. oder einen höheren Rang erreicht haben, den (z.B.) Befehl nutzen können, muss es so aussehen:
stock IsPlayerRank(playerid,Rank)
{
if(GetPVarInt(playerid,"Rang")>=Rank)return 1;
return 0;
}
Vergiss aber nicht dass du irgendwo den Wert setzt:
SetPVarInt(playerid,"Rang",5); //Somit hätte der Spieler den Rang 5
Willst du es so haben, dass man das verbrechen auch noch als Parameter angeben muss also:
Benutze: '/su(spect) [Playerid/Name] [Verbrechen] [Anzahl]'
oder das ganze ohne die Begründung, also [Verbrechen] weg:
Benutze: '/su(spect) [Playerid/Name] [Anzahl]'