format(query, sizeof(query), "UPDATE...", Achieve...);
format(query, sizeof(query), "%s... WHERE...", query, Achieve...);
Du teilst den query einfach und fügst in in das selbe query wieder ein, sind dann eben zwei Zeilen.
Prinzip verstanden?
format(query, sizeof(query), "UPDATE...", Achieve...);
format(query, sizeof(query), "%s... WHERE...", query, Achieve...);
Du teilst den query einfach und fügst in in das selbe query wieder ein, sind dann eben zwei Zeilen.
Prinzip verstanden?
Hast du auch den richtigen Rang?
Ändere:
format(string, sizeof(string), "(( %s %s: %s ))", PRang, GetName(playerid), text);
zu:
format(string, sizeof(string), "(( %s %s: %s )) [Rang: %d]", PRang, GetName(playerid), text, PR);
Was steht bei Rang in der Klammer?
Wenn möglich mach ein Bild und lade es bei http://www.tinypic.com hoch.
Wie wäre es mit der Fehlermeldung?
Steht auf der Seite davor.
@CrashGamesDE:
ocmd:f(playerid, params[]) {
if(GetPVarInt(playerid, "Fraktion") == 0) return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Fraktion");
new text[128];
if(sscanf(params, "s", text)) return SendClientMessage(playerid, COLOR_RED, "Verwendung: {ffffff}/f [Text]");
new PFrak = GetPVarInt(playerid, "Fraktion"),
PR = GetPVarInt(playerid, "Rang");
new PRang[128];
switch(PR)
{
case 1: format(PRang, 128, FraksRang[PFrak][r1]);
case 2: format(PRang, 128, FraksRang[PFrak][r2]);
case 3: format(PRang, 128, FraksRang[PFrak][r3]);
case 4: format(PRang, 128, FraksRang[PFrak][r4]);
case 5: format(PRang, 128, FraksRang[PFrak][r5]);
case 6: format(PRang, 128, FraksRang[PFrak][r6]);
case 7: format(PRang, 128, FraksRang[PFrak][r7]);
case 8: format(PRang, 128, FraksRang[PFrak][r8]);
case 9: format(PRang, 128, FraksRang[PFrak][r9]);
case 10: format(PRang, 128, FraksRang[PFrak][r10]);
case 11: format(PRang, 128, FraksRang[PFrak][r11]);
case 12: format(PRang, 128, FraksRang[PFrak][r12]);
}
return 1;
}
Du kannst die Enum-Werte nicht formatieren.
new PRang = FraksRang[PFrak][Rang];
Du hast hier "Rang" benutzt, dann musst du es auch im zugehörigen enum von FraksRang deklariert haben. Hast du das? Wenn nicht, mach das.
Für weitere Posts: Markiere bitte IMMER die Zeile in der der Fehler ist!
@CrashGamesDE:
Merkst du was?
ocmd:f(playerid, params[]) {
if(GetPVarInt(playerid, "Fraktion") == 0) return SendClientMessage(playerid, COLOR_RED, "Du bist in keiner Fraktion");
new text[128];
if(sscanf(params, "s", text)) return SendClientMessage(playerid, COLOR_RED, "Verwendung: {ffffff}/f [Text]");
new PFrak = GetPVarInt(playerid, "Fraktion"),
PR = GetPVarInt(playerid, "Rang"),
l_Rang[128];
format(l_Rang, sizeof(l_Rang), "r%i", PR);
new PRang = FraksRang[PFrak][Rang];
return 1;
}
Ich nehme an du willst die Zeit setzen, also so:
case 2:
{
if(gettime() < Spieler[playerid][pPremium]) return SendClientMessage(playerid,GRAU,"Du hast noch einen Donator Status offen. Dein Donator Status muss erst ablaufen, um dir einen neuen zu kaufen!");
if(Spieler[playerid][pCoins] < 200) return SendClientMessage(playerid,GRAU,"Du hast nicht genügend Coins (mind. 200 Coins)");
Spieler[playerid][pPremium] = (Spieler[playerid][pPremium]+(gettime() + (60*60*24*14)));
Spieler[playerid][pCoins] -= 200;
SendClientMessage(playerid, HELLBLAU, "Viel Spaß mit dein 2 wöchigen Premium.");
}
Dann solltest du den Code posten, mit dem du die Sprachen und den Registrationsdialog anzeigst.
Beendest du den Spectate Modus auch, wenn ihm die Sprachen angezeigt werden?
Das solltest du dennoch machen, außer du willst das so haben (warum auch immer?). Aus deinen zwei Posts wird jetzt nicht klar, ob es nur einmal kommt, oder mehrmals?
Kannst du bitte den Log schicken, von den prints? In den unteren print bitte noch "fv" aufnehmen.
Du musst diese Meldung aus der Schleife nehmen
return SendClientMessage(playerid,GRAU,"Nicht in der Nähe von einem Fraktionsfahrzeug!");
Mach es dort weg wo es ist und ersetze
return true;
Damit.
Die Fehlerquellen hast du ja bereits erkannt.
if(Spieler[playerid][pLevel] >== 1; // Hier ist der Fehler!
Spieler[playerid][pCoins] -= 200;
SendClientMessage(playerid, HELLBLAU, "Viel Spaß mit dem Level.");
Zum einen fehlt in der markierten Zeile eine Klammer zu und zum anderen darfst du nach einer if Bedingung nie ein Semikolon setzen.
Mach das zu
if(Spieler[playerid][pLevel] >= 1) // Hier ist der Fehler!
{
Spieler[playerid][pCoins] -= 200;
SendClientMessage(playerid, HELLBLAU, "Viel Spaß mit dem Level.");
}
Das Selbe bei den anderen markierten Stellen.
DJ Deagle: Danke, hab ich übersehen.
Auf Grund der Fehlerbeschreibung würde ich sagen, dass dein Code zu viele Variablen benutzt. Wenn man es mit lokal deklarierten Variablen übertreibt, dann kann es zu genau so einem Fehler kommen.
Klammere mal einen Teil deines Codes aus, in dem du Variablen deklariert hast und teste es dann nochmal (natürlich den Code in dem du diese benutzt auch).
Alternativ könntest du auch, um die Funktionalität des Codes zu testen, anstatt Pos[3] PVars verwenden. Macht zwar generell wenig Sinn, aber zum testen tut's das allemal.
Mal ne kurze frage: Wie kann ich einen Spieler zur Skinauswahl "Schicken" ? Also dass er das Tutorial durchmacht, und dann kann er sich einen Skin auswählen
http://wiki.sa-mp.com/wiki/ForceClassSelection
[GSR]PreJay: Nutze strfind. Suche die Position von "ID:" und dann von ")" ab der Position von ID. Dann löschst du mit strdel hinten den Teil weg (Wert von ")" bis Ende) und dann von 0 bis Wert von "ID:" + 3.
Dann hast du die Nummer übrig im String, dann nur noch strval von dem string und du hast die Nummer als Integer.
if(gTeam[killerid] != TEAM_COPS)
Zu
if(!isPlayerInFrakt(playerid,1))
if(gTeam[killerid] == TEAM_COPS)
Zu
if(isPlayerInFrakt(playerid,1))
Edit: Und das was Hav0K zwei posts weiter unten geschrieben hat, hab ich übersehen.
Sowas?
[ FILTERSCRIPT ] [neu]GTA 4 Wantedsystem [RL/RP/GF/Freeroam]
Oder sowas?
http://forum.sa-mp.com/showthread.php?t=436193
Oder nur sowas?
http://forum.sa-mp.com/showthread.php?t=28864
Du speicherst über gettime die Zeit bei der der Spieler den Server betritt und wenn er den Server verlässt ziehst du den gespeicherten Wert vom momentanen gettime ab, dann hast du die Sekunden die der Spieler online war. Geteilt durch 60= Minuten.
Du kannst dir diese Methode in diesem Admin/Stats System anschauen, da ist es so gemacht:
http://forum.sa-mp.com/showthread.php?t=19819
Eigentlich möchte ich dir nicht alles aus der Nase ziehen. Wenn ich dir den Befehl schon debugge, dann solltest du wenigstens das geprintete Ergebnis posten.
Du hättest es auch selbstständig fortführen können...
if(strcmp(cmdtext, "/motor", true) == 0)
{
printf("Befehl aufgerufen");
if(GetPlayerVehicleSeat(playerid) == 0)
{
printf("Step 1");
new car = GetPlayerVehicleID(playerid);
printf("Step 2: car = %d", car);
if(GetVehicleModel(car) == 509 || GetVehicleModel(car) == 481 || GetVehicleModel(car) == 510)
{
SendClientMessage(playerid, COLOR_RED, "Du sitzt auf einem Fahrrad. Das hat keinen Motor!");
}
printf("Step 3: model = %d", GetVehicleModel(car));
if(GetVehicleModel(car) != 520)
{
printf("Step 4");
if (Tank[car] <= 1)
{
SendClientMessage(playerid, COLOR_RED, "Der Tank ist leer. Du musst erst /tanken.");
}
}
else if (Motor[car] == false )
{
printf("Step 5");
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
printf("Step 6");
SetVehicleParamsEx(car,VEHICLE_PARAMS_ON,lights,alarm,doors,bonnet,boot,objective);
printf("Step 7");
Motor[car] = true; // Setzt den Bool Motor auf true
printf("Step 8");
SendClientMessage(playerid, COLOR_BLUE, "Du hast den Motor deines Fahrzeugs angeschaltet");
}
else
{
printf("Step 9");
GetVehicleParamsEx(car,engine,lights,alarm,doors,bonnet,boot,objective);
printf("Step 10");
SetVehicleParamsEx(car,VEHICLE_PARAMS_OFF,lights,alarm,doors,bonnet,boot,objective);
printf("Step 11");
Motor[car] = false; // Setzt den Bool wieder auf falsch zurück.
printf("Step 12");
SendClientMessage(playerid, COLOR_BLUE, "Du hast den Motor deines Fahrzeugs ausgeschaltet");
}
}
printf("Befehl Ende");
return 1;
}
Anhand der prints weißt du jetzt wo der Code hingeht und aufhört.
Hast du auch geprüft ob der Befehl überhaupt aufgerufen wird? Wenn nicht, mache das bitte.
So:
if(GetPlayerVehicleSeat(playerid) == 0)
zu:
printf("Befehl /Motor von ID %d aufgerufen.", playerid);
if(GetPlayerVehicleSeat(playerid) == 0)
Kommt der print in der Konsole? Wenn nein, dann hast du was anderes kaputt gemacht, sodass dein OnPlayerCommandText nicht mehr (korrekt) aufgerufen wird.
stock Register(playerid,password[])
{
new Player[64];
if(IsPlayerNPC(playerid)) return 1;
format(Player,sizeof(Player),"/Spieler/%s.cfg",PlayerName(playerid));
printf("Player: %s", Player);
dini_Create(Player);
printf("passwort: %s", password);
dini_Set(Player,"passwort",password);
return 1;
}
Debugge das mal so, und poste dann was geprintet wird.
Ebenso hier:
Register(playerid,inputtext);
zu:
printf("inputtext: %s", inputtext);
Register(playerid,inputtext);
Nein, musst du nicht. Du musst aber schon erklären was du eingibst und was nicht funktioniert.
Außerdem solltest du erklären was passieren sollte, wenn du eingibst was du eingibst.