Teambalance Fehler ...

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
  • Hallo,
    ich habe mir gerade mal angeguckt wie man Teambalance macht. Habe ich auch eingefügt und keine Errors. Aber die Kameraposition wird irgendwie nicht gesetzt und man muss immer zählen, damit man weiß welcher Skin es ist ... xD


    public OnPlayerRequestClass(playerid, classid)
    {
    new cops,aliens,terror;
    for(new i=0; i<MAX_PLAYERS;i++)
    {
    if(i!=playerid && IsPlayerConnected(i))
    {
    switch(gTeam[i])
    {
    case TEAM_COPS:{cops++;}
    case TEAM_ALIENS:{aliens++;}
    case TEAM_TERROR:{terror++;}
    }
    }
    }
    switch(classid)
    {
    case 0,1: gTeam[playerid] = TEAM_COPS;
    case 2,3,4,5,6,7,8: gTeam[playerid] = TEAM_ALIENS;
    case 9,10,11,12,13,14: gTeam[playerid] = TEAM_TERROR;
    }
    if(gTeam[playerid] == TEAM_COPS)
    {
    if(cops > aliens || cops > terror) {SendClientMessage(playerid,COLOR_ERROR,"Dieses Team ist voll!"); return 0;}
    GameTextForPlayer(playerid,"~b~ LVPD",5000, 6);
    return 1;
    }
    if(gTeam[playerid] == TEAM_ALIENS)
    {
    if(aliens > cops || aliens > terror) {SendClientMessage(playerid,COLOR_ERROR,"Dieses Team ist voll!"); return 0;}
    GameTextForPlayer(playerid,"~g~ Aliens", 5000, 6);
    return 1;
    }
    if(gTeam[playerid] == TEAM_TERROR)
    {
    if(terror > cops || terror > aliens) {SendClientMessage(playerid,COLOR_ERROR,"Dieses Team ist voll!"); return 0;}
    GameTextForPlayer(playerid,"~r~ Terroristen", 5000, 6);
    return 1;
    }


    SetPlayerPos(playerid,258.4893,-41.4008,1002.0234);
    SetPlayerFacingAngle(playerid, 90.0);
    SetPlayerCameraPos(playerid,256.0815,-43.000,1003.0234);
    SetPlayerCameraLookAt(playerid,258.4893,-41.4008,1002.0234);
    return 1;
    }

  • return 1 überall in den if schleifen weg, bei return 1 hört er dann nämlich auf weiter den code zu verfolgen!

  • Genau, der return bricht den Code nach der if-Abfrage ab, die positiv ist.
    Das ist insofern sinnvoll, da die anderen dann nicht mehr sinnlos ausgeführt werden.
    Setz die Kamera-Positons-Funktionen einfach ganz oben in das Callback, noch über die Definition deiner drei Variablen.
    Dann wird die Pos gesetzt, der Code ist aber weiterhin serverschonend.
    Weiterer Punkt zur Optimierung:
    Erstelle drei globale Variablen (zum Beispiel copCount, alienCount, terrorCount) und setz die Variable jeweils dann hoch unter runter, wenn ein User das Team betritt, verlässt.
    Denn dieses Konstrukt
    for(new i=0; i<MAX_PLAYERS;i++)
    {
    if(i!=playerid && IsPlayerConnected(i))
    {
    switch(gTeam[i])
    {
    case TEAM_COPS:{cops++;}
    case TEAM_ALIENS:{aliens++;}
    case TEAM_TERROR:{terror++;}
    }
    }
    }



    bei jedem class-Select ist unnötig und nicht sparsam. Das nur als kleiner Tipp am Rande, ist aber schon Code-Optimierung im Detail.