Hey, Scripter/Scripterinnen
Ich hab ein Problem, ich hab mir ein Wantedsystem erstellt, was auch an sich sehr gut funktioniert, aber
denjenigen nach einem Relogg/Kill wieder reinzusetzen für die restliche Zeit funktioniert nicht. Ich hab es beim Prisonsystem noch
hinbekommen, was mich selbst ein wenig wundert.
Aber hier komm ich nicht weiter. Dazu wird der Wert im Account auch nicht "aktualisiert", es steht immer die Zeit für die er eingsperrt wurde drin,
nicht die Aktuelle. Mir gefällt das ganze irgendwie nicht sehr gut und es wäre schöner, wenn man der Wert auch selbst bearbeiten könnte, ohne das derjenige
dann auf ewig drin bleibt.
Wäre schön, wenn sich eine erfahrener Scripter meldet.
Ich bin für jeden Tipp dankbar!
mfG
Walker
Wantedsystem. Restzeit auslesen!
- SoulMan
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
unter OnPlayerDisconnect vergessen die variable zu speichern ?
gretz vitamin
-
Nein. Solche Fehler sind da nirgends drin.
Es geht einfach nur um das auslesen der Zeit.
mfG
Walker -
Zeig uns mal die Funktion wo dus speicherst.
Und paar wichtige ausschnite aus dem Jail System.
Ohne Code können wir dir nicht helfen =).MFG RFT
-
Speichern tu ich alles mit MySQL.
Das wird ja alles automatisch geladen/gespeichert.
Der Befehl zum einsperren geht so
COMMAND:einsperren(playerid,params[])
{
new pID;
if(sscanf(params, "u",pID))return SendClientMessage(playerid,0xC8C8C8FF,"/einsperren [ID/Name]");
if (!IsPlayerConnected(pID))return SendClientMessage(playerid,0xC8C8C8FF,"Dieser Spieler ist nicht online!");
if (pID == playerid)return SendClientMessage(playerid,0xC8C8C8FF,"Du kannst dich nicht selber einsperren!");
if(pInfo[playerid][Fraktion] != 4 && pInfo[playerid][Fraktion] != 9)return SendClientMessage(playerid,0xC8C8C8FF,"Du bist kein Cop/FBI!");
{
if(IsPlayerInRangeOfPoint(playerid,8,267.8802,82.1092,1001.0391) && pInfo[pID][Wanteds] >= 1)
{
new str[128],str2[128];
SetTimerEx("Jail",pInfo[pID][Wanteds] * 60000 * 3,false,"i",pID);
pInfo[pID][JailTime] = pInfo[pID][Wanteds] * 60000 * 3;
pInfo[pID][Wanteds] = 0;
SetPlayerWantedLevel(pID,0);
SetPlayerPos(pID,264.7867,82.0650,1001.0391);
SetPlayerInterior(pID,6);
SetPlayerVirtualWorld(pID,38);
format(str,sizeof(str),"<< %s hat den Verdächtigen %s eingesperrt >>",SpielerName[pID],SpielerName[playerid]);
format(str2,sizeof(str2),"Du wurdest von %s für %i Minuten eingesperrt!",SpielerName[playerid],pInfo[pID][JailTime]/60000);
SendClientMessageToAll(0xFF6347AA,str);
SendClientMessage(pID,0xFF6347AA,str2);
}
else return SendClientMessage(playerid,0xC8C8C8FF,"Du bist nicht an den Zellen oder der Spieler hat keine Wanteds!");
}
return 1;
}Es geht halt darum, die "JailTime" zu speichern und den Wert beim Spawn wieder zuzuteilen.
Aber der Wert im Account bleibt immer gleich, dadurch funktioniert das nicht wirklich. Sonst würde die Zeit ja nach jedem Relogg wieder hochgesetzt werden.
mfG
Walker//Pawn Code falsch gepostet
-
Zitat
Es geht halt darum, die "JailTime" zu speichern und den Wert beim Spawn wieder zuzuteilen.
Aber der Wert im Account bleibt immer gleich, dadurch funktioniert das nicht wirklich. Sonst würde die Zeit ja nach jedem Relogg wieder hochgesetzt werden.
mfG
WalkerDeshalb brauchen wir die Funktion wo du deine Accounts speichern lässt.Falls solch eine vorhanden ist.
MFG RFT
-
Zum Speichern
mysql_SetInt("Accounts", "JailTime", pInfo[playerid][JailTime], "Name", SpielerName[playerid]);
Zum Laden
pInfo[playerid][JailTime] = mysql_GetInt("Accounts", "JailTime", "Name", SpielerName[playerid]);mfG
Walker -
Schau mal in der mysql.log ob da ein Fehler beim spechern aufgezeichnet ist.
Habe mysql_debug(); im MySql System eingefügt falls du es nicht raus gemacht hast.
Du sagtest ja der Wert in der Database wird nicht gespeichert.
Und du lässt hoffentlich beim verlassen des Server die Acconts updaten oder ?MFG
-
Nein, hab ich noch nicht genutzt die public.
Ups. Hab aber auch keine Ahnung, wie ich diese nutzen soll.
Hab damit noch nie gearbeitet.
mfG
Walker//In der mysql.log gibt es bzgl. dem laden u. speichern der JailTime keine Probleme.
-
stock UpdatePlayerAccount(playerid)
{
mysql_SetInt("Accounts", "JailTime", pInfo[playerid][JailTime], "Name", SpielerName[playerid])
return true;
}unter OnPlayerDisconnect einmal "UpdatePlayerAccount(playerid);" einfügen.
MFG RFT
-
Benutz einfach ganz normal SavePlayer(playerid); unter OnPlayerDisconnect... Hab ich das da etwa nicht hin gemacht?^^
Zu der sache mit der Zeit:
Willst du das die Zeit auch weiter abläuft wenn der Spieler OFfline ist? Wenn ja wäre timestamp ne gute anlaufstelle.
Ansonsten wüsste ich nicht wie du die restliche Zeit von einem Timer herausbekommen könntest. Ausser du lässt ihn mit nem 1sek intervall laufen und aktualisierst immer die variable... -
-
UpdatePlayerAccount ist im grunde genau das selbe wie SavePlayer, nur das bei UpdatePlayerAccount nur ein wert gespeichert wird und bei SavePlayer alle zusammen.
-
Okey, dann wird mir das wohl nicht wirklich mehr bringen.
Die Zeit soll beim Disconnect jedoch nicht weiterlaufen. Verstehe nur hierbei nicht, warum es
beim Prisonsystem ging. Da konnte ich halt die Zeit selbst angeben.
mfG
Walker -
UpdatePlayerAccount ist im grunde genau das selbe wie SavePlayer, nur das bei UpdatePlayerAccount nur ein wert gespeichert wird und bei SavePlayer alle zusammen.
Jop aber wenn SavePlayer vorhanden ist braucht ihr auch mein UpdatePlayerAccount nicht wäre ja unnötig.MFG RFT
-
Ist vorhanden.
Trotzdem danke. Was gäbe es denn nun für Alternativen?
Solch ein Timer frisst doch sicher eine Menge Recourcen, nicht wahr?
mfG
Walker//Nachdem ich nun fast jeden erdenklichen Versuch unternommen hab, dieses Problem zu lösen, geb ich es langsam auf..
Kann mir wirklich niemand helfen? Wie sieht's denn mit einem Timer aus, der die Zeit immer aktualisiert?
Wie setz ich das um? -
mach doch sowas z.b.:
new Name[MAX_PLAYER_NAME],nName[MAX_PLAYER_NAME];
new Datei[200];
GetPlayerName(playerid,Name,sizeof Name);
mysql_real_escape_string(Name,nName);
format(Datei,sizeof Datei,"UPDATE `USERTABELLE` SET `Jailtime` = '%d' WHERE `Username` = '%s'",pInfo[playerid][JailTime],nName);
mysql_query(Datei);& der Timer:
SetTimer("KnastTimer",1000,1);
forward KnastTimer();
public KnastTimer()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(pInfo[i][JailTime] > 0)
{
pInfo[i][JailTime] -= 1;
}
if(pInfo[i][JailTime] == 0)
{
SetPlayerPos(i,X,Y,Z);
SendClientMessage(i,HELLROT,"Du wurdest aus dem Gefängnis entlassen!");
}
}
}
return 1;
} -
Wäre nett, wenn du mir den Sinn dieser Zeilen auch noch erklärst..
mfG
Walker -
würd dir gerne helfen
-
Sehr hilfreicher Beitrag..
Nein, ehrlich was soll das?//Kleiner Fehler.
-