Team gleichmäßig aufteilen

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
  • Guten Morgen Fische.



    Ich wollte gerne bei mein DM Script gerne es so scripten das
    beide teams immer gleich viel spieler haben müssen das zb 4 gegen 1 nicht möglich ist wie stelle ich das nur an ?


    so werden die teams zugewiesen



    switch(gTeam[playerid])
    {
    case TEAM_ARMY:
    {
    SetPlayerTeam(playerid, 0);
    SetPlayerColor(playerid, COLOR_BLUE);
    new rand = random(sizeof(UsaSpawn));
    SetPlayerPos(playerid, UsaSpawn[rand][0], UsaSpawn[rand][1], UsaSpawn[rand][2]);
    }
    case TEAM_TERRORIST:
    {
    SetPlayerTeam(playerid, 1);
    SetPlayerColor(playerid, COLOR_RED);
    new rand = random(sizeof(RusSpawn));
    SetPlayerPos(playerid, RusSpawn[rand][0], RusSpawn[rand][1], RusSpawn[rand][2]);
    }
    }

  • Kannst das einfach so machen:


    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von Xtrats ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • ich habs jetzt so
    switch(gTeam[playerid])
    {
    case TEAM_ARMY:
    {
    if(countTeam(0) == countTeam(1))
    {
    SetPlayerTeam(playerid, 0);
    SetPlayerColor(playerid, COLOR_BLUE);
    new rand = random(sizeof(UsaSpawn));
    SetPlayerPos(playerid, UsaSpawn[rand][0], UsaSpawn[rand][1], UsaSpawn[rand][2]);
    }
    else
    {
    GameTextForPlayer(playerid, "~r~Full", 5000, 5);
    OnPlayerRequestSpawn(playerid);
    }
    }
    case TEAM_TERRORIST:
    {
    if(countTeam(0) == countTeam(1))
    {
    SetPlayerTeam(playerid, 1);
    SetPlayerColor(playerid, COLOR_RED);
    new rand = random(sizeof(RusSpawn));
    SetPlayerPos(playerid, RusSpawn[rand][0], RusSpawn[rand][1], RusSpawn[rand][2]);
    }
    else
    {
    GameTextForPlayer(playerid, "~r~Full", 5000, 5);
    OnPlayerRequestSpawn(playerid);
    }
    }
    }
    wie kann ich denn jetzt wenn das team voll is verhindern das er spawn klicken kann er kann ja denoch rein er gibt ihn ja jetzt nur eine narricht aus..

    Einmal editiert, zuletzt von Xtrats ()

  • Das kommt darauf an, was denn passieren soll...


    Natürlich kann er spawnen, aber unter OnPlayerSpawn kannste ja z.B. abfragen:


    C
    if(GetPlayerTeam(playerid) == 255) //Team 255 bedeutet, dass er in keinem Team ist (bzw hier landet er, falls es voll ist).
    {
        SetPlayerPos(playerid,...); //Hier kannste ihn irgendwo auf die Map setzen..halt dahin, was passieren soll, falls das Team voll ist mit der Person
        //Kannst ihn natürlich auch in einen Spectate Modus oder so hier versetzen :)
    }

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Aso, ja weil bei beiden Anfangs 0 sind...


    Musst halt n Limit setzen...z.B. so:


    #define MAX_TEAM_LIMIT 4


    http://pastebin.com/tkkN3zDz


    Btw...um zu prüfen ob beide gleich viele Spieler haben und voll sind, einfach so:



    if(countTeam(0) == countTeam(1) && countTeam(0) == MAX_TEAM_LIMIT)
    {
    //Hier sind beide Teams voll
    }

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • und wo geb ich dann aus wenn er nicht rein soll ?
    mit else ?
    oder direkt unter der if abfrage


    aber ich meine team balance ne nich wieviel jeder team ist sondern
    wenn zb 4 in rot sind und nur einer in rot das soll nicht sein sondern das es immer gleich is und nich 10 vs 1

  • Unter den Includes:
    new teamCount[2];


    Bei OnPlayerRequestSpawn:
    switch(gTeam[playerid])
    {
    case TEAM_ARMY:
    {
    if(teamCount[0] > teamCount[1])
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll.");
    return 0;
    }
    teamCount[0]++;
    SetPlayerTeam(playerid, 0);
    SetPlayerColor(playerid, COLOR_BLUE);
    new rand = random(sizeof(UsaSpawn));
    SetPlayerPos(playerid, UsaSpawn[rand][0], UsaSpawn[rand][1], UsaSpawn[rand][2]);
    }
    case TEAM_TERRORIST:
    {
    if(teamCount[1] > teamCount[0])
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll.");
    return 0;
    }
    teamCount[1]++;
    SetPlayerTeam(playerid, 1);
    SetPlayerColor(playerid, COLOR_RED);
    new rand = random(sizeof(RusSpawn));
    SetPlayerPos(playerid, RusSpawn[rand][0], RusSpawn[rand][1], RusSpawn[rand][2]);
    }
    }
    Beachte, dass gTeam[playerid] einen korrekten Wert (1 oder 0) haben muss. Das musst du zuvor oder bei OnPlayerRequestClass anhand des Skins festlegen.


    Wenn du die Teams leerst:
    teamCount[0] = 0;
    teamCount[1] = 0;

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ui da mal druch zu blicken :D


    also
    if(teamCount[0] >= 20)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }
    ist dann team 0
    und für team 1 das selbe ?



    if(teamCount[1] >= 20) //mit 1 dann ?
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }

  • ich habs jetzt so

    case 0:
    {



    if(teamCount[0] >= 20)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }
    gTeam[playerid] = TEAM_ARMY;
    GameTextForPlayer(playerid, "~b~Army", 5000, 5);
    SetPlayerPos(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraLookAt(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraPos(playerid,226.7491,1823.0441,7.4141);
    SetPlayerFacingAngle(playerid, 270 );
    ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1); //smooth dancing
    CreateExplosion(212.9525,1822.9084,6.4141, 11, 10.0);
    teamCount[0]++;
    }
    case 1:
    {
    if(teamCount[0] >= 20)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }
    gTeam[playerid] = TEAM_ARMY;
    GameTextForPlayer(playerid, "~b~Army", 5000, 5);
    SetPlayerPos(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraLookAt(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraPos(playerid,226.7491,1823.0441,7.4141);
    SetPlayerFacingAngle(playerid, 270 );
    ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1); //smooth dancing
    CreateExplosion(212.9525,1822.9084,6.4141, 11, 10.0);
    teamCount[0]++;
    }
    case 2:
    {
    if(teamCount[0] >= 20)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }
    gTeam[playerid] = TEAM_TERRORIST;
    GameTextForPlayer(playerid, "~r~Terrorist", 5000, 5);
    SetPlayerPos(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraLookAt(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraPos(playerid,226.7491,1823.0441,7.4141);
    SetPlayerFacingAngle(playerid, 270 );
    ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1); //smooth dancing
    CreateExplosion(212.9525,1822.9084,6.4141, 11, 10.0);
    teamCount[1]++;
    }
    case 3:
    {
    if(teamCount[0] >= 20)
    {
    SendClientMessage(playerid, 0xFF0000FF, "Error: Team ist voll (maximal 20).");
    return 0;
    }
    gTeam[playerid] = TEAM_TERRORIST;
    GameTextForPlayer(playerid, "~r~Terrorist", 5000, 5);
    SetPlayerPos(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraLookAt(playerid,220.3261,1822.9734,7.5368);
    SetPlayerCameraPos(playerid,226.7491,1823.0441,7.4141);
    SetPlayerFacingAngle(playerid, 270 );
    ApplyAnimation(playerid,"DANCING","DNCE_M_B",4.0,1,0,0,0,-1); //smooth dancing
    CreateExplosion(212.9525,1822.9084,6.4141, 11, 10.0);
    teamCount[1]++;
    }
    }


    und bei diconnect so

    public OnPlayerDisconnect(playerid, reason)
    {
    for(new x=0; x < sizeof(UnderAttack); x++)
    {
    if(InCP[playerid] == x) UnderAttack[x] = 0;
    }
    if(gTeam[playerid] == gTeam[TEAM_ARMY])
    {
    teamCount[0]--;
    }
    if(gTeam[playerid] == gTeam[TEAM_TERRORIST])
    {
    teamCount[1]--;
    }
    return 1;
    }


    sollte doch dann so richtig sein wenn ich dich richtig verstanden habe :)