Wantedsystem. Restzeit auslesen!

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
  • 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

    Du suchst eine nette Community, ein hilfsbereites Team & einen Server, wo es Spaß macht, drauf zu spielen?
    Dann bist du bei Sunrise - Reallife genau richtig!

  • Was soll den der Timer bewirken?
    Hab schon einen, der die Knastzeit ausrechnet.
    Will das einbauen, bin aber nicht sicher. :P
    mfG
    Walker


    //Doppeltes Wort.
    //2
    Jetzt wird man jede Sekunde vor's LSPD gesetzt, wenn man gespawnt ist. :D
    //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 oben


    new 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 :D 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.

    Du suchst eine nette Community, ein hilfsbereites Team & einen Server, wo es Spaß macht, drauf zu spielen?
    Dann bist du bei Sunrise - Reallife genau richtig!

  • 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. :P
    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

    Einmal editiert, zuletzt von 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;
    }

  • 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

  • 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 CompuPhase



    1 Warning.


    Weiß zwar, was das bedeutet, will jetzt aber da nichts rauslöschen. :P