1)
Wenn du nicht willst, dass die zweite Abfrage geprüft wird, falls die erste bereits wahr ist (wenn nur eins der beiden/mehreren möglich ist).
2)
public für Timer oder Funktionen die du Script übergreifend aufrufst, ansonsten stock.
1)
Wenn du nicht willst, dass die zweite Abfrage geprüft wird, falls die erste bereits wahr ist (wenn nur eins der beiden/mehreren möglich ist).
2)
public für Timer oder Funktionen die du Script übergreifend aufrufst, ansonsten stock.
Muss ich das jetzt bei allen machen die mit sochen Fehlern angezeigt werden?
Versuche das mal, ja.
Möglicherweise hast du aber auch drüber irgendwo einen (Klammer-?)Fehler. Prüfe das mal.
Mach bitte die -1 weg bei mysql_insert_id
Nein, da er beim SELECT Query ein +1 hat. Da die AUTO_INCREMENTS meistens bei 1 anfangen, muss man es so machen, um im Array bei 0 anfangen zu können. Das ist schon richtig.
Logs geben noch immer nichts aus
Versuche es so:
ocmd:createcardealer(playerid,params[])
{
printf("Befehl eingegeben (%d)", pInfo[playerid][pAdmin]);
new name[32],price,level,Float:xPos[3];
if(pInfo[playerid][pAdmin] != 5)return 1;
if(sscanf(params,"dds[32]",price,level,name))return SendClientMessage(playerid,COLOR_GREY,"Benutze: /createcardealer [Preis] [Level] [Name]");
printf("Passt.");
for(new i;i<MAX_AUTOHAUS;i++)
{
if(AHInfo[i][zCreated])continue;
new str[256];
GetPlayerPos(playerid,xPos[0],xPos[1],xPos[2]);
format(str,sizeof str,"INSERT INTO `Cardealers` (`Owner`, `PosX`, `PosY`, `PosZ`, `Name`, `Price`, `Level`, `LPosX`, `LPosY`, `LPosZ`) VALUES ('Niemand', '%f', '%f', '%f', '%s', '%d', '%d', '%f', '%f', '%f')",xPos[0],xPos[1],xPos[2],name,price,level,xPos[0],xPos[1],xPos[2]);
print(str);
mysql_query(str);
return LoadCarDealer(mysql_insert_id()-1);
}
return 1;
}
Du musst den Server neu starten und den Befehl eingeben.
Das stimmt so.
Kompiliere den Code, starte deinen Server neu, dann gebe den Befehl erneut ein und dann steht ganz unten im server_log.txt das Query das ausgeführt wurde.
Vor dem mysql_query(str) jeweils:
print(str);
Das was beim mysql_query in der Klammer steht, auch im print in die Klammer schreiben.
Lass dir die beiden Queries mal mit einem print ausgeben (INSERT und SELECT), und poste dann, was da drin steht, in dem print.
Poste dazu noch einen Screenshot der Daten aus der Datenbank, auf dem man den zuletzt angelegten Datensatz sieht.
Lass dir die beiden Queries mal über einen print ausgeben, und schaue, ob die ID mit der übereinstimmt, die in der Tabelle steht.
Sonst könntest du es mal so versuchen:
return LoadCarDealer(mysql_insert_id()-1);
NPCs laufen/fahren einen aufgezeichneten Record ab, deren Position kann eigentlich nicht mit SetPlayerPos verändert werden.
Wenn du aber ganz auf Nummer Sicher gehen willst, dann mache es so:
forward PaintBallTimer();
public PaintBallTimer()
{
gamestartet = 1;
for(new i=0;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(playerready[i] == 0) continue;
playerready[i] = 0;
SetPlayerPos(i, 3780,-2663,8);
}
return 1;
}
Prinzipiell ist der Code aber sonst soweit richtig.
Wenn es bei dir trotzdem nicht geht, poste bitte deine Version von Befehl und Timer nochmal komplett hier, und beschreibe ganz genau was du und der andere Spieler Schritt für Schritt machen.
Du hattest bei OnPlayerDeath ein return 1 wo es nicht hingehört, da hättest du eigentliche eine Warnung haben müssen (Unreachable Code).
Mache es so:
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
if(gTeam[killerid] != Team_LSPD && gTeam[killerid] != Team_LVPD)
{
SetPlayerWantedLevel(killerid, GetPlayerWantedLevel(killerid)+1);
SendClientMessage(killerid, 0xFFFF00FF, "Du hast jemanden erfolgreich umgebracht");
GivePlayerMoney(killerid, 2000);
}
}
if(GetPlayerWantedLevel(playerid) > 0)
{
pJailTime[playerid] = GetPlayerWantedLevel(playerid) * 10;
SetPlayerWantedLevel(playerid,0);
SetPlayerPos(playerid,1742.9695,535.2896,27.1266);
}
return 1;
}
Dann erstelle bei OnGameModeInit einen Timer:
SetTimer("CheckJail", 850, true);
Und ganz unten im Gamemode:
forward CheckJail(); //Wird jede Sekunde aufgerufen
public CheckJail()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
if(pJailTime[i] > 0)
{
pJailTime[i]--;
}
else if(pJailTime[i] == 0)
{
//Spieler aus dem Jail lassen.
pJailTime[i] = -1;
//SetPlayerPos(i, x, y, z); //Koordinaten hier einfügen.
}
}
return 1;
}
----
Das Textdraw kannst du mit einem Textdraw Editor erstellen:
http://forum.sa-mp.com/showthread.php?t=406833
Dann würde ich vorschlagen du postest mal den Code, den du bis dahin dafür gemacht hasthast, mit dem gTeam.
Hö?
![]()
Ich würde gerne die Pay'n'Spray Shops so scripten, dass sich die VehicleColor nicht ändert, wie kann ich abfragen ob ein Spieler in einem Shop drinnen ist?
Dazu kann dir diese Include helfen:
http://forum.sa-mp.com/showthread.php?t=360865
Gegebenenfalls musst du das etwas abändern, damit du das y_hooks nicht brauchst.
Dann musst du die Farbe wieder zurück setzen, zu der, die das Fahrzeug zuvor hatte.
Das kannst du hiermit abfragen: http://forum.sa-mp.com/showthread.php?t=176496
Oh ja, stimmt. So rum macht es mehr Sinn.
Gut, dass du es selbst lösen konntest. ![]()
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
if(gTeam[killerid] != Team_LSPD && gTeam[killerid] != Team_LVPD)
{
SetPlayerWantedLevel(killerid, GetPlayerWantedLevel(killerid)+1);
SendClientMessage(killerid, 0xFFFF00FF, "Du hast jemanden erfolgreich umgebracht");
GivePlayerMoney(killerid, 2000);
}
}
return 1;
}
Zwecks der Zahl:
Da musst du ein Textdraw an die entsprechende Stelle setzen, das die Zahl des Wanted Levels beinhaltet (mit TextDrawSetString updaten).
Ja, da der Server nicht solange wartet, bis er vom MySQL Server eine Antwort bekommt, sondern es in einen separaten Thread auslagert.
Am besten in einem neuen Thread.
Dann musst du anstatt mysql_pquery mysql_query nutzen, das ist aber nicht ganz so performant.
Ach du hast die Variable auch umbenannt.
So:
ocmd:untie(playerid, params[])
{
new pID, string[70];
if(sscanf(params, "u", pID)) return SendClientMessage(playerid, -1, "Tippe: /untie [Spielername / ID]");
if(!IsTied[pID]) return SendClientMessage(playerid, -1, "Dieser Spieler ist nicht Gefesselt.");
if(IsPlayerInAnyVehicle(pID)) return SendClientMessage(playerid, -1, "Du kannst diesen Spieler nicht Entfesseln.");
TogglePlayerControllable(pID, true);
format(string, sizeof(string), "* Du hast den Spieler %s befreit.", returnName(pID));
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "* Du wurdest von den Spieler %s entfesselt.", returnName(playerid));
SendClientMessage(pID, -1, string);
IsTied[pID] = false;
return 1;
}
Entferne Zeile 22 in dem Code oben.
Mache es so:
public OnUserCheck(playerid)
{
new string[265];
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
if(cache_get_row_count() == 0)
{
format(string,sizeof(string),"Herzlich Willkommen {0174DF}%s!\n{FFFFFF}Dein gewählter Benutzername ist: {40FF00}noch frei\n{FFFFFF}Bitte gebe ein gewünschtes Passwort in die Box unten ein:",playername);
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"{33cc33}"S-TAG" {FFFFFF}Registrierung - Passwort (1/3)",string,"Anmelden","");
}
else
{
new query[256];
mysql_format(handle,query,sizeof(query),"SELECT Registrierung FROM Accounts WHERE Name = '%e'",playername);
mysql_pquery(handle,query,"OnUserCheck2", "d", playerid);
}
return 1;
}
forward OnUserCheck2(playerid);
public OnUserCheck2(playerid)
{
if(cache_get_row_count() == 0) pInfo[playerid][pRegStep] = cache_get_field_content_int(0, "Registrierung", handle);
else pInfo[playerid][pRegStep] = 0;
if(pInfo[playerid][pRegStep] == 4)
{
format(string,sizeof(string),"Willkommen zurück, {0174DF}%s\n{FFFFFF}Dieser Nutzername ist bereits vergeben. Bitte gebe dein Passwort in die Box unten ein:",playername);
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{33cc33}"S-TAG"{FFFFFF} Login",string,"Login","");
}
else
{
mysql_format(handle,query,sizeof(query),"DELETE FROM Accounts WHERE Name='%e'",playername);
mysql_pquery(handle,query);
format(string,sizeof(string),"Herzlich Willkommen {0174DF}%s!\n{FFFFFF}Dein gewählter Benutzername ist: {40FF00}noch frei\n{FFFFFF}Bitte gebe ein gewünschtes Passwort in die Box unten ein:",playername);
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"{33cc33}"S-TAG" {FFFFFF}Registrierung - Passwort (1/3)",string,"Anmelden","");
}
return 1;
}