Beiträge von Jeffry

    Das kannst du in etwa so machen:
    (Ich kann dir nur ein allgemeines Beispiel geben, da ich deine Variablen nicht kenne.)


    OnGameModeInit:
    SetTimer("KnastSekundenTimer", 1000, true);


    OnPlayerConnect:
    Ein PlayerTextDraw erstellen, mit zum Beispiel:
    knastTD[playerid] = CreatePlayerTextDraw(...


    Unter die Includes:
    new PlayerText3D:knastTD[MAX_PLAYERS];


    Dort wo du den Spieler in den Knast schickst:
    SpielerInfo[pID][KnastZeit] = minuten * 60;


    Ganz unten im Gamemode:
    forward KnastSekundenTimer();
    public KnastSekundenTimer()
    {
    new str[32];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && SpielerInfo[i][KnastZeit] > 0)
    {
    SpielerInfo[i][KnastZeit]--;
    if(SpielerInfo[i][KnastZeit] > 0)
    {
    format(str, sizeof(str), "Knast: %02d:%02d", SpielerInfo[i][KnastZeit]/60, SpielerInfo[i][KnastZeit]%60);
    PlayerTextDrawSetString(i, knastTD[i], str);
    PlayerTextDrawShow(i, knastTD[i]);
    }
    else
    {
    PlayerTextDrawHide(i, knastTD[i]);
    //Spieler aus Knast teleportieren...
    }
    }
    }
    return 1;
    }


    Bei Fragen kannst du natürlich gerne fragen!

    Das geht realtiv leicht, du musst nur ein paar Kleinigkeiten anpassen.


    Oben unter die Includes:
    new radioSender[MAX_PLAYERS] = {-1,...};


    Dann dort wo der Spieler das Radio an macht:
    radioSender[playerid] = listitem; //Das ausgewählte Listitem = der Sender
    new veh = GetPlayerVehicleID(playerid);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && GetPlayerVehicleID(i) == veh)
    {
    //Stream für "i" starten.
    radioSender[i] = listitem;
    }
    }


    Wenn der Stream aufhört, und wenn der Spieler den Server verlässt, oder das Fahrzeug verlässt:
    radioSender[playerid] = -1;


    Bei OnPlayerStateChange:
    if(newstate == PLAYER_STATE_PASSENGER)
    {
    new veh = GetPlayerVehicleID(playerid);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(i != playerid && IsPlayerConnected(i) && GetPlayerVehicleID(i) == veh && radioSender[i] != -1)
    {
    radioSender[playerid] = radioSender[i];
    switch(radioSender[playerid])
    {
    case 0: //...Stream 0 starten
    case 1: //...
    }
    }
    }
    }

    Geht ziemlich einfach.
    Du erstellst 2 Textdraws (TextDrawCreate) bei OnGameModeInit, eins davon ist einfach nur weiß und geht über den ganzen Bildschirm, und das andere ist das mit dem Text (nennen wir sie tdWeiss und tdText).


    Unter die Includess:
    new trollTimer[MAX_PLAYERS] = {-1,...};


    Der Code würde dann so aussehen:
    Im Befehl /troll [id]:
    if(trollTimer[pID] != -1) KillTimer(trollTimer[pID]);
    trollTimer[pID] = SetTimerEx("TrollPlayer", 1000, 1, "d", pID);


    Bei /endtroll:
    if(trollTimer[pID] != -1) KillTimer(trollTimer[pID]);
    trollTimer[pID] = -1;


    Ganz unten im Gamemode:
    forward TrollPlayer(playerid);
    public TrollPlayer(playerid)
    {
    static bool:trollStatus[MAX_PLAYERS];
    if(trollStatus[playerid])
    {
    TextDrawHideForPlayer(playerid, tdText);
    TextDrawHideForPlayer(playerid, tdWeiss);
    trollStatus[playerid] = false;
    }
    else
    {
    TextDrawShowForPlayer(playerid, tdText);
    TextDrawShowForPlayer(playerid, tdWeiss);
    trollStatus[playerid] = true;
    }
    return 1;
    }

    Setzt du beim Einlösen das hier auf 1?
    Gutschein[i][Vorhanden]


    Und was meinst du mit, dass nur die ID 0 ausgelesen wird? Kannst du zwei Gutscheine erstellen, und was passiert, wenn du den Code des zweiten Gutscheins eingibst?

    Du überschreibst die Datei (io_write = Datei leeren und zum schreiben öffnen).
    Mache es so:
    dcmd_unban(playerid, params[])
    {
    if(!IsPlayerConnected(playerid)) return SendClientMessage(playerid, COLOR_WHITE, "Du bist nicht eingeloggt.");
    if(PlayerInfo[playerid][pAdmin] < 1338) return SendClientMessage(playerid, COLOR_WHITE, "» Du besitzt nicht die benötigten Zugriffsrechte.");
    new accname[MAX_PLAYER_NAME];
    if(sscanf(params, "s", accname)) return SendClientMessage(playerid, COLOR_WHITE, "BENUTZUNG: /unban [Accountname]");
    new acc[MAX_PLAYER_NAME+20];
    format(acc,sizeof(acc),"/Accounts/%s.ini",accname);
    if(!fexist(acc)) {
    format(stringx,sizeof(stringx)," Der Account %s existiert nicht!",accname);
    SendClientMessage(playerid,COLOR_GRAD2,stringx);
    return 1;
    }
    dini_Set(acc, "Gebannt", "0");
    format(stringx, sizeof(stringx), "<< Administrator %s hat den Spieler %s entbannt. >>", MeinName(playerid), accname);
    SendClientMessageToAll(COLOR_LIGHTRED,stringx);
    return 1;
    }

    Kannst du das beides bitte nicht alles in einer Zeile posten? Nutze dafür bitte den Reiter Quellcode, über der Schriftart.
    Sonst können wir dir kaum helfen.

    Hast du es mal auf einem leeren Server versucht (also nur grandlarc als Gamemode laden, und den Filterscript).
    Geht es dann?


    Musst du möglicherweise in dem Filterscript noch die Progress Bar einschalten?

    Welche Schleife eigentlich?
    Schreibe es mal so, und schau dann ob es noch immer abbricht, ich habe dir ein paar Sicherheiten zwecks INVALID_PLAYER_ID hinzugefügt.

    Spoiler anzeigen
    public OnPlayerDeath(playerid, killerid, reason)
    {
    new name[MAX_PLAYER_NAME];
    new string[256];
    PlayerInfo[playerid][pInvWeapon] = 0;
    PlayerInfo[playerid][pInvAmmo] = 0;
    PlayerInfo[playerid][pInvWeapon2] = 0;
    PlayerInfo[playerid][pInvAmmo2] = 0;
    FrakMatsHolding[playerid] = 0;
    format(string, sizeof(string), "Du wurdest getötet.");
    SendClientMessage(playerid, 0xFF1400FF, string);
    format(string, sizeof(string), "Du hast %s getötet.", MeinName(playerid));
    SendClientMessage(killerid, 0xFF00FFFF, string);
    for(new fs;fs<sizeof(FightSystem);fs++)
    {
    if(FightSystem[fs][fsFightTime])
    {
    if(GetPlayerFaction(playerid) == FightSystem[fs][fsOwnerFaction]||
    GetPlayerFaction(playerid) == FightSystem[fs][fsAttackFaction])
    {
    PlayerInfo[playerid][pTot] = 0;
    }
    }
    }
    gPlayerSpawned[playerid] = 0;
    GetPlayerName(playerid, name, sizeof(name));
    PlayerInfo[playerid][pLocal] = 255;
    if(reason == 38 && killerid != 255)
    {
    new kstring[128];
    new kickname[MAX_PLAYER_NAME];
    if(IsPlayerConnected(killerid))
    {
    GetPlayerName(killerid, kickname, sizeof(kickname));
    format(string, 256, "%s (ID: %d) hat einen Spieler mit einer Minigun getötet.",kickname,killerid);
    ABroadCast(COLOR_YELLOW,string,1);
    printf("%s", kstring);
    }
    }
    if (gPlayerCheckpointStatus[playerid] > 4 && gPlayerCheckpointStatus[playerid] < 11)
    {
    DisablePlayerCheckpoint(playerid);
    gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
    }
    new caller = Mobile[playerid];
    if(caller != 255)
    {
    if(caller < 255)
    {
    SendClientMessage(caller, COLOR_GRAD2, " Die Verbindung wurde unterbrochen...");
    CellTime[caller] = 0;
    CellTime[playerid] = 0;
    Mobile[caller] = 255;
    }
    Mobile[playerid] = 255;
    CellTime[playerid] = 0;
    }
    ClearCrime(playerid);
    if(PlayerPaintballing[playerid] != 0 && killerid != INVALID_PLAYER_ID)
    {
    PlayerPaintballKills[killerid] ++;
    if(PlayerPaintballKills[killerid] > PaintballWinnerKills)
    {
    new killer[MAX_PLAYER_NAME];
    PaintballWinner = killerid;
    PaintballWinnerKills = PlayerPaintballKills[killerid];
    GetPlayerName(killerid, killer, sizeof(killer));
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerPaintballing[i] != 0)
    {
    format(string, sizeof(string), "* %s ist mit %d Kills in Führung.",killer,PaintballWinnerKills);
    SendClientMessage(i, COLOR_WHITE, string);
    }
    }
    }
    }
    return 1;
    }
    if(GettingCK[playerid] < 999 || OnCK[playerid] < 999)
    {
    if(IsPlayerConnected(killerid))
    {
    if(GettingCK[killerid] < 999 || OnCK[playerid] < 999)
    {
    new killer[MAX_PLAYER_NAME];
    new dier[MAX_PLAYER_NAME];
    GetPlayerName(playerid, dier, sizeof(dier));
    GetPlayerName(killerid, killer, sizeof(killer));
    format(string, sizeof(string), "* %s hat deinen Charakter gesperrt, du kannst nun mit diesem Charakter nicht mehr Spielen.",killer);
    SendClientMessage(playerid, COLOR_LIGHTRED, string);
    format(string, sizeof(string), "** %s hat den Spieler %s erledigt **",killer,dier);
    CKLog(string);
    PlayerInfo[playerid][pCK] = 1;
    if(GettingCK[playerid] < 999)
    {
    GettingCK[playerid] = 999;
    }
    else if(OnCK[playerid] < 999)
    {
    OnCK[playerid] = 999;
    }
    if(GettingCK[killerid] < 999)
    {
    GettingCK[killerid] = 999;
    }
    else if(OnCK[killerid] < 999)
    {
    OnCK[killerid] = 999;
    }
    KickPlayer[playerid] = 1;
    }
    }
    }
    SetPlayerColor(playerid,COLOR_GRAD2);
    if(killerid != INVALID_PLAYER_ID)
    {
    //if(NoContract == 0)
    //{
    new ftextk[32];
    if(GetPlayerFaction(killerid) == 0)
    {
    ftextk = "Zivilist";
    }
    else
    {
    ftextk = Fracs[(GetPlayerFaction(killerid)-1)];
    }
    new ftexto[32];
    if(GetPlayerFaction(killerid) == 0)
    {
    ftexto = "Zivilist";
    }
    else
    {
    ftexto = Fracs[(GetPlayerFaction(killerid)-1)];
    }
    new lstring[400];
    format(lstring,sizeof(lstring),"DeathReport: Killer: %s(%d)(%s) Lvl: %d | Opfer: %s(%d)(%s) Lvl: %d",Spielername(killerid),killerid,ftextk,PlayerInfo[killerid][pLevel],Spielername(playerid),playerid,ftexto,PlayerInfo[playerid][pLevel]); // Code
    ABroadCast(COLOR_LIGHTGREEN,string,1);
    //}
    }
    GW_OnPlayerDeath(playerid, killerid, reason);
    //killerid = INVALID_PLAYER_ID;
    SetPlayerColor(playerid,COLOR_GRAD2);
    RemovePlayerWeapon(playerid);
    M_OnPlayerDeath(playerid,killerid,reason);
    if(FluchtzoneChance[playerid] == 1)
    {
    KillTimer(timer[playerid]);
    SendClientMessage(playerid,COLOR_YELLOW,"Deine Fluchtmöglichkeit ist vorbei.");
    GangZoneDestroy(zone[playerid]);
    FluchtzoneChance[playerid] = 0;
    StopVerfolgungsmusikForPlayer(playerid);
    }
    if(gPlayerUsingLoopingAnim[playerid])
    {
    gPlayerUsingLoopingAnim[playerid] = 0;
    TextDrawHideForPlayer(playerid,txtAnimHelper);
    }
    if(BlindFold[playerid] == 1)
    {
    BlindFold[playerid] = 0;
    }
    if(PlayerInfo[playerid][pMauled] == 1)
    {
    PlayerInfo[playerid][pMauled] = 0;
    }
    InCargo[playerid] = 0; InLevi[playerid] = 0; InEnfo[playerid] = 0;
    if(FirstSpawn[playerid] == 1)
    {
    FirstSpawn[playerid] = 0;
    }
    if(IsBlacklist[playerid]==1)
    {
    ClearBlack(playerid);
    IsBlacklist[playerid]=0;
    }
    /*if (killerid != INVALID_PLAYER_ID && !IsACop(killerid) && reason != 49 && PlayerInfo[killerid][pJailed] == 0 && !IstInGangFight(playerid))
    {
    SetPlayerCriminal(killerid,255, "Vorsätzlicher Mord");
    }*/
    if(killerid != INVALID_PLAYER_ID && !IsACop(killerid) && reason == 49)
    {
    SetPlayerCriminal(killerid,255, "Fahrerflucht");
    }
    if(killerid != INVALID_PLAYER_ID && PlayerInfo[playerid][pKopfgeld] > 0 && IsPlayerInFrac(killerid, 8))
    {
    new bstring[400];
    new ttdstring[300];
    format(bstring,sizeof(bstring),"[CONTRACT] Der Spieler %s wurde von Hitman %s getötet.",Spielername(playerid),Spielername(killerid));
    TBroadCast(COLOR_LIGHTRED, bstring);
    GivePlayerMoney(killerid,PlayerInfo[playerid][pKopfgeld]);
    SendClientMessage(killerid,COLOR_YELLOW,"| ================================================================= |");
    SendClientMessage(killerid,COLOR_YELLOW,"| [Auftraggeber]: Auftrag erledigt! Gute Arbeit, hier ist ihr Geld! |");
    SendClientMessage(killerid,COLOR_YELLOW,"| ================================================================= |");
    format(ttdstring, sizeof(ttdstring), "~g~Contract ~w~Erledigt~n~Du bekommst ~r~%d$~w~!", PlayerInfo[playerid][pKopfgeld]);
    GameTextForPlayer(killerid, ttdstring, 5000, 3);
    SendClientMessage(playerid,COLOR_YELLOW,"| =========================================================================== |");
    SendClientMessage(playerid,COLOR_YELLOW,"| [Auftragsmord]: Du wurdest getötet da auf dich ein Kopfgeld ausgesetzt war. |");
    SendClientMessage(playerid,COLOR_YELLOW,"| =========================================================================== |");
    PlayerInfo[playerid][pKopfgeld] = 0;
    }
    killerid = INVALID_PLAYER_ID;
    return 1;
    }


    Das funktioniert aber nicht auf selbstgemappten Objekten. Das funktioniert nur, wenn man sich in (z.B.) einen Cluckin-Bell teleportiert, der standardmäßig einen Checkpoint am Tresen hat. Wenn man sich aber dort hineinteleportiert wird (z.T.) der Checkpoint nicht angezeigt. Nutzt man dann die Funktion, dann wird der Checkpoint angezeigt.


    In X-beliebigen selbst-gemappten Objekten geht das aber nicht.

    Ralf:


    Also mit einer Funktion es hinsetzen geht nicht, da gibt es keine Methode.


    Allerdings kannst du (was jedoch ziemlich aufwändig ist) einen NPC erstellen, den du mit einem der kontrollierbaren NPC-Plugins erstellst. Dann erstellst du einen Checkpoint an dem Tresen und wenn dort jemand reinläuft, wird die Animation des Tablett-gebens abgespielt, und dem NPC ein Tablett an die Hand attached. Dann kannst du mit den SA-MP Menüs ein Menü erstellen, welches die gleichen Teile beinhaltet, wie das Standard-Menü des Cluckin-Bell. Nach Auswahl kannst du den Spieler dann die Essen-Animation abspielen lassen und das Tablett wieder zurückfahren lassen.


    Ob das alles so funktioniert wie beschrieben ist natürlich offen, das müsstest du testen und manche Teile ggf. anpassen.