Gut, die Spalten haben sich ja geändert, sprich das musst du anpassen.
So:
stock LoadKassen()
{
fraktionskasse[Grove] = mysql_GetInt("kassen", "Geld", "Name", "Grove");
}
Gut, die Spalten haben sich ja geändert, sprich das musst du anpassen.
So:
stock LoadKassen()
{
fraktionskasse[Grove] = mysql_GetInt("kassen", "Geld", "Name", "Grove");
}
for(new i = 0; MAX_HAUS >= i; i++)
Zu
for(new i = 0; MAX_HAUS > i; i++)
0 bis 499 = 500 Indizes. Der Index 500 wäre der 501ste.
Mit dem Query sollte es klappen:
DROP TABLE IF EXISTS `kassen`;
CREATE TABLE `kassen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(24) NOT NULL,
`Geld` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
INSERT INTO `kassen` (`Name`) VALUES ('Grove'), ('Ballas'), ('Russen'), ('Vagos'), ('Rifa'), ('Yakuza'), ('Triaden'), ('LCN'), ('Staats');
Dann hättest du für jede Fraktion eine Zeile, das macht dich später flexibler, wenn du etwas hinzufügen willst.
Die Zeile 30 in der ocmd Include hat ganz sicher was mit ocmd zu tun.
Nicht Zeile 30 in deinem Gamemode, Zeile 30 in der ocmd.inc.
Poste das mal.
Nutzt du nebenher, außer strcmp und ocmd, noch andere Command Prozessoren (dcmd, zcmd, ycmd,...)?
if(stunde < 23 && stunde >= 5)
Geht dann von 23:00 bis 04:59
Ja, das. Gut, du hast die Tabelle falsch aufgebaut. So macht man das nicht. Erstelle drei Spalten:
ID (auto Increment)
Name
Geld
Dann kannst du für jede Fraktion eine Zeile erstellen, dort wird dann der Name eingetragen. Und dann kannst du über den Namen der Fraktion auf die Kasse (Geld) zugreifen. Sonst müsstest du ja für jede Fraktion DIE Datenbank Struktur ändern, und das macht man nicht.
mysql_SetInt("kassen", "Geld", fraktionskasse[Grove], "Name", FraktionsName);
ZitatC:\Users\PC\Desktop\Samp Server\pawno\include\ocmd.inc:30
Was steht denn in Zeile 30 der ocmd Include?
Nutzt du die aktuellste ocmd Version?
Hast du irgendwelche Meldungen im Compiler?
Wie sieht denn deine Datenbank Struktur aus? Poste da bitte mal einen Screenshot.
Anstatt
SpielerName(playerid)
Musst du dann den Name der Fraktion hinsetzen. Dann kannst du es nach dem gleichen Prinzip machen.
Ja, dafür ist das Plugin da. Es analysiert, warum sich die exe schließt.
Lade dir das crashdetect Plugin herunter und füge es in deinen Server ein. Dann poste den Log der kommt wenn du den Befehl eingibst, bzw wenn der Server abstürzt.
http://forum.sa-mp.com/showthread.php?t=262796
Danke ![]()
1.)
if(strcmp(cmd, "/destroycars", true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(Spieler[playerid][Admin] < 4)
{
SendClientMessage(playerid, COLOR_GRAD1, "Dir ist es nicht erlaubt, diesen Befehl zu benutzen!");
return 1;
}
new carsDestroyed;
for(new i = 0; i < sizeof(CreatedCars); i++)
{
if(CreatedCars[i] != 0)
{
DestroyVehicle(CreatedCars[i]);
carsDestroyed++;
}
}
new str[145];
if(carsDestroyed > 0) format(string, sizeof(string), "Es wurden %d erschaffene Fahrzeuge zerstört!", carsDestroyed);
else format(string, sizeof(string), "Es wurden keine zu zerstörenden Fahrzeuge gefunden!");
SendClientMessage(playerid, COLOR_GREY, string);
}
return 1;
}
2.)
if(GetVehicleModel(vID) == 0)return SendClientMessage(playerid, COLOR_GRAD2, "Dieses Fahrzeug gibt es nicht.");
Edit:
kreetkev: Gerne, kein Problem! Ja, so machst! ![]()
stock GetPlayerSex(playerid) //Im englischen heißt es halt so ;)
{
new sex[16];
switch(sInfo[playerid][pGeschlecht])
{
case 1: sex = "Männlich";
case 2: sex = "Weiblich";
default: sex = "Unbekannt";
}
return sex;
}
In einer Nachricht kannst du das dann so ausgeben:
format(string, sizeof(string), "Mein Geschlecht ist %s!", GetPlayerSex(playerid));
Die Schleife muss auf jeden Fall so sein:
for(new i = 0; i < sizeof(CreatedCars); i++)
{
if(CreatedCars[i] != 0)
{
DestroyVehicle(CreatedCars[i]);
}
}
Sonst löschst du ja die Fahrzeuge 1 - 99, die sind aber keine CreatedCars.
Geht dann der Rest auch richtig?
Du kannst einen Integer nicht zu einem String machen.
Wenn, dann musst du das über eine andere Variable, die du als String (Array) deklariert hast.
Ich verstehe nicht was du meinst, mit "Genau wie vorher stimmt kurz nach der Abfrage der Wert noch, aber wie durch Zauberhand ist er später geändert.".
Woran siehst du, dass der Wert geändert ist? Ich sehe in dem Log nämlich nichts.
Umd stimmen die prints eigentlich?
EDIT:
Oskaar1994:
ZitatFrage mich trotzdem wieso dann die ModelID geändert wurde (obwohl die nichtmal betroffen war), aber alle anderen Werte gleich geblieben sind
Das liegt daran, weil die Werte in einem Array alle hintereinander stehen (anschaulich gesagt). Wenn du in einen Integer einen String rein packst, dann ist das natürlich zu viel, somit werden die Teile dahinter auf entsprechender Länge überschrieben.
Sehr gut, dass du den Fehler selbst entdeckt hast. ![]()
Gerne, dafür bin ich ja da ![]()
Nein, das kannst du nicht, außer du erstellst 500 Dummy-Cars, aber das macht ja keinen Sinn.
Es wäre gut, wenn du Schritt für Schritt erklärst was du machst, welche Codes ausgeführt werden (dazu posten) und dann jeweils beschreibst, ab wann etwas falsch ist, also den falschen Wert hat. So genau wie möglich bitte.
Dann ist der Vorschlag von Kaliber falsch. Das wird nur funktionieren, wenn der Spieler der die ID 0 hat auch ein Admin ist.
Generell ist es auch schlecht das so zu schreiben, besser wäre es, das ganze über eine Funktion zu machen.
Sprich, du nimmst den Code (außer die Admin-Abfrage) aus dem Befehl und fügst ihn in eine Funktion ein:
forward DeleteAllCars();
public DeleteAllCars()
{
//Hier hin.
return 1;
}
An die Stelle des entfernten Codes im Befehl schreibst du:
DeleteAllCars();
Und den Timer startest du bei OnGameModeInit so:
SetTimer("DestroyAllCars",30000,false);
Tatsächlich, es ist sogar möglich (http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_query).
Aber es ist dennoch keine Gute Idee, da der Server wartet, bis das Ergebnis da ist, steht da ja auch (Lag-Quelle!).
Teste es trotzdem mal mit der Threaded Version, und wenn es da geht, dann passt ja alles. Wenn es da auch nicht geht, dann poste mal den MySQL Log, wenn du LOG_ALL einschaltest.
Es können nicht zwei Fahrzeuge mit der ID 1 existieren.
Wenn du ein Fahrzeug löschst, dann musst du auch dessen Kilometerstand auf 0 setzen, es existiert ja dann nicht mehr.
Kann dein "/destroycars" Befehl von allen Spielern oder nur von Admins ausgeführt werden?