Gamemode per Vote wechseln

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
  • #include <a_samp>
    @voteTimer();
    stock strget(strx[], pos, search = ' ');
    stock static const gamemodes[][] = {
    { "area51" }, /* hier einfügen welche gamemodes laufen sollen */
    { "bomb" }
    };
    stock static pVote[MAX_PLAYERS] = { -1, ... }, r = 0; /* die ... nicht entfernen! */
    @voteTimer()
    {
    static voteFor[sizeof gamemodes], notdie[sizeof gamemodes], cntdie, msg[256];
    GameTextForAll("~r~Gamemode wechsel!", 4000, 3);
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    if(pVote[i] != -1)
    voteFor[pVote[i]]++;
    }
    }
    while(r == 0)
    {
    for(new j = 0; j < sizeof voteFor; j++)
    {
    voteFor[j]--;
    notdie[j] = 0;
    if(voteFor[j] > 0)
    {
    notdie[j] = 1;
    cntdie++;
    }
    }
    if(cntdie == 1)
    {
    new i = 0;
    for(i = 0; i < sizeof voteFor; i++)
    {
    if(notdie[i] == 1)
    break;
    }
    format(msg, sizeof msg, "changemode %s", gamemodes[i]);
    SendRconCommand(msg);
    break;
    }
    if(cntdie == 0)
    {
    GameTextForAll("~r~Stimmungs gleichheit, vote abgebrochen!", 1000, 3);
    break;
    }
    }
    }
    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Vote FS by DMA");
    print("--------------------------------------\n");
    SetTimer("voteTimer", 1000*60*10, 1);
    for(new i = 0; i < MAX_PLAYERS; i++)
    pVote[i] = -1;
    return 1;
    }


    public OnFilterScriptExit()
    {
    print("\n--------------------------------------");
    print(" Vote FS by DMA EXIT!");
    print("--------------------------------------\n");
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    pVote[playerid] = -1;
    SendClientMessage(playerid, 0xFF0000AA, "/votehelp, /vote um für einen Gamemode wechsel zu voten!");
    SendClientMessage(playerid, 0xFF6900AA, "Gamemode Wechsel alle 10min!");
    SendClientMessage(playerid, 0xFF0000AA, "-----------------------------------");
    SendClientMessage(playerid, 0xFF6900AA, "Votescript by DMA 2008");
    SendClientMessage(playerid, 0xFF0000AA, "http://samp.breadfish.de/forum/");
    SendClientMessage(playerid, 0xFF6900AA, "-----------------------------------");
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new msg[256];
    if(!strcmp(strget(cmdtext, 0), "/votehelp"))
    {
    SendClientMessage(playerid, 0xFF0000AA, "/vote [ID] , ID Liste:");
    for(new i = 0; i < sizeof gamemodes; i++)
    {
    format(msg, sizeof msg, "ID:%d Name:%s", i, gamemodes[i]);
    SendClientMessage(playerid, 0xFF6900AA, msg);
    }
    return 1;
    }
    if(!strcmp(strget(cmdtext, 0), "/vote"))
    {
    if(strval(strget(cmdtext, 1)) > 0 && strval(strget(cmdtext, 1)) < sizeof gamemodes)
    {
    if(pVote[playerid] == -1)
    {
    SendClientMessage(playerid, 0xFF6900AA, "Vote gewertet!");
    pVote[playerid] = strval(strget(cmdtext, 1));
    }
    else
    SendClientMessage(playerid, 0xFF0000AA, "Du hast bereits gevoted!");
    }
    else
    SendClientMessage(playerid, 0xFF0000AA, "/vote [ID] , Beispiel: /vote 0");
    }
    return 0;
    }


    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }
    Das sollte klappen, habs gerade ausm kopf heraus geschrieben ;x

  • Wenn man möchte, das nach einer gewissen Zeit der Gamemode wechselt, dann müsste man in jedem GameMode einen Timer rein bauen oder?
    Unter on Gamemodeinit den Timer setzen und dann den Timer ablaufen lassen oder??



    1000*60*10 wie wird der Timer dort berechnet?


    //Edit

    KleineHilfe 2.0


  • Hast du gesehen das das Thema von 2008 ist ?