Gangwar Einnahmepunkt

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
  • Kleinigkeit für euch, könnte dem einen oder anderen ja helfen ;) wegem TAB Vorsicht. Viel Spaß


    //Hier passt das ganze nicht so ganz mit dem TAB-Stop. Am besten, du downloadest das Projekt und siehst es dir in PAWNO an.
    forward CheckGangZones();


    #define F_TIME_INTERVAL 1000 //Zeitintervall, inder die Zonen und Eroberungen berechnet werden
    #define F_TIME_COUNTS 30 //So oft muss der Zeitintervall ablaufen, bis ein Gebiet erobert ist


    #define TEAM_COUNT 3 //Es gibt 2 Teams + 1 neutrales Team (unerkämpfte Gebiete)
    //weiß //rot //blau
    new TeamColors[TEAM_COUNT] = {0xAAAAAA80,0xFF000050,0x0000FF50};


    #define GANG_ZONES 2 //Anzahl der benutzten Ganggebiete
    new Float:gPosGangZones[GANG_ZONES][4] = { //Positionen der Ganggebiete
    // | min_X | min_Y | max_X | max_Y |
    {2087.315,1203.965,2217.175,1362.932},
    {2082.654,1383.321,2237.158,1523.031}
    };
    new gGangZonesID[GANG_ZONES]; //Die ZonenID's von GangZoneCreate()
    new gCurTeam[GANG_ZONES] = {0,0}; //Initialisierungsteam: Die Gebiete gehören keinem Team
    new gCapTeam[GANG_ZONES] = {0}; //Das Team, was das Gebiet erobert
    new gCapTime[GANG_ZONES] = {0}; //Die Zeit, die das Team schon im Gebiet ist
    new gCapCount[GANG_ZONES] = {0}; //Speichert, die Anzahl der Spieler, die in dem Gebiet sind und erobern


    new str[255];


    public OnGameModeInit()
    {
    SetGameModeText("Gang Zone Example");
    AddPlayerClassEx(1 ,0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); //Team 1
    AddPlayerClassEx(2 ,1, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0); //Team 2


    //Erstelle die Gangzones und speicher die ID
    for (new i=0;i<GANG_ZONES;i++)
    {
    gGangZonesID = GangZoneCreate( gPosGangZones[0] ,
    gPosGangZones[1] ,
    gPosGangZones[2] ,
    gPosGangZones[i][3] );
    }
    //Rufe Funktion alle 3 Sekunden auf
    SetTimer("CheckGangZones",F_TIME_INTERVAL,true);
    UsePlayerPedAnims();
    return 1;
    }


    new Float:tmp_x,Float:tmp_y,Float:tmp_z;
    new tmp_team;
    public CheckGangZones()
    {
    //Spielerschleife
    for (new i=0;i<MAX_PLAYERS;i++)
    {
    if (IsPlayerConnected(i)) //Nur wenn Spieler mit Server verbunden ist
    {
    GetPlayerPos(i,tmp_x,tmp_y,tmp_z);
    tmp_team = GetPlayerTeam(i);
    for (new a=0;a<GANG_ZONES;a++) //Zonenschleife
    {
    if (gCurTeam[a] != tmp_team && //Das Gebiet darf nicht dem eigenem Team gehören
    tmp_x > gPosGangZones[a][0] && //Der Spieler muss in dem Gebiet sein
    tmp_y > gPosGangZones[a][1] &&
    tmp_x < gPosGangZones[a][2] &&
    tmp_y < gPosGangZones[a][3])
    {
    if (gCapCount[a] && gCapTeam[a] != tmp_team)
    {
    gCapTeam[a] = 0; //Niemand erobert das Gebiet, wenn mehrere Teams um dieses kämpfen
    gCapTime[a] = 0;
    }
    else
    {
    gCapTeam[a] = tmp_team;
    gCapTime[a] ++; //Der Zähler wird erhöht.
    //Je mehr Spieler in dem Gebiet sind, desto schneller geht das erobern,
    //da der Zähler dann mehrmals inkrementiert wird
    gCapCount[a] ++; //Ein weiterer Spieler wurde in diesem Gebiet gefunden


    //Hier ist eine kleine Anzeige des Eroberungsstandes in Prozent
    if (gCapCount[a] > F_TIME_COUNTS)
    {
    gCapCount[a] = F_TIME_COUNTS;
    }
    format(str,255,"~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~Captured: %i%%",((gCapTime[a]*100)/F_TIME_COUNTS));
    GameTextForPlayer(i,str,F_TIME_INTERVAL+200/*+200 wegen lag verzögerung*/,3);
    }
    break; //Da man sich nicht in mehreren Gebieten gleichzeitig befinden kann, kann man hier performance sparen
    }
    }
    }
    }
    //Eine Ausnahme muss noch behandelt werden: Wenn kein Spieler in dem Gebiet ist, soll der Eroberungsprozess abgebrochen werden
    for (new a=0;a<GANG_ZONES;a++)
    {
    if (!gCapCount[a]) //Kein Spieler wurde in diesem gebiet gefunden
    {
    gCapTime[a] = 0; //Eroberungsprozess abbrechen
    gCapTeam[a] = 0;
    }
    else
    {
    if (gCapTime[a] >= F_TIME_COUNTS) //Das Gebiet wurde erobert
    {
    gCurTeam[a] = gCapTeam[a]; //Gebiet dem Eroberer übertragen
    gCapTeam[a] = 0; //Eroberungsprozess abbrechen
    gCapTime[a] = 0;
    }
    }
    gCapCount[a] = 0;
    //GangZones müssen in Teamfarben angezeigt werden
    GangZoneShowForAll(gGangZonesID[a],TeamColors[gCurTeam[a]]);


    //Gangzones blinken in den Farben der Verteidigenden Teams und des angreifenden Teams
    if (gCapTime[a] && gCapTime[a])
    {
    GangZoneFlashForAll(gGangZonesID[a],TeamColors[gCapTeam[a]]);
    }
    else
    {
    GangZoneStopFlashForAll(gGangZonesID[a]);
    }
    }
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1963.3783, 1343.1572, 17.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    SetPlayerColor(playerid,TeamColors[GetPlayerTeam(playerid)]); //Setze die Farbe des Spilers auf die Farbe seines Teams
    format(str,255,"Dein Team: %i",GetPlayerTeam(playerid));
    SendClientMessage(playerid,TeamColors[GetPlayerTeam(playerid)],str);
    return 1;
    }
    [/i]

  • Würdes du es in Pawno Code einfügen hätt ich dir 10/10 gegeben aber sonst 8/10

  • Ich hoff mal es Funktioniert bei allen


    Pastebin kommt heute Abend. :thumbup: