Beiträge von Snail

    sieht gut aus, allerdings würde ich b_StartSystem() durch b_OnPlayerDisconnect() ersetzen,
    dazu dann bei OnPlayerConnect SetTimerEx verwenden und bei OnPlayerDisconnect den Timer wieder killen

    sollte so gehen :



    public OnPlayerText(playerid, text[])
    {
    if(imuc[playerid]==1)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    new pname[MAX_PLAYER_NAME],sendstr[128]; GetPlayerName(playerid,pname,sizeof pname);
    format(sendstr,sizeof sendstr,"[UC] %s: %s",pname,text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerToPoint(15,i,x,y,z))
    {
    SendClientMessage(i,COLOR_YELLOW,sendstr);
    }
    }
    }
    return 0;
    }
    return 1;
    }

    Ich habe ja bereits geschrieben, dass man mit s0beit die TextDraws und die Karte ausblenden lassen kann.
    So könnt ihr die gesamte Bildfläche filmen.
    Allerdings solltet ihr vorher mit dem Serverbesitzer reden, ob ihr es zu Aufnahmezwecken verwenden dürft.

    Nicht unbedingt, aber wenn du nur 100 Slots zur Verfügung hast,
    warum sollen sich dann alle Schleifen Variablen etc. 500 mal wiederholen wenn sie doch nur 100 mal benötigt werden.
    Du könntest alternativ auch in die a_samp.inc gehen und bei
    #define MAX_PLAYERS die 500 durch 100 ersetzen.
    Oder du gibts bei deinem GameMode oben das hier ein :


    #undef MAX_PLAYERS
    #define MAX_PLAYERS 100

    Du kannst die Transparancy oder wie das heißt ^^ runterstellen.
    D.h. es wird "durchsichtiger".
    Dazu musst du den letzten Regler beim ColorPicker verschieben

    GetMaxPlayers() gibt den Wert wieder, der in der server.cfg eingestellt wurde für die maximale userzahl.
    MAX_PLAYERS dagegen ist in der a_samp.inc festgelegt auf 500.
    --> Wenn du einen 100 Slot server hast, dann würde eine Schleife mit MAX_PLAYERS 500 mal durchlaufen
    Eine schleife mit GetMaxPLayers nur 100 mal, so wie man es in der .cfg festgelegt hat
    Das ganze kann man dann soweit ich weiß auch noch optimieren, indem man GetMaxPlayers als Variable speichert.



    // oben :
    new maxp;
    //OnGameModeInit :
    maxp = GetMaxPlayers();
    // später dann MAX_PLAYERS durch maxp ersetzen

    Bei OnGameModeInit einen Timer laufen lassen der sich alle 15 min wiederholt

    // oben :
    forward mapwechsel();
    new map = 0;
    // OnGameModeInit :
    SetTimer("mapwechsel", 15*60*1000, 1);


    public mapwechsel()
    {
    if(map == 0)
    {
    map = 1;
    SendClientMessageToAll(COLOR, "NEUE MAP");
    }
    else if(map == 1)
    {
    // usw
    }
    return 1;
    }
    // Dann bei OnPlayerSpawn ne Abfrage :


    if(map == 0)
    {
    SetPlayerPos(...);
    }
    else if(map == 1)
    {
    SetPlayerPos(...);
    }

    Warum wollt ihr immer das man euch alles scriptet.
    Lernt doch erst mal die Grundlagen bevor ihr hier euch alles scripten lasst.
    Was du brauchst ist ein Timer, und ein paar Abfragen.


    PS :

    Zitat


    //wenn ihr wollt, auch noch ein text ;)

    Es bringt dir nichts wenn du immer nur alles aus Tutorials kopierst !

    War ein Tippfehler von mir
    =! muss zu != werden
    Außerdem fällt mir gerade auf, dass ich einen Denkfehler drin habe (playerid muss durch i ersetzt werden) ;)
    So müsste das behoben sein :

    if(GetPlayerWantedLevel(i) != 0)


    if (strcmp(cmdtext, "/wanteds", true)==0)
    {
    new name[MAX_PLAYER_NAME];
    new string[1024];
    format(string, sizeof(string), "");
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i)
    {
    if(GetPlayerWantedLevel(playerid) =! 0)
    {
    GetPlayerName(i, name, sizeof(name));
    format(string, sizeof(string), "%s\n%s - Wantedlevel %d", string, name, GetPlayerWantedLevel(i));
    }
    }
    }
    ShowPlayerDialog(playerid, ID, DIALOG_STYLE_MSGBOX, "Verbrecherliste", string, "OK", "OK");
    // Für ID musst du eine Dialog-ID einsetzten
    return 1;
    }


    DIe Abfrage ob man Cop ist oder nicht musst du machen, weil ich nicht weiß wie deine Variablen heißen.
    Was den Befehl /clearwanteds angeht, empfehle ich DCMD :



    // oben Im Script :
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    // Dann bei OnPlayerCommandText :


    dcmd(clearwanteds,13,cmdtext);


    // dann außerhalb eines Publics :


    dcmd_clearwanteds(playerid, params[])
    {
    new pid;
    if(sscanf(params, "i", pid))
    {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /clearwanteds [playerid]");
    }
    if(!IsPlayerConnected(pid))
    {
    return SendClientMessage(playerid,COLOR_RED,"Ungültige ID - Benutzung: /clearwanteds [playerid]");
    }
    SetPlayerWantedLevel(pid, 0);
    return 1;
    }



    Bevor das geht, musst du allerdings noch ganz unten in deinem Script das hier einfügen :



    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {


    new changestr[16], changepos = 0, strpos = stringPos;
    while(changepos < 16 && string[strpos] && string[strpos] != delim)
    {
    changestr[changepos++] = string[strpos++];
    }
    changestr[changepos] = '\0';
    setarg(paramPos,0,_:floatstr(changestr));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }


    PS : ist jetzt alles aus dem Stegreif geschrieben, also es könnte sein, dass da was nicht geht ;)

    Meinst du mit Endround einen GameMode Restart ?
    Wenn ja dann lass nen Timer durchlaufen der die uhrzeit überprüft.
    Die zeit kannst du mit "gettime(hour, min, sek)" abfragen.
    Dann if(hour == 3 && min == 0)
    Dann einfach SendRconCommand("gmx");
    Den Timer musst du aber im Minutentakt laufen lassen.


    // EDIT : zu langsam :(