new Name[MAX_PLAYER_NAME],nName[MAX_PLAYER_NAME];
new Datei[200];
GetPlayerName(playerid,Name,sizeof Name); //Spielername in den String "Name" setzen
mysql_real_escape_string(Name,nName); //Damit niemand die mysql verbindung "injecten" kann oder so, schiebt das script den string in den neuen string namens nName
format(Datei,sizeof Datei,"UPDATE `USERTABELLE` SET `Jailtime` = '%d' WHERE `Username` = '%s'",pInfo[playerid][JailTime],nName); //USERTABELLE = Die Tabelle in der Datenbank, wo die Accounts drinne stehen. Username für dein "Namensfeld" in der Tabelle einsetzen
mysql_query(Datei); //"Request" an die Datenbank schicken
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
-
-
Was soll den der Timer bewirken?
Hab schon einen, der die Knastzeit ausrechnet.
Will das einbauen, bin aber nicht sicher.
mfG
Walker//Doppeltes Wort.
//2
Jetzt wird man jede Sekunde vor's LSPD gesetzt, wenn man gespawnt ist.
//3
Hab jetzt eingestellt, dass der Timer nur dann einsetzt, wenn man im Knast ist, aber wie es aussieht werden die sekunden doch nicht runtergezählt.. -
ich weiß zwar nicht wie du es hast aber ich würde es so machen
ganz obennew Knast[MAX_PLAYERS];
new Eingeknastet[MAX_PLAYERS];
forward Knastpublic()dann bei on gamemodeinit
SetTimer("Knastpublic", 1000,1);
for(new i = 0; i < MAX_PLAYERS; i++)
{
Knast[i]=0;
Eingeknastet[i]=0;
}dann ganz unten
public Knastpublic()
{
for(new i = 0; i < MAX_PLAYERS; i++)
if(IsPlayerConnected(i))
{
if(Knast[i]>=1)
{
if(Eingeknastet[i]==1)
{
Knast[i]--;
}
}
if(Knast[i]==0)
{
if(Eingeknastet[i]==1)
{
//was passieren soll wenn die zeit abgelaufen ist und der player noch eingespert ist
Eingeknastet[i]=0;
}
}
}
return 1;
}also hab das freihändig gemacht denke aber es müsste funzen musst du natürlich nurnoch deinem login register system anpassen aber sonst ist es ok mit Knast[] kannst du die sekunden einstellen wielange der player im knast ist !!!
hoffe ich konnte helfen
MFG janpplayer
-
Du musst beim Spawnen abfragen, ob die WantedTime höher als 1 ist & ihn dann in die Zelle setzen.
Das mit deinem Timer geht nicht, oder du machst einen Timer für den jeweiligen Spieler. -
doch das geht zu 100% habs auch ausprobiert heute und es wird einfach immer für jeden spieler abgefragt !!!!!!
MFG janpplayer
-
Naja, aber ich find deine Variablen ein wenig sagen wir mal verwirrend.
Warum new eingeknastet?
Hab doch ne Variable. Naja, ich versuch's jetzt mal.
mfG
Walker//Muss das nicht SetTimerEx sein? Der muss ja die public aufrufen.
//2 So, habs jetzt endlich, hab aber noch eine Frage, wie kann ich einstellen, dass sich der Timer nicht mehr wiederholt, wenn man bereits eingespert ist?
Man spawnt nämlcih immerwieder im Knast nachm arresten, also man wurde eingesperrt und wird beim ablaufen der zeit andauernd neu geportet xD -
nein sonst machst du den timer für jeden spieler das ist ja unnötig wiso auch geht doch so resourcenschonender !!!
wie hast du es denn jetzt zeig mal die public ich machs dir dann
// edit frage
MFG janpplayer -
Also ich benutze gerade als Timer das hier. Steht halt beim Spawn, damit der Timer geladen wird.
if(pInfo[playerid][JailTime] >= 1)
{
SetTimerEx("Jail",1000,1,"i",playerid);
return 1;
}
Beim /arrest Befehl wird der Timer aufgerufen. Hier der ganze Befehl (Zeit ist extra so kurz zum Testen)
COMMAND:arrest(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(pInfo[playerid][Fraktion] != 4 && pInfo[playerid][Fraktion] != 9)return SendClientMessage(playerid,0xC8C8C8FF,"Du bist kein Cop/FBI!");
if(GetPVarInt(playerid, "dienst") == 0) return SendClientMessage(playerid,0xC8C8C8FF,"Du bist nicht im Dienst!");
else
{
if(IsPlayerInRangeOfPoint(playerid,8,267.8802,82.1092,1001.0391) && pInfo[pID][Wanteds] >= 1)
{
new str[128],str2[128];
SetTimerEx("Jail",1000,1,"i",pID);
pInfo[pID][JailTime] = pInfo[pID][Wanteds] * 1000 * 2;
pInfo[pID][Wanteds] = 0;
pInfo[pID][Free] = 0;
SetPlayerWantedLevel(pID,0);
SetPlayerPos(pID,264.7867,82.0650,1001.0391);
SetPlayerInterior(pID,6);
SetPlayerVirtualWorld(pID,38);
SetPVarInt(pID, "dienst", 0);
format(str,sizeof(str),"<< %s hat den Verdächtigen %s eingesperrt >>",SpielerName[playerid],SpielerName[pID]);
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;
}Und die public
public Jail(playerid)
{
if(pInfo[playerid][JailTime] >= 1)
{
SetPlayerPos(playerid,264.7867,82.0650,1001.0391);
SetPlayerInterior(playerid,6);
SetPlayerVirtualWorld(playerid,38);
pInfo[playerid][JailTime] -= 1000;
}
else if(pInfo[playerid][JailTime] == 0 && pInfo[playerid][Free] == 0)
{
pInfo[playerid][Free] = 1;
SetPlayerPos(playerid,1552.5352,-1675.6243,16.1953);
SetPlayerFacingAngle(playerid,90);
SetCameraBehindPlayer(playerid);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SendClientMessage(playerid,0xC8C8C8FF, "Du hast deine Strafe abgesessen! Du bist wieder frei!");
}
return 1;
}Ich musst Free einbauen, damit man nicht nach der Entlassung andauernd neu spawnt.
Standardmäßig ist Free immer auf 1. -
du müstest noch eine abfrage machen dann würde es gehen also nicht nur abfragen ob er schon im knast sitzt also bei der public
public Jail(playerid)
{
if(pInfo[playerid][JailTime] >= 1)
{
if(pInfo[playerid][Free]==1)
{
SetPlayerPos(playerid,264.7867,82.0650,1001.0391);
SetPlayerInterior(playerid,6);
SetPlayerVirtualWorld(playerid,38);
pInfo[playerid][JailTime] -= 1000;
pInfo[playerid][Free]=0;
}
else
{
pInfo[playerid][JailTime] -=1000;
}
}
else if(pInfo[playerid][JailTime] == 0 && pInfo[playerid][Free] == 0)
{
pInfo[playerid][Free] = 1;
SetPlayerPos(playerid,1552.5352,-1675.6243,16.1953);
SetPlayerFacingAngle(playerid,90);
SetCameraBehindPlayer(playerid);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SendClientMessage(playerid,0xC8C8C8FF, "Du hast deine Strafe abgesessen! Du bist wieder frei!");
}
return 1;
} -
Klappt, danke.
-
np aber ich würde es nicht immer so wie du machen weil du sonst die timer doppelt irgendwann laufen hast ich hatte auch immer das problem deßwegen habe ich das oben in der gamemodeinit gemacht mit dem timer!!!!
naja war ja nur ein tipp ist ja deine sache
MFG janpplayer
-
Meinste ich soll den Timer bei OnGameModeInit laufen lassen statt bei OnPlayerSpawn?
Wie soll ich n das einstellen, kann ich da einfach dern gleichen Timer laufen lassen oder wie?
mfG
Walker -
zuerst also so machen jetzt!!!
OnGameModeInit : SetTimer("Knastpublic", 1000,1);
dann die public so : public Jail(i)
{
for(new i = 0; i < MAX_PLAYERS; i++)
if(pInfo[i][JailTime] >= 1)
{
if(pInfo[i][Free]==0)
{
pInfo[i][JailTime] -=1000;
}
}
else if(pInfo[i][JailTime] == 0 && pInfo[i][Free] == 0)
{
pInfo[i][Free] = 1;
SetPlayerPos(i,1552.5352,-1675.6243,16.1953);
SetPlayerFacingAngle(i,90);
SetCameraBehindPlayer(i);
SetPlayerInterior(i,0);
SetPlayerVirtualWorld(i,0);
SendClientMessage(i,0xC8C8C8FF, "Du hast deine Strafe abgesessen! Du bist wieder frei!");
}
return 1;
}so das war jetzt mal die public damit es so leuft!!!
MFG janpplayer
-
Danke, hab aber noch n Warning.
C:\Dokumente und Einstellungen\JOSHUA\Desktop\WalkerScript\WalkerScript\WalkerScript.pwn(2711) : warning 219: local variable "i" shadows a variable at a preceding level
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
Weiß zwar, was das bedeutet, will jetzt aber da nichts rauslöschen.
-
breadfish.de
Hat das Thema geschlossen.