Bleibt gleich.
Hast du MySqlConnection als MySQL:MySqlConnection deklariert?
Bleibt gleich.
Hast du MySqlConnection als MySQL:MySqlConnection deklariert?
Schon erledigt danke habe schon alles umgeschrieben :=)
Guten Tag,
Kurze Frage Kaliber eventuell Sie eine Idee,
Wie soll man das mit den Wanteds am besten machen "WantedLabel" Sollte man dies mit einem Timer Überprüfen? bzw Updaten lassen?
Oder gibt es dafür eine bessere Variante um Timer zu vermeiden?
Wie soll man das mit den Wanteds am besten machen "WantedLabel" Sollte man dies mit einem Timer Überprüfen? bzw Updaten lassen?
Kannst einfach die SetPlayerWantedLevel Funktion hooken und dort immer das WantedLabel updaten.
Da das ja zu 100% durch diese Funktion bestimmt wird und du dann keinen Timer brauchst.
public OnWantedChange(playerid, oldwanteds, newwanteds)
{
new string[128];
for(new i=0;i<GetMaxPlayers();i++)
{
if(IsLoggedIn(i))
{
if(IsPlayerStreamedIn(playerid, i))
{
if(Spieler[i][pFraktion] == 2 || Spieler[i][pFraktion] == 3 || Spieler[i][pFraktion] == 4 || Spieler[i][pFraktion] == 5)
{
if(newwanteds > 0 && oldwanteds == 0){
for(new a=0;a<MAX_WANTEDLABEL;a++)
{
if(Spieler[i][pWantedLabelCreated][a] == 0){
format(string, sizeof(string), "{FFFF00}%s (ID: %d)\nWanteds: %d\n\nGrund: %s", GetName(playerid), playerid, newwanteds, Spieler[playerid][pWantedReason]);
Spieler[i][pWantedLabel][a] = CreateDynamic3DTextLabel(string, COLOR_WHITE, 0.0, 0.0, 0.0, 10.0, playerid, INVALID_VEHICLE_ID, 0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), i);
Spieler[i][pWantedLabelID][a] = playerid;
Spieler[i][pWantedLabelCreated][a] = 1;
Streamer_SetFloatData(STREAMER_TYPE_3D_TEXT_LABEL, Spieler[i][pWantedLabel][a], E_STREAMER_ATTACH_OFFSET_Z, 0.70);
return 1;
}
}
}
else if (newwanteds > 0 && oldwanteds > 0){
for(new a=0;a<MAX_WANTEDLABEL;a++)
{
if(Spieler[i][pWantedLabelCreated][a] == 1 && Spieler[i][pWantedLabelID][a] == playerid){
format(string, sizeof(string), "{FFFF00}%s (ID: %d)\nWanteds: %d\nGrund: %s", GetName(playerid), playerid, newwanteds, Spieler[playerid][pWantedReason]);
UpdateDynamic3DTextLabelText(Spieler[i][pWantedLabel][a], COLOR_WHITE, string);
return 1;
}
}
}
else if(oldwanteds > 0 && newwanteds <= 0)
{
for(new a=0;a<MAX_WANTEDLABEL;a++)
{
if(Spieler[i][pWantedLabelCreated][a] == 1 && Spieler[i][pWantedLabelID][a] == playerid)
{
Spieler[i][pWantedLabelID][a] = INVALID_PLAYER_ID;
Spieler[i][pWantedLabelCreated][a] = 0;
DestroyDynamic3DTextLabel(Spieler[i][pWantedLabel][a]);
return 1;
}
}
}
}
}
}
}
return 1;
}
Alles anzeigen
So wird das Derzeit geupdatet wen jemand Wanteds bekommt wird das so gemacht:
/su z.b
Dient dazu um den Textdraw akuell zu Halten läuft natürlich über kein Timer.
So wird das Derzeit geupdatet
Ja, herzlichen Glückwunsch.
Und was ist jetzt deine Frage?!
Da kannst du doch alles automatisch ändern...
Hallo ich habe hier ein kleines problem beim UPDATEN MySQL R41-4
Also die Sprunk automaten existieren in der Datenbank auch mit der selben ID.
Doch wenn ich OnGameModeExit aufrufe printet er mir die neue Menge und Positionen aber UPDATEN diese nicht in die Datenbank.
Woran kann dies liegen?
public OnGameModeExit()
{
SaveServerInfo();
mysql_close(handle);
for(new i; i < MAX_SPRUNKS; i++)
{
if(!Iter_Contains(SPRUNKs, i))continue;
new query[180];
mysql_format(handle, query, sizeof(query), "UPDATE server_automate SET Menge ='%d', PosX='%f', PosY='%f', PosZ='%f', RotX='%f', RotY='%f', RotZ='%f' WHERE ID=%d", SPRUNKInfo[i][sprunkMenge], SPRUNKInfo[i][sprunkX], SPRUNKInfo[i][sprunkY], SPRUNKInfo[i][sprunkZ], SPRUNKInfo[i][sprunkRX], SPRUNKInfo[i][sprunkRY], SPRUNKInfo[i][sprunkRZ], i);
mysql_tquery(handle, query);
printf("id: %d menge: %d x: %f y: %f z: %f rx: %f ry: %f rz: %f", i, SPRUNKInfo[i][sprunkMenge], SPRUNKInfo[i][sprunkX], SPRUNKInfo[i][sprunkY], SPRUNKInfo[i][sprunkZ], SPRUNKInfo[i][sprunkRX], SPRUNKInfo[i][sprunkRY], SPRUNKInfo[i][sprunkRZ]);
}
return 1;
}
Alles anzeigen
id: 0 menge: 0 x: 205.652999 y: -61.823299 z: 1.678130 rx: 0.000000 ry: 0.000000 rz: 0.419647
id: 1 menge: 100 x: 144.546005 y: -66.034896 z: 1.678130 rx: -85.700004 ry: 58.499992 rz: -165.554977
id: 2 menge: 100 x: 150.602951 y: -70.993339 z: 1.529687 rx: -61.199989 ry: 7.799999 rz: 178.650375
Wie sieht der MySQL Log denn aus?
Wie sieht der MySQL Log denn aus?
//EDIT hat sich gelöst mysql_close wird ausgerufen, dann versuht er die query zu senden
DUMMHEITSFEHLER
Du schließt mit mysql_close die Verbindung und führst dann erst die Queries aus. Das muss andersherum sein, mysql_close gehört ganz ans Ende.
Du schließt mit mysql_close die Verbindung und führst dann erst die Queries aus. Das muss andersherum sein, mysql_close gehört ganz ans Ende.
//EDIT hat sich gelöst mysql_close wird ausgerufen, dann versuht er die query zu senden
DUMMHEITSFEHLER
Danke nochmal ![]()
Guten Tag,
Habe mal eine Kurze Frage,
Ich würde gerne machen das man ein carkey vergeben kann.
Das man ein jemand ein 2 Schlüssel vergibt das er /motor /lock nutzen kann.
per was wäre das am besten sollte man dies über die Fahrzeug Datenbank abspeichern lassen oder eher über die Spieler?
Alles anzeigenGuten Tag,
Habe mal eine Kurze Frage,
Ich würde gerne machen das man ein carkey vergeben kann.
Das man ein jemand ein 2 Schlüssel vergibt das er /motor /lock nutzen kann.
per was wäre das am besten sollte man dies über die Fahrzeug Datenbank abspeichern lassen oder eher über die Spieler?
Ich selber würde es in der Spieler Datenbank abspeichern.
Guten Tag, ich hab ein kleines Problem, welches ich gerade nicht sehe wie ich dieses löse ...
Ich nutzte ein Define,
Wenn ich z.B: "SendInfoMessage(playerid, "Test");" nutze, klappt es, sobald ich aber ein string nutzen möchte, haut mir der Compiler Fehler raus:
format(strMsg, sizeof(strMsg), "Aktuelle Uhrzeit: %d:%d", hour, minutes);
SendInfoMessage(playerid, strMsg); // <-- Die Fehler Zeile
error 001: expected token: "-string end-", but found "-identifier-"
warning 215: expression has no effect
error 001: expected token: ";", but found ")"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line
LG, DomeTastisch.
SendInfoMessage
Das geht nur, wenn dein String eine Konstante ist.
Da du hier einen String nutzt, müsstest du sowas machen:
Hätte da noch eine Frage,
weiß nicht wie ich diese am besten Lösen kann, leider ...
Möchte gerne, wenn man sich beim Anmelde Dialog befindet, das sich die World Time verändert, naja das ganze klappt nur einmal,
danach wird die Uhrzeit nicht weiter Hoch gesetzt.
Bisheriger Code:
// Der Timer wird alle 988 Sekunden ausgeführt
function:PlayerSecondTimer()
{
gettime(strHour, strMinute, strSecond);
new strMsg[128];
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(!IsPlayerConnected(i))continue;
if(!PlayerInfo[i][pLoggedIn])
{
strHour ++;
SetPlayerTime(i, strHour, 59);
format(strMsg, sizeof(strMsg), "Aktuelle Uhrzeit: %d", strHour);
SendInfoMessage(i, strMsg);
}
else
{
//SetWorldTime(strHour);
}
}
return 1;
}
Alles anzeigen
LG, DomeTastisch.
Bisheriger Code:
Uff, soooviele Fragen:
ocmd:givecarkey(playerid, params[])
{
new id = currentslot[playerid], string[128], pID;
if(sscanf(params, "u", pID))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00CC00}/givecarkey [SpielerID/Name]");
if(PrivateVehicle[playerid][id][modelid] >= 400 && PrivateVehicle[playerid][id][modelid] <= 611)
{
format(string, sizeof(string), "{33CCFF}* Du hast den Zweitschlüssel für deinen %s %s gegeben!", VehicleName[PrivateVehicle[playerid][id][modelid]-400], GetName(pID));
SendClientMessage(playerid, COLOR_WHITE, string);
format(string, sizeof(string), "{33CCFF}* %s hat dir den Zweitschlüssel seines %s gegeben!", GetName(playerid), VehicleName[PrivateVehicle[playerid][id][modelid]-400]);
SendClientMessage(playerid, COLOR_WHITE, string);
format(string, sizeof(string), GetName(pID));
strmid(PrivateVehicle[playerid][id][vehCarkey], string, 0, strlen(string), 255);
SavePlayerVehicle(playerid);
}
else
{
SendClientMessage(playerid, COLOR_WHITE, "{AA3333}Du hast auf diesen Schlüssel kein Fahrzeug!");
}
return 1;
}
Alles anzeigen
Moin Kurze frage möchte weitergeben das der Name gespeichert wird in der Datenbank aber wird leider nichts eingetragen die Spalte bleibt leer,
Wieso 988 Sekunden? Und zeig mal generell wie du den Timer startest
Wo startest du den Timer?
Wieso wird das aktualisiert für alle, die nicht eingeloggt sind?
1. Hab ich mir damals angewohnt 988 Millisekunden anstatt 1000 zu Schreiben.
Starte den Timer beim OnGameModeInit.
Naja, jeder der nicht Eingeloggt, ist dann beim Anmeldebildschirm, dachte halt das es besser für den Server sei, ein Timer zu nutzen, als für 70 Spieler einen eigenen Timer zu nehmen.
TIMER_PlayerSecond = SetTimer("PlayerSecondTimer", 988, true);
function:PlayerSecondTimer()
{
//gettime(strHour, strMinute, strSecond);
new strMsg[128];
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(!IsPlayerConnected(i))continue;
if(!PlayerInfo[i][pLoggedIn])
{
GetPlayerTime(i, strHour, strMinute);
format(strMsg, sizeof(strMsg), "GPT: %d", strHour);
strHour ++;
SetPlayerTime(i, strHour, 59);
format(strMsg, sizeof(strMsg), "%s - SPT: %d", strMsg, strHour);
SendInfoMessage(i, strMsg);
}
else
{
//SetWorldTime(strHour);
}
}
return 1;
}
Alles anzeigen
Hab es auch so Versucht, leider der gleiche Effekt, der Zählt mir halt die Stunden nicht höher, obwohl er es ja eigentlich sollte.
LG, DomeTastisch.