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]